版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】如何进行AndroidHOOK工具CydiaSubstrate使用
这篇文章将为大家详细讲解有关如何进行AndroidHOOK工具CydiaSubstrate使用,文章内容质量较高,因此在下分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。CydiaSubstrate是一个代码修改平台。它可以修改任何主进程的代码,不管是用Java还是C/C++(native代码)编写的。而Xposed只支持HOOKapp_process中的java函数,因此CydiaSubstrate是一款强大而实用的HOOK工具。Substrate几个重要API介绍MS.hookClassLoad
函数原型:void
hookClassLoad(String
name,
MS.ClassLoadHook
hook);该方法实现在指定的类被加载的时候发出通知。因为一个类可以在任何时候被加载,所以Substrate提供了一个方法用来检测用户感兴趣的类何时被加载。参数描述name包名+类名,使用java的.符号hookMS.ClassLoadHook的一个实例,当这个类被加载的时候,它的
classLoaded方法会被执行。MS.hookMethod
该API允许开发者提供一个回调函数替换原来的方法,这个回调函数是一个实现了MS.MethodHook接口的对象,是一个典型的匿名内部类。它包含一个invoked函数。函数原型:void
hookMethod(Class
_class,
Member
member,
MS.MethodHook
hook,
MS.MethodPointer
old);
void
hookMethod(Class
_class,
Member
member,
MS.MethodAlteration
alteration);参数描述(一)参数描述_class加载的目标类,为classLoaded传下来的类参数member通过反射得到的需要hook的方法(或构造函数).注意:不能HOOK字段
(在编译的时候会进行检测).hookMS.MethodHook的一个实例,其包含的invoked方法会被调用,用以代替member中的代码(二)
参数描述_class加载的目标类,为classLoaded传下来的类参数member通过反射得到的需要hook的方法(或构造函数).注意:不能HOOK字段
(在编译的时候会进行检测).alterationAninstanceof
MS.MethodAlteration
whoseboxedinvoked
methodwillbecalledinsteadof
member.Thisinstancewillalsobefilledinusinginformationfrom
theoriginalimplementation,allowingyoutouse
invoke
tocalltheoriginalmethodimplementation.建议开发者使用第二种方式,这种方式使用起来简单并且很少出错,不需要一个单独的MS.MethodPointer类实例。使用方法下面以官网的一个实例来说明cydiasubstrate的使用方法。该实例是实现将多个接口组件颜色修改为紫罗兰色。需要安装:/download/com.saurik.substrate.apk步骤一:创建一个空的Android工程。由于创建的工程将以插件的形式被加载,所以不需要activity。将SDK中的substrate-api.jar复制到project/libs文件夹中。步骤二:配置Manifest文件(1)需要指定权限:cydia.permission.SUBSTRATE(2)添加meta标签,name为cydia.permission.SUBSTRATE,value为下一步中创建的类名.Main<manifest
xmlns:android="/apk/res/android">
<application>
<meta-data
android:name="com.saurik.substrate.main"
android:value=".Main"/>
</application>
<uses-permission
android:name="cydia.permission.SUBSTRATE"/>
</manifest>步骤二:创建一个类,类名为Main。类中包含一个static方法initialize,当插件被加载的时候,该方法中的代码就会运行,完成一些必要的初始化工作。import
com.saurik.substrate.MS;
public
class
Main
{
static
void
initialize()
{
//
...
code
to
run
when
extension
is
loaded
}
}步骤三:为了实现HOOK,达到修改目标类中的代码的目的,我们需要得到目标类的一个实例,如示例中的resources。public
class
Main
{
static
void
initialize()
{
MS.hookClassLoad("android.content.res.Resources",
new
MS.ClassLoadHook()
{
public
void
classLoaded(Class<?>
resources)
{
//
...
code
to
modify
the
class
when
loaded
}
});
}
}步骤四:通过MS.MethodHook实例实现原代码的修改。为了调用原来代码中的方法,我们需要创建一个MS.MethodPointer类的实例,它可以在任何时候运行原来的代码。在这里我们通过对原代码中resources对象原始代码的调用和修改,将所有绿色修改成了紫罗兰色。public
void
classLoaded(Class<?>
resources)
{
Method
getColor;
try
{
getColor
=
resources.getMethod("getColor",
Integer.TYPE);
}
catch
(NoSuchMethodException
e)
{
getColor
=
null;
}
if
(getColor
!=
null)
{
final
MS.MethodPointer
old
=
new
MS.MethodPointer();
MS.hookMethod(resources,
getColor,
new
MS.MethodHook()
{
public
Object
invoked(Object
resources,
Object...
args)
throws
Throwable
{
int
color
=
(Integer)
old.invoke(resources,
args);
return
color
&
~0x0000ff00
|
0x00ff0000;
}
},
old);
}
}安装运行,重启系统后发现很多字体颜色都变了。如下图所示:
示例中MS.hookMethod的代码可以改成:MS.hookMethod(resources,
getColor,
new
MS.MethodAlteration<Resources,
Integer>()
{
public
Integer
invoked(Resources
resources,
Object...
args)
throws
Throwable
{
int
color
=
invoke(resources,
args);
return
color
&
~0x0000ff00
|
0x00ffee00;
}
});短信监控实例在下面的例子中我们实现了短信监听功能,将短信发送人、接收人以及短信内容打印出来:1
import
java.lang.reflect.Method;
2
import
android.app.PendingIntent;
3
import
android.util.Log;
4
import
com.saurik.substrate.MS;
5
6
7
public
class
Main
{
8
9
static
void
initialize()
{
10
11
MS.hookClassLoad("android.telephony.SmsManager",
new
MS.ClassLoadHook()
{
12
13
14
@Override
15
16
public
void
classLoaded(Class<?>
SmsManager)
{
17
18
//code
to
modify
the
class
when
loaded
19
20
Method
sendTextMessage;
21
22
try
{
23
24
sendTextMessage
=
SmsManager.getMethod("sendTextMessage",
25
26
new
Class[]{String.class,String.class,String.class,PendingIntent.class,PendingIntent.class});
27
28
29
}
catch
(NoSuchMethodException
e)
{
30
31
sendTextMessage
=
null;
32
33
}
34
35
MS.hookMethod(SmsManager,
sendTextMessage,
new
MS.MethodAlteration()
{
36
37
public
Object
invoked(Object
_this,Object...
_args)
throws
Throwable{
38
39
Log.i("SMSHOOK","SEND_SMS");
40
41
Log.i("SMSHOOK","destination:"+_args[0]);
42
43
Log.i("SMSHOOK","source:"+_args[1]);
44
45
Log.i("SMSHOOK","text:"+_args[2]);
46
47
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年中山市坦洲华特雅学校教师招聘备考题库及一套完整答案详解
- 2026年上海汇成物业有限公司招聘工程设备管理备考题库完整答案详解
- 2026年北京同仁堂鄂尔多斯市药店有限公司正在招聘备考题库及答案详解参考
- 2026年中航天建设工程集团有限公司招聘备考题库及答案详解一套
- 2026年佛山市禅城区东鄱小学招聘备考题库完整参考答案详解
- 2026年德阳建设工程集团有限公司项目合同制员工补充招聘备考题库及一套答案详解
- 2026年四川省卫健委所属事业单位西南医科大学附属口腔医院公开考核招聘工作人员的备考题库及完整答案详解一套
- 2026年南雄市人武部关于招聘社会用工人员的备考题库参考答案详解
- 康复人才培养方案
- 陕西省汉中市西乡二中2026届高二上数学期末调研模拟试题含解析
- 遥感图像处理技术在城市更新中的应用
- 智慧产业园仓储项目可行性研究报告-商业计划书
- 四川省森林资源规划设计调查技术细则
- 广东省建筑装饰装修工程质量评价标准
- 楼板回顶施工方案
- DB13T 5885-2024地表基质调查规范(1∶50 000)
- 2025年度演出合同知识产权保护范本
- 区块链智能合约开发实战教程
- 2025年校长考试题库及答案
- 《煤矿开采基本概念》课件
- 口腔进修申请书
评论
0/150
提交评论