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

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

2024-1-26 10:52
5122

说明

段落引用 本文思路和主要代码来源,感谢大佬们提供的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调用,就看到了看雪上面的三篇文章

实操

经过实验发现,

  • Ptrace-seccomp方案原理简单,因为要fork子进程来监控父进程,实操较为复杂且容易出现各种问题。本人手太拙,在用这种方案对小demo是成功的,但是对游戏父进程进行ptrace时会出现问题。

  • Frida-seccomp方案,上手十分迅速,但是由于异常处理是Frida来做的,而且利用Frida的Process.setExceptionHandler来自己设置异常回调。这就会导致在进行大量系统调用的APP上使用该方案时产生极大的时间损耗,游戏运行极慢,但是可以成功拦截mincore调用并修改参数。

  • Sigaction-seccomp方案中作者给出了主要思路,即通过sigaction注册信号处理handler,这个注册过程和信号处理是发生在APP内部而不是Frida,所以会快很多。一开始采用自己编译so注入到APP,成功拦截mincore调用并修改参数。为了更方便一点,参考Frida-seccomp方案的思路,直接使用Frida的CModule,无需自己编译so并注入,经实验可以成功拦截mincore调用并修改参数。

    关于后两种方案速度的差异可以看,左侧为Frida-seccomp,右侧Sigaction-seccomp
    https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F3d9d581b-1cbe-449e-9723-f2162662aa76%2F09e51fd2-5c64-40c6-acb4-23206baa069f%2F202401242129.gif?table=block&id=9bd9e09b-835d-4054-9d85-4be562ebb3a3&t=9bd9e09b-835d-4054-9d85-4be562ebb3a3

DEMO

https://github.com/LLeavesG/Frida-Sigaction-Seccomp

直接将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的拦截
图片描述

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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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