Android安全之APK无源码动态调试

有时候我们需要动态研究别人apk的代码 栈调用顺序来进行xposed hook开发/逆向破解等, 通常我们使用JEB2或 Ida来调试 这里我们面向安卓开发者 直接使用IntelliJ IDEA或Android Studio对APK进行动态调试比较方便 于是才有此文 以下IntelliJ IDEA和Android Studio分别简称为IDEA和as

原创文章,转载请注明出处!

1.反编译dex文件

把apk包格式改成zip然后解压 取得dex文件(有多个dex文件的情况 则全部取出)
进去这里下载https://bitbucket.org/JesusFreke/smali/downloads/
smali-2.2.1.jar
baksmali-2.2.1.jar
smalidea-0.05.zip
下载这三个文件
这里写图片描述
执行dex2smali命令对所有dex进行反编译

java -jar smali-2.2.1.jar -o ./classes.dex ./out

多个dex则反编译对应的dex到同一个目录下 命令如下

java -jar smali-2.2.1.jar -o ./classes2.dex ./out
java -jar smali-2.2.1.jar -o ./classes3.dex ./out
java -jar smali-2.2.1.jar -o ./classes4.dex ./out
...

然后把反编译后的smali文件夹改成src(可以不改)

2.安装smalidea插件

从磁盘里安装刚才下载的smalidea-0.05.zip
打开IDEA或as, 菜单File>Settings>Plugins>Install plugin from disk 选择smalidea-0.05.zip文件 然后安装并重启IDEA或as即可

3.导入并配置工程

打开IDEA或Android Studio
然后导入工程
这里写图片描述

在smali(或src)工程目录上右键选择 Mark Directory As>Sources Root 设置为资源目录
这里写图片描述

4.开始调试

启动Android 模拟器
然后打开DDMS (注意!这是重点)
在DDMS里选择你需要调试的应用包名 (重要!~ 必须选择你要调试的应用)
这里写图片描述

选择后 然后记住这个debug 端口 8700
回到IDEA或as
Run>Debug>Edit Configurations
点击绿色的+号选择并创建一个Remote 然后如图填写端口为刚才的8700

这里写图片描述

然后点ok/debug
控制台出现这个socket连接成功信息 说明成功
这里写图片描述
如果提示错误 那么检查DDMS是否选中了这个app

然后在你的smali代码上下断点

这里写图片描述

代码运行到此处时 会自动进入debug控制台
对着寄存器右键>Add to Watches 可以查看寄存器的值
这里写图片描述
其他调试方法和平时我们debug 自己的java源码一样
这里就不详细描述了

安卓开发者交流群欢迎您加入
418263790

猜你喜欢

转载自blog.csdn.net/u014418171/article/details/77246491