能力值:
( LV7,RANK:100 )
|
-
-
2 楼
看个大概吧.理解就行.代码很挫哦.
FILE * fp; char serial[4096]; fp = fopen("key.key","rb"); if (fp) { fread(serial,1,ftell(fp), fp); fclose(fp); int res = VMProtectSetSerialNumber(serial); if (res) { MessageBox(NULL,NULL,NULL,NULL); } } else { int nSize = VMProtectGetCurrentHWID(NULL, 0); char *buf = new char[nSize]; VMProtectGetCurrentHWID(buf, nSize); MessageBox(NULL, buf,NULL, NULL); delete [] buf; }
return 0;
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
多谢,多谢,关键还不知怎么操作流程,代码可以网上找得到
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
vmp对文件校验有三种方式:
1,文件校验
2,内存校验
3,解码校验
第一种就是map一下文件 然后对文件的几个区域进行校验,一般是四个
第二种也比较好理解,就是针对壳代码段的代码进行校验,以对抗内存断点和内存patch,这个校验的区域视壳代码大小而定
第三种就是在把原程序解压以后 对解码后的程序代码和数据进行校验,防止内存补丁对原程序的修改
这样三种校验在很大程度上防范了程序被破解和修改。但还是有漏洞的,这里就介绍一下如何过掉这些校验。
先说下文件校验:
之前也有人写个相关的教程说如何过掉文件校验,最简单的方法就是把输入表中的GetModuleFileNameW改成GetModuleFileNameA 这样使得VMP无法获取文件路径,接着后面CreateFileW返回的自然也就是-1,这样文件校验就可以过去了。不过这个方法到后期的版本貌似是不管用了。这里我介绍一个统一的方法。
进行这三种校验handler是GetHash这个handler,可以用fkvmp找到。
这个handler的主要功能就是对一段给定大小和起始地址的数据进行自定义的hash运算。 得到的结果在虚拟机里面进行比较。
除去文件校验以外,其他两种校验因为涉及到区域比较多,所以均在程序里面对应一个表,这个表包含多个大小为0xC的结构:
+0 RVA
+4 size
+8 hash
这个表是经过加密的,使用的时候在虚拟机里面逐个解密,http://www.sytm.net/jiejuefangan/这个表就是我们的突破口。
在进行校验的时候,程序会循环读取这个表的内容,解码后进行校验。这样就意味着有一个循环变量来指示循环的结束,也就是这个表的大小。幸运的是,vmp在进行后面两次校验之前会首先校验其对应的hash表 来保证hash表的合法性,这就给了我们机会找到这个表的位置和大小。
值得注意是:在内存校验的时候,循环变量用的是表项数,也就是表的大小/0xC, 而文件校验的时候使用的是这个表的大小
知道表的位置和大小了,就可以处理了,主要有两个思路:
1,把hash表的每一项都改成相同的,也就是让程序一直在校验同一个地方。然后再修改下gethash这个handler,让他在校验hash表的时候返回正确的值即可。
2,找到循环变量,把变量改成最小值,让程序以为已经读完整个表,继而结束校验。
这两种思路都是可行的,视频只演示一下第二种方法。
下载地址:
http://115.com/file/e6evhq98#%E8%BF%87%E6%A0%A1%E9%AA%8C.rar
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
vmprotect主要还是加密,一机一码找zp或者se
|
|
|