史上最详细CydiaSubstrate框架

1,218 阅读3分钟

往期回顾

Android Apk 360加固方法步骤

frida的环境安装

JNI动态注册

游戏内购“买买买”,不要钱

Cydia Substrate是一个基于Hook的代码修改框架,可以在Android、iOS平台使用,并实现修改系统默认代码。

一:substrate的API介绍

Substrate具体的运行是由下图这个jar包所执行。

1.Substrate的代码编写实现系统文字颜色篡改。 (1)创建一个空的Android工程,由于创建的工程将以插件的形式被加载,所以不需要activity,将SDK中的substrate-api.jar复制到project/ libs文件夹中。配置Manifest文件指定权限,cydia.permission. SUBSTRATE,如下图所示。

(2)创建一个类,类名为Main,类中包含一个static方法initialize,当插件被加载的时候,该方法中的代码就会运行,完成一些必要的初始化工作,如下图所示。

(3)添加meta标签,name为cydia.permission.SUBSTRATE,value为下一步创建的类名,例如Main,如下图所示。

(4)为了实现HOOK,达到修改目标类中的代码的目的,需要得到目标类的一个实例,如下图所示。

(5)通过MS.MethodHook实例实现原代码的修改。为了调用原来代码中的方法,需要创建一个MS.MethodPointer类的实例,它可以在任何时候运行原来的代码,如下图所示。

(6)返回颜色,重启系统即可,如下图所示。

2.Substrate的代码编写实现游戏金币篡改。 (1)定义方法,如下图所示。

(2)hook获取金币数的方法,如下图所示

(3)新建一个MethodPointer对象,如下图所示。

(4)开始hook方法,写入自己想改变的数据,如下图所示。

(5)调用原getMoney方法,将原方法的返回值放到coin_num,如下图所示。

(6)修改金币数,返回coin_num返回游戏即可,如下图所示。

二:native层hook

1.创建一个android程序,在android工程中新建jni文件夹,加入相关的头文件substrate.h和库文件。

例如:工程只支持arm,那就加入cydia_substrate\lib\armeabi下的两个so文件,如下图所示。

2.在AndroidManifest.xml中注册cydia的自定义权限cydia.permission. SUBSTRATE,设置android:hasCode为 "false",android:install Location 设置为 "internalOnly",如下图所示。

3.编写Hook模块代码,即上面的test.cpp ,如下图所示。

4.编写Android.mk,如下图所示。

5.ndk-build将在android工程中生成libs目录,如下图所示。

6.build android工程即可生成hook模块的apk安装包。

7.打开框架apk,点击“Link Substrate Files”,之后点击“Restart System”进行使用。

  1. Hook native demo运行之后,会打印每个程序加载so的情况,如下图所示

总结

今天主要分享了substrate的基本概念,substrate的API介绍,Substrate的代码编写实现系统文字颜色篡改,Substrate的代码编写实现游戏金币篡改,Substrate的native层hook。

如果你也对安卓逆向感兴趣,请添加联系方式,也可以扫描如下二维码,或者微信搜索【宸道移动安全团队】,关注有惊喜哦!

qq:3543756281

vx:Yjxiaox