执行api函数时或者执行api函数后,如果栈空间的分布存在差异,也会是一种反沙箱的手段。
样本调用OpenProcess时,传入进程ID值为0xffffffff,执行完OpenProcess后,[esp-0x1c]存储ID值,使用ID值计算出跳转的位置。但是在沙箱中,[esp-0x1c]却存储了返回地址的值,导致计算跳转地址出错,执行异常。
图1 OpenProcess
解决方案:若传入进程ID值为0xffffffff,执行完OpenProcess后,将进程ID的值填入[esp-0x1c]。
hash:d4b6f381f2a8cc0dd3701a94561e143633789e27
栈空间可以利用点很多,包括栈的地址范围,栈申请的大小,栈内容的分布等如果模拟不够好,就可以利用这些差异,进行反沙箱。