随着对Frida项目源码阅读分析与课程内容的推进,对Frida检测与反检测也有了更深入的理解。在得到一些软件壳的frida检测思路与代码后,顺便写了一下FridaDetector,把已知的所有检测方法都实现了一下。FridaDetector在实现的过程中,又想着把strong-frida使用eBPF实现一下。
需要过检测的地方很多。这里以过27042的端口检测为例(已经实现了大多数过检测),使用eBPF过检测有两种思路。
一是使用tc或者xdp来改数据包。由于xdp作用于网卡不能对localhost进行hook,因此使用tc来实现。如下所示,把27042的数据连接转到27043的端口以达到过检测的目的。
这种实现方式有个问题,就是如果socket连接不指定超时,会使用默认超时长时间卡住检测代码,不够完美。
同样是把27042端口改成27043,但这次改用hook系统调用,改connect的port信息。安卓系统上使用raw_tp方式hook即可。核心代码如下:
代码在安卓gki2.0上直接可以编译通过,测试成功,效果优雅。
1.对于inline hook的过检测。由于改了内存的内容,修改后的指令特征比较明显,不太好绕过。
2. 对于特定的库的crc绕过。虽然可以改maps方式绕过一些检测,但终究不是很完美,等待全新思路实现进一步完善。
上面的代码在这个eBPF学习环境中开发编译,环境搭建脚本位于:https://github.com/feicong/ebpf-course/tree/main/.devcontainer
使用Frida分析目标程序时,挂载上后执行js为什么会崩了退出?
后续会把这些大家感兴趣的内容,在Frida源码情景分析系列中分享出来。
现在课程更新到了第二季,春节完后马上恢复开播,并且价格稍涨,现在购买全季课程仍然早鸟价格并送软件安全知识星球一年。
原文始发于微信公众号(软件安全与逆向分析):使用eBPF重写strong-frida的难点在哪里,附代码
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
点赞
http://cn-sec.com/archives/3724303.html
复制链接
复制链接
-
左青龙
- 微信扫一扫
-
-
右白虎
- 微信扫一扫
-
评论