吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 38501|回复: 47
收起左侧

[Android 原创] IDEA动态调试安卓应用的方法分享

  [复制链接]
wnagzihxain 发表于 2016-5-29 20:39
本帖最后由 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

1.png

点击button,触发点击事件,效果上下一对比就可以看出来

2.png

好了,现在生成apk,签名等等。。。。。。

这些东西我这里就不讲了,毕竟和剧情无关

为了梳理各种文件,我建了一个文件夹:Love52pojie,生成的apk就放在这个文件夹里

然后就没有Android Studio什么事了,关掉就好

然后用baksmali反编译一下
[Shell] 纯文本查看 复制代码
baksmali app-release.apk -o Debug/src

打开IDEA,导入刚才反编译出来的文件

3.png

选择第一个,剩下的一路next

4.png

如图点击

5.png

选择Edit Configurations

6.png

点击"+",选择"Remote"

7.png

主要是端口填8700,然后确认就行

8.png

File->project structure

9.png

如图选择

10.png

到这里就已经完成IDEA的配置了

接下来打开Device Monitor,同时开启模拟器

11.png

CMD里输入
[Asm] 纯文本查看 复制代码
>adb shell am start -D -n com.example.wangz.love52pojie/.MainActivity

注意观察Device Monitor

12.png

要用鼠标选中当前调试的程序,两个数值看上图,记得对应
[Asm] 纯文本查看 复制代码
>adb forward tcp:8700 jdwp:1464

13.png

要是没出现什么奇怪的东西那就是成功了

先随便下个断点

然后Run里面Debug 'Love52pojie'跑起来

14.png

可以看到断下来了,看着很爽吧,下面v0之类的值都有

15.png

这张更能体现

16.png

好了,到这里就已经完成了

遇到任何问题都可以在下面回复,我看到会及时回复的


结尾彩蛋:
andriod的apk文件相关的编译反编译工具
idea代码调试debug篇
解密所有APP运行过程中的内部逻辑
Smalidea+IntelliJ IDEA/Android Studio动态调试安卓app教程

最后:写的时候也参考了上面几篇文章,觉得对于没有接触过动态调试还是有些不好懂的,所以写的时候有些地方特意多写了点

补充:
(1)如何查看寄存器的值?
寄存器的值并不会直接在调试过程中显示出来(我这里没有,不清楚其它人那里什么情况),如果你那也没有,点击右下角"watch"那个位置,添加你要查看寄存器的值,v0,p0,p1之类的,这样在单步的时候寄存器值就会打印在下面的窗口了

免费评分

参与人数 10威望 +1 吾爱币 +3 热心值 +9 收起 理由
mamingming22 + 1 + 1 谢谢@Thanks!
lzs233 + 1 + 1 谢谢@Thanks!
爷单身1却潇洒 + 1 + 1 谢谢@Thanks!
kali-cc + 1 谢谢@Thanks!
butterfly.super + 1 谢谢@Thanks!
Hmily + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Ericky + 1 我很赞同!
xinluan + 1 比很厉害,我愣是没看懂
小野 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
啊飞 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

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里无法cd  apk(提示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


最后,谢谢大神能抽出时间为我解答疑惑。不胜感激


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 来自手机
楼主能把软件都分享出来就更好了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 15:35

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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