IDEA动态调试安卓应用的方法分享
本帖最后由 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反编译一下
baksmali app-release.apk -o Debug/src
打开IDEA,导入刚才反编译出来的文件
选择第一个,剩下的一路next
如图点击
选择Edit Configurations
点击"+",选择"Remote"
主要是端口填8700,然后确认就行
File->project structure
如图选择
到这里就已经完成IDEA的配置了
接下来打开Device Monitor,同时开启模拟器
CMD里输入
>adb shell am start -D -n com.example.wangz.love52pojie/.MainActivity
注意观察Device Monitor
要用鼠标选中当前调试的程序,两个数值看上图,记得对应
>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之类的,这样在单步的时候寄存器值就会打印在下面的窗口了
本帖最后由 tafeng 于 2016-6-17 01:05 编辑
wnagzihxain 发表于 2016-6-17 00:16
学完了还是看完了,如果真的是学完了,就可以试试折腾动态调试,经验是折腾出来的,多百度,多看其他论坛 ...
之前是刚刚入门学习算法的。追到算法了,并在进一步探究秘钥加密的过程思路时,遇到动态调试这个瓶颈,所以来学习。百度了好多,发表的博客等等文章面向的对象都是基于一些有了基础的认识,并且是已经学会了运用了的开发者,并没有一些文章是详细述说如何进行一步步设置环境。倒是找到了一些不错的文章,http://www.w2bc.com/article/121374 ,例如这个,和你的这篇差不多了。也在论坛下过一个安卓逆向入门的视屏,无奈先导课的动态调试并不涉及环境设置。现在所需用的device monitor 。android studio idea 等等都已经安装好了。现在碰到两个问题,一个是打开device monitor,DDMS没有显示,空白一片,是否需要打开自带的虚拟机来运行APK呢?因为我现在打开夜神模拟器只有后台程序运行了,前台无法显示(我看到先导课里的视屏是用的夜神模拟器来调试的)。第二个问题是,在第一步使用baksmail反编译生成smail文件这里,其他的诸如android killer等软件反编译获取smail文件和baksmail是否有不同,就是能否用IDEA来打开android killer等反编译出来的工程。虽然我了解到现在大多数的反编译工具都是基于它和它的兄弟smail开发的。第三是,我在cmd里无法cdapk(提示JAVA不是内部命令),发现是PATH没有把JAVA设置好,下面是我按照java环境的设置教程设置的,不知道问题在哪里
path:C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;C:\Program Files\Android\platform-tools;
JAVA_HOME:D:\java\jdk
最后,谢谢大神能抽出时间为我解答疑惑。不胜感激{:301_986:}
tafeng 发表于 2016-6-17 01:03
之前是刚刚入门学习算法的。追到算法了,并在进一步探究秘钥加密的过程思路时,遇到动态调试这个瓶颈,所 ...
Windows path 有区分用户path和系统path,不知兄台你所发是那个path。而且据我所知,从某个Java版本起,Java已经可以自己设置path.so。你的问题并不是path问题。纵观你所提问三个问题点,其实是有关三件事。[猜测]1.模拟器问题,不同的模拟器采用的模拟方式不同。不可用相同的策略方式去连接调试。因为我很少用xx类安卓模拟器,所以。不清楚具体情况。我接触最多的是AVD。你这个问题我回答不了。这里只当参考就好。2.cp问题,这里你是混淆概念了。cp并不是java中的东西。cp是linux命令。pull是adb命令,adb设置好连接可以通过客户端对设备端[模拟器]进行shell操作=大部分基础linux命令.3.如果你要通过一台主机对一个apk进行调试。最简单的办法就是使用[安卓模
拟器<-adb工具->(android调试工具+Java环境)]。 什么时候出个好用的调试工具啊。 虽然不知道LZ在说什么但是感觉很厉害的样子
tail88 发表于 2016-5-29 21:05
什么时候出个好用的调试工具啊。
其实现在的还不错的我觉得 好用的调试工具啊 虽然没看懂,但很厉害的样子 wnagzihxain 发表于 2016-5-29 21:22
其实现在的还不错的我觉得
加壳的除外,经常反编译失败啊。感觉 AndroidKiller 相比其他都好用些,就是更新太慢了。 IDEA简直是动态调试Java层代码的利器,IDA Pro调试时效率不高(时而会未响应),而且界面不太友好,不过调试native还是IDA Pro给力 楼主能把软件都分享出来就更好了