就算沙箱能正确模拟了函数的行为,还不能保证不能根据此函数进行反沙箱。一些病毒会根据函数实现的opcode进行解密代码或者计算跳转执行的地址。如果沙箱和windows的api实现的opcode有差异的话,就可以以此来反沙箱。
样本在获取了SetTapePosition的地址后,取偏移为4的opcode进行运算,计算跳转地址,随后跳转至此执行代码。
![](https://img-blog.csdnimg.cn/img_convert/94b66ba7a4f4df8a43425795b9235744.png)
图1 SetTapePosition
解决方案:将api模拟的opcode和原生api一致;打patch,让样本取到正确的opcode的值。第二种方式不够理想,如果取的偏移过大,那么将会影响沙箱的效率,况且很多api也会存在这样的问题,都打patch不现实。
hash:95e68ab53e00835565b8566c775dd6197273e4a1
相似的样本:91311b302db89469368dd815c414c1296c357df0,原理一致,只是取的偏移不同。