wnagzihxain 发表于 2016-5-29 20:39

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:03

本帖最后由 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:}


loadbxh 发表于 2018-1-20 02:30

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环境)]。

w19860613 发表于 2016-5-29 21:03

tail88 发表于 2016-5-29 21:05

什么时候出个好用的调试工具啊。

小小欣 发表于 2016-5-29 21:15

虽然不知道LZ在说什么但是感觉很厉害的样子

wnagzihxain 发表于 2016-5-29 21:22

tail88 发表于 2016-5-29 21:05
什么时候出个好用的调试工具啊。

其实现在的还不错的我觉得

java_shr 发表于 2016-5-29 21:54

好用的调试工具啊

蓦留 发表于 2016-5-29 22:05

虽然没看懂,但很厉害的样子

tail88 发表于 2016-5-30 08:09

wnagzihxain 发表于 2016-5-29 21:22
其实现在的还不错的我觉得

加壳的除外,经常反编译失败啊。感觉 AndroidKiller 相比其他都好用些,就是更新太慢了。

yege0201 发表于 2016-6-1 23:39

IDEA简直是动态调试Java层代码的利器,IDA Pro调试时效率不高(时而会未响应),而且界面不太友好,不过调试native还是IDA Pro给力

xiao_ya 发表于 2016-6-2 15:42

楼主能把软件都分享出来就更好了
页: [1] 2 3 4 5
查看完整版本: IDEA动态调试安卓应用的方法分享