求助对VMP有深入研究的大佬
问,为什么我VM不了一段汇编指令,是什么原因导致的,又该如何解决?请给出解决方案。具体请看附件:
https://cowtransfer.com/s/b37d3b73ba2e4a 楼主可以试试先把文件偏移0x200处的数据改成 00 C2 04 00 存盘 vm完之后再改回去 94 C0 04 00 就行了 本帖最后由 xiaoy 于 2023-8-22 22:57 编辑
DELPHI的话直接代码里面加SDK不行么?
procedure SetHook;
begin
VMProtectBegin('Hook');
//代码
VMProtectEnd;
end;
ASM代码的话
asm
db $EB,$10,'VMProtect begin',0 //标记开始处.
end;
//想保护的程序代码
asm
db $EB,$0E,'VMProtect end',0 //标记结束处.
end; 你用的是vmp最新版吗? xiaoy 发表于 2023-8-22 22:52
DELPHI的话直接代码里面加SDK不行么?
procedure SetHook;
begin
delphi试炼程序是成品,就是说,在已有成品中把这段汇编VM起来。不是在源码上加。 额 不知道为什么 vmp在识别CODE段的时候 少了0x16C个字节,所以那一段地址被vmp当成未知区域了 加了壳跑不起来的。 绿雪羚羊 发表于 2023-8-22 23:47
楼主可以试试先把文件偏移0x200处的数据改成 00 C2 04 00 存盘 vm完之后再改回去 94 C0 04 00 就行了
经测试,的确可以啊,问下大佬,为什么会出现VM提示无效地址,修改成94 C0 04 00再VM就行了呢,这个94 C0 04 00代表什么意思,而且修改成还能运行起来,一般情况下修改程序,肯定程序崩溃啊,结果并没有崩溃。请大佬解惑。 朱朱你堕落了 发表于 2023-8-28 11:36
经测试,的确可以啊,问下大佬,为什么会出现VM提示无效地址,修改成94 C0 04 00再VM就行了呢,这个94 C0 ...
我简单的解释一下吧,附件里对应的0x200的位置是该PE文件中 .text 段未进行内存对齐的大小(VirtualSize),这里是小端,所以其实是 0x4C094
这个大小我的理解是 在.text段中 可执行代码的大小,而不是.text段整体边界的大小(SizeofRawData),那么大小就是0x4C200。
附件中的例子应该是delphi程序吧,这个我就不懂了,得请教这方面的大佬,
不知道为啥编译器会往 SizeofRawDate - VirtualSize 这段区间内写入可执行代码,
而vmp保护工具恰巧是以VirtualSize为基准的,那多出去的部分自然就识别不了了,于是就手动调整一下范围帮助vmp去识别。 https://www.52pojie.cn/forum.php?mod=viewthread&tid=1829115&page=1#pid47875906
我的也搞不定了能看看吗
页:
[1]