IDA-so

动态调试so文件

ida调试so文件

准备
将ida目录下的(如果以前调试过就不用了)

1
2
3
4
5
adb push C:\Program Files\IDA 7.0\dbgsrv\android_server /data/ctf/ida/
adb shell
su
cd /data/ctf/ida/
chmod 777 android_server

没有反调试so

开始

打开一个cmd

1
2
cd /data/ctf/ida/
./android_server

在打开一个cmd

1
adb forward tcp:23946 tcp:23946

查看so文件是否加载进内存map中

1
2
3
adb shell
ps | grep <包名> //这里会出现pid
cat /proc/<pid>/maps |grep libcheck //如果运行后没有显示,则没有加载,

如下,成功

1
2
3
4
5
ps | grep zjgsuctf1
u0_a4 28355 248 1005084 51896 ffffffff 4014c6fc S com.example.ese.zjgsuctf1
cat /proc/28355/maps |grep libcheck
7b8d3000-7b8d6000 r-xp 00000000 b3:17 630823 /data/app-lib/com.example.ese.zjgsuctf1-1/libcheck.
so

不成功,可能需要查看加载位置,可能需要点击一下按钮触发。

ida打开

(1)、ida->Go->Debugger->Attach->Remote ArmLinux/Android denugger
(2)、Hostname:127.0.0.1
(3)、接着出现一个窗口,右键选择Quick filter->包名[几个字母就行],(这里会出现pid和运行包名)->ok
(4)、ctrl+s->右键选择Quick filter->lib的名字->选择可执行的[X->x]

计算函数偏移

静态偏移: 0x988
动态基址: 0x7b8d3000
动态偏移: 0x988 + 0x7b8d3000 = 0x7b8d3988
g->0x7b8d3988
f2下断点

存在反调试so

那么怎么知道so文件存在反调试呢?

答:就是像上面那样做一遍,找到偏移后,运行程序,ida回闪退,那就有反调试了。可能结果如下:

1
2
3
4
5
6
7
8
9
The initial autoanalysis has been finished.
Caching 'Choose segment to jump'... ok
Debugger: thread 5175 has exited (code 0)
Debugger: thread 5176 has exited (code 0)
Debugger: thread 5177 has exited (code 0)
Debugger: thread 5178 has exited (code 0)
Debugger: thread 5179 has exited (code 0)
Debugger: thread 5180 has exited (code 0)
Debugger: thread 5181 has exited (code 0)

接着开始调试具有反调试的so文件。

打开一个cmd

1
2
cd /data/ctf/ida/
./android_server

在打开一个cmd

1
2
adb forward tcp:23946 tcp:23946
adb shell am start -D -n 包名/类名 (Android<anifest.xml里)

这时候手机会出现Waiting For Debugger,等待调试界面。
如:

1
2
adb forward tcp:23946 tcp:23946
adb shell am start -D com.yaotong.crackme/com.yaotong.crackme.MainActivity

ida打开

1、载入apk的要调试so文件[反编译或者改后缀为zip]、下断点的JNI_Onload处开始下断点。
2、Debugger -> Switch-debuge -> Remote ArmLinux/Android denugger
3、Debugger -> Process options -> Hostname:127.0.0.1
4、Debugger -> Attach to process -> 右键选择Quick filter->包名[几个字母就行]。

jdwp协议端口转发

方法一、

1
2
adb forward tcp:8700 jdwp:ID //[上面(3)出现的ID]
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700

如:

1
2
adb forward tcp:8700 jdwp:10734
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8700

方法二、
直接打开ddms,选择这个app程序,如果ddms不能显示程序,可以安装XLnstaller.apk

运行

f9运行就好了

Donate
-------------本文结束感谢您的阅读-------------