IDA动态调试DEX之AliCrackme_1
一直以来都在看别人发的调试贴,今天亲自尝试一下。打开IDA,将apk直接拖进去,选择dex的格式打开
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513110550.png
选择Debugger->Debugger options->Set specific options,在Package Name和Activity中填入主Activity的包名和类名
查看AndroidManifest.xml
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513111030.png
看到了包名和主类名,填入
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513111201.png
选择Debugger->Process options,将Port改为8700
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513111304.png
在function中查找onCreate,点击主类存在的那一处,这就是app初始执行的函数。找到后下断点
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513111755.png
在模拟器上开启android_server 监听
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513111913.png
进行端口转发,打开要调试的应用
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513112213.png
运行之后,能看到模拟器状态,点击RUN
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513145514.png
这时准备工作均已就绪,就等着IDA来调试。
IDA选择Debugger->attach to process
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513145410.png
进程ID是这个,后面的程序包名没显示完全,可能是这个版本IDA的问题
点击OK之后,就已经附加到了进程上,这时找到Onclick函数位置,进行下段
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513145704.png
点击开始调试按钮
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513145848.png
刚进入程序,会卡在Oncreat这个函数位置,点击f9跳到click函数的断点位置
这时会显示正在运行
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513145924.png
它会一直处于这个状态,这时看我们的模拟器,输入123点击登陆
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513150029.png
点击登陆后,ida会跳转到click函数位置,这时出现的弹窗点击取消
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513150330.png
这时就可以f8单步调试,想要查看各个参数的状态,需要如下图所示,依次点击
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513150520.png
点击后就会出现Local各个参数的值,f8依次调试,找出真正的密码
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513150633.png
通过反编译可知 enPassword是我们输入的“123”经过处理得到的值,在调试中也看到了值为“么广亡”
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513150813.png
经过pw与enPassword进行比较,如果相等则验证通过,而pw的值是通过getPwdFromPic()函数获取的,所以它是一个固定值,也就是 “义弓么丸广之”
我们只要想办法将enPassword的值改为“义弓么丸广之” 就大功告成了。
想到这一点,直接使用frida将 enPassword = MainActivity.bytesToAliSmsCode(table, password.getBytes("utf-8")); 中的获取方法bytesToAliSmsCode进行重载即可
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);
send(b);
var res="义弓么丸广之";
send(res);
return res;
};
});
输入任意值,均会提示破解成功!
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513151420.png
hook打印的参数
https://raw.githubusercontent.com/dummersoul/Picture/main/img/20220513151600.png
到此结束破解
但是,在破解过程中,我想如果能从IDA直接修改enPassword的参数值不是更快吗,但是奈何没有找到相关修改方法,有没有大佬告知一下能否修改IDA动态参数,谢谢{:17_1056:}
狄人3 发表于 2022-5-13 17:52
报了什么错?android版本与型号?还有就是调试Dalvik不建议ida就是了
之前可能是我操作姿势不对,所以报错了,刚刚测试了一下,没有问题,调试Dalvik是不是JEB最好啊,这篇的主要目的是想试试IDA调试 dummersoul 发表于 2022-5-16 10:05
之前可能是我操作姿势不对,所以报错了,刚刚测试了一下,没有问题,调试Dalvik是不是JEB最好啊,这篇的 ...
jeb遇到的问题会比较少,而且可以方便的看伪代码
感谢分享 白鱼啊 发表于 2022-5-13 16:52
感谢分享 大佬 希望能加个QQ更加深入的学习下OD破解
OD破解我还没学习过{:17_1084:} 在Locals窗口不是可直接改吗? 无闻无问 发表于 2022-5-13 17:18
在Locals窗口不是可直接改吗?
我有尝试改,但是有报错,你有改成功过吗{:1_924:} 白鱼啊 发表于 2022-5-13 17:08
这个不是OD破解插件吗
我不知道什么插件? dummersoul 发表于 2022-5-13 17:26
我有尝试改,但是有报错,你有改成功过吗
报了什么错?android版本与型号?还有就是调试Dalvik不建议ida就是了 原来IDA也可以附加,学到了