cydia substrate是一个代码修改平台。它可以修改任何主进程的代码,不管是用Java还是C/C++(native代码)编写的。而Xposed只支持 HOOK app_process中的java函数,因此Cydia Substrate是一款强大而实用的HOOK工具。
函数原型:voidhookClassLoad(Stringname,MS.ClassLoadHookhook);
该方法实现在指定的类被加载的时候发出通知。因为一个类可以在任何时候被加载,所以Substrate提供了一个方法用来检测用户感兴趣的类何时被加载。
参数 | 描述 |
name | 包名+类名,使用java的.符号 |
hook | MS.ClassLoadHook的一个实例,当这个类被加载的时候,它的classLoaded 方法会被执行。 |
该API允许开发者提供一个回调函数替换原来的方法,这个回调函数是一个实现了MS.MethodHook接口的对象,是一个典型的匿名内部类。它包含一个invoked函数。
函数原型:
voidhookMethod(Class_class,Membermember,MS.MethodHookhook,MS.Methodpointerold);voidhookMethod(Class_class,Membermember,MS.MethodAlterationalteration);
参数描述
(一)
参数 | 描述 |
| 加载的目标类,为classLoaded传下来的类参数 |
| 通过反射得到的需要hook的方法(或构造函数). 注意:不能HOOK字段(在编译的时候会进行检测). |
|
|
(二)
参数 | 描述 |
| 加载的目标类,为classLoaded传下来的类参数 |
| 通过反射得到的需要hook的方法(或构造函数). 注意:不能HOOK字段(在编译的时候会进行检测). |
| An instance of |
建议开发者使用第二种方式,这种方式使用起来简单并且很少出错,不需要一个单独的MS.MethodPointer类实例。
下面以官网的一个实例来说明cydia substrate的使用方法。该实例是实现将多个接口组件颜色修改为紫罗兰色。
需要安装:http://www.cydiasubstrate.com/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
<manifestxmlns:android="http://schemas.android.com/apk/res/android"><application><meta-dataandroid:name="com.saurik.substrate.main"android:value=".Main"/></application><uses-permissionandroid:name="cydia.permission.SUBSTRATE"/></manifest>
步骤二:创建一个类,类名为Main。类中包含一个static方法initialize,当插件被加载的时候,该方法中的代码就会运行,完成一些必要的初始化工作。
importcom.saurik.substrate.MS;publicclassMain{staticvoidinitialize(){//...codetorunwhenextensionisloaded}}
步骤三:为了实现HOOK,达到修改目标类中的代码的目的,我们需要得到目标类的一个实例,如示例中的resources。
publicclassMain{staticvoidinitialize(){MS.hookClassLoad("android.content.res.Resources",newMS.ClassLoadHook(){publicvoidclassLoaded(Class<?>resources){//...codetomodifytheclasswhenloaded}});}}
步骤四:通过MS.MethodHook实例实现原代码的修改。
为了调用原来代码中的方法,我们需要创建一个MS.MethodPointer类的实例,它可以在任何时候运行原来的代码。
在这里我们通过对原代码中resources对象原始代码的调用和修改,将所有绿色修改成了紫罗兰色。
publicvoidclassLoaded(Class<?>resources){MethodgetColor;try{getColor=resources.getMethod("getColor",Integer.TYPE);}catch(NoSuchMethodexceptione){getColor=null;}if(getColor!=null){finalMS.MethodPointerold=newMS.MethodPointer();MS.hookMethod(resources,getColor,newMS.MethodHook(){publicObjectinvoked(Objectresources,Object...args)throwsThrowable{intcolor=(Integer)old.invoke(resources,args);returncolor&~0x0000ff00|0x00ff0000;}},old);}}
安装运行,重启系统后发现很多字体颜色都变了。如下图所示:
示例中MS.hookMethod的代码可以改成:
MS.hookMethod(resources,getColor,newMS.MethodAlteration<Resources,Integer>(){publicIntegerinvoked(Resourcesresources,Object...args)throwsThrowable{intcolor=invoke(resources,args);returncolor&~0x0000ff00|0x00ffee00;}});
在下面的例子中我们实现了短信监听功能,将短信发送人、接收人以及短信内容打印出来:
1importjava.lang.reflect.Method;2importandroid.app.PendingIntent;3importandroid.util.Log;4importcom.saurik.substrate.MS;567publicclassMain{89staticvoidinitialize(){1011MS.hookClassLoad("android.telephony.SmsManager",newMS.ClassLoadHook(){121314@Override1516publicvoidclassLoaded(Class<?>SmsManager){1718//codetomodifytheclasswhenloaded1920MethodsendTextMessage;2122try{2324sendTextMessage=SmsManager.getMethod("sendTextMessage",2526newClass[]{String.class,String.class,String.class,PendingIntent.class,PendingIntent.class});272829}catch(NoSuchMethodExceptione){3031sendTextMessage=null;3233}3435MS.hookMethod(SmsManager,sendTextMessage,newMS.MethodAlteration(){3637publicObjectinvoked(Object_this,Object..._args)throwsThrowable{3839Log.i("SMSHOOK","SEND_SMS");4041Log.i("SMSHOOK","destination:"+_args[0]);4243Log.i("SMSHOOK","source:"+_args[1]);4445Log.i("SMSHOOK","text:"+_args[2]);4647returninvoke(_this,_args);4849}5051});525354}5556});5758}5960}
运行后的结果为:
关于如何进行Android HOOK工具Cydia Substrate使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
本文由 贵州做网站公司 整理发布,部分图文来源于网络,如有侵权,请联系我们删除,谢谢!
抖音(Tiktok)是由北京字节跳动科技有限公司(ByteDance)孵化的音乐创意短视频社交网站。它于2016年9月20日上线,主要面向全年龄段的用户,尤其是...
飞极速为您提供高清在线电影、电视剧大全、动画片,综艺等,飞极速在线更新及时,播放速度快,给您带来最好的观影体验!飞极速在线,免费提供日本新番动漫、最新电影和最新...
《南华早报》(英语:South China Morning Post, SCMP)和星期日出版的《星期日南华早报》(英语:Sunday Morning Post...
绿鞋机制会破发吗?绿鞋保护机制可以保证在上市发行的第1个月内,每天的收盘价最少是高于发行价的。也就是说即使投资者没有赚到钱,最少也可以保证可以按照认购价顺利退出,最少可以保证不受到损失。但这也不是说,有了绿鞋机制,股票就一定不会破发,如果上市公司出现问题,也依旧是抵不住股票一直下跌的,所以我们也不能因为股票绿鞋机制的保护而放松警惕。绿鞋机制的主要目的是什么?绿鞋机制的主要目的是防止新股发行上市后股...
目前《2022胡润全球零售企业家榜》信息显示,49岁的刘强东及其妻子章泽天以1350亿元的财富位列第九,比去年下降28%。去年全年,京东收入9516亿元,同比增长28%;经营利润为41亿元,同比下降66%。其中,零售业部分营收8700亿元,占比超过90%;商品交易总额为3.3万亿元,同比增长26%。而在整合了京东物流、京东仓配等供应链环节之后,京东的一站式服务营收也稳定增长。58岁的马云及其家族以...
什么是顾比均线?顾比均线是由两组均线构成,短期组为3、5、8、10、12、15。长期组为:30、35、40、45、50、60。顾比均线由澳大利亚的投资家戴若-顾比先生发明,因此叫顾比线。手机顾比均线怎么设置?顾比均线在外汇操作过程中比较常见,它是用来判断趋势的,其设置步骤如下:1、打开MT4手机APP;2、点击插入-技术指标-Moving average;3、在时间周期中输入均线参数点击确定,然后...