[分享]VMProtect 与 ASProtect 在VC中的SDK编程.
发表于:
2007-1-5 17:26
29138
[分享]VMProtect 与 ASProtect 在VC中的SDK编程.
最近想用VMProtect和ASProtect 的SDK加密一个程序,结果搞了半天没搞成,网上没看到在VC中如何使用VMProtect的SDK加密,于是琢磨了一下,总算成功了,最后有一点点心得,与大家共享,免得还有人跟我一样走弯路。
其实VMProtect和ASProtect的SDK编程都差不多,都是在编程时在语句里面插入一个标记(Marker),然后在加壳时,加壳程序就会认出这些标记,并在有标记的地方进行保护。 我觉得这就是最基本的所谓加壳程序SDK编程吧。
1. VMProtect
新版的VMProtect没看到好用的,所以这里用的VMProtect v1.2。 (有新的好用的请说一声). 编译环境 VS.Net 2003. 主要参考了文章. VMProtect SDK+ASProtect SDK混合编程[代码演示] 作 者: Anskya 链 接: http://bbs.pediy.com/showthread.php?threadid=20317
1.1 保护内部函数
Delphi需要设置Map文件,那VS.Net 2003也需要设置一下,以便产生Map文件,使VMProtect能够识别内部函数,如果没Map文件,VMProtect只能识别导出函数,到时就要自己加函数的地址了.
VS.Net 2003中,打开 "项目 -> project1属性(假设项目名为project1) -> 链接器 -> 调试 -> 生成映射文件", 改成 "是(/MAP)",这样生成程序时会同时生成project1.map文件。 将project1.exe与project1.map 都拷贝到VMProtect程序夹,用VMProtect加密时,添加新的函数时能够列出很多内部函数,这时只需要选择想加密的内部函数就行了。 如果没Map,只有个输入函数地址的输入筐,没有内部函数列表。
这里可以省去有些朋友为了加密某个函数,还要用Ollydbg分析程序,找到函数入口地址,然后输入到VMProtect里面来保护的麻烦。
1.2 保护任意位置代码
在Anskya和那个俄国作者的主页上都只说了Delphi在程序中加入SDK标记。在Delphi 中的标记模式为:
asm
db $EB,$10,'VMProtect begin',0 //标记开始处.
end;
//想保护的程序代码
asm
db $EB,$0E,'VMProtect end',0 //标记结束处.
end;
#include "include\aspr.h"
VOID Test
{
USER_POLYBUFFER
// some code
}
do {
USER_POLYBUFFER
// some code
} while();
// some code
#include "include\aspr.h"
MessageBox(0,"Begin","",0);
#include "include\CppEnvelopeCheck.inc" //可以在任何位置插入这一句话.
MessageBox(0,"End","",0);
BOOL EnvelopeCheck() //这个函数放在程序前面就行了。
{
#include "include\CppEnvelopeCheckFunc.inc"
}
if ( !EnvelopeCheck() ) // .. 邪恶的事情
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!