当谈及VMP(Virtual Machine Protect)源码时,我们必须理解它的基本作用和目的。VMP是一种用于软件保护的虚拟机解决方案,旨在通过虚拟化和加密技术来保护应用程序免受逆向工程和未授权访问的威胁。该源码通常由程序员用于保护其软件免受盗版和未经授权的修改。
1.反逆向工程保护:VMP通过将原始代码转换为虚拟指令,使得对程序的逆向工程变得更加困难。这种虚拟化的指令是自定义的,与真实的指令不同,使得分析者难以理解和还原原始代码逻辑。2.加密保护:VMP能够对程序进行加密,防止未经授权的访问。即使有人能够获取程序文件,但由于其加密特性,无法直接进行代码分析或修改。3.防止调试和修改:VMP还能够检测和阻止程序被调试、修改或篡改,这有助于保护程序的完整性和安全性。4.虚拟机混淆:通过将程序放置在一个虚拟环境中执行,VMP使得攻击者难以理解程序的真实执行逻辑,从而增加了程序的安全性。鉴于源码完整的泄露,里面的引用更加明显了,特别是涉及使用了 GPL(GNU General Public License)协议的DemanglerGnu
,libffi
。(哪怕没源码,你也可以直接找到其中的符号,如图)
(官网最新的Demo版本仍旧有引用,并且这是强依赖)其中有两个以上的GPL,至于具体哪些库涉及了版权问题,自己看图。
在这里吐槽一下VMP的版权声明:
(你为啥不开源呢?此外,对于VMP的版权声明,存在一些争议,特别是在考虑到DemanglerGnu
作为gcc的一部分,以GPL协议开源。GPL协议要求以GPL许可证发布的软件及其派生品,必须也采用GPL协议。因此,VMP源码的一部分可能也需要以GPL协议开放。在VMP中的intel.cc文件,首先对可执行文件进行解析,然后逐一处理其中的函数并进行加密。这个过程涉及PE、ELF和Mac格式的解析,接着生成函数列表并对其进行加密。加密操作是基于函数单位进行的,其中在IntelFunction::Compile函数内部实现了三个不同等级的加密:变异、虚拟和虚拟+变异,这三种加密方式各具特色。众所周知,vmp windows版本默认是没有linux二进制加壳的,默认只有针对so的加壳,基于源码小改便可以进行linux加壳,包括调用其sdk的hwid函数,实现linux下的授权分发,如图:这里是一个Demo,本人仅在本地测试。
使用Golang+Next.Js(Wails)以及CGO链接VMP的Core。
其中il2cpp scanner使用https://github.com/djkaty/Il2CppInspector的重构版本(简单实现一个RPC服务端来与GUI交互)。
(由于偷懒直接用了某游戏UA来测试,offset糊掉以免出事)
就此便是我对源码泄露后的一些个人见解。
本文为本人原创,首次发帖,内容不佳请多多指正。
看雪ID:LIGHTENINGX
https://bbs.kanxue.com/user-home-991182.htm
*本文为看雪论坛优秀文章,由 LIGHTENINGX 原创,转载请注明来自看雪社区
文章来源: https://mp.weixin.qq.com/s?__biz=MjM5NTc2MDYxMw==&mid=2458531256&idx=1&sn=cff7c8038e90dc90c9098be2da3629a7&chksm=b18d053286fa8c24c329a811f1f9c52901b81e2202ed18b85ba5137813d2d04d14cab5072f5f&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh