反调试,VMP让调试软件无法下断点的原理是什么?
最近在学习一个游戏辅助软件,查壳为:VMProtect(3.2.0-3.5.0)[-]。在OD中使用ScyllaHide插件可以正常附加(Attach)游戏,辅助软件也能正常运行。
通过MSSpyXX找到按钮“点击开始认证”的WndProc地址,并在WM_LBUTTONDOWN能到达的地方下F2断点,
随后单击该按钮后,OD没有断下来,出现了一个错误提示框,0x80000003正好是int3异常代码。如果下硬件
执行断点,也断不下来,提示错误代码变为0x80000004,正好是硬件断点异常代码。
请教各位大佬,让硬件断点(DRx)、软件断点(int3)都失效的原理是什么?
开始以为是设置了seh或veh。但是仔细想想,断点异常发生后,调试软件的优先级是最高的,意味着
OD肯定比辅助软件先收到异常消息,这样就能正常断下来。
后来又想到,有监控线程实时检查DRx是否被修改,并及时抹除修改,以便阻止硬件断点。但这个没有
办法抹除软件断点(int3)。并且,辅助软件执行到断点处才提示异常信息框,说明DRx或int3没有被抹除。
实在想不通,请各位大佬指点指点,万分感谢!
页:
[1]