Android逆向之动态调试
信息安全公益宣传,信息安全知识启蒙。
加微信群回复公众号:微信群;QQ群:16004488
要调试smali源码,是因为apk用apktool反编译之后,会生成一个smali的文件夹,这里存放了apk对应的smali源码。所以我们需要调试的就是反编译之后的smali源码,这里用到的调试工具是IDEA,用的示例是阿里CTF比赛中的一个题目。
获取smali代码
要调试apk的smali代码,第一步要获取反编译之后的smali代码,这里用的apktool这个程序。这个程序在这里先不细说,会再补充一个apk逆向常见工具使用的章节。利用下面这个命令获取到了apk的smali源码
apktool.bat d AliCrackme_01.apk
导入smali代码到idea中
获取到smali源码之后,第二步就是将源码导入的idea的程序,然后运行此smali代码进行动态调试。
需要将smali文件夹下的文件导入工程
以debug模式启动apk
导入smali程序到idea,apk安装到手机之后,然后就可以动态调试了。
在Android中,除了从界面上启动程序之外,还可以从命令行启动程序,使用的是命令行工具am
启动的方法为:am start -n {包(package)名}/{包名}.{活动(activity)名称}
这里需要加-D这个参数,表示enable debugging
程序的入口类可以从每个应用的AndroidManifest.xml的文件中得到。
利用apktool除了可以得到smali代码,还可以得到一个非常重要的文件,相当于是apk的配置文件AndroidManifest.xml,从此文件中可以得到包名和活动名,此apk的包名是com.example.simpleencryption,主活动名是MainActivity,所以可以用
adb shell am start -D -n com.example.simpleencryption/ com.example.simpleencryption.MainActivity来启动程序,也可以将后面的包名省略用
adb shell am start -D -n com.example.simpleencryption/.MainActivity
来启动程序。成功启动后,如下图所示。
配置调试选项
既然是动态调试,肯定要查看程序的端口,这里用ddms这个程序查看即可,DDMS 的全称是Dalvik Debug Monitor Service,是 Android 开发环境中的Dalvik虚拟机调试监控服务。它为我们提供例如:为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等。
打开ddms查看端口信息,ddms都是以apk的包名显示程序的,这里可以看出需要调试的apk监听了8618端口。
下一步就是添加远程调试了,在idea的运行->编辑结构
添加一个新的远程调试,端口要和ddms的对应,修改为8618,名称就写smali即可。
Attach
远程调试配置完成后,就可以调试smali代码了,点击调试
出现下图表示成功,idea提示connected,ddms的小蜘蛛由红色变为绿色,apk程序进入到正常的登录界面。
在关键地方下段
程序输入密码,然后再点击登录,在点击的过程中会会发onClick函数,所以在onClick函数处下断,左击一次左边的空白处即可。
在apk中输入测试密码qqqq,然后点击登录
发现已经运行到断点处,并在idea的下方看到变量值
idea跟OD的使用基本类似,F7步入函数,按F8步过,
在程序的右下角还可以添加监视变量,这个对我们分析程序时非常方便的。
我们添加监视v3、v5、v2、v4
通过table、pw、enPassword的变量发现,table是密码表,pw是真正的密码,enPassword是输入的密码
重新在登录的窗口处输入123456789,得到数字与密码表的对应获得密码
▼ 点击阅读原文,查看更多精彩文章。