lkamxmk 发表于 2019-9-10 22:39:00

Android逆向系列之动态调试(三)–IDA调试dex

## 一、准备
在APK改之理里双击打开AndroidManifest.xml,为了让APP可调试,需要在application 标签里添加一句android:debuggable=”true”
保存,然后回编译成apk,安装到模拟器或者真机中

## 二、调试配置
1.将APP包里的classes.dex解压到任意一目录,然后拖进IDA。等待IDA加载分析完毕,点击Debugger->Debugger Options
2.勾选在进程入口挂起(suspend on process entry point),然后点击Set specific options 填入APP包名称(Package name)和入口activity 如图:

!(https://storage.pd521.com/data/attachment/forum/201909/10/114359tsd7iyl5ibzmdbbe.png)

其中包的名称(注意划线处的packet)和入口activity(划线处的Android name) 都可以通过AndroidManifest.xml 文件获取:

!(https://storage.pd521.com/data/attachment/forum/201909/10/114359advhve3sm880h0vb.png)

3.然后在IDA点击Debugger->Process Options–>将端口改为8700(默认为23946)

!(https://storage.pd521.com/data/attachment/forum/201909/10/114359gi9iih3jv57viize.png)

或者这里的端口可以通过DDMS,看到更加对应的端口8605

!(https://storage.pd521.com/data/attachment/forum/201909/10/114359ym1mmlmffb6cgerf.png)

准备配置工作到这里结束,接着可以开始调试dex

## 三、调试前夕
1、下断点,找到感兴趣的函数,下断点(F2),比如在Onclick函数,或者一些敏感的函数check等下断点
2、按F9或者点击绿色三角形按钮,运行程序,如果成功运行会出现以下界面

![调试](https://storage.pd521.com/data/attachment/forum/201909/10/114359gpwvkxvxn6vzkzxi.png)

### 问题分析1:
这里一直出现Can’t bind socket”tcp:9700″
解决:一开始以为是端口出现问题,反复填写仍旧无法解决,后来查阅资料得知,需要关闭DDMS,因为8700会被DDMS占用,关闭即可

### 问题分析2:
点击运行后,出现”有多台调试器“,无法继续
解决:使用命令adb devices查看,确实存在两个模拟器,但是找不到另一个模拟器是什么打开的,后来发现后台程序adb.exe这个关闭后,即可杀死另一个模拟器

## 四、调试过程
选中ida->debugger->use source level debugger,(这里是一个复选框,前面如果变颜色说明选中)
然后点击ida->debugger->debugger windows->locals打开本地变量窗口,如图:

!(https://storage.pd521.com/data/attachment/forum/201909/10/114359qar6zryypcf5npp1.png)

分析:可以看到这里,我们在输入信息后,点击注册,程序就停在了我们设置的断点位置(checkSN函数)处,这时,我们可以使用F7或F8来进行单步调试,这里推荐使用F8,否则有时候会进入一些奇怪的函数,导致程序终止。继续单步调试后,我们成功看到正确的userSN如图:

!(https://storage.pd521.com/data/attachment/forum/201909/10/114359fuuk3kuy8k6ahu26.png)

同时,通过动态调试,分析某些值的变化,我们可以清楚的看到,这里首先是计算出了用户名的MD5的值,然后动态调试的时候,sb里的value值每隔2取md5的值,这样其实就把程序的注册过程了解清楚,因此通过动态调试我们也能很好的了解程序的架构,当然,动静结合是最好的啦。
页: [1]
查看完整版本: Android逆向系列之动态调试(三)–IDA调试dex