利用函数具体实现的差异来反沙箱是比较难调试的,不仅要找到异常的位置,还要对比沙箱里面api和windows里面api实现细节的差异。api实现可利用的点很多,有参数,返回值,栈空间分布等。
样本:8588e57a84de069175e8a051ed33425dc1233e64,此样本利用了函数执行之后,参数值的变化,来判断是否在沙箱里。LookupPrivilegeValueA执行之后,如果[ebp+Luid.LowPart]的值为0没有置零的话,就直接结束进程,否则就进入到核心逻辑执行。
![](https://i-blog.csdnimg.cn/blog_migrate/26b4b795e51b3d389c999e3df27d6f8e.png)
图1 LookupPrivilegeValueA
解决办法:模拟LookupPrivilegeValueA的实现;打patch,在沙箱里面执行完LookupPrivilegeValueA后,将[ebp+Luid.LowPart]的值置零即可。