目录
一、准备的工具:
二、总览步骤
二、静态逆向获得app信息
1. 将Apk安装的手机
2. 对apk进行静态分析,获得apk的包名,入口Activity,以及so文件。
三、搭建动态调试环境
1. 将android_server文件放到Android手机中。
step1: 确保可以连接到手机,并在手机中新建目录mydata/adb。
step2: 将android_server移动到/mydata/adb目录下,并修改文件权限777
2. 运行androi_server程序。
3. 转发端口,并以调试模式启动需要调试的app。
4. IDA设置。
5. IDA选择附加程序,进入调试窗口
四、注意点:
1. 下载android逆向工具集:
2. Root的Android手机(不能虚拟机!!!),同时确保电脑可以adb连接到手机
这里必须要用真机,因为只有真机是arm架构,而虚拟机都是x86架构,就算是BlueStacks虚拟机支持arm架构也不行,不然调试会出现错误,并且进入调试界面不会到pc代码段:
3. 下载AliCrackme-2.apk, 实验的apk。
1. 将IDA pro下的android_server移动到android手机中, 并运行,成功后不要关闭该cmd
> adb shell mkdir /mydata/ # 创建mydata文件夹
>adb shell mkdir /mydata/adb/ # 在mydata文件夹下创建adb文件夹
> adb push android_server /mydata/adb/android_server # 移动文件到手机
> adb shell ./mydata/adb/android_server # 运行android_server。
2, 新建立cmd, 端口转发:
adb forward tcp:23946 tcp:23946 # 前面是电脑的端口,后面是手机的端口
adb shell am start -D -n com.yaotong.crackme/com.yaotong.crackme.MainActivity # 调试模式打开APP, 不然IDA发现不了该APP
3. 进入IDA,选择对应的程序,进入调试窗口。并记好该app对应的PID.(不会就看下面教程)
4. adb forward tcp:8700 jdwp:(APP进程号)
5. jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700
6. 在IDA中进行调试。
以下为具体步骤,适合第一次操作:
> adb devices # 查看是否可以正常连接到手机
List of devices attached
b24da996 device # 成功连接到手机啦
> adb root # 查看adb是否可以root
adbd is already running as root # 正确提示
> adb install AliCrackme_02.apk # 安装apk到手机
将apk用AndroidKiller打开, 点击工程管理器 > AnddroidManifest.xml文件,
可以得到包名为: com.yaotong.crackme
可以得到app入口: com.yaotong.crackme.MainActivity
同时复制出lib中的so文件用于分析: libcrackme.so
> adb devices # 查看是否可以正常连接到手机
List of devices attached
b24da996 device # 成功连接到手机啦
> adb root # 查看adb是否可以root
adbd is already running as root # 正确提示,否则看文章最后注意点
> adb shell # 进入手机
> mount -o remount,rw / # 重新挂载磁盘,获取磁盘所有权限
> chmod 777 default.prop # 修改文件权限,进入文件,修改ro.debuggable=0变成1,使得所有程序都是可调试状态。
>mkdir mydata # 创建mydata文件夹
>mkdir mydata/adb # 在mydata文件夹下再创建adb文件夹
修改权限:
如果1完成后,今后,只需要直接进入2。
> adb shell ./mydata/adb/android_server
此后要新建一个CMD窗口,该CMD窗口不能关闭。
转发端口:
> adb forward tcp:23946 tcp:23946 # 前面的是电脑的端口,后面的是手机的端口
调试模式启动app: adb shell am stat -D -n 全包名/入口Activicity。
>adb shell am start -D -n com.yaotong.crackme/com.yaotong.crackme.MainActivity
调试器选择:Remote ARM Linux/Android debugger
调试器>调试器选项:
在IDA中 调试器>附加到程序 ,中选择程序com.yaotong.crackme, 并记住对于的进程ID:1342。
6. 进行进程监听:adb forward tcp:8700 jdwp:(APP进程号)
adb forward tcp:8700 jdwp:1342 # 上面获得的进程号
7. >jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700 此时就可以进行你需要的调试啦。
1. 一定要用真机,模拟器为x86架构,会调试不了,也就是刚打开调试窗口,不会跳到pc段。
2. adb root,出现错误,一般都是root不完全,可以在手机端安装adbd Insecure,进行提权操作。
勾选adbd Insecure.apk中的Enable insecure adbd和enable at boot
3. 需要将手机目录下的/defalut.prop文件中的ro.debuggable=0变成1.