我最近发现了一个很好的破解工具,它使用VMProtect 3.x作为防御。
在网上进行了一些研究之后,我发现了API的VMProtect用作反调试方法。

我设置了软件断点这些功能上的功能,但不幸的是我没有找到它们。
我100%确信在程序运行期间会调用API。

这些API包括(CheckRemoteDebuggerPresentIsDebuggerPresent等)。

如果有人知道是什么原因,或者VMProtect使用哪种规避方法,那么我会很乐意与他们分享。 >

评论

如果可以附加可执行文件,并准确指定放置断点的位置,则将更为有用。

VMProtect可能知道函数序幕的外观,并在调用函数之前跳过了一些指令。您可以尝试将断点放置在函数内部的某个地方。

#1 楼

VMProtect使用了一些反调试技术。首先,您不会想要自己解决这些问题,因为有一套非常详尽的检测调试器的技术。考虑使用一个防反调试插件(ScyllaHide)

rdtsc指令可能会遇到一个很难解决的问题。应用程序来测量一系列指令执行之间的时间。调试器的步进行为将使此时间段变大,并因此通过某些应用程序逻辑触发检测到调试器存在。繁琐的代码混淆使您无法手动解决这些问题。您将需要使用一些自动化的方法(但是,由于rdtsc并不是特权指令,因此这很麻烦。)

这里最好的方法可能是编写一个自定义Intel PIN工具来使用指令修改CPU状态(请参阅https://github.com/jingpu/pintools/blob/master/source/tools/InstLib/time_warp.H)。还有其他方法(包括使用内核级驱动程序,但是IIRC这种方法可能非常缓慢并且难以使用。)就您使用VMProtect总体而言,这种混淆是非常复杂,如果您之前从未对代码进行过虚拟化处​​理,那么您将首先要尝试一个简单的VM。对代码进行虚拟化和逆向工程虚拟机,尤其是像VMProtect这样模糊的虚拟机,可能是一个耗时数周的项目。

VMProtect本身还具有多个不同的VM“原型”。在其他区域,存在一些较简单的VM和混淆程度较高的VM,以及一些重量较重的VM或多层虚拟化。因此,在不了解其他代码混淆技术(控制流平坦化,假谓词和虚拟化)的实际应用的情况下,绝对不是您要处理的项目。