dummersoul 发表于 2022-5-13 15:24

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:}


dummersoul 发表于 2022-5-16 10:05

狄人3 发表于 2022-5-13 17:52
报了什么错?android版本与型号?还有就是调试Dalvik不建议ida就是了

之前可能是我操作姿势不对,所以报错了,刚刚测试了一下,没有问题,调试Dalvik是不是JEB最好啊,这篇的主要目的是想试试IDA调试

狄人3 发表于 2022-5-16 20:41

dummersoul 发表于 2022-5-16 10:05
之前可能是我操作姿势不对,所以报错了,刚刚测试了一下,没有问题,调试Dalvik是不是JEB最好啊,这篇的 ...

jeb遇到的问题会比较少,而且可以方便的看伪代码

taxuewuhen 发表于 2022-5-13 15:39

感谢分享

白鱼啊 发表于 2022-5-13 16:52

dummersoul 发表于 2022-5-13 17:06

白鱼啊 发表于 2022-5-13 16:52
感谢分享 大佬 希望能加个QQ更加深入的学习下OD破解

OD破解我还没学习过{:17_1084:}

白鱼啊 发表于 2022-5-13 17:08

无闻无问 发表于 2022-5-13 17:18

在Locals窗口不是可直接改吗?

dummersoul 发表于 2022-5-13 17:26

无闻无问 发表于 2022-5-13 17:18
在Locals窗口不是可直接改吗?

我有尝试改,但是有报错,你有改成功过吗{:1_924:}

dummersoul 发表于 2022-5-13 17:27

白鱼啊 发表于 2022-5-13 17:08
这个不是OD破解插件吗

我不知道什么插件?

狄人3 发表于 2022-5-13 17:52

dummersoul 发表于 2022-5-13 17:26
我有尝试改,但是有报错,你有改成功过吗

报了什么错?android版本与型号?还有就是调试Dalvik不建议ida就是了

homehome 发表于 2022-5-13 19:02

原来IDA也可以附加,学到了
页: [1] 2 3 4
查看完整版本: IDA动态调试DEX之AliCrackme_1