🗒️IDA动态调试
2026-3-10
| 2026-8-17
字数 1386阅读时长≈ 4 分钟

IDA调试so设置

开启任何应用可调试

安装LSP模块XappDebug,对想调试的应用设置
notion image
notion image

具体流程

  1. 推送dbgsrv文件夹内的服务端到/data/local/tmp/下,然后加权运行,一般是23946端口
  1. adb forward tcp:23946 tcp:23946
  1. adb shell am start -D -n com.optiv.ndkcrackme/com.optiv.ndkcrackme.MainActivityadb shell am start -D -n 包名/类名开启待调试应用并接入调试后进入主类
  1. 下载并打开ddms.bat,8700调试端口,https://dl.google.com/android/repository/tools_r25.2.5-windows.zip
  1. 将IDA和待调试应用建立联系(port是调试端口)jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700
    1. 或者adb forward tcp:8700 jdwp:8700
      notion image
  1. 用IDA attach进程后自动进入主类,注意设置
notion image
notion image

调试快捷键

  • F7 : 执行下一行指令,如果遇到函数调用,则进入函数内部。
  • F8 : 执行下一行指令,如果遇到函数调用,不进入内部,直接步过函数。
  • F4 (Run until cursor/运行到光标处): 直接运行到当前光标所在行,常用于跳过循环或一段代码。
  • Ctrl+F7 (Run until return/单步返回): 一直运行,直到当前函数返回。
  • F9 (Continue/继续运行): 恢复程序执行,直到遇到断点。
调试时,点击G,输入函数名或者基地址可以跳到声明处
f5可以看到伪代码,但是如果未开启任何so文件时attach可能看不到伪代码(java代码)

调试用到的窗口

notion image
局部变量:
打断点时,可以看函数内部各个变量的实时值(只展示被编译器认定为“有名字的局部变量”,而且通常是栈上的那一份)
General registers(调试器窗口):
可以看到硬件真实状态 (CPU 内部)寄存器的地址和它存储的数据(包括那些「没名字的、没有赋值给任意一个已声明存在的变量但被编译器优化成寄存器临时变量」的东西。)

NDKCrackme.apk寻找password

editText是CHECK PASSWORD按钮的ID,用b函数做校验,b函数在so层
notion image
直接搜索是静态注册
没仔细学java,太难懂了,问问ai。知道了optiv就是password

动态分析

进入b函数的汇编块,我们知道CHECK PASSWORD肯定要调用函数比较输入和秘密字符串,所以直接找BL这是函数调用的前缀,找到这个memcmp就是比较
notion image
打断点,然后app随便输入一个值点击校验,直接在这里发现了比较的俩个函数值,cgfffghujjii是我们输入的,optiv就是目标字符串
局部变量只能看到v5是optiv,而cgfffghujjii只能在寄存器视图看。
因为局部变量v5已被声明并且一直都存在。但是cgfffghujjii存于内存中的某个地址,但是没有赋值给任何已声明的变量 所以局部变量里看不见cgfffghujjii
notion image

uncrack level3动态分析IDA

frida绕过反调试 -U -f 包名 -l 反调试脚本,然后直接在IDA attach就行啦(概率IDA卡死,不懂,用完最上面的方法调试另一个app后再调试这个就不卡死了)。
(不能使用最上面的方法,因为这一关有反调试会闪退)
在v8赋值后打断点,看到v8的值是一个数组,
_QWORD 在 64 位下是 8 字节 v8[3] 就是 3 个 _QWORD
在下面的Hex View里取24字节就是
1d 08 11 13 0f 17 49 15
0d 00 03 19 5a 1d 13 15 08 0e 5a 00 17 08 13 14
notion image
IDA突然卡崩了,重启后找不到hex view了。不过这里也能看24个字节
notion image
选中点A,就会切换到一行显示
notion image
十六进制要这样跳转,打开视图按G,输入地址
notion image
这些字符串最后就是密文数组,都是不可见字符,无法转成字符串,只能用得到的这个和pizzapizzapizzapizzapizz做xor运算,得到密文making owasp great again
 
  • 渗透逆向
  • 安卓抓包加快https传输闯关UnCrackable level3
    Loading...