发新帖

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

[复制链接]
7274 0

一、准备

在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的值,这样其实就把程序的注册过程了解清楚,因此通过动态调试我们也能很好的了解程序的架构,当然,动静结合是最好的啦。

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表