【Android逆向】IDA动态调试JNI_OnLoad 和 .init_array

android,逆向,ida,动态,调试,jni,onload,init,array · 浏览次数 : 119

小编点评

**步骤:** 1. **加载程序:**在手机上执行 `./android_server` 或 `./android_server64` 命令启动应用服务器。 2. **连接远程调试:**在另一个终端中使用 `adb forward tcp:23946 tcp:239463` 命令将本地端口映射到远程服务器的端口。 3. **打开调试开关:**在应用程序的 `AndroidManifest.xml` 文件中添加 `android:debuggable="true"` 属性。 4. **设置调试端口:**在 `adb forward` 命令中设置调试端口为 `8700`。 5. **连接 JDB:**使用 `jdb -connect com.sun.jdi.SocketAttach:port=8700,hostname=localhost#` 命令连接 JDB。 6. **断电:**在 `init_array` 和 `JNI_OnLoad` 中打断 JDB 连接,以确保程序正常结束。 7. **退出程序:**在 JDB 中退出程序,并使用 `exit` 或 `exit HEX` 命令强制退出应用程序。 **注意:** * 此步骤可能因应用程序的版本而有所不同。 * 使用 `adb forward` 命令需要在两台设备上安装相应的工具。 * `jdb -connect` 命令的端口默认值为 `8700`,如果无法连接,请查看 `sdk/tools/monitor.bat` 文件中的端口。

正文

由于 JNI_OnLoad 和 .init_array 执行时间很早,so一加载到内存中就执行了,所以动态调试步骤会稍微要麻烦一些

1. 进入手机, 执行./android_server (如果是64位程序执行./android_server64)

2. 再开一个终端,执行adb forward tcp:23946 tcp:23946

3. 因为我们徐娅程序刚启动的时候就开始调试,所以先把程序的debug开关打开(AndroidManifest.xml中),ps:本次调试的APP本来就打开了

4. 调试模式启动app,执行

am start -D -n demo2.jni.com.myapplication/.MainActivity

5. IDA attach到目标进程,init_array 和 JNI_OnLoad 中打好断电, F9执行

6. 开一个终端执行

jdb -connect com.sun.jdi.SocketAttach:port=8700,hostname=localhost
# 这里端口默认是8700,如果报错refuse了,那么打开sdk/tools/monitor.bat,查看端口到底是多少,比如我这次就是8600

7. 点击完same后程序会断在一个点,不要理会,直接F9(如果弹出框都点Yes) ,这里可能会卡住一段时间,是正常的,比如我的就卡了十几秒,直到程序显示断在了我们的断点处 把下面调用exit对应的HEX改成00 00 00 00是可以的。

F9继续执行,这样就动态的绕过了exit推出

参考:
https://www.52pojie.cn/thread-767989-1-1.html

与【Android逆向】IDA动态调试JNI_OnLoad 和 .init_array相似的内容:

【Android逆向】IDA动态调试JNI_OnLoad 和 .init_array

由于 JNI_OnLoad 和 .init_array 执行时间很早,so一加载到内存中就执行了,所以动态调试步骤会稍微要麻烦一些 1. 进入手机, 执行./android_server (如果是64位程序执行./android_server64) 2. 再开一个终端,执行adb forward t

【Android逆向】修改so文件方式修改程序行为

1. 还是之前的那个apk 链接:https://pan.baidu.com/s/1vKC1SevvHfeI7f0d2c6IqQ 密码:u1an 尝试使用 010Editor来修改so文件 2. 使用ida打开so文件,双击 hello 52pojie!,会跳转到该字符串的偏移地址,ida显示是00

【Android逆向】反调试绕过

1. 拿到52pojie的反调试挑战apk 链接: https://www.52pojie.cn/thread-742686-1-1.html 的附件中 2. 项目进行安装,点开app,同时挑战成功,不慌 3. 使用IDA attach到目的进程观察,发现app立刻闪退,证明app必然存在反调试逻辑

【Android逆向】静态分析+frida破解test2.apk

有了上一篇的基础 https://www.cnblogs.com/gradyblog/p/17152108.html 现在尝试静态分析的方式来处理 为什么还要多此一举,因为题眼告诉了我们是五位数字,所以可以爆破,不告诉这个题眼的话,就得分析 1. IDA 打开libroysue.so,查看JNI_O

【Android 逆向】【ARM汇编】 全局资源重定位

资源重定位解释: 字符串反汇编代码解释: .rodata:00001E20 __exidx_end DCB "a + b = %d" ; DATA_XREF: main+28^o .rodata 所在段名 00001E20 偏移地址 __exidx_end IDA 给的一个字符串名称 DCB IDA

【Android 逆向】【ARM汇编】 函数的栈帧

1. 函数的调用约定 ARM32 参数1-4 放入r0-r3 剩下的入栈,函数返回值放入r0 ARM64 参数1-8 放入X0-X7 剩下的入栈,函数返回值放入X0 (浮点数是放入 Dn 或 Sn) 2. ARM 指令的 堆栈平衡 var_4 = -4 ; IDA 生成的变量信息,方便阅读用 STM

【Android逆向】frida 破解 jwxdxnx02.apk

apk 路径: https://pan.baidu.com/s/1cUInoi 密码:07p9 这题比较简单,主要是用于练习frida 1. 安装apk到手机 需要输入账号密码 2. 使用jdax 查看apk package hfdcxy.com.myapplication; import andr

[Android逆向]Exposed 破解 jwxdxnx02.apk

使用exposed 遇到了一些坑,这里记录一下 源码: package com.example.exposedlesson01; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.X

[Android 逆向]frida 破解 切水果大战原版.apk

1. 手机安装该apk,运行,点击右上角礼物 提示 支付失败,请稍后重试 2. apk拖入到jadx中,待加载完毕后,搜素失败,找到疑似目标类MymmPay的关键方法payResultFalse 4. adb logcat 或者androidstudio 查看该进程的日志,发现以下日志 com.mf

[Android 逆向]Xposed 破解 切水果大战原版.apk

代码 public class Main implements IXposedHookLoadPackage { boolean flag = false; @Override public void handleLoadPackage(XC_LoadPackage.LoadPackageParam