闲聊几句
在看雪论坛看到一篇帖子(极致反沙箱-银狐样本分析),原文作者分析了一系列的反沙箱技术,跟目前项目的反沙箱技术差不多。本着记录学习的心态,来记录一下项目现有的反沙箱技术。
环境检测
其实项目variant中的反沙箱使用代码多数都为检测环境
例如:检测开机时间、微信是否存在、CPU核心、桌面文件、系统语言、物理内存、进程名称、所在时区等等
单独拿一个检测开机时间的案例看看
func BootTime() {
startTime, _ := xwindows.GetTickCount()
if startTime == 0 {
os.Exit(0)
}
checkTime := time.Duration(startTime * 1000 * 1000)
setTime := 30 * time.Minute
if checkTime < setTime {
os.Exit(0)
}
}
func BootTimeGetTime() {
overtime, _ := xwindows.TimeGetTime()
if overtime/3600000.0 < 9 {
os.Exit(0)
}
}
一个一个来说:第一个BootTime()函数其实就是调用了Windows API GetTickCount() 函数来得到开机时间,开机时间小于30分钟判定为沙箱;第二个BootTimeGetTime() 函数,调用了Windows API TimeGetTime() 函数,来获取开机运行经过的时间,运行时间小于30分钟判定为沙箱
注:os.Exit(0)是要模拟程序退出的方式,当然也可以用return直接结束该线程
再看回银狐样本的分析,看雪论坛作者的总结是:
对比一下variant项目的反沙箱
- patch绕过ETW、AMSI在项目中的hook模块已经实现了,具体可以去看代码
- 无
- 全覆盖
- 无
- 无
那这算是下一步更新的功能吗 ???
浅谈反沙箱
variant这个项目自从发布以来,我就感受到Go在免杀这方面确实是存在着一些局限性,但是Go的语法却是最简单的
虽然沙箱已经Hook了很多关键函数,想要使用Go写出脱钩沙箱的Hook函数确实是需要一定的二进制功底
每当我看见一个简单的loader加一些加密,然后能一键编译的项目发布,我都会兴冲冲过去学习一下,点开全都是炒冷饭的代码。有时候就在思考一些问题,其实这些东西要拿来用都不难,在Web渗透这么卷的赛道,真的卷不动了啊
上面都是感慨
接下来说正事
想要反沙箱就得上传样本到沙箱,所以设计variant之初就考虑到了这个问题,当然也可能有些代码未发布
但还是得去Github学习大佬们的代码,例如:
https://github.com/ZanderChang/anti-sandbox
https://github.com/nek0YanSu/CheckVM-Sandbox
https://rastamouse.me/memory-patching-amsi-bypass
https://github.com/Hnisec/AntiAnalysis
我看得比较多的:https://anti-debug.checkpoint.com/
请登录后查看评论内容