首页
社区
课程
招聘
[原创]VMP加节Patch自校验+Patch跳转实现爆破(有码)
发表于: 2013-7-8 21:04 22198

[原创]VMP加节Patch自校验+Patch跳转实现爆破(有码)

2013-7-8 21:04
22198
供小菜愉乐。高手莫要见笑.

测试环境:XP3
测试程序:加密解密三中的CreakeMe。
VMP版本及保护选项如下图所示:


1.Patch Hash值方法如下:具体请看附件。
//------------Hash函数---------------
00551F35    86D5            xchg ch,dl                               ; GetHash
00551F37    8B55 00         mov edx,dword ptr ss:[ebp]               ; ---获得首地址
00551F3A    60              pushad
00551F3B    83C5 04         add ebp,0x4                              ; *
00551F3E    F7D1            not ecx
00551F40    FECD            dec ch
00551F42    30D5            xor ch,dl
00551F44    31C0            xor eax,eax
00551F46    83EC E0         sub esp,-0x20
00551F49    80F5 F3         xor ch,0xF3
00551F4C    66:0FBDCF       bsr cx,di
00551F50    C0E5 06         shl ch,0x6
00551F53    66:39DE         cmp si,bx
00551F56    89C1            mov ecx,eax
00551F58    F8              clc
00551F59    C1E0 07         shl eax,0x7
00551F5C    9C              pushfd
00551F5D    F5              cmc
00551F5E    C1E9 19         shr ecx,0x19
00551F61    9C              pushfd
00551F62    09C8            or eax,ecx
00551F64    9C              pushfd
00551F65    880424          mov byte ptr ss:[esp],al
00551F68    60              pushad
00551F69    3202            xor al,byte ptr ds:[edx]                 ; -----计算
00551F6B    E8 4C020000     call Test_VMP.005521BC

005521BC    9C              pushfd
005521BD    9C              pushfd
005521BE    42              inc edx                                  ; ---- 地址向后移一个字节
005521BF    E9 950F0000     jmp Test_VMP.00553159

00553159    9C              pushfd
0055315A    FF4D 00         dec dword ptr ss:[ebp]                   ; ---- 长度减一
0055315D  ^ E9 9CF2FFFF     jmp Test_VMP.005523FE

005523FE    8D6424 3C       lea esp,dword ptr ss:[esp+0x3C]
00552402  ^ 0F85 41FBFFFF   jnz Test_VMP.00551F49
00552408    50              push eax                                 ; -----计算后的结果
00552409    E8 B3210000     call Test_VMP.005545C1

005545C1    8D6424 08       lea esp,dword ptr ss:[esp+0x8]
005545C5  ^ 0F88 8BE4FFFF   js Test_VMP.00552A56                     ; ----------在这里设置异常 (修改要Patch Hash值)
005545CB    54              push esp
005545CC    8945 00         mov dword ptr ss:[ebp],eax               ; ------- 保存计算后的值(修改eax的值就可以了)
005545CF    880424          mov byte ptr ss:[esp],al
005545D2    FF3424          push dword ptr ss:[esp]
005545D5    60              pushad
005545D6    9C              pushfd
005545D7    8D6424 2C       lea esp,dword ptr ss:[esp+0x2C]
005545DB  ^ E9 EDDCFFFF     jmp Test_VMP.005522CD


2.Patch 跳转实现爆破方法如下:具体请看附件
//判断是否解码了,然后开始Patch
_declspec (naked) VOID My_VirtualProtect(
										 LPVOID lpAddress,       // region of committed pages
										 SIZE_T dwSize,          // size of the region
										 DWORD flNewProtect,     // desired access protection
										 PDWORD lpflOldProtect   // old protection
										 )
{
	

	__asm
	{
		cmp dword ptr ss:[esp+0x4],0X00401000
		jz L1
		JNZ continu
L1:
		cmp dword ptr ss:[esp+0xC],PAGE_EXECUTE_READ
		JZ FindSucc
		JNZ continu


	}



continu:	
	__asm
	{
		
		mov edi,edi
		push ebp
		mov ebp,esp
		jmp g_OldAddressNext_VirtualProtect
	}

FindSucc:
		if (0X85 == *(BYTE*)0X004011A8 )
		{
				MessageBox(NULL,"找到特证码1 ", "(^_^)" ,MB_OK);
				*(BYTE*)0X004011A8 = 0X84;//修改为Je
		}
		if (0X85 == *(BYTE*)0X004011B6 )
		{
			MessageBox(NULL,"找到特证码2 ", "(^_^)" ,MB_OK);
			*(BYTE*)0X004011B6 = 0X84;//修改为Je
		}
		if (0X85 == *(BYTE*)0X004011C0 )
		{
			MessageBox(NULL,"找到特证码3 ", "(^_^)" ,MB_OK);
			*(BYTE*)0X004011C0 = 0X84;//修改为Je
		}
		if (0X85 == *(BYTE*)0X004011CA )
		{
			MessageBox(NULL,"找到特证码4 ", "(^_^)" ,MB_OK);
			*(BYTE*)0X004011CA = 0X84;//修改为Je
		}

		if (0X75 == *(BYTE*)0X0040127D )
		{
			MessageBox(NULL,"找到特证码5 ", "(^_^)" ,MB_OK);
			*(BYTE*)0X0040127D = 0X74;//修改为Je
			goto continu;  //修改完后让它继续执行
		}

	
	
}


3.成功后如下图所示 :



src.zip
Bin.zip

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 6
支持
分享
最新回复 (19)
雪    币: 19
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
mark 学习下
2013-7-8 22:38
0
雪    币: 6366
活跃值: (4336)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
3
感谢分享,很需要
2013-7-8 22:49
0
雪    币: 44229
活跃值: (19965)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
4
crackme看得好熟悉,鼓励一下
2013-7-8 22:51
0
雪    币: 3902
活跃值: (5940)
能力值: ( LV13,RANK:550 )
在线值:
发帖
回帖
粉丝
5
多谢老大哈。。
2013-7-8 22:57
0
雪    币: 143
活跃值: (263)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
6
支持 一个 提两个问题
1 程序运行以后 ,vmp  是不会有 内存校验的,使用loader即可
2 添加了区段 ,说明你这个 vmp 没有文件校验啊 , 这不科学...

文件校验 是应该多段 ,依次校验的 ,反正是没有看到
2013-7-8 23:54
0
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
7
这就是VMP SDK用的不好的结果...
没大量使用VMProtectIsValidImageCRC
和LockByKey的结果。
2013-7-9 08:32
0
雪    币: 1042
活跃值: (470)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
VMP有文件检测的说~
2013-7-9 08:55
0
雪    币: 143
活跃值: (263)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
9
嗯,有时间再研究一下 vmp的 文档

大蛇丸和五影 不上战场 , 还要 继续打酱油吗
2013-7-9 09:33
0
雪    币: 3343
活跃值: (1243)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
10
丫 头像换了?
2013-7-9 16:34
0
雪    币: 143
活跃值: (263)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
11
还是换了吧 , 免得 大家又跑题了 ,不好  
2013-7-9 17:19
0
雪    币: 219
活跃值: (738)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
12
mark~~
2013-7-10 00:07
0
雪    币: 433
活跃值: (1895)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
13
楼主ID让我含泪
2013-7-10 10:06
0
雪    币: 264
活跃值: (85)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
mark......
2013-7-19 21:32
0
雪    币: 218
活跃值: (228)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
大蛇丸老师犀利
2013-7-20 09:59
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
如果打上检测调试器选项不行。
2013-7-24 02:06
0
雪    币: 157
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
这个vmp 校检我碰到双效验的,不是一个地方效验,我是超级新手,求助呀
2013-10-23 14:09
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
AddVectoredExceptionHandler' : undeclared identifier
编译出错???
2013-11-1 02:25
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
19
路过来看看,不明觉厉
2013-11-1 02:35
0
雪    币: 18
活跃值: (117)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
mark.........
2013-11-12 11:15
0
游客
登录 | 注册 方可回帖
返回
//