首页
社区
课程
招聘
[原创]无源码给软件添加VMP硬件授权
2019-2-26 02:26 16142

[原创]无源码给软件添加VMP硬件授权

2019-2-26 02:26
16142

1.简介:

无源码给软件添加VMP授权 。思路与工具来自这里https://bbs.pediy.com/thread-204563.htm。参考了大神的思路。借用了这个文件的代码段。
用到函数如下,有部分函数文件里没有,那就全部添加了吧。也可以查软件里面包含哪个函数,如果都有的话,只添加VMProtectSDK32.dllVMProtectGetCurrentHWID     VMProtectSetSerialNumber两个就好。
用到函数如下 :

VMProtectSDK32.VMPro>; VMProtec. VMProtectSetSerialNumber

VMProtectSDK32.VMPro>; VMProtec.VMProtectGetCurrentHWID

USER32.CloseClipboar>; user32.CloseClipboard

user32.EmptyClipboar>; user32.EmptyClipboard

user32.MessageBoxA>] ; user32.MessageBoxA

USER32.OpenClipboard>; user32.OpenClipboard

user32.SetClipboardD>; user32.SetClipboardData

kernel32.ExitProcess>; kernel32.ExitProcess

kernel32.GlobalAlloc>; kernel32.GlobalAlloc

KERNEL32.GlobalLock>>; kernel32.GlobalLock

KERNEL32.GlobalUnloc>; kernel32.GlobalUnlock



2.注意事项:
测试发现,要先添加空区段再添加输入表函数,如果空区段添加在最后,各种问题就来了。如果仔细看就发现新的OEP了,需要修正的内存地址都注释了。检测机器码的代码要写在检测授权文件代码之前,也就是说新区段起始位置要先写入第二段代码。否则走完检测授权的代码后某个内存地址会被修改,从而导致出错。我是写在新添加的区段起始位置了。


3.开工吧!检测授权文件

第一段代码,读取注册文件及内容,有则跳向VMP壳授权校验代码,没有注册文件及内容则跳向下一段取硬件码。

利用GetPrivateProfileStringA 取授权字符, VMProtectSetSerialNumber检测授权文件存在与否

可以偷懒二进制粘贴上,再修改

第一段代码十六进制:

33 C9 64 A1 30 00 00 00 8B 40 0C 8B 70 1C 8B 46 08 8B 7E 20 8B 36 66 39 4F 18 75 F2 8B D0 8B 423C 8B 44 10 78 03 C2 8B 70 20 03 F2 68 73 73 00 00 68 64 64 72 65 68 72 6F 63 41 68 47 65 74 5054 33 C9 8B 3E 03 FA 56 8B 74 24 04 51 B9 0F 00 00 00 F3 A6 74 0B 59 5E 83 C6 04 41 3B 48 18 72E2 59 8B 70 24 03 F2 0F B7 0C 4E 8B 70 1C 03 F2 8B 34 8E 03 F2 8B FA 6A 00 68 61 72 79 41 68 4C69 62 72 68 4C 6F 61 64 54 52 FF D6 E8 0D 00 00 00 6B 65 72 6E 65 6C 33 32 2E 64 6C 6C 00 5B 53FF D0 E8 19 00 00 00 47 65 74 50 72 69 76 61 74 65 50 72 6F 66 69 6C 65 53 74 72 69 6E 67 41 005B 53 50 FF D6 E8 0A 00 00 00 2E 5C 4B 65 79 2E 64 61 74 00 5B 53 68 56 02 00 00 E8 00 00 00 005B 83 C3 50 53 6A 00 E8 04 00 00 00 4C 69 63 00 5B 53 E8 09 00 00 00 CA DA C8 A8 CE C4 BC FE 005B 53 FF D0 8B 44 24 F4 E8 07 00 00 00 90 FF 25 48 10 82 00 80 38 00 0F 84 5D FE FF FF 5B 50 FFD3 68 BC 38 5C 00 C3


汇编代码如下:


0081E150 >/$  33C9          xor ecx,ecx                                                                //新的OEP

0081E152  |.  64:A1 3000000>mov eax,dword ptr fs:[0x30]

0081E158  |.  8B40 0C       mov eax,dword ptr ds:[eax+0xC]

0081E15B  |.  8B70 1C       mov esi,dword ptr ds:[eax+0x1C]

0081E15E  |>  8B46 08       /mov eax,dword ptr ds:[esi+0x8]

0081E161  |.  8B7E 20       |mov edi,dword ptr ds:[esi+0x20]

0081E164  |.  8B36          |mov esi,dword ptr ds:[esi]

0081E166  |.  66:394F 18    |cmp word ptr ds:[edi+0x18],cx

0081E16A  |.^ 75 F2         \jnz short ZZZX.0081E15E

0081E16C  |.  8BD0          mov edx,eax

0081E16E  |.  8B42 3C       mov eax,dword ptr ds:[edx+0x3C]

0081E171  |.  8B4410 78     mov eax,dword ptr ds:[eax+edx+0x78]

0081E175  |.  03C2          add eax,edx

0081E177  |.  8B70 20       mov esi,dword ptr ds:[eax+0x20]

0081E17A  |.  03F2          add esi,edx

0081E17C  |.  68 73730000   push 0x7373

0081E181  |.  68 64647265   push 0x65726464

0081E186  |.  68 726F6341   push 0x41636F72

0081E18B  |.  68 47657450   push 0x50746547

0081E190  |.  54            push esp

0081E191  |.  33C9          xor ecx,ecx

0081E193  |>  8B3E          /mov edi,dword ptr ds:[esi]

0081E195  |.  03FA          |add edi,edx

0081E197  |.  56            |push esi

0081E198  |.  8B7424 04     |mov esi,dword ptr ss:[esp+0x4]

0081E19C  |.  51            |push ecx

0081E19D  |.  B9 0F000000   |mov ecx,0xF

0081E1A2  |.  F3:A6         |repe cmps byte ptr es:[edi],byte ptr ds>

0081E1A4  |.  74 0B         |je short ZZZX.0081E1B1

0081E1A6  |.  59            |pop ecx

0081E1A7  |.  5E            |pop esi

0081E1A8  |.  83C6 04       |add esi,0x4

0081E1AB  |.  41            |inc ecx

0081E1AC  |.  3B48 18       |cmp ecx,dword ptr ds:[eax+0x18]

0081E1AF  |.^ 72 E2         \jb short ZZZX.0081E193

0081E1B1  |>  59            pop ecx

0081E1B2  |.  8B70 24       mov esi,dword ptr ds:[eax+0x24]

0081E1B5  |.  03F2          add esi,edx

0081E1B7  |.  0FB70C4E      movzx ecx,word ptr ds:[esi+ecx*2]

0081E1BB  |.  8B70 1C       mov esi,dword ptr ds:[eax+0x1C]

0081E1BE  |.  03F2          add esi,edx

0081E1C0  |.  8B348E        mov esi,dword ptr ds:[esi+ecx*4]

0081E1C3  |.  03F2          add esi,edx

0081E1C5  |.  8BFA          mov edi,edx

0081E1C7  |.  6A 00         push 0x0

0081E1C9  |.  68 61727941   push 0x41797261

0081E1CE  |.  68 4C696272   push 0x7262694C

0081E1D3  |.  68 4C6F6164   push 0x64616F4C

0081E1D8  |.  54            push esp

0081E1D9  |.  52            push edx

0081E1DA  |.  FFD6          call esi

0081E1DC  |.  E8 0D000000   call ZZZX.0081E1EE                       ;  PUSH ASCII "kernel32.dll"

0081E1E1  |.  6B 65 72 6E 6>ascii "kernel32.dll",0

0081E1EE  |>  5B            pop ebx

0081E1EF  |.  53            push ebx

0081E1F0  |.  FFD0          call eax

0081E1F2  |.  E8 19000000   call ZZZX.0081E210                       ;  PUSH ASCII "GetPrivateProfileStringA"

0081E1F7  |.  47 65 74 50 7>ascii "GetPrivateProfil"

0081E207  |.  65 53 74 72 6>ascii "eStringA",0

0081E210  |>  5B            pop ebx

0081E211  |.  53            push ebx

0081E212  |.  50            push eax

0081E213  |.  FFD6          call esi

0081E215  |.  E8 0A000000   call ZZZX.0081E224                       ;  PUSH ASCII ".\Key.dat"

0081E21A  |.  2E 5C 4B 65 7>ascii ".\Key.dat",0

0081E224  |>  5B            pop ebx

0081E225  |.  53            push ebx

0081E226  |.  68 56020000   push 0x256

0081E22B  |.  E8 00000000   call ZZZX.0081E230

0081E230  |$  5B            pop ebx

0081E231  |.  83C3 50       add ebx,0x50

0081E234  |.  53            push ebx

0081E235  |.  6A 00         push 0x0

0081E237  |.  E8 04000000   call ZZZX.0081E240                       ;  PUSH ASCII "Lic"

0081E23C  |.  4C 69 63 00   ascii "Lic",0

0081E240  |>  5B            pop ebx

0081E241  |.  53            push ebx

0081E242  |.  E8 09000000   call ZZZX.0081E250

0081E247  \.  CA DAC8       retf 0xC8DA

0081E24A      A8            db A8

0081E24B   .  CE C4 BC FE 0>ascii "文件",0

0081E250   $  5B            pop ebx                                  ;  ZZZX.0081E247

0081E251   .  53            push ebx

0081E252   .  FFD0          call eax

0081E254   .  8B4424 F4     mov eax,dword ptr ss:[esp-0xC]

0081E258   .  E8 07000000   call ZZZX.0081E264

0081E25D   .  90            nop

0081E25E   .- FF25 48108200 jmp dword ptr ds:[<&VMProtectSDK32.VMPro>;  //修正此处 地址处call VMProtectSetSerialNumber 

0081E264   $  8038 00       cmp byte ptr ds:[eax],0x0                                            //取授权文件字符串第一个字符比较,如果是零则下面跳向硬件码弹窗。

 0081E267   .^ 0F84 5DFEFFFF je ZZZX.0081E0CA                                          // 跳向硬件码弹窗 MARK_4:

0081E26D   .  5B            pop ebx

0081E26E   .  50            push eax

0081E26F   .  FFD3          call ebx

0081E271   .  68 BC385C00   push ZZZX. 0x88888888                                           // 返回OEP                            

0081E276   .  C3            retn




4.获取硬件码:
第二段代码依旧是抄的,也可以自己编译。VMP帮助

Step 1.9: Hardware lock有使用方法。编译好了把代码段取出来

VMProtectGetCurrentHWID 取的硬件码

HWID: myhwid

偷懒一下,二进制粘贴也可以:


8B 44 24 04 6A 00 C7 00 00 00 00 00 E8 19 01 00 00 85 C0 74 65 53 55 56 57 E8 00 01 00 00 8B 7424 1C 83 C9 FF 33 C0 8B 3E F2 AE F7 D1 49 8B E9 45 55 6A 42 E8 03 01 00 00 8B D8 85 DB 74 32 8B36 53 E8 FB 00 00 00 8B CD 8B F8 8B D1 53 C1 E9 02 F3 A5 8B CA 83 E1 03 F3 A4 E8 E9 00 00 00 536A 01 E8 C9 00 00 00 8B 44 24 14 C7 00 01 00 00 00 E8 A2 00 00 00 5F 5E 5D 5B C3 90 8D 44 24 0883 EC 0C 50 FF 74 24 14 33 C0 89 44 24 08 89 44 24 0C 89 44 24 10 8D 54 24 08 52 FF D3 8B 44 240C 8B 54 24 10 8B 4C 24 14 83 C4 18 C3 55 8B EC 68 04 00 00 80 6A 00 FF 75 08 6A 01 BB 00 E0 8100 E8 B6 FF FF FF C9 C2 04 00 6A 00 6A 00 E8 3F 00 00 00 83 F8 00 74 1F A3 B0 E4 81 00 FF 35 B0E4 81 00 68 33 E3 81 00 E8 25 00 00 00 68 33 E3 81 00 E8 B6 FF FF FF 6A 00 68 66 E6 81 00 68 33E3 81 00 6A 00 E8 1A 00 00 00 6A 00 E8 25 00 00 00 CC FF 25 4C 10 82 00 FF 25 E8 86 81 00 FF 258C 86 81 00 FF 25 C4 80 81 00 FF 25 1C 85 81 00 FF 25 CC 84 81 00 FF 25 7C 80 81 00 FF 25 C8 8181 00 FF 25 B8 81 81 00 FF 25 A8 81 81 00



汇编代码如下:

MARK_1:

0081E000   .  8B4424 04     mov eax,dword ptr ss:[esp+0x4]                                          //这段应该是 复制机器码到剪贴版。如果不对大神请指正。

0081E004   .  6A 00         push 0x0                                 ; /hWnd = NULL

0081E006   .  C700 00000000 mov dword ptr ds:[eax],0x0               ; |

0081E00C   .  E8 19010000   call <jmp.&user32.OpenClipboard>         ; \OpenClipboard //修正此处函数地址

0081E011   .  85C0          test eax,eax

0081E013   .  74 65         je short ZZZX.0081E07A

0081E015   .  53            push ebx

0081E016   .  55            push ebp

0081E017   .  56            push esi

0081E018   .  57            push edi

0081E019   .  E8 00010000   call <jmp.&user32.EmptyClipboard>        ; [EmptyClipboard    //修正此处函数地址

0081E01E   .  8B7424 1C     mov esi,dword ptr ss:[esp+0x1C]

0081E022   .  83C9 FF       or ecx,-0x1

0081E025   .  33C0          xor eax,eax

0081E027   .  8B3E          mov edi,dword ptr ds:[esi]

0081E029   .  F2:AE         repne scas byte ptr es:[edi]

0081E02B   .  F7D1          not ecx

0081E02D   .  49            dec ecx

0081E02E   .  8BE9          mov ebp,ecx

0081E030   .  45            inc ebp

0081E031   .  55            push ebp                                 ; /MemSize

0081E032   .  6A 42         push 0x42                                ; |Flags = GHND

0081E034   .  E8 03010000   call <jmp.&kernel32.GlobalAlloc>         ; \GlobalAlloc                 //修正此处函数地址

0081E039   .  8BD8          mov ebx,eax

0081E03B   .  85DB          test ebx,ebx

0081E03D   .  74 32         je short ZZZX.0081E071

0081E03F   .  8B36          mov esi,dword ptr ds:[esi]

0081E041   .  53            push ebx                                 ; /hMem

0081E042   .  E8 FB000000   call <jmp.&kernel32.GlobalLock>          ; \GlobalLock                 //修正此处函数地址

0081E047   .  8BCD          mov ecx,ebp

0081E049   .  8BF8          mov edi,eax

0081E04B   .  8BD1          mov edx,ecx

0081E04D   .  53            push ebx                                 ; /hMem

0081E04E   .  C1E9 02       shr ecx,0x2                              ; |

0081E051   .  F3:A5         rep movs dword ptr es:[edi],dword ptr ds>; |

0081E053   .  8BCA          mov ecx,edx                              ; |

0081E055   .  83E1 03       and ecx,0x3                              ; |

0081E058   .  F3:A4         rep movs byte ptr es:[edi],byte ptr ds:[>; |

0081E05A   .  E8 E9000000   call <jmp.&kernel32.GlobalUnlock>        ; \GlobalUnlock                   //修正此处函数地址

0081E05F   .  53            push ebx                                 ; /hData

0081E060   .  6A 01         push 0x1                                 ; |Format = CF_TEXT

0081E062   .  E8 C9000000   call <jmp.&user32.SetClipboardData>      ; \SetClipboardData            //修正此处函数地址

0081E067   .  8B4424 14     mov eax,dword ptr ss:[esp+0x14]

0081E06B   .  C700 01000000 mov dword ptr ds:[eax],0x1

0081E071   >  E8 A2000000   call <jmp.&user32.CloseClipboard>        ; [CloseClipboard                  //修正此处函数地址

0081E076   .  5F            pop edi

0081E077   .  5E            pop esi

0081E078   .  5D            pop ebp

0081E079   .  5B            pop ebx

0081E07A   >  C3            retn

---------------------------------------------------------------------------------------优雅分割线----------------------------------------------------------------------------------------------------

MARK_2:

0081E07B      90            nop

0081E07C  /$  8D4424 08     lea eax,dword ptr ss:[esp+0x8]

0081E080  |.  83EC 0C       sub esp,0xC

0081E083  |.  50            push eax

0081E084  |.  FF7424 14     push dword ptr ss:[esp+0x14]

0081E088  |.  33C0          xor eax,eax

0081E08A  |.  894424 08     mov dword ptr ss:[esp+0x8],eax

0081E08E  |.  894424 0C     mov dword ptr ss:[esp+0xC],eax

0081E092  |.  894424 10     mov dword ptr ss:[esp+0x10],eax

0081E096  |.  8D5424 08     lea edx,dword ptr ss:[esp+0x8]

0081E09A  |.  52            push edx

0081E09B  |.  FFD3          call ebx                                                  //EBX地址指向0081E000, MARK_1:            

0081E09D  |.  8B4424 0C     mov eax,dword ptr ss:[esp+0xC]

0081E0A1  |.  8B5424 10     mov edx,dword ptr ss:[esp+0x10]

0081E0A5  |.  8B4C24 14     mov ecx,dword ptr ss:[esp+0x14]

0081E0A9  |.  83C4 18       add esp,0x18

0081E0AC  \.  C3            retn

---------------------------------------------------------------------------------------优雅分割线----------------------------------------------------------------------------------------------------

MARK_3:

0081E0AD  /$  55            push ebp

0081E0AE  |.  8BEC          mov ebp,esp

0081E0B0  |.  68 04000080   push 0x80000004

0081E0B5  |.  6A 00         push 0x0

0081E0B7  |.  FF75 08       push [arg.1]

0081E0BA  |.  6A 01         push 0x1

0081E0BC  |.  BB 00E08100   mov ebx,ZZZX.0081E000                                             //修正此处地址指向 0081E000 也就是 MARK_1: 。

0081E0C1  |.  E8 B6FFFFFF   call ZZZX.0081E07C                                                   //修正此处地址指向 0081E07B   , CALL MARK_2:

0081E0C6  |.  C9            leave

0081E0C7  \.  C2 0400       retn 0x4

---------------------------------------------------------------------------------------优雅分割线----------------------------------------------------------------------------------------------------

MARK_4:

0081E0CA   >  6A 00         push 0x0

0081E0CC   .  6A 00         push 0x0

0081E0CE   .  E8 3F000000   call <jmp.&VMProtectSDK32.VMProtectGetCu>                       //修正此处函数地址

0081E0D3   .  83F8 00       cmp eax,0x0

0081E0D6   .  74 1F         je short ZZZX.0081E0F7

0081E0D8   .  A3 B0E48100   mov dword ptr ds:[0x81E4B0],eax                                              //此处内存指向零区,同时修正下面的常量也指向零区

0081E0DD   .  FF35 B0E48100 push dword ptr ds:[0x81E4B0]

0081E0E3   .  68 33E38100   push ZZZX.0081E333                                                                  //修正此处地址批向零区,注意下面有三处是一样的VA  此处标记为1
0081E0E8   .  E8 25000000   call <jmp.&VMProtectSDK32.VMProtectGetCu>                          //修正此处函数地址

0081E0ED   .  68 33E38100   push ZZZX.0081E333                                                                    //修正此处地址批向零区,注意下面有三处是一样的VA  此处标记为2

0081E0F2   .  E8 B6FFFFFF   call ZZZX.0081E0AD                                                                     //修正 地址调用 MARK_3:

0081E0F7   >  6A 00         push 0x0                                 ; /Style = MB_OK|MB_APPLMODAL

0081E0F9   .  68 66E68100   push ZZZX.0081E666                       ; |Title = "中国飘云阁"              //修正此处地址批向任意零区,弹窗标题内容,可以自定义

0081E0FE   .  68 33E38100   push ZZZX.0081E333                       ; |Text = ""                                //修正此处地址批向零区,注意下面有三处是一样的VA  此处标记为3

0081E103   .  6A 00         push 0x0                                 ; |hOwner = NULL

0081E105   .  E8 1A000000   call <jmp.&user32.MessageBoxA>           ; \MessageBoxA             //修正此处函数地址

0081E10A   .  6A 00         push 0x0                                 ; /ExitCode = 0x0

0081E10C   .  E8 25000000   call <jmp.&kernel32.ExitProcess>         ; \ExitProcess                    //修正此处函数地址

0081E111      CC            int3

0081E112   $- FF25 4C108200 jmp dword ptr ds:[<&VMProtectSDK32.VMPro>;  VMProtec.VMProtectGetCurrentHWID   //修正此处函数地址

0081E118   $- FF25 E8868100 jmp dword ptr ds:[<&user32.CloseClipboar>;  user32.CloseClipboard                                  //修正此处函数地址

0081E11E   $- FF25 8C868100 jmp dword ptr ds:[<&user32.EmptyClipboar>;  user32.EmptyClipboard

0081E124   $- FF25 C4808100 jmp dword ptr ds:[<&user32.MessageBoxA>] ;  user32.MessageBoxA                                 //修正此处函数地址

0081E12A   $- FF25 1C858100 jmp dword ptr ds:[<&user32.OpenClipboard>;  user32.OpenClipboard                                  //修正此处函数地址

0081E130   $- FF25 CC848100 jmp dword ptr ds:[<&user32.SetClipboardD>;  user32.SetClipboardData                              //修正此处函数地址

0081E136   .- FF25 7C808100 jmp dword ptr ds:[<&kernel32.ExitProcess>;  kernel32.ExitProcess                                        //修正此处函数地址

0081E13C   $- FF25 C8818100 jmp dword ptr ds:[<&kernel32.GlobalAlloc>;  kernel32.GlobalAlloc                                         //修正此处函数地址

0081E142   $- FF25 B8818100 jmp dword ptr ds:[<&kernel32.GlobalLock>>;  kernel32.GlobalLock                                         //修正此处函数地址

0081E148   $- FF25 A8818100 jmp dword ptr ds:[<&kernel32.GlobalUnloc>;  kernel32.GlobalUnlock                                       //修正此处函数地址



补充:
取硬件码需要修复的位置太多了,修改了一下代码,实现自动填写几处硬编码
注意:不要随意调换代码顺序。检测授权的代码依旧就不重新编辑了。
下面这段代码写在新区段段首。做为第一段。
附十六进制:

8B 44 24 04 6A 00 C7 00 00 00 00 00 E8 AE 01 00 00 85 C0 74 65 53 55 56 57 E8 95 01 00 00 8B 74

24 1C 83 C9 FF 33 C0 8B 3E F2 AE F7 D1 49 8B E9 45 55 6A 42 E8 98 01 00 00 8B D8 85 DB 74 32 8B

36 53 E8 90 01 00 00 8B CD 8B F8 8B D1 53 C1 E9 02 F3 A5 8B CA 83 E1 03 F3 A4 E8 7E 01 00 00 53

6A 01 E8 5E 01 00 00 8B 44 24 14 C7 00 01 00 00 00 E8 37 01 00 00 5F 5E 5D 5B C3 90 8D 44 24 08

83 EC 0C 50 FF 74 24 14 33 C0 89 44 24 08 89 44 24 0C 89 44 24 10 8D 54 24 08 52 FF D3 8B 44 24

0C 8B 54 24 10 8B 4C 24 14 83 C4 18 C3 55 8B EC 68 04 00 00 80 6A 00 FF 75 08 6A 01 BB 00 E0 81

00 E8 B6 FF FF FF C9 C2 04 00 6A 00 6A 00 E8 D4 00 00 00 83 F8 00 0F 84 B0 00 00 00 60 9C 33 C9

43 41 83 3B 00 75 F9 81 F9 00 08 00 00 75 F1 E8 00 00 00 00 58 83 C0 7A 8D 8B 00 FF FF FF 89 08

83 C0 06 8D 8B 00 FF FF FF 89 08 83 C0 05 8D 8B 00 FE FF FF 89 08 83 C0 0A 8D 8B 00 FE FF FF 89

08 83 C0 11 8D 8B 00 FE FF FF 89 08 83 E8 05 8D 8B 00 FD FF FF 89 08 2D D2 00 00 00 8D 8B 24 F5

FF FF 89 08 05 1F 07 00 00 C7 00 D6 D0 B9 FA C7 40 04 C6 AE D4 C6 C7 40 08 B8 F3 A1 BE C7 40 0C

50 44 47 A1 C7 40 10 BF 00 00 00 9D 61 A3 CA C7 81 00 FF 35 CA C7 81 00 68 CA C6 81 00 E8 25 00

00 00 68 CA C6 81 00 E8 21 FF FF FF 6A 00 68 CA C5 81 00 68 CA C6 81 00 6A 00 E8 1A 00 00 00 6A

00 E8 25 00 00 00 CC FF 25 48 D0 81 00 FF 25 E8 76 5F 00 FF 25 8C 76 5F 00 FF 25 C4 70 5F 00 FF

25 1C 75 5F 00 FF 25 CC 74 5F 00 FF 25 7C 70 5F 00 FF 25 C8 71 5F 00 FF 25 B8 71 5F 00 FF 25 A8

71 5F 00



0081C000    8B4424 04       mov eax,dword ptr ss:[esp+0x4]

0081C004    6A 00           push 0x0

0081C006    C700 00000000   mov dword ptr ds:[eax],0x0

0081C00C    E8 AE010000     call <jmp.&user32.OpenClipboard>

0081C011    85C0            test eax,eax

0081C013    74 65           je short ZZZX添加.0081C07A

0081C015    53              push ebx

0081C016    55              push ebp

0081C017    56              push esi

0081C018    57              push edi

0081C019    E8 95010000     call <jmp.&user32.EmptyClipboard>

0081C01E    8B7424 1C       mov esi,dword ptr ss:[esp+0x1C]

0081C022    83C9 FF         or ecx,-0x1

0081C025    33C0            xor eax,eax

0081C027    8B3E            mov edi,dword ptr ds:[esi]

0081C029    F2:AE           repne scas byte ptr es:[edi]

0081C02B    F7D1            not ecx

0081C02D    49              dec ecx

0081C02E    8BE9            mov ebp,ecx

0081C030    45              inc ebp

0081C031    55              push ebp

0081C032    6A 42           push 0x42

0081C034    E8 98010000     call <jmp.&kernel32.GlobalAlloc>

0081C039    8BD8            mov ebx,eax

0081C03B    85DB            test ebx,ebx

0081C03D    74 32           je short ZZZX添加.0081C071

0081C03F    8B36            mov esi,dword ptr ds:[esi]

0081C041    53              push ebx

0081C042    E8 90010000     call <jmp.&kernel32.GlobalLock>

0081C047    8BCD            mov ecx,ebp

0081C049    8BF8            mov edi,eax

0081C04B    8BD1            mov edx,ecx

0081C04D    53              push ebx

0081C04E    C1E9 02         shr ecx,0x2

0081C051    F3:A5           rep movs dword ptr es:[edi],dword ptr ds>

0081C053    8BCA            mov ecx,edx

0081C055    83E1 03         and ecx,0x3

0081C058    F3:A4           rep movs byte ptr es:[edi],byte ptr ds:[>

0081C05A    E8 7E010000     call <jmp.&kernel32.GlobalUnlock>

0081C05F    53              push ebx

0081C060    6A 01           push 0x1

0081C062    E8 5E010000     call <jmp.&user32.SetClipboardData>

0081C067    8B4424 14       mov eax,dword ptr ss:[esp+0x14]

0081C06B    C700 01000000   mov dword ptr ds:[eax],0x1

0081C071    E8 37010000     call <jmp.&user32.CloseClipboard>

0081C076    5F              pop edi

0081C077    5E              pop esi

0081C078    5D              pop ebp

0081C079    5B              pop ebx

0081C07A    C3              retn

0081C07B    90              nop

0081C07C    8D4424 08       lea eax,dword ptr ss:[esp+0x8]

0081C080    83EC 0C         sub esp,0xC

0081C083    50              push eax

0081C084    FF7424 14       push dword ptr ss:[esp+0x14]

0081C088    33C0            xor eax,eax

0081C08A    894424 08       mov dword ptr ss:[esp+0x8],eax

0081C08E    894424 0C       mov dword ptr ss:[esp+0xC],eax

0081C092    894424 10       mov dword ptr ss:[esp+0x10],eax

0081C096    8D5424 08       lea edx,dword ptr ss:[esp+0x8]

0081C09A    52              push edx

0081C09B    FFD3            call ebx

0081C09D    8B4424 0C       mov eax,dword ptr ss:[esp+0xC]

0081C0A1    8B5424 10       mov edx,dword ptr ss:[esp+0x10]

0081C0A5    8B4C24 14       mov ecx,dword ptr ss:[esp+0x14]

0081C0A9    83C4 18         add esp,0x18

0081C0AC    C3              retn

0081C0AD    55              push ebp

0081C0AE    8BEC            mov ebp,esp

0081C0B0    68 04000080     push 0x80000004

0081C0B5    6A 00           push 0x0

0081C0B7    FF75 08         push dword ptr ss:[ebp+0x8]

0081C0BA    6A 01           push 0x1

0081C0BC    BB 00E08100     mov ebx,0x81E000

0081C0C1    E8 B6FFFFFF     call ZZZX添加.0081C07C

0081C0C6    C9              leave

0081C0C7    C2 0400         retn 0x4

0081C0CA    6A 00           push 0x0

0081C0CC    6A 00           push 0x0

0081C0CE    E8 D4000000     call <jmp.&VMProtectSDK32.VMProtectGetCu>

0081C0D3    83F8 00         cmp eax,0x0

0081C0D6    0F84 B0000000   je ZZZX添加.0081C18C

0081C0DC    60              pushad                                                                         //取当前地址,并查找零区起始位置

0081C0DD    9C              pushfd

0081C0DE    33C9            xor ecx,ecx

0081C0E0    43              inc ebx

0081C0E1    41              inc ecx

0081C0E2    833B 00         cmp dword ptr ds:[ebx],0x0

0081C0E5  ^ 75 F9           jnz short ZZZX添加.0081C0E0

0081C0E7    81F9 00080000   cmp ecx,0x800

0081C0ED  ^ 75 F1           jnz short ZZZX添加.0081C0E0

0081C0EF    E8 00000000     call ZZZX添加.0081C0F4

0081C0F4    58              pop eax

0081C0F5    83C0 7A         add eax,0x7A

0081C0F8    8D8B 00FFFFFF   lea ecx,dword ptr ds:[ebx-0x100]

0081C0FE    8908            mov dword ptr ds:[eax],ecx

0081C100    83C0 06         add eax,0x6

0081C103    8D8B 00FFFFFF   lea ecx,dword ptr ds:[ebx-0x100]

0081C109    8908            mov dword ptr ds:[eax],ecx

0081C10B    83C0 05         add eax,0x5

0081C10E    8D8B 00FEFFFF   lea ecx,dword ptr ds:[ebx-0x200]

0081C114    8908            mov dword ptr ds:[eax],ecx

0081C116    83C0 0A         add eax,0xA

0081C119    8D8B 00FEFFFF   lea ecx,dword ptr ds:[ebx-0x200]

0081C11F    8908            mov dword ptr ds:[eax],ecx

0081C121    83C0 11         add eax,0x11

0081C124    8D8B 00FEFFFF   lea ecx,dword ptr ds:[ebx-0x200]

0081C12A    8908            mov dword ptr ds:[eax],ecx

0081C12C    83E8 05         sub eax,0x5

0081C12F    8D8B 00FDFFFF   lea ecx,dword ptr ds:[ebx-0x300]

0081C135    8908            mov dword ptr ds:[eax],ecx

0081C137    2D D2000000     sub eax,0xD2

0081C13C    8D8B 24F5FFFF   lea ecx,dword ptr ds:[ebx-0xADC]

0081C142    8908            mov dword ptr ds:[eax],ecx

0081C144    05 1F070000     add eax,0x71F

0081C149    C700 D6D0B9FA   mov dword ptr ds:[eax],0xFAB9D0D6                        //此处开始可以定义弹窗标题。

0081C14F    C740 04 C6AED4C>mov dword ptr ds:[eax+0x4],0xC6D4AEC6

0081C156    C740 08 B8F3A1B>mov dword ptr ds:[eax+0x8],0xBEA1F3B8

0081C15D    C740 0C 504447A>mov dword ptr ds:[eax+0xC],0xA1474450

0081C164    C740 10 BF00000>mov dword ptr ds:[eax+0x10],0xBF                            //弹窗标题结束

0081C16B    9D              popfd

0081C16C    61              popad

0081C16D    A3 CAC78100     mov dword ptr ds:[0x81C7CA],eax

0081C172    FF35 CAC78100   push dword ptr ds:[0x81C7CA]

0081C178    68 CAC68100     push ZZZX添加.0081C6CA

0081C17D    E8 25000000     call <jmp.&VMProtectSDK32.VMProtectGetCu>

0081C182    68 CAC68100     push ZZZX添加.0081C6CA

0081C187    E8 21FFFFFF     call ZZZX添加.0081C0AD

0081C18C    6A 00           push 0x0

0081C18E    68 CAC58100     push ZZZX添加.0081C5CA

0081C193    68 CAC68100     push ZZZX添加.0081C6CA

0081C198    6A 00           push 0x0

0081C19A    E8 1A000000     call <jmp.&user32.MessageBoxA>

0081C19F    6A 00           push 0x0

0081C1A1    E8 25000000     call <jmp.&kernel32.ExitProcess>

0081C1A6    CC              int3

0081C1A7  - FF25 48D08100   jmp dword ptr ds:[<&VMProtectSDK32.VMPro>; VMProtec.VMProtectGetCurrentHWID        //现在只需要手动修复以下函数地址就好了。

0081C1AD  - FF25 E8765F00   jmp dword ptr ds:[<&user32.CloseClipboar>; user32.CloseClipboard

0081C1B3  - FF25 8C765F00   jmp dword ptr ds:[<&user32.EmptyClipboar>; user32.EmptyClipboard

0081C1B9  - FF25 C4705F00   jmp dword ptr ds:[<&user32.MessageBoxA>] ; user32.MessageBoxA

0081C1BF  - FF25 1C755F00   jmp dword ptr ds:[<&user32.OpenClipboard>; user32.OpenClipboard

0081C1C5  - FF25 CC745F00   jmp dword ptr ds:[<&user32.SetClipboardD>; user32.SetClipboardData

0081C1CB  - FF25 7C705F00   jmp dword ptr ds:[<&kernel32.ExitProcess>; kernel32.ExitProcess

0081C1D1  - FF25 C8715F00   jmp dword ptr ds:[<&kernel32.GlobalAlloc>; kernel32.GlobalAlloc

0081C1D7  - FF25 B8715F00   jmp dword ptr ds:[<&kernel32.GlobalLock>>; kernel32.GlobalLock

0081C1DD  - FF25 A8715F00   jmp dword ptr ds:[<&kernel32.GlobalUnloc>; kernel32.GlobalUnlock






视频及附件下载:
视频解压密码:www.chinapyg.com
抱歉,忘记换密码重新打包了。明天有时间再换附件。
链接:https://pan.baidu.com/s/1N3PI1z4WJAqWFHkS2hzCMQ提取码:qnn2 
完整版附件及使用方法视频:
链接: https://pan.baidu.com/s/14PPsOH_dZm_qftI9aTQ27g 提取码: 7q4v 




[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

最后于 2019-3-1 00:36 被daohaodaye编辑 ,原因: 补充解决几个硬编码问题。可以少修复几处了。
收藏
点赞3
打赏
分享
最新回复 (4)
雪    币: 2022
活跃值: (2785)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
xiaohang 3 2019-2-26 11:54
2
0
鼓励发帖,还希望再接再厉,这个帖子的内容难设精华,如果能把原理阐述一下就好了
雪    币: 3682
活跃值: (936)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
daohaodaye 2019-2-26 15:05
3
0
xiaohang 鼓励发帖,还希望再接再厉,这个帖子的内容难设精华,如果能把原理阐述一下就好了
不太会写文章,做了视频演示一下好了。娱乐娱乐
雪    币: 3682
活跃值: (936)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
daohaodaye 2019-3-1 00:37
4
0
补充自动修复几处硬编码。少修改几处还想写自动获取并填充下面的FF25函数的代码,又感觉好麻烦。放弃了
最后于 2019-3-1 00:38 被daohaodaye编辑 ,原因:
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_曹先生 2020-3-25 13:28
5
0
大佬 VMProtectSDK32 有个求指导 120374342 有偿。 搞了一个星期了 OD 都调试炸了。还没搞定
游客
登录 | 注册 方可回帖
返回