Android逆向学习笔记2
on Blogs
课程来源:bilibli,视频链接:Android逆向学习(自学专用版)
第二阶段:APK动态调试
使用AndroidStudio对Smali代码进行动态调试
原本AndroidStudio只支持对java代码的调试,要想让他支持对smali代码的调试需要安装ideaSmali插件,添加方式File -> Settings -> Plugins -> 右上角设置图标 -> Install Plugin from Disk
。如果AndroidStudio4.0+版本,还需要设置File -> Settings -> File Types -> Smali(将原本的那个后缀关联给删掉,放到选择图标为"S"的)
。
调试前准备
1. 设置APK可调式
在反编译后的AndroidManifest.xml
文件中的Application节点中添加android:debuggable="true"
,然后回编译(即二次打包)。
也可以有其他的方式(免二次打包APK的方法):
- 在Root情况下,Patch掉系统的
default.prop
,将ro.debuggable
设置为1 - 使用Xposed插件
BDOpener_v1.1
,将所有的应用都设置为可调式状态
2. 导入Smali代码
- 反编译APK源代码,得到APK的Smali源码(Smali文件夹)
- 将文件夹重命名为
src
- 引入到AndroidStudio:
File -> New -> Import Project
- 设置为源码:
工程目录上单击右键 -> Mark Directory as -> Sources Root
3. JDK设置
File -> Project Settings -> Project -> 选择SDK路径
4. Debug设置
Run -> run/Debug(初次的时候可能运行不了,需要设置) -> 点击左上角+号 —> Remote -> Port设置为8700
开始调试
- 调试模式启动APK:
adb shell am start -D xxxxx
,其中xxxx形式为:包名/类名(入口)
- 打开DDMS,并选中要调试的应用(即进行端口监听)
- 在AndroidStudio点击调试、监控
编译报错可以尝试替换的内容
找一个之前编译成功的项目,将以下两个替换到现在编译报错的项目
build.gradle
中的buildscript -> dependencies -> classpath
gradle -> wrapper -> gradle-wrapper.properties
中的distributionUrl
Android Jni编程介绍
Jni即Java Native Interface,是Java语言和其他语言的通道(主要是C和C++),也就是调用接口。Jni生成的文件为.so
。
生成规则:Java_
作为前缀,类的全路径名,用"_"
分割每一个目录名,再加上方法名;如果是重载的方法,则会添加"_"
和方法签名,如全路径是com.study.jnilearn.HelloWorld
,生成的方法是Java_com_study_jnilearn_HelloWorld_sayHello
用IDA pro对so进行反编译
用WinHEX对so文件进行编辑
用IDA对so进行动态调试
当程序出现闪退,都会留下日志。可以使用ddms工具查看日志内容(SDK的tools目录下的ddms或者是monitor)