反编译以及打包 apk
- 工具网盘地址
- 反编译 :java -jar Apktool.jar d 22.apk
- 修改 smail 或者 Manifest.xml | 在动态调试时需要使用
- 打包 : java -jar Apktool.jar b 22 -o 22.apk | 22 是反编译产生的文件夹
- 签名 : java -jar signapk.jar testkey.x509.pem testkey.pk8 22.apk signed.apk | *.pem 和 *.pk8 是 密钥文件
生成密钥
openssl genrsa -out tmpkey.pem 4096
openssl req -new -ke tmpkey.pem -out tmprequest.pem
openssl x509 -req -days 9999 -in tmprequest.pem -signkey tmpkey.pem -out mykey.pem
openssl pkcs8 -topk8 -outform DER -in tmpkey.pem -informPEM -out mykey.pk8 -nocrypt
rm tmp*.pem
smail 动态调试
- 前提 :
-
- 系统属性 ro.debugable 为 1
- 使用 Android AVD 生成的模拟器默认情况下 ro.debuggable 属性为 1
- 使用谷歌安卓源码库AOSP编译出来的镜像默认情况下 ro.debuggable 属性也为 1
- 查看方式 :
- 运行 "abd shell getprop ro.debuggable"
- 使用 setpropex 修改系统属性
- git clone https://github.com/jduck/rootadb.git
- cd rootadb
- ndk-build
- # found setpropex in libs /*/
- 在手机上执行
- ./serpropex-pie ro.debuggable 1
- 直接修改内存中的系统属性,不会写回文件,重启会还原
- apk 的 AndroidManifest.xml 文件开启了调试 (android:debugable="true")
-
- 操作
- jeb 打开 apk 文件
- 打开 bytecode ,找到需要的位置在 smail代码 中下断点
(快捷键 crtl + b)
- 打开 bytecode ,找到需要的位置在 smail代码 中下断点
- 将 apk 安装在adb连接上的手机或者模拟器中 , 并打开应用
-
- Debugger -> start , 打开选择框
- 4.2 选择对应的机器和 进程(flags 带 d 标志,这是当前代码对应的进程,也可以通过进程名进行搜索)
- 如果没有看到进程,尝试拖动来扩展进程栏,进程栏可以自由拖动扩展...
- attach
- attach 之后通过操作来触发断点即可
- 触发断点后可以通过 vm/locals 查看本地变量的变化 | 这些变量默认是 int 类型,如果没有根据代码变化, 对类型输入一点其他字符后按enter ,会自动修改成对应的类型
ndk 动态调试
ida pro 版
- 分析点:
- 交叉引用
- JNI_onload , init_array
- 环境:
- root 的手机或者模拟器
- ida pro
- 对应手机或者模拟器架构的 android_server
- 操作步骤
- adb push android_server /data/local/tmp
-
- adb shell
- 2.1 cd data/local/tmp
- 2.2 chmod 777 android_server # 此处是需要 root 权限的点
-
2.3 ./android_server # 此处 android_server 开在本机(手机或者模拟器)的 23946 端口
- adb forward tcp:23946 tcp:23946 # 将 手机的 23946 端口转发到本机(电脑)的 23946 端口
- 打开 ida # 不打开任何项目
- debugger -> attach -> remote *** gdb # 选择对应架构的 gdb
- 设置连接的 gdb
- 选择对应的进程
- #后续操作等拿到测试机再补充