[file name]: show.html [file content begin]
**之前我写过一个给x86程序添加vmp授权的工具**
**这次用工具实现x64的vmp授权**
**用到的工具 x64dbg CFFExplorer VMProtect**[00]
首先准备一个test.exe的程序 和 VMProtectSDK64.dll。
VMProtectSDK64.dll一般在vmp的Lib\Windows目录下。
[01]
用CFFExplorer 添加导入函数 VMProtectSetSerialNumber 步骤如下图 按名称或者序号导入都可以。
[02]
添加一个区段,名为Skey,大小设置成0x1000,区段属性要改成可读可写可执行。
[03]
把可选头的成员AddressOfEntryPoint 的值改成区段Skey的虚拟地址后保存出新EXE。
[04]
在x64dbg的引擎设置里把禁用ASLR勾选。
[05]
找到VMProtectSetSerialNumber地址,找出原程序oep备份出来。
[06]
把新new_test.exe拖入x64dbg 添加代码如下图,然后补丁出来
这行汇编的意思是获取当前进程PEB指针,然后从peb+0x500读取到key的指针。
这样做的的用途是到时候可以通过自己写的dll 在dll里面写vmp机器码获取那些操作。
从dll获取到的key指针写到peb+0x500处,用来setkey
peb+0x500这个地址虽然目前看来没用被使用,但仍不建议用这个地址来传参。
VMProtectSetSerialNumber(const char * SerialNumber)
在x64里 fastcall的首参rcx,所以这里我就直接使用rcx作为参数了。
call qword ptr ds:[<VMProtectSetSerialNumber>]
这里x64与x86不同,x64的寻址是相对寻址,所以我只需要在x64dbg中找到VMProtectSetSerialNumber call[]一下即可。
[07]
添加了代码的新程序拖入vmp,把原程序的OEP的锁定序列号选是,初始化授权。
[08]
加密出来的exe在mov rcx, qword ptr ds:[rcx+0x500]处下断点。
随便放个指针进去,指针里存放vmpkey 然后单步走过vmsetkey,结果为0表示成功。
跑起程序顺利通过vmplockcode。
[09]
大致流程就是这样,和x86差不多,也是在dll里来获取机器码,然后读取key。
key读取到之后传入peb0x500这样。
虽然现在的vmp授权已经极不安全了,可以实现无key Keygen了,但未来vmp可能会修复这些漏洞。
授权的可塑性还是很强的。
dll获取机器码和获取key那些比较简单,我就不写了,之前的x86的代码也可以套用,最后写好后还是用vmp的dllbox绑定到exe上即可。
按照这个流程写一个工具也是可以的。