安卓逆向_21 --- Java 层反调试( IDA Pro 分析 so 库 JNI_OnLoad )

 

 

1. Java 层的反调试技术

 

1.1 JDWP 协议介绍

JDWP 是 Java Debug Wire Protocol 的缩写,它定义了调试器(debugger)和 被调试的 Java 虚拟机(target vm)之间的通信协议。JDWP 协议可以 远程 动态调试 Java 程序

JVM 自带有对这个协议相应的支持,通过命令 java -agentlib:jdwp=help 可以查看help文档。

安卓逆向_21 --- Java 层反调试( IDA Pro 分析 so 库 JNI_OnLoad )_第1张图片

说明一下 debugger target vm

  • Target vm 中运行着我们想要调试的程序,它与一般运行的 Java 虚拟机没有什么区别,只是在启动时加载了 Agent JDWP 从而具备了调试功能。
  • debugger 就是我们熟知的调试器,它向运行中的 target vm 发送命令来获取 target vm 运行时的状态和控制 Java 程序的执行。
  • Debugger 和 target vm 分别在各自的进程中运行,他们之间的通信协议就是 JDWP。

JDWP 与其他许多协议不同,它仅仅定义了数据传输的格式,但并没有指定具体的传输方式。这就意味着一个 JDWP 的实现可以不需要做任何修改就正常工作在不同的传输方式上(在 JDWP 传输接口中会做详细介绍)。

JDWP 是语言无关的。理论上我们可以选用任意语言实现 JDWP。然而我们注意到,在 JDWP 的两端分别是 target vm 和 debugger。Target vm 端,JDWP 模块必须以 Agent library 的形式在 Java 虚拟机启动时加载,并且它必须通过 Java 虚拟机提供的 JVMTI 接口实现各种 debug 的功能,所以必须使用 C/C++ 语言编写。而 debugger 端就没有这样的限制,可以使用任意语言编写,只要遵守 JDWP 规范即可。JDI(Java Debug Interface)就包含了一个 Java 的 JDWP debugger 端的实现(JDI 将在该系列的下一篇文章中介绍),JDK 中调试工具 jdb 也是使用 JDI 完成其调试功能的。

JDWP agent 在调试中扮演的角色

安卓逆向_21 --- Java 层反调试( IDA Pro 分析 so 库 JNI_OnLoad )_第2张图片

使用 JDWP 远程调试 java 程序:https://www.jianshu.com/p/4b322505087f

使用 JDWP 进行远程调试:https://blog.csdn.net/renfufei/article/details/52756556

 

 

1.2 安卓程序动态调试

 

安卓程序动态调试条件(2个满足1个即可):

  • 1. 在 AndroidMainfest.xml ---> application 标签下,设置或者添加属性 Android:debuggable=true
  • 2. 系统默认模式,在 build.prop(boot.img),ro.debuggable=1

Android SDK 中有 android.os.debug 类提供了一个 isDebuggerConnected方法,用于判断 JDWP 调试器是否正在工作

 

示例:手动绕过百度加固 Debug.isDebuggerConnected反调试的方法:
https://blog.csdn.net/QQ1084283172/article/details/78237571

 

拿到一个 apk 分析步骤:

首先先分析有没有加壳,如果没有加壳,使用 jadx-gui 打开自动反编译,并进行分析,如果有加壳,需要先脱壳,然后在进行分析。找到 入口点 或者 入口页面 进去查看分析。

IDA Pro 分析 so 库 JNI_OnLoad:https://www.bilibili.com/video/BV1UE411A7rW?p=69

 

 

2. java 层反编译分析,然后找到 so 文件,然后 IDA Pro 找到 JNI_onLoad 

 

安卓逆向_21 --- Java 层反调试( IDA Pro 分析 so 库 JNI_OnLoad )_第3张图片

 

https://www.bilibili.com/video/BV1UE411A7rW?p=70

https://www.bilibili.com/video/BV1UE411A7rW?p=71

https://www.bilibili.com/video/BV1UE411A7rW?p=72

 

 

 

 

 

你可能感兴趣的:(Android,逆向)