一直以来都在看别人发的调试贴,今天亲自尝试一下。
打开IDA,将apk直接拖进去,选择dex的格式打开
选择Debugger->Debugger options->Set specific options,在Package Name和Activity中填入主Activity的包名和类名
查看AndroidManifest.xml
看到了包名和主类名,填入
选择Debugger->Process options,将Port改为8700
在function中查找onCreate,点击主类存在的那一处,这就是app初始执行的函数。找到后下断点
在模拟器上开启android_server 监听
进行端口转发,打开要调试的应用
运行之后,能看到模拟器状态,点击RUN
这时准备工作均已就绪,就等着IDA来调试。
IDA选择Debugger->attach to process
进程ID是这个,后面的程序包名没显示完全,可能是这个版本IDA的问题
点击OK之后,就已经附加到了进程上,这时找到Onclick函数位置,进行下段
点击开始调试按钮
刚进入程序,会卡在Oncreat这个函数位置,点击f9跳到click函数的断点位置
这时会显示正在运行
它会一直处于这个状态,这时看我们的模拟器,输入123点击登陆
点击登陆后,ida会跳转到click函数位置,这时出现的弹窗点击取消
这时就可以f8单步调试,想要查看各个参数的状态,需要如下图所示,依次点击
点击后就会出现Local各个参数的值,f8依次调试,找出真正的密码
通过反编译可知 enPassword是我们输入的“123”经过处理得到的值,在调试中也看到了值为“么广亡”
经过pw与enPassword进行比较,如果相等则验证通过,而pw的值是通过getPwdFromPic()函数获取的,所以它是一个固定值,也就是 “义弓么丸广之”
我们只要想办法将enPassword的值改为“义弓么丸广之” 就大功告成了。
想到这一点,直接使用frida将 enPassword = MainActivity.bytesToAliSmsCode(table, password.getBytes("utf-8")); 中的获取方法bytesToAliSmsCode进行重载即可
[JavaScript] 纯文本查看 复制代码 Java.perform(function(){
var Activity = Java.use('com.example.simpleencryption.MainActivity');
Activity.bytesToAliSmsCode.overload("java.lang.String","[B").implementation = function(a, b) {
console.log('Hello Frida!');
send(arguments[0]);
send(b);
var res="义弓么丸广之";
send(res);
return res;
};
});
输入任意值,均会提示破解成功!
hook打印的参数
到此结束破解
但是,在破解过程中,我想如果能从IDA直接修改enPassword的参数值不是更快吗,但是奈何没有找到相关修改方法,有没有大佬告知一下能否修改IDA动态参数,谢谢
|