1.背景
使用java实现的功能很容易被攻击者逆向分析,出于安全考虑,通常重要的功能会放在native层,也就是so里面,而so是由C/C++代码开发的,ida可是实现对C/C++代码写的程序进行调试。
1.物理地址=基地址+偏移地址
实际生活当中,假如说你要找308房间,肯定需要在三楼找,三楼就是基地址,08就是偏移地址。而在IDA动态调式中,要找某个函数在内存里的位置,需要先找到函数所在的so的起始地址,也就是基地址,再找到函数在IDA里面的偏移地址,两者相加。
1.概念
1)断点 程序运行至断点时,暂停
2)下断 在代码某一处打上断点
3)单步步入 一行行执行代码,遇到函数进入
4)单步步过 一行行执行代码,遇到函数跳过
1.将android-server拷贝到手机,赋予可执行权限并运行
2.adb shell am start -D -n包名/.入口界面
3.使用ida附加目标进程,下断点
4. jdb -connect com.sun.jdi.SocketAttach:hostname= localhost,port=8700(ddms中看端口)
1.将apk安装到模拟器,然后去IDA的安装目录,找到dbgsrv目录,因为模拟器是32位的,所以这里需要将android_x86_server这个文件放到模拟器上。
2.打开cmd窗口,adb devices,adb push android_x86_server /sbin ,然后报错了:
3.再打开一个cmd窗口,adb shell,mount -o rw,remount /,重新挂载一下文件系统,然后回到之前的那一个cmd窗口,adb devices,adb push android_x86_server /sbin,文件传输成功了。
4.在进入shell模式,输入chmod +x /sbin/android_x86_server,给它可执行权限,然后输入android_x86_server,运行起来了,默认监听23946端口。
5.碰到这种apk打不开的情况,先打开ddms,需要以debug模式启动app,Androidkiller反编译打开AndroidManifest.xml文件找到程序主界面com.kanxue.kctfso.MainActivity,原来我们是加载so文件,静态修改jz为jnz。
6.输入adb forward tcp:23946 tcp:23946命令,将手机上的23946窗口,转发到我们电脑本地的23946端口,再开一个adb shell窗口,输入am start -D -n com.kanxue.kctfso/.MainActivity以debug模式启动app,注意/不要漏了。
7.使用ida附件程序,步骤如下:
因为端口转发到本地,所以可以直接填127.0.0.1,搜索我们的包时ctrl+F键
8.按F9运行,但是程序没有动静,看一下ddms中的端口8618,输入jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=8618,让app继续运行。
8.在右边Moudle窗口,可以看到加载了so文件,
双击libnative-lib.so进去,看到了root这个反调试函数。
9.B91F5000就是这个so文件的基地址,基地址+偏移地址(B91F5000+000005EB=B91F55EB)就是物理地址,按G键输入B91F55EB跟随过去:
10.F2下上断点,F9运行过去,断了下来,左边是反汇编窗口,右上角是寄出去窗口。
11.edit-》patch program-》assemble,修改jz为jnz,即可完成绕过。
C:\Users\LENOVO\Desktop\IDA_Pro_v7.
5_Portable
\dbgsrv>adb push android_x86_server
/
sbin
adb: error: failed to copy
'android_x86_server'
to
'/sbin/android_x86_server'
: remote couldn't create
file
: Read
-
only
file
system
android_x86_server:
1
file
pushed,
0
s...d.
37.7
MB
/
s (
1130104
bytes
in
0.029s
)
C:\Users\LENOVO\Desktop\IDA_Pro_v7.
5_Portable
\dbgsrv>adb push android_x86_server
/
sbin
adb: error: failed to copy
'android_x86_server'
to
'/sbin/android_x86_server'
: remote couldn't create
file
: Read
-
only
file
system
android_x86_server:
1
file
pushed,
0
s...d.
37.7
MB
/
s (
1130104
bytes
in
0.029s
)
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2022-2-3 12:04
被小菜鸟一枚编辑
,原因: