首页
社区
课程
招聘
Frida-Sigaction-Seccomp实现对Android APP系统调用的拦截
发表于: 2024-1-26 10:52 6320

Frida-Sigaction-Seccomp实现对Android APP系统调用的拦截

2024-1-26 10:52
6320

说明

段落引用 本文思路和主要代码来源,感谢大佬们提供的NB思路,关于seccomp等不再赘述,直接传送至各位前辈大佬的文章即可:

[原创]基于seccomp+sigaction的Android通用svc hook方案
[原创]SVC的TraceHook沙箱的实现&无痕Hook实现思路
[原创]分享一个Android通用svc跟踪以及hook方案——Frida-Seccomp

引言

一切都因WMCTF2023一道Android 游戏题BabyAnti-2而起,预期解为拦截mincore调用(int mincore(void *start, size_t length, unsigned char *vec);监测指定大小的页面是否处于物理内存中。一般用于内存扫描的检查,一旦扫描行为发生,有些并不在物理内存的页面被调入。vec 是一个字节数组,用于存储结果。每个字节对应 addr 和 length 指定的内存区域中的一个页面。如果相应的页面驻留在内存中,那么相应的字节的最低位会被设置为 1,否则会被设置为 0。),当时非预期了题目,即直接CheatEngine附加游戏题,扫描内存时游戏虽然会监测到并弹窗,但是游戏正常运行,直接能修改分数并且拿到flag。后来想着除了通过内存搜索mincore的svc调用指令外还有什么其他别的办法快速的拦截svc调用,就看到了看雪上面的三篇文章

实操

经过实验发现,

DEMO

8b4K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6x3e0r3g2S2N6X3g2K6c8#2)9J5c8V1k6J5K9h3c8S2i4K6u0V1f1$3W2Y4j5h3y4@1K9h3!0F1i4K6u0V1f1$3g2U0j5$3!0E0M7l9`.`.

直接将js注入即可实现对openat的监控,需要在logcat过滤native查看结果

在实战时根据自己需求修改CModule中的define,其中target_nr 是目标系统调用号。

在拦截到系统调用后会再次进行系统调用,防止再次被拦截,就需要一个寄存器来放一个标识符SECMAGIC ,避免循环拦截系统调用从而crashSECMAGIC_POS 即为对应系统调用所不需要的第一个寄存器,比如openat需要三个参数,那么SECMAGIC_POS 填3即可,因为寄存器从x0开始,args[3]即为第四个寄存器。

然后就是在sig_handler 中写劫持逻辑。如果想拦截更多的系统调用,就需要重写seccomp filter

除此之外调用栈等信息,可以参考[原创]分享一个Android通用svc跟踪以及hook方案——Frida-Seccomp 阿碧大佬的思路自己添加。

图片描述

同理也可以实现对mincore的拦截
图片描述

再次感谢上述大佬提供的代码和思路,本文意在抛砖引玉,如有侵权联系本人删除。


[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2024-1-26 15:24 被LLeaves编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (5)
雪    币: 3333
活跃值: (4262)
能力值: ( LV5,RANK:61 )
在线值:
发帖
回帖
粉丝
2
好东西,感谢大佬的分享
2024-1-26 11:45
0
雪    币: 6
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
大佬,感谢分享
2024-1-26 12:19
0
雪    币: 2860
活跃值: (11724)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢大佬分享已赞
2024-1-26 14:28
0
雪    币: 114
活跃值: (5087)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
优秀 感谢分享
2024-1-26 16:32
0
雪    币: 5531
活跃值: (31866)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢分享
2024-1-29 09:54
1
游客
登录 | 注册 方可回帖
返回