逆向-android-实战

逆向-android-实战

1. 逆向基础

1.1 各种文件转换

  • 整体来看
    image

  • 局部(反编译部分)
    image

  • 局部(生成apk)
    image

1.2 AS环境搭建

  • 目前Android studio 已升级到3.x 。本人用3.0版本。3.0版本以上兼容较差,坑较多。
  • 本人jdk版本1.8.0_101。尽量选这个jdk版本左右的版本。不然monitor启动不了,全是因为eclipse插件原因
  • 安装好AS后让其自己下载Android sdk 。不然又是各种坑
  • Android sdk模拟器貌似只支持Intel。amd处理好像无法启动sdk中的模拟器

1.3 window逆向工具

  • Android killer,一款集打包,编译,逆向的工具。只有window版本

1.4 Mac逆向工具

  • AndroidCrackTool mac 打包,编译,签名,dex2jar(不好用)

1.5 window,Mac通用逆向工具

  • JEB(很强大)
  • jadx (免费,定时有更新)

1.6 Android虚拟机调试器原理与实现

1.7 apk调试设置方式

  1. 修改xml的android:debuggable=”true”属性,重新打包。
  2. 利用xposed安装BuildProp Enhancer pak,修改ro.debuggable=1
  3. 使用工具mprop修改
  • 我们使用的工具是mprop,这里所有的条件是手机必须root
  • adb push “你下载好的mprop目录的mprop文件” /data/local/tmp/
  • 执行shell
    1
    2
    3
    4
    5
    6
    # 启动
    $ data/local/tmp/mprop
    # 设置
    $ setprop ro.debuggable 1
    # 恢复init默认逻辑,之后就无法再修改ro属性了
    $ /data/local/tmp/mprop -r

1.8 逆向相关脚步

  1. java -jar ../../baksmali-2.2.6.jar d blackfish/classes7.dex -o xiaohei/src (提取smail代码)
  2. java -jar smali.jar a out -o modify.dex 将smali合并成dex

2. 调试

2.1 smali调试

  1. smailidea.jar 下载并添加到idea
  2. java -jar baksmali-2.0.3.jar disassemble XX.apk -o ./XX
  3. adb shell am start -D -n 应用包名/Activity具体类名
  4. adb forward tcp:8700 jdwp:18896
  5. 加入断点,run remote debug 8700(这里的端口查看monitor)

2.2 IDA调试

  1. 开启android_server

    1
    $ ./android_server
  2. 端口转发

    1
    2
    3
    # 接通adb,端口转发
    adb forward tcp:23946 tcp:23946
    # 注意:so反调试会检查文件名或端口。尽量改到名称和端口
  3. 启动app

    1
    $ adb shell am start -D -n XXXX/XXX
  4. 开启ida,debugger option选项,附加进程

  5. 运行jdb调试

    1
    2
    jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=xxx
    # 注意:其中xxx为monitor中处于debug状态的端口
  6. 导入结构体jni.h,动态识别函数名称.