反沙箱的初探

最近在工作中遇到了很多反沙箱的技术,每种技术点各不相同,但是原理都大同小异,都是利用沙箱和原生系统的差异,从而使样本在沙箱中执行错误的分支或者抛异常,核心的代码和数据没有解密出来,导致样本没有被检测出来。

反沙箱的方式很多,以后会不断更新和发展。研究反沙箱的意义在于可以使沙箱更接近于原生系统,让更多的样本跑到核心代码处,方便安全人员分析样本功能。对于众多的反沙箱技术,我只了解了一些,如果有不当或者新的方式,请不吝指正。在后续文章中,我会详细分析以下反沙箱的技术。

方式1:调用冷门的api

方式2: 利用api模拟的差异

方式3:特定偏移的值

方式4:关联api问题

方式5:使用异常的参数

方式6:特殊的指令

......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SetErrorMode 函数本身并不能直接用来沙箱,但是可以通过它来检测当前程序是否运行在沙箱环境中。 在沙箱环境中,一些操作可能被限制或者被重定向到虚拟的文件系统或注册表中,因此可以通过尝试访问某些系统资源来判断程序是否运行在沙箱环境中。比如,在程序的入口处加入以下代码: ``` #include <Windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) { // 设置错误模式为 SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOGPFAULTERRORBOX | SEM_NOOPENFILEERRORBOX); // 检查是否运行在沙箱环境中 HANDLE hFile = CreateFileW(L"C:\\Windows\\system32\\kernel32.dll", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { // 运行在沙箱环境中 // 可以在这里加入沙箱代码 } else { // 不运行在沙箱环境中 CloseHandle(hFile); } // 程序其余代码 return 0; } ``` 这里尝试访问系统目录下的 kernel32.dll 文件,如果当前程序运行在沙箱环境中,这个文件可能被重定向到虚拟文件系统中,因此无法打开,CreateFileW 函数将返回 INVALID_HANDLE_VALUE。如果程序不运行在沙箱环境中,这个文件可以正常打开,并且返回的句柄不是 INVALID_HANDLE_VALUE。在程序的入口处对是否运行在沙箱环境中进行检测后,您可以加入相应的沙箱代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值