0x00 前言
上一篇分享了使用 Android studio 和 Jeb 对 Apk 文件直接进行动态调试,本文将分享使用 IDA pro 调试
so 。
调试的 apk 文件还是使用 CTF案例4 的文件,已经上传到知识星球,可自行下载
本文涉及技术:
-
IDA pro 工具使用
-
调试android 应用
-
动态调试技术
注意:本案例所需要的 apk 文件,已经上传到知识星球,需要的朋友可以到文末关注后下载
0x01 准备
1、下载案例 Apk 文件
使用 Android Killer 工具修改配置文件,加上 android:debuggable=“true” 这个配置,这样 apk
就可以被调试了。
2、找到IDA_Pro_v7.5_Portable\dbgsrv
目录,里面文件对应不同平台的 server 文件:
3、查看手机的 cpu 架构:
4、调试的手机是 android 的 arm64-v8a,可以选择 android_server64 ,把这个文件发送到
手机的/data/local/tmp
目录,然后赋予执行权限,最后执行。
默认的端口是 23946 ,这里故意改为 22222
5、端口转发
adb forward tcp:11111 tcp:22222
- 1
这里表示将本地 11111 端口(我本机是 windows),转发到远程手机 22222 端口:
准备工作做好之后,将讲解两种方式调试,一种就是普通启动 apk 的调试,一种是以 Debug 模式启动 apk
的调试。如果调试的代码逻辑,在启动之后,则可以使用普通启动apk的调试模式,如果调试的代码逻辑在启动的时候就执行了,这时需要使用 Debug 模式启动
Apk 进行调试。
0x02 普通模式调试
1、adb 启动对应的 Activity,这里使用 普通模式启动 apk
adb shell am start -n /
- 1
2、打开 IDA pro 64 位版本,加载 arm64-v8a 中 文件
3、IDA 调试配置
选择 Remote ARM Linux/Android debugger 调试
选择 Debugger options 勾选以下三个选项
选择 Process options 进行配置:
选择需要 attach 的进程
4、出现 Debugger warning
这表示在手机中找到和本地加载相同的 so 文件,选择 same:
5、在模块中搜索,需要调试的模块
然后定位要打断点的函数:
6、打断点
这里可以直接使用快捷键 F5 ,然后在 c/c++ 的伪代码里打断点:
7、开始调试
点击 Quick debug view ,打开 Locals 窗口,F9 运行,F8 单步步过,进行调试
8、 成功拿到 flag 值。
0x03 Debug模式调试
1、打开 Android device monitor 工具
这个工具在 Android studio 的Android\Sdk\tools
目录下
2、以 Debug 模式 启动 apk的 Activity
adb shell am start -D -n /
- 1
发现在 Android device monitor 中,将要调试的程序前面,多了一个 红色的虫子
3、打开 IDA ,加载 so(同上)
4、IDA 调试配置,勾选三项等,找到要调试的进程(同上)
5、执行 jdb 命令
jdb -connect :hostname=127.0.0.1,port=8608
- 1
这里的端口,可以在 Monitor 中查看到
执行完成之后, 红色的虫子变为绿色的虫子 ,接着就可以开始调试了
6、开始调试,按 F9 ,知道出现
这个时候就加载到需要调试的 so 了
7、在模块中查找需要调试的模块,以及模块中的具体函数(同上)
8、继续调试
打开 Locals 查看变量,
成功拿到 flag 值。
0x04 结语
在 Android 逆向中,动态调试是非常重要的一个技术,IDA pro 时调试 so 代码的利器。感兴趣的朋友,可以下载案例的 apk 文件,实战起来。
s 查看变量,
[外链图片转存中…(img-taWTTYnM-1674869592787)]
成功拿到 flag 值。
0x04 结语
在 Android 逆向中,动态调试是非常重要的一个技术,IDA pro 时调试 so 代码的利器。感兴趣的朋友,可以下载案例的 apk 文件,实战起来。
网络安全工程师企业级学习路线
这时候你当然需要一份系统性的学习路线
如图片过大被平台压缩导致看不清的话,可以在文末下载(无偿的),大家也可以一起学习交流一下。
一些我收集的网络安全自学入门书籍
一些我白嫖到的不错的视频教程:
上述资料【扫下方二维码】就可以领取了,无偿分享