Android逆向学习笔记2

课程来源: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代码

  1. 反编译APK源代码,得到APK的Smali源码(Smali文件夹)
  2. 将文件夹重命名为src
  3. 引入到AndroidStudio:File -> New -> Import Project
  4. 设置为源码:工程目录上单击右键 -> Mark Directory as -> Sources Root

3. JDK设置

File -> Project Settings -> Project -> 选择SDK路径

4. Debug设置

Run -> run/Debug(初次的时候可能运行不了,需要设置) -> 点击左上角+号 —> Remote -> Port设置为8700

开始调试

  1. 调试模式启动APK:adb shell am start -D xxxxx,其中xxxx形式为:包名/类名(入口)
  2. 打开DDMS,并选中要调试的应用(即进行端口监听)
  3. 在AndroidStudio点击调试、监控

编译报错可以尝试替换的内容

找一个之前编译成功的项目,将以下两个替换到现在编译报错的项目

  1. build.gradle中的buildscript -> dependencies -> classpath
  2. 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)


© 2022. All rights reserved.

Powered by Hydejack v7.5.2