反沙箱初探-函数实现3

通过给api传递特定的参数,让其返回特定的值。如果沙箱模拟api函数有缺陷的话,就可以用来检测沙箱是否存在。

样本执行CoRevokeMallocSpy后,将返回值存储在dword_4341A8,再申请内存,拿这个值进行解密代码。如果返回值eax不等于0x800401FB,则代码解密错误,产生异常。

图1 CoRevokeMallocSpy

解决方案:模拟特定的参数,使其返回特定的值。

hash:ec325f5fb25f0620f4de72a202ca720b3f68f9ae

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、付费专栏及课程。

余额充值