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

111111111

《Android逆向系列之动态调试(零)–入门篇》
《Android逆向系列之动态调试(一)–Smali注入》
《Android逆向系列之动态调试(二)–Eclipse调试apk》
一、准备
在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 如图:
22
其中包的名称(注意划线处的packet)和入口activity(划线处的Android name) 都可以通过AndroidManifest.xml 文件获取:
11
3.然后在IDA点击Debugger->Process Options–>将端口改为8700(默认为23946)
44
或者这里的端口可以通过DDMS,看到更加对应的端口8605
33
准备配置工作到这里结束,接着可以开始调试dex

三、调试前夕
1、下断点,找到感兴趣的函数,下断点(F2),比如在Onclick函数,或者一些敏感的函数check等下断点
2、按F9或者点击绿色三角形按钮,运行程序,如果成功运行会出现以下界面
调试
问题分析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打开本地变量窗口,如图:
111
分析:可以看到这里,我们在输入信息后,点击注册,程序就停在了我们设置的断点位置(checkSN函数)处,这时,我们可以使用F7或F8来进行单步调试,这里推荐使用F8,否则有时候会进入一些奇怪的函数,导致程序终止。继续单步调试后,我们成功看到正确的userSN如图:
1234

同时,通过动态调试,分析某些值的变化,我们可以清楚的看到,这里首先是计算出了用户名的MD5的值,然后动态调试的时候,sb里的value值每隔2取md5的值,这样其实就把程序的注册过程了解清楚,因此通过动态调试我们也能很好的了解程序的架构,当然,动静结合是最好的啦。

本文属于原创,转载请注明来自tasfa.cn 如有问题请联系root@tasfa.cn

发表评论

电子邮件地址不会被公开。

You must enable javascript to see captcha here!