本帖最后由 wnagzihxain 于 2016-8-4 21:00 编辑
评论里不少同学说看不懂:没有安卓逆向基础的同学不建议看着一篇
想学习逆向的同学先去看繁华的入门教程,那几篇写的还不错的
有了一点逆向基础再来看这一篇动态调试就会比较容易了
看到了有同学对动态调试APP有疑惑,在回帖中也没办法讲清楚,所以就在这里分享一下自己的动态调试方法
我使用的是IDEA+smalidea+baksmali
讲讲这些工具的作用:
IDEA:开发安卓的好帮手,Android Studio就是根据这个改的
smalidea:一个可以调试smali的插件,搜一下就可以找到的,怎么安装插件就不说了
baksmali:生成smali
IDA动态调试APP不是不可以,我测试的时候不能查看寄存器的值,有一点不好用(可能是我不会用,反正是没有看到寄存器的值)
IDEA这个方法还是不错的,可以下断点,有寄存器的值,界面也是很友好,断点位置非常明确,单步调试的体验也非常好
所以,开始吧
很多时候,安卓端应用,不仅仅是恶意APP,都会对自身资源进行加密,这里先不讨论加壳之类的
我们直接反编译出来,发现里面的字符串都被加密了,需要在动态运行的时候调用某些解密算法进行解密,比如作者自己写的解密方法,或者安卓自带一些加解密的算法,这样就比较尴尬了,静态分析就什么都看不出来了
所以在一些比较正常的APP分析中,动态分析结合静态分析就比较好
那么就先来讲讲怎么动态分析一个APP
为了好描述,我写了一个简单的Demo
你看,很简单吧
解释一下:定义了一个textview,这个就是显示字符串用的,还有一个button,在button的点击事件中,点击则将textview里的字符串改为wnagzihxain
点击button,触发点击事件,效果上下一对比就可以看出来
好了,现在生成apk,签名等等。。。。。。
这些东西我这里就不讲了,毕竟和剧情无关
为了梳理各种文件,我建了一个文件夹:Love52pojie,生成的apk就放在这个文件夹里
然后就没有Android Studio什么事了,关掉就好
然后用baksmali反编译一下
[Shell] 纯文本查看 复制代码 baksmali app-release.apk -o Debug/src
打开IDEA,导入刚才反编译出来的文件
选择第一个,剩下的一路next
如图点击
选择Edit Configurations
点击"+",选择"Remote"
主要是端口填8700,然后确认就行
File->project structure
如图选择
到这里就已经完成IDEA的配置了
接下来打开Device Monitor,同时开启模拟器
CMD里输入
[Asm] 纯文本查看 复制代码 >adb shell am start -D -n com.example.wangz.love52pojie/.MainActivity
注意观察Device Monitor
要用鼠标选中当前调试的程序,两个数值看上图,记得对应
[Asm] 纯文本查看 复制代码 >adb forward tcp:8700 jdwp:1464
要是没出现什么奇怪的东西那就是成功了
先随便下个断点
然后Run里面Debug 'Love52pojie'跑起来
可以看到断下来了,看着很爽吧,下面v0之类的值都有
这张更能体现
好了,到这里就已经完成了
遇到任何问题都可以在下面回复,我看到会及时回复的
结尾彩蛋:
andriod的apk文件相关的编译反编译工具
idea代码调试debug篇
解密所有APP运行过程中的内部逻辑
Smalidea+IntelliJ IDEA/Android Studio动态调试安卓app教程
最后:写的时候也参考了上面几篇文章,觉得对于没有接触过动态调试还是有些不好懂的,所以写的时候有些地方特意多写了点
补充:
(1)如何查看寄存器的值?
寄存器的值并不会直接在调试过程中显示出来(我这里没有,不清楚其它人那里什么情况),如果你那也没有,点击右下角"watch"那个位置,添加你要查看寄存器的值,v0,p0,p1之类的,这样在单步的时候寄存器值就会打印在下面的窗口了
|