android 动态调试

反编译以及打包 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 动态调试

  • 前提 :
      1. 系统属性 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
      • 直接修改内存中的系统属性,不会写回文件,重启会还原
      1. apk 的 AndroidManifest.xml 文件开启了调试 (android:debugable="true")
  • 操作
      1. jeb 打开 apk 文件
      1. 打开 bytecode ,找到需要的位置在 smail代码 中下断点
        (快捷键 crtl + b)
      1. 将 apk 安装在adb连接上的手机或者模拟器中 , 并打开应用
      1. Debugger -> start , 打开选择框
      • 4.2 选择对应的机器和 进程(flags 带 d 标志,这是当前代码对应的进程,也可以通过进程名进行搜索)
        • 如果没有看到进程,尝试拖动来扩展进程栏,进程栏可以自由拖动扩展...
        • attach
      1. attach 之后通过操作来触发断点即可
      1. 触发断点后可以通过 vm/locals 查看本地变量的变化 | 这些变量默认是 int 类型,如果没有根据代码变化, 对类型输入一点其他字符后按enter ,会自动修改成对应的类型

ndk 动态调试

ida pro 版

  • 分析点:
    • 交叉引用
    • JNI_onload , init_array
  • 环境:
    • root 的手机或者模拟器
    • ida pro
    • 对应手机或者模拟器架构的 android_server
  • 操作步骤
      1. adb push android_server /data/local/tmp
      1. adb shell
      • 2.1 cd data/local/tmp
      • 2.2 chmod 777 android_server # 此处是需要 root 权限的点
      • 2.3 ./android_server # 此处 android_server 开在本机(手机或者模拟器)的 23946 端口


        image.png
      1. adb forward tcp:23946 tcp:23946 # 将 手机的 23946 端口转发到本机(电脑)的 23946 端口
      1. 打开 ida # 不打开任何项目
      1. debugger -> attach -> remote *** gdb # 选择对应架构的 gdb
      1. 设置连接的 gdb
android 动态调试_第1张图片
image.png
    1. 选择对应的进程
android 动态调试_第2张图片
image.png
  • #后续操作等拿到测试机再补充

你可能感兴趣的:(android 动态调试)