首页
社区
课程
招聘
[分享]动态调试-ida绕过native层反调试
发表于: 2022-2-2 15:33 12292

[分享]动态调试-ida绕过native层反调试

2022-2-2 15:33
12292

  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 被小菜鸟一枚编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (3)
雪    币: 198
活跃值: (616)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
请问偏移地址000005EB是怎么得到的?
2022-2-3 09:35
0
雪    币: 1269
活跃值: (3092)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
3
乐不思蜀1 请问偏移地址000005EB是怎么得到的?
cmp     eax, 0FFFFFFFFh
jz      loc_607
 
//按一下空格,5EB就是偏移地址
.text:000005EB                 jz      loc_607
2022-2-3 12:02
0
雪    币: 158
活跃值: (1096)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
请问示例apk在哪里获得?
2022-9-13 09:36
0
游客
登录 | 注册 方可回帖
返回
//