应该是最新的吧,机器码是40位的
这里算法就不怎么分析了,有些太麻烦了,直接给出patch的地方00416EDB |> /0FBE39 |/movsx edi, byte ptr [ecx] ; 前20位算法
00416EDE |. |8BC7 ||mov eax, edi
00416EE0 |. |BF 09000000 ||mov edi, 9
00416EE5 |. |33C3 ||xor eax, ebx
00416EE7 |. |43 ||inc ebx
00416EE8 |. |99 ||cdq
00416EE9 |. |F7FF ||idiv edi
00416EEB |. |8BC2 ||mov eax, edx ; (Initial CPU selection)
00416EED |. |8B55 B4 ||mov edx, dword ptr [ebp-4C]
00416EF0 |. |83C0 30 ||add eax, 30
00416EF3 |. |8802 ||mov byte ptr [edx], al
00416EF5 |. |8801 ||mov byte ptr [ecx], al
00416EF7 |. |8B45 0C ||mov eax, dword ptr [ebp+C]
00416EFA |. |41 ||inc ecx
00416EFB |. |C780 C4180000>||mov dword ptr [eax+18C4], 64
00416F05 |. |8345 B4 03 ||add dword ptr [ebp-4C], 3
00416F09 |. |83FB 14 ||cmp ebx, 14
00416F0C |.^\7C CD |\jl short 00416EDB
这个是通过硬盘序列号来计算出来的
注意这两句00416EF3 |. |8802 ||mov byte ptr [edx], al
00416EF5 |. |8801 ||mov byte ptr [ecx], al
修改对应地方的数据
20-30位机器码出现00404CDC |. 8B55 D4 mov edx, dword ptr [ebp-2C]
00404CDF |. 52 push edx
00404CE0 |. 8D8D D4FEFFFF lea ecx, dword ptr [ebp-12C]
00404CE6 |. 51 push ecx
00404CE7 |. E8 58E30200 call 00433044 ; 20-30位
00404CEC |. 66:C745 E8 08>mov word ptr [ebp-18], 8
00404CF2 |. 83C4 08 add esp, 8
00404CF5 |. 8D95 D4FEFFFF lea edx, dword ptr [ebp-12C]
00404CFB |. 8D45 FC lea eax, dword ptr [ebp-4]
其中中间有个,分三段计算出来 XXX XXXX XXXX,所以这里要循环3次,如下代码00497D01 |. 50 |push eax
00497D02 |. 51 |push ecx
00497D03 |. 8B55 C8 |mov edx, dword ptr [ebp-38]
00497D06 |. 52 |push edx
00497D07 |. 8B4D E8 |mov ecx, dword ptr [ebp-18]
00497D0A |. 51 |push ecx
00497D0B |. FF75 DC |push dword ptr [ebp-24]
00497D0E |. FF75 D8 |push dword ptr [ebp-28]
00497D11 |. E8 7A310000 |call 0049AE90 ; 重点,这里每次出现一次看寄存器进行修改
00497D16 |. 83C4 18 |add esp, 18 ; 修改EAX里面的值
00497D19 |> 837D F8 00 |cmp dword ptr [ebp-8], 0
00497D1D |. 0F8C 19020000 |jl 00497F3C
00497D23 |. 8B55 E8 |mov edx, dword ptr [ebp-18]
接着换第31位机器码00404F0A > /0FBE08 movsx ecx, byte ptr [eax] ; 换31位
00404F0D . |0FBE70 0A movsx esi, byte ptr [eax+A]
00404F11 . |03CE add ecx, esi
00404F13 . |D1F9 sar ecx, 1
00404F15 . |79 03 jns short 00404F1A
00404F17 . |83D1 00 adc ecx, 0
00404F1A > |8808 mov byte ptr [eax], cl ;注意CL的值,跟踪EAX进行修改
00404F1C . |42 inc edx
00404F1D . |40 inc eax
00404F1E > |8D4B F6 lea ecx, dword ptr [ebx-A]
00404F21 . |3BD1 cmp edx, ecx
00404F23 .^\7C E5 jl short 00404F0A
接着修改第11-14位机器码004176E7 |> /0FBE01 movsx eax, byte ptr [ecx]
004176EA |. |BE 0A000000 mov esi, 0A
004176EF |. |33D2 xor edx, edx
004176F1 |. |F7F6 div esi
004176F3 |. |80C2 30 add dl, 30
004176F6 |. |43 inc ebx
004176F7 |. |8811 mov byte ptr [ecx], dl ;注意DL的值,直接跟踪ECX进行修改
004176F9 |. |41 inc ecx
004176FA |. |83FB 04 cmp ebx, 4
004176FD |.^\7C E8 jl short 004176E7
然后生成第31-34为机器码00417797 |> /0FBE03 movsx eax, byte ptr [ebx] ; 31-34位
0041779A |. |BE 0A000000 mov esi, 0A
0041779F |. |33D2 xor edx, edx
004177A1 |. |F7F6 div esi
004177A3 |. |80C2 30 add dl, 30
004177A6 |. |41 inc ecx
004177A7 |. |8813 mov byte ptr [ebx], dl ; 注意EBX和DL
004177A9 |. |43 inc ebx
004177AA |. |83F9 04 cmp ecx, 4
004177AD |.^\7C E8 jl short 00417797
生成第35位机器码00417899 |> \8BC6 mov eax, esi ; 35位 DL
0041789B BB 0A000000 mov ebx, 0A
004178A0 |. 99 cdq
004178A1 F7FB idiv ebx
004178A3 80C2 30 add dl, 30 ; 注意DL
004178A6 |. 8D45 FC lea eax, dword ptr [ebp-4]
004178A9 |. 88940D 74FFFF>mov byte ptr [ebp+ecx-8C], dl
生成第36-38位机器码,感觉36位一直是000417A0C |. B8 C89C4B00 mov eax, 004B9CC8 ; 0
00417A11 |. E8 CAA80800 call 004A22E0
00417A16 |. 8D55 EC lea edx, dword ptr [ebp-14]
00417A19 |. 8D45 FC lea eax, dword ptr [ebp-4]
00417A1C |. E8 8BA40800 call 004A1EAC
00417A21 |. FF4E 1C dec dword ptr [esi+1C]
00417A24 |. 8D45 EC lea eax, dword ptr [ebp-14]
00417A27 |. BA 02000000 mov edx, 2
00417A2C |. E8 4BA40800 call 004A1E7C ; 36-38位
00417A31 |> 33C0 xor eax, eax ; 寄存器出现机器码
最后两位机器码00417A51 |. 8BD0 mov edx, eax
00417A53 |. FF46 1C inc dword ptr [esi+1C]
00417A56 |. 8D45 F8 lea eax, dword ptr [ebp-8]
00417A59 |. E8 4EA40800 call 004A1EAC
00417A5E |. FF4E 1C dec dword ptr [esi+1C]
00417A61 |. 8D45 E8 lea eax, dword ptr [ebp-18]
00417A64 |. BA 02000000 mov edx, 2
00417A69 |. E8 0EA40800 call 004A1E7C ; 最后两位
00417A6E |. 837D F8 00 cmp dword ptr [ebp-8], 0 ; 寄存器出现机器码
--------------------
其实从36-40位都可以从这里看到00497D01 |. 50 |push eax
00497D02 |. 51 |push ecx
00497D03 |. 8B55 C8 |mov edx, dword ptr [ebp-38]
00497D06 |. 52 |push edx
00497D07 |. 8B4D E8 |mov ecx, dword ptr [ebp-18]
00497D0A |. 51 |push ecx
00497D0B |. FF75 DC |push dword ptr [ebp-24]
00497D0E |. FF75 D8 |push dword ptr [ebp-28]
00497D11 |. E8 7A310000 |call 0049AE90 ; 重点,这里每次出现一次看寄存器进行修改
00497D16 |. 83C4 18 |add esp, 18 ; 修改EAX里面的值
00497D19 |> 837D F8 00 |cmp dword ptr [ebp-8], 0
00497D1D |. 0F8C 19020000 |jl 00497F3C
00497D23 |. 8B55 E8 |mov edx, dword ptr [ebp-18]
-----------------------
这样屏幕录像专家加密替换一下机器码可以看了,我这里在OD调试的时候,内存替换机器码可以看一下,但是一会儿就提示错误,不知道什么原因,汗~~
顺便做了个小录像
http://www.dbank.com/download.action?t=40&k=MzM4MDE0Mg==&pcode=LCwyNjAyODcsMjYwMjg3&rnd=5
http://www.brsbox.com/filebox/down/fc/d12e14f7fdb774ea7e11c7072ed032bc |