反沙箱:样本借我抄一下代码

周五都比较难熬

闲聊几句

在看雪论坛看到一篇帖子(极致反沙箱-银狐样本分析),原文作者分析了一系列的反沙箱技术,跟目前项目的反沙箱技术差不多。本着记录学习的心态,来记录一下项目现有的反沙箱技术。

环境检测

其实项目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直接结束该线程

再看回银狐样本的分析,看雪论坛作者的总结是:

d2b5ca33bd20240802160715

对比一下variant项目的反沙箱

  1. patch绕过ETW、AMSI在项目中的hook模块已经实现了,具体可以去看代码
  2. 全覆盖

那这算是下一步更新的功能吗 ???

浅谈反沙箱

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/

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 共1条

请登录后发表评论

    请登录后查看评论内容