背景
之前介绍过如何通过xposed
进行安卓app的hook,现在介绍一个工具更加方便的,同时可以配合xposed分析的,相互配合更好吃。 主角:frida
基于frida的逆向工具集hooker
环境需要
Mac os 或者Linux 手机需要root
进入我们的系统,先拉取工具代码
//https://github.com/CreditTone/hooker
git clone https://github.com/CreditTone/hooker.git
下载完成之后,我们需要初始化
cd hooker
//需要安装python3,和pip,自己安装好
pip install -r requirements.txt
//完成后
//手机链接好系统
adb devices
Ubuntu系统如发现无法链接adb
,或者提示错误的,可以看这个文章,解决无法链接问题(mac os)跳过 https://www.sunofbeach.net/a/1403285447056093185
链接成功后,
adb push mobile-deploy/ /sdcard/
adb shell
su
sh /sdcard/mobile-deploy/deploy.sh
//如果提示这个,你配置成功了
disable android firewall.
start frida-server
start network adb.
deploy successfull.
开始hook你的app
在工具目录中执行
./hooker
这个时候,打开你的目标app,然后输入app的包名
没有提示错误,就成功注入了,这个时候,我们可以hook
之后我们写的简单的例子。
先提供源代码
activity中
private void setTextToBtn() {
mBtnAddData.setText(TestHook.getName());
mSelect.setText(TestHook.getAge(10));
}
测试类
com.x.room
public class TestHook {
public static String getName() {
StringBuilder sb = new StringBuilder();
sb.append("abcd").append("1234567");
return sb.toString();
}
public static String getAge(int old) {
return "年龄:" + old;
}
}
2个按钮返回的是正常的文字。
我们需要修改方法getName
的返回值,替换成我们自己需要的。 目标的类完整路径com.x.room.TestHook
这个时候,我们在控制台输入
j com.x.room.TestHook
回车后,会生成js
代码。 推出当前命令行,进入包名目录
hook的代码为我们准备好了,现在只需要简单编写hook就行了。
开始hook方法
使用vs code
打开com.x.room.TestHook.js
拉到最后,找到Java.perform
这个方法,就是hook编写的地方了
//com.x.room.TestHook
Java.perform(function() {
var com_x_room_TestHook_clz = Java.use('com.x.room.TestHook');
var com_x_room_TestHook_clz_method_getName_8612 = com_x_room_TestHook_clz.getName.overload();
com_x_room_TestHook_clz_method_getName_8612.implementation = function() {
var executor = 'Class';
var beatText = 'public static java.lang.String com.x.room.TestHook.getName()';
var beat = newMethodBeat(beatText, executor);
var ret = com_x_room_TestHook_clz_method_getName_8612.call(com_x_room_TestHook_clz);
printBeat(beat);
return ret;
};
var com_x_room_TestHook_clz_init_5741 = com_x_room_TestHook_clz.$init.overload();
com_x_room_TestHook_clz_init_5741.implementation = function() {
var executor = this.hashCode();
var beatText = 'public com.x.room.TestHook()';
var beat = newMethodBeat(beatText, executor);
var returnObj = com_x_room_TestHook_clz_init_5741.call(this);
printBeat(beat);
return returnObj;
};
});
我们hook方法getName
,返回一些其他字符串试试。
//在方法末尾,增加如下代码
//这个TestHook对象,的getName方法的实现
com_x_room_TestHook_clz.getName.implementation=function(){
//这个是返回值
return "hahahah lsdladjfa;sdfasdf ~~~~~";
}
保存代码。返回控制台。执行
./hooking com_x_room_TestHook.js
手机重新打开这个页面。
我们的返回值被修改了。
我们继续hook
另一个方法getAge
同理,我们在末尾增加代码
//TestHook对象的getAge方法,因为有入参,需要执行overload,切需要写入参类型int
com_x_room_TestHook_clz.getAge.overload('int').implementation=function(old){
//修改入参,设置200
return this.getAge(200);
}
保存代码,返回控制台,继续执行
./hooking com_x_room_TestHook.js
我们的入参被修改,返回值也显示出来了。利用同样的方式,你可以尝试修改微信钱包的余额,我之前的文章有如果修改微信余额的,已经分析出具体的类和方法了,直接进行hook就行。 完整的代码
//com.x.room.TestHook
Java.perform(function() {
var com_x_room_TestHook_clz = Java.use('com.x.room.TestHook');
var com_x_room_TestHook_clz_method_getName_8612 = com_x_room_TestHook_clz.getName.overload();
com_x_room_TestHook_clz_method_getName_8612.implementation = function() {
var executor = 'Class';
var beatText = 'public static java.lang.String com.x.room.TestHook.getName()';
var beat = newMethodBeat(beatText, executor);
var ret = com_x_room_TestHook_clz_method_getName_8612.call(com_x_room_TestHook_clz);
printBeat(beat);
return ret;
};
var com_x_room_TestHook_clz_init_5741 = com_x_room_TestHook_clz.$init.overload();
com_x_room_TestHook_clz_init_5741.implementation = function() {
var executor = this.hashCode();
var beatText = 'public com.x.room.TestHook()';
var beat = newMethodBeat(beatText, executor);
var returnObj = com_x_room_TestHook_clz_init_5741.call(this);
printBeat(beat);
return returnObj;
};
com_x_room_TestHook_clz.getName.implementation=function(){
return "hahahah lsdladjfa;sdfasdf ~~~~~";
}
com_x_room_TestHook_clz.getAge.overload('int').implementation=function(old){
return this.getAge(200);
}
});
总结
- frida的使用需要配合hooker这个工具集,是一个大神开发的,开源的。非常感谢。
- 无需重启手机即可hook,看到效果,这个比xposed好
- 帮助生成hook代码,非常友好
- hooker的使用,直接看文档就好,我也在学习中
你学废了吗,又一个姿势帮助逆向app~