首页
社区
课程
招聘
[原创] vmp3.5.1 win32 runtime.inc 编译替换注意
发表于: 2025-11-17 09:16 11152

[原创] vmp3.5.1 win32 runtime.inc 编译替换注意

2025-11-17 09:16
11152

之前问过几次,没什么人解答,后来还是自己抽空研究了一下,win32 runtime编译问题。

有不少人按照教程编译,无论是vs2010 vs2008 ,win32runtime编译,生成Inc文件后,加密出来的vmp程序都无法跑。

我之前也提问过,当时时间太仓促 ,没空研究一下。最近回头又碰到了一次,还是自己抽空看了一下。

实际上确实是编译优化的影响。 (当然按文章修改后,还是用vs2010编译 release 32 。其他的我没试过是否OK)

在loader.cc中 有连续的两个 tNtQueryInformationProcess

即使在vs2010/2008下,由于优化被编译成了

mov  eax,fake_func_addr

mov [ebp+xxx] ,eax

....

call  [ebp+xxx]   这样的形式。

这部分runtime地址在最后的代码中是需要重新填充真实的地址的。


在intel.cc  

IntelFunction::ReadFromBuffer

中 有对这个call 进行替换。

vmp期望遇到  

MOV EAX,0XFACE_ID

CALL EAX 这种形式


[培训]《冰与火的战歌:Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。

最后于 2025-11-17 09:29 被IamHuskar编辑 ,原因:
收藏
免费 4
支持
分享
最新回复 (8)
雪    币: 6168
活跃值: (6291)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
直接关闭指定代码区域的优化不就可以了吗?

#pragma optimize( "", off )
  你不需要优化的代码
#pragma optimize( "", on)
2025-11-20 08:53
0
雪    币: 1277
活跃值: (7199)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
3
Mxixihaha 直接关闭指定代码区域的优化不就可以了吗? #pragma optimize( "", off ) 你不需要优化的代码 #pragma optimize( " ...
可能也是一种方案。但是确实没这么没试过。另外这个优化和编译器比较相关。可能不同编译器表现不一样。因为我之前尝试换个地方就好了,所以也没有再过多纠结。我看到有人应该是用asm 汇编 去处理了这里,这种方式应该都不怕编译器影响。
2025-11-21 09:37
0
雪    币: 1277
活跃值: (7199)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
4
Mxixihaha 直接关闭指定代码区域的优化不就可以了吗? #pragma optimize( "", off ) 你不需要优化的代码 #pragma optimize( " ...
反正 问题定位了。怎么改都可以。
2025-11-21 09:43
0
雪    币: 244
活跃值: (857)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
还是不行 按照上面的代码注释掉了 用vs2010编译了  替换进去还是软件跑不起来
2026-4-17 16:24
0
雪    币: 1277
活跃值: (7199)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
6
Cr_Ring 还是不行 按照上面的代码注释掉了 用vs2010编译了 替换进去还是软件跑不起来
原理都讲得比较清楚了。自己对比一下看下编译器是不是有没有替换的的CALL REG类型的。而是优化成别的指令了。这个没什么很复杂的地方。
2026-4-17 18:31
0
雪    币: 244
活跃值: (857)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
IamHuskar 原理都讲得比较清楚了。自己对比一下看下编译器是不是有没有替换的的CALL REG类型的。而是优化成别的指令了。这个没什么很复杂的地方。
就是我这边用vs2010编译出来了 然后也替换了 然后把优化都去掉了 在就是按照大佬你上面的代码注释了   只虚拟代码能跑 但是随便多加一个选项就崩了  被加密程序直接提示SEH异常  跑不起来 是这样的情况
2026-4-17 19:01
0
雪    币: 244
活跃值: (857)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8

现在是这样 我按照大佬你的教程做了现在他是call eax这样但是 eax的值是一个空地址 然后导致被加密程序崩溃了这个不知道是为什么 希望大佬给点建议

2026-4-18 10:49
0
雪    币: 1277
活跃值: (7199)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
9
Cr_Ring 现在是这样 我按照大佬你的教程做了现在他是call eax这样但是 eax的值是一个空地址 然后导致被加密程序崩溃了这个不知道是为什么 希望大佬给点建议
看起来还是有些没有替换成功。IntelFunction::ReadFromBuffer 一块块逻辑看吧。没啥好办法。
2026-4-19 17:48
0
游客
登录 | 注册 方可回帖
返回