首页
社区
课程
招聘
[原创]牛刀小试—破解屏幕录像专家生成的exe视频文件 part2
发表于: 2008-8-9 20:25 35872

[原创]牛刀小试—破解屏幕录像专家生成的exe视频文件 part2

2008-8-9 20:25
35872
牛刀小试—破解屏幕录像专家生成的exe视频文件 part2
接上篇牛刀小试—破解屏幕录像专家生成的exe视频文件 part1上次说了。软件的注册码没办法算出来。

主要是他把密码分成了几份。视频文件一边播放,一边用注册码来解密。看来做出注册机是没什么希望了

。也可能是我没这个能力。如果有做出来了的。别笑话我。好言归正传,断续来破解它。
经过跟踪发现,机器码分为两段。前面是读取硬盘序列号,后半部份是读取网卡的mac地址来加密得来的



用OD载入程序
在命令行下bp CreateFileA断点
第一次断在
0012F4F4   0047F221  /CALL 到 CreateFileA 来自 大水牛鼠.0047F21C
0012F4F8   00A569E8  |FileName = "D:\TEMP\",B4,"笏J蟊闬",B4,"笏J蟊?.exe"
0012F4FC   80000000  |Access = GENERIC_READ
0012F500   00000003  |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
0012F504   0012F520  |pSecurity = 0012F520
0012F508   00000003  |Mode = OPEN_EXISTING
0012F50C   00000020  |Attributes = ARCHIVE
0012F510   00000000  \hTemplateFile = NULL
第二次断在
0012E9B0   0040E127  /CALL 到 CreateFileA 来自 大水牛鼠.0040E122
0012E9B4   0012EC24  |FileName = "\\.\PhysicalDrive0"
0012E9B8   C0000000  |Access = GENERIC_READ|GENERIC_WRITE
0012E9BC   00000003  |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE
0012E9C0   00000000  |pSecurity = NULL
0012E9C4   00000003  |Mode = OPEN_EXISTING
0012E9C8   00000000  |Attributes = 0
0012E9CC   00000000  \hTemplateFile = NULL
从这里返回 0040E127  

0040E0D8  /$  55            push    ebp
0040E0D9  |.  8BEC          mov     ebp, esp
0040E0DB  |.  81C4 64FDFFFF add     esp, -29C
0040E0E1  |.  53            push    ebx
0040E0E2  |.  56            push    esi
0040E0E3  |.  57            push    edi
0040E0E4  |.  8B7D 0C       mov     edi, dword ptr [ebp+C]
0040E0E7  |.  6A 18         push    18                               ; /Arg3 = 00000018
0040E0E9  |.  6A 00         push    0                                ; |Arg2 = 00000000
0040E0EB  |.  8D45 94       lea     eax, dword ptr [ebp-6C]          ; |
0040E0EE  |.  50            push    eax                              ; |Arg1
0040E0EF  |.  E8 D0FA0600   call    0047DBC4                         ; \大水牛鼠.0047DBC4
0040E0F4  |.  83C4 0C       add     esp, 0C
0040E0F7  |.  33DB          xor     ebx, ebx
0040E0F9  |>  33C0          /xor     eax, eax
0040E0FB  |.  8D55 AC       |lea     edx, dword ptr [ebp-54]
0040E0FE  |.  8AC3          |mov     al, bl
0040E100  |.  50            |push    eax                             ; /Arg3
0040E101  |.  68 001E4A00   |push    004A1E00                        ; |Arg2 = 004A1E00

ASCII "\\.\PhysicalDrive%d"
0040E106  |.  52            |push    edx                             ; |Arg1
0040E107  |.  E8 28320700   |call    00481334                        ; \大水牛鼠.00481334
0040E10C  |.  83C4 0C       |add     esp, 0C
0040E10F  |.  8D4D AC       |lea     ecx, dword ptr [ebp-54]
0040E112  |.  6A 00         |push    0                               ; /hTemplateFile = NULL
0040E114  |.  6A 00         |push    0                               ; |Attributes = 0
0040E116  |.  6A 03         |push    3                               ; |Mode = OPEN_EXISTING
0040E118  |.  6A 00         |push    0                               ; |pSecurity = NULL
0040E11A  |.  6A 03         |push    3                               ; |ShareMode =

FILE_SHARE_READ|FILE_SHARE_WRITE
0040E11C  |.  68 000000C0   |push    C0000000                        ; |Access =

GENERIC_READ|GENERIC_WRITE
0040E121  |.  51            |push    ecx                             ; |FileName
0040E122  |.  E8 25220900   |call    <jmp.&KERNEL32.CreateFileA>     ; \CreateFileA

CreateFile返回到这里。

0040E127  |.  8BF0          |mov     esi, eax
0040E129  |.  85F6          |test    esi, esi
0040E12B  |.  0F84 4B010000 |je      0040E27C
0040E131  |.  6A 00         |push    0                               ; /pOverlapped = NULL
0040E133  |.  8D45 FC       |lea     eax, dword ptr [ebp-4]          ; |
0040E136  |.  50            |push    eax                             ; |pBytesReturned
0040E137  |.  6A 18         |push    18                              ; |OutBufferSize = 18

(24.)
0040E139  |.  8D55 94       |lea     edx, dword ptr [ebp-6C]         ; |
0040E13C  |.  52            |push    edx                             ; |OutBuffer
0040E13D  |.  6A 00         |push    0                               ; |InBufferSize = 0
0040E13F  |.  6A 00         |push    0                               ; |InBuffer = NULL
0040E141  |.  68 80400700   |push    74080                           ; |IoControlCode =

SMART_GET_VERSION
0040E146  |.  56            |push    esi                             ; |hDevice
0040E147  |.  E8 24220900   |call    <jmp.&KERNEL32.DeviceIoControl> ; \DeviceIoControl

调用DeviceIoControl取SMART_GET_VERSION 版本号

0040E14C  |.  85C0          |test    eax, eax
0040E14E  |.  75 23         |jnz     short 0040E173
0040E150  |.  56            |push    esi                             ; /hObject
0040E151  |.  E8 DE210900   |call    <jmp.&KERNEL32.CloseHandle>     ; \CloseHandle
0040E156  |.  8B4D 08       |mov     ecx, dword ptr [ebp+8]
0040E159  |.  51            |push    ecx
0040E15A  |.  E8 AD010000   |call    0040E30C
0040E15F  |.  59            |pop     ecx
0040E160  |.  3C 01         |cmp     al, 1
0040E162  |.  75 07         |jnz     short 0040E16B
0040E164  |.  33C0          |xor     eax, eax
0040E166  |.  E9 1D010000   |jmp     0040E288
0040E16B  |>  83C8 FF       |or      eax, FFFFFFFF
0040E16E  |.  E9 15010000   |jmp     0040E288
0040E173  |>  F645 98 01    |test    byte ptr [ebp-68], 1
0040E177  |.  75 0B         |jnz     short 0040E184
0040E179  |.  56            |push    esi                             ; /hObject
0040E17A  |.  E8 B5210900   |call    <jmp.&KERNEL32.CloseHandle>     ; \CloseHandle
0040E17F  |.  E9 F8000000   |jmp     0040E27C
0040E184  |>  6A 20         |push    20                              ; /Arg3 = 00000020
0040E186  |.  6A 00         |push    0                               ; |Arg2 = 00000000
0040E188  |.  8D95 74FFFFFF |lea     edx, dword ptr [ebp-8C]         ; |
0040E18E  |.  52            |push    edx                             ; |Arg1
0040E18F  |.  E8 30FA0600   |call    0047DBC4                        ; \大水牛鼠.0047DBC4
0040E194  |.  83C4 0C       |add     esp, 0C
0040E197  |.  8D8D 64FDFFFF |lea     ecx, dword ptr [ebp-29C]
0040E19D  |.  68 10020000   |push    210                             ; /Arg3 = 00000210
0040E1A2  |.  6A 00         |push    0                               ; |Arg2 = 00000000
0040E1A4  |.  51            |push    ecx                             ; |Arg1
0040E1A5  |.  E8 1AFA0600   |call    0047DBC4                        ; \大水牛鼠.0047DBC4
0040E1AA  |.  83C4 0C       |add     esp, 0C
0040E1AD  |.  F6C3 01       |test    bl, 1
0040E1B0  |.  74 09         |je      short 0040E1BB
0040E1B2  |.  C685 7DFFFFFF>|mov     byte ptr [ebp-83], 0B0
0040E1B9  |.  EB 07         |jmp     short 0040E1C2
0040E1BB  |>  C685 7DFFFFFF>|mov     byte ptr [ebp-83], 0A0
0040E1C2  |>  8BCB          |mov     ecx, ebx
0040E1C4  |.  B8 10000000   |mov     eax, 10
0040E1C9  |.  D3F8          |sar     eax, cl
0040E1CB  |.  2345 98       |and     eax, dword ptr [ebp-68]
0040E1CE  |.  74 0B         |je      short 0040E1DB
0040E1D0  |.  56            |push    esi                             ; /hObject
0040E1D1  |.  E8 5E210900   |call    <jmp.&KERNEL32.CloseHandle>     ; \CloseHandle
0040E1D6  |.  E9 A1000000   |jmp     0040E27C
0040E1DB  |>  C685 7EFFFFFF>|mov     byte ptr [ebp-82], 0EC
0040E1E2  |.  885D 80       |mov     byte ptr [ebp-80], bl
0040E1E5  |.  8D55 FC       |lea     edx, dword ptr [ebp-4]
0040E1E8  |.  C685 79FFFFFF>|mov     byte ptr [ebp-87], 1
0040E1EF  |.  C685 7AFFFFFF>|mov     byte ptr [ebp-86], 1
0040E1F6  |.  C785 74FFFFFF>|mov     dword ptr [ebp-8C], 200
0040E200  |.  6A 00         |push    0                               ; /pOverlapped = NULL
0040E202  |.  52            |push    edx                             ; |pBytesReturned
0040E203  |.  8D85 64FDFFFF |lea     eax, dword ptr [ebp-29C]        ; |
0040E209  |.  68 10020000   |push    210                             ; |OutBufferSize = 210

(528.)
0040E20E  |.  50            |push    eax                             ; |OutBuffer
0040E20F  |.  8D95 74FFFFFF |lea     edx, dword ptr [ebp-8C]         ; |
0040E215  |.  6A 20         |push    20                              ; |InBufferSize = 20

(32.)
0040E217  |.  52            |push    edx                             ; |InBuffer
0040E218  |.  68 88C00700   |push    7C088                           ; |IoControlCode =

SMART_RCV_DRIVE_DATA
0040E21D  |.  56            |push    esi                             ; |hDevice
0040E21E  |.  E8 4D210900   |call    <jmp.&KERNEL32.DeviceIoControl> ; \DeviceIoControl   

F4到此处

调用DeviceIoControl取SMART_RCV_DRIVE_DATA  硬盘序列号

堆栈内容 0012E9DC为保存数据的地址

0012E9B0   000000C4  |hDevice = 000000C4 (window)
0012E9B4   0007C088  |IoControlCode = SMART_RCV_DRIVE_DATA
0012E9B8   0012EBEC  |InBuffer = 0012EBEC
0012E9BC   00000020  |InBufferSize = 20 (32.)
0012E9C0   0012E9DC  |OutBuffer = 0012E9DC
0012E9C4   00000210  |OutBufferSize = 210 (528.)
0012E9C8   0012EC74  |pBytesReturned = 0012EC74
0012E9CC   00000000  \pOverlapped = NULL

0040E223  |.  85C0          |test    eax, eax
0040E225  |.  75 0A         |jnz     short 0040E231
0040E227  |.  56            |push    esi                             ; /hObject
0040E228  |.  E8 07210900   |call    <jmp.&KERNEL32.CloseHandle>     ; \CloseHandle
0040E22D  |.  33C0          |xor     eax, eax
0040E22F  |.  EB 57         |jmp     short 0040E288
0040E231  |>  8D9D 74FDFFFF |lea     ebx, dword ptr [ebp-28C]
0040E237  |.  6A 15         |push    15                              ; /Arg3 = 00000015
0040E239  |.  6A 00         |push    0                               ; |Arg2 = 00000000
0040E23B  |.  57            |push    edi                             ; |Arg1
0040E23C  |.  E8 83F90600   |call    0047DBC4                        ; \大水牛鼠.0047DBC4
0040E241  |.  83C4 0C       |add     esp, 0C
0040E244  |.  83C3 14       |add     ebx, 14
0040E247  |.  6A 14         |push    14                              ; /Arg3 = 00000014
0040E249  |.  53            |push    ebx                             ; |Arg2
0040E24A  |.  57            |push    edi                             ; |Arg1
0040E24B  |.  E8 04F90600   |call    0047DB54                        ; \大水牛鼠.0047DB54
0040E250  |.  83C4 0C       |add     esp, 0C
0040E253  |.  C647 14 00    |mov     byte ptr [edi+14], 0
0040E257  |.  6A 14         |push    14                              ; /Arg3 = 00000014
0040E259  |.  57            |push    edi                             ; |Arg2
0040E25A  |.  8B45 08       |mov     eax, dword ptr [ebp+8]          ; |
0040E25D  |.  50            |push    eax                             ; |Arg1
0040E25E  |.  E8 7D000000   |call    0040E2E0                        ; \大水牛鼠.0040E2E0
0040E263  |.  83C4 0C       |add     esp, 0C
0040E266  |.  56            |push    esi                             ; /hObject
0040E267  |.  E8 C8200900   |call    <jmp.&KERNEL32.CloseHandle>     ; \CloseHandle
0040E26C  |.  803F 00       |cmp     byte ptr [edi], 0
0040E26F  |.  75 04         |jnz     short 0040E275
0040E271  |.  33C0          |xor     eax, eax
0040E273  |.  EB 13         |jmp     short 0040E288
0040E275  |>  B8 01000000   |mov     eax, 1
0040E27A  |.  EB 0C         |jmp     short 0040E288
0040E27C  |>  43            |inc     ebx
0040E27D  |.  80FB 04       |cmp     bl, 4
0040E280  |.^ 0F82 73FEFFFF \jb      0040E0F9
0040E286  |.  33C0          xor     eax, eax
0040E288  |>  5F            pop     edi
0040E289  |.  5E            pop     esi
0040E28A  |.  5B            pop     ebx
0040E28B  |.  8BE5          mov     esp, ebp
0040E28D  |.  5D            pop     ebp
0040E28E  \.  C3            retn

F4到0040E28E  F8返回 看堆栈。
0012EC80   00A524B4
0012EC84   0012F13C  ASCII "Y29GCFWC            "  硬盘序列号注意里面带空格 在后面计算机器码

的时候也有空格
0012EC88   00A524B4
0012EC8C   00000094
0012EC90   00000005

按F12返回0040A9D5  |.  83C4 08       add     esp, 8

0040A96C  /$  55            push    ebp
0040A96D  |.  8BEC          mov     ebp, esp
0040A96F  |.  81C4 CCF7FFFF add     esp, -834
0040A975  |.  B8 DC334A00   mov     eax, 004A33DC
0040A97A  |.  53            push    ebx
0040A97B  |.  56            push    esi
0040A97C  |.  57            push    edi
0040A97D  |.  8B75 0C       mov     esi, dword ptr [ebp+C]
0040A980  |.  E8 73360700   call    0047DFF8
0040A985  |.  68 00040000   push    400                              ; /Arg3 = 00000400
0040A98A  |.  6A 00         push    0                                ; |Arg2 = 00000000
0040A98C  |.  8D95 CCFBFFFF lea     edx, dword ptr [ebp-434]         ; |
0040A992  |.  52            push    edx                              ; |Arg1
0040A993  |.  E8 2C320700   call    0047DBC4                         ; \大水牛鼠.0047DBC4
0040A998  |.  83C4 0C       add     esp, 0C
0040A99B  |.  8D8D CCF7FFFF lea     ecx, dword ptr [ebp-834]
0040A9A1  |.  68 00040000   push    400                              ; /Arg3 = 00000400
0040A9A6  |.  6A 00         push    0                                ; |Arg2 = 00000000
0040A9A8  |.  51            push    ecx                              ; |Arg1
0040A9A9  |.  E8 16320700   call    0047DBC4                         ; \大水牛鼠.0047DBC4
0040A9AE  |.  83C4 0C       add     esp, 0C
0040A9B1  |.  C786 88160000>mov     dword ptr [esi+1688], -1
0040A9BB  |.  80BE BD040000>cmp     byte ptr [esi+4BD], 1
0040A9C2  |.  0F85 FA000000 jnz     0040AAC2
0040A9C8  |.  8D85 CCFBFFFF lea     eax, dword ptr [ebp-434]
0040A9CE  |.  50            push    eax                              ; /Arg2
0040A9CF  |.  56            push    esi                              ; |Arg1
0040A9D0  |.  E8 0B2F0000   call    0040D8E0                         ; \大水牛鼠.0040D8E0
0040A9D5  |.  83C4 08       add     esp, 8
0040A9D8  |.  83F8 FF       cmp     eax, -1                          ;  Switch (cases

0..FFFFFFFF)
0040A9DB  |.  75 53         jnz     short 0040AA30
0040A9DD  |.  66:C745 E0 08>mov     word ptr [ebp-20], 8             ;  Case FFFFFFFF of

switch 0040A9D8
0040A9E3  |.  BA 3E1D4A00   mov     edx, 004A1D3E
0040A9E8  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
0040A9EB  |.  E8 64120800   call    0048BC54
0040A9F0  |.  FF45 EC       inc     dword ptr [ebp-14]
0040A9F3  |.  8D55 FC       lea     edx, dword ptr [ebp-4]
0040A9F6  |.  8B45 08       mov     eax, dword ptr [ebp+8]
0040A9F9  |.  E8 3E130800   call    0048BD3C
0040A9FE  |.  8B45 08       mov     eax, dword ptr [ebp+8]
0040AA01  |.  BA 02000000   mov     edx, 2
0040AA06  |.  66:C745 E0 14>mov     word ptr [ebp-20], 14
0040AA0C  |.  50            push    eax
0040AA0D  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
0040AA10  |.  FF4D EC       dec     dword ptr [ebp-14]
0040AA13  |.  E8 F4120800   call    0048BD0C
0040AA18  |.  58            pop     eax
0040AA19  |.  66:C745 E0 08>mov     word ptr [ebp-20], 8
0040AA1F  |.  FF45 EC       inc     dword ptr [ebp-14]
0040AA22  |.  8B55 D0       mov     edx, dword ptr [ebp-30]
0040AA25  |.  64:67:8916 00>mov     dword ptr fs:[0], edx
0040AA2B  |.  E9 D8010000   jmp     0040AC08
0040AA30  |>  83F8 FE       cmp     eax, -2
0040AA33  |.  75 53         jnz     short 0040AA88
0040AA35  |.  66:C745 E0 20>mov     word ptr [ebp-20], 20            ;  Case FFFFFFFE of

switch 0040A9D8
0040AA3B  |.  BA 511D4A00   mov     edx, 004A1D51
0040AA40  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
0040AA43  |.  E8 0C120800   call    0048BC54
0040AA48  |.  FF45 EC       inc     dword ptr [ebp-14]
0040AA4B  |.  8D55 F8       lea     edx, dword ptr [ebp-8]
0040AA4E  |.  8B45 08       mov     eax, dword ptr [ebp+8]
0040AA51  |.  E8 E6120800   call    0048BD3C
0040AA56  |.  8B45 08       mov     eax, dword ptr [ebp+8]
0040AA59  |.  BA 02000000   mov     edx, 2
0040AA5E  |.  66:C745 E0 2C>mov     word ptr [ebp-20], 2C
0040AA64  |.  50            push    eax
0040AA65  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
0040AA68  |.  FF4D EC       dec     dword ptr [ebp-14]
0040AA6B  |.  E8 9C120800   call    0048BD0C
0040AA70  |.  58            pop     eax
0040AA71  |.  66:C745 E0 20>mov     word ptr [ebp-20], 20
0040AA77  |.  FF45 EC       inc     dword ptr [ebp-14]
0040AA7A  |.  8B55 D0       mov     edx, dword ptr [ebp-30]
0040AA7D  |.  64:67:8916 00>mov     dword ptr fs:[0], edx
0040AA83  |.  E9 80010000   jmp     0040AC08
0040AA88  |>  85C0          test    eax, eax
0040AA8A  |.  75 09         jnz     short 0040AA95
0040AA8C  |.  C686 BD040000>mov     byte ptr [esi+4BD], 0            ;  Case 0 of switch

0040A9D8
0040AA93  |.  EB 2D         jmp     short 0040AAC2

单步跟踪到此处

0040AA95  |>  33C9          xor     ecx, ecx                         ;  Default case of

switch 0040A9D8
0040AA97  |.  8D9D CCFBFFFF lea     ebx, dword ptr [ebp-434]  取注册码的内存地址到ebx
0040AA9D  |>  0FBE03        /movsx   eax, byte ptr [ebx] 读取数据到eax
0040AAA0  |.  F7E9          |imul    ecx                eax=eax*ecx
0040AAA2  |.  99            |cdq                        扩展为64位为除法做准备
0040AAA3  |.  BF 09000000   |mov     edi, 9                edi=9
0040AAA8  |.  41            |inc     ecx                ecx+1
0040AAA9  |.  F7FF          |idiv    edi                除法运算
0040AAAB  |.  8BC2          |mov     eax, edx                取余数到eax
0040AAAD  |.  83C0 30       |add     eax, 30                eax+30
0040AAB0  |.  8803          |mov     byte ptr [ebx], al         保存数据
0040AAB2  |.  43            |inc     ebx
0040AAB3  |.  C786 88160000>|mov     dword ptr [esi+1688], 64
0040AABD  |.  83F9 14       |cmp     ecx, 14               
0040AAC0  |.^ 7C DB         \jl      short 0040AA9D       
经过这段代码计算后,Y29GCFWC            硬盘序列号变成了

0012F13C  30 35 36 36 37 38 30 31 34 30 35 31 36 32 37 33  0566780140516273
0012F14C  38 34 30 35                                      8405

0040AAC2  |>  80BE BD040000>cmp     byte ptr [esi+4BD], 0
0040AAC9  |.  0F85 D8000000 jnz     0040ABA7
0040AACF  |.  8D95 CCF7FFFF lea     edx, dword ptr [ebp-834]
0040AAD5  |.  68 00040000   push    400                              ; /pFileSystemNameSize

= 00000400
0040AADA  |.  52            push    edx                              ;

|pFileSystemNameBuffer
0040AADB  |.  6A 00         push    0                                ; |pFileSystemFlags =

NULL
0040AADD  |.  8D4D CC       lea     ecx, dword ptr [ebp-34]          ; |
0040AAE0  |.  6A 00         push    0                                ; |pMaxFilenameLength =

NULL
0040AAE2  |.  51            push    ecx                              ; |pVolumeSerialNumber
0040AAE3  |.  8D85 CCFBFFFF lea     eax, dword ptr [ebp-434]         ; |
0040AAE9  |.  68 00040000   push    400                              ; |MaxVolumeNameSize =

400 (1024.)
0040AAEE  |.  50            push    eax                              ; |VolumeNameBuffer
0040AAEF  |.  68 5C1D4A00   push    004A1D5C                         ; |RootPathName = "c:/"
0040AAF4  |.  E8 73590900   call    <jmp.&KERNEL32.GetVolumeInformat>;

\GetVolumeInformationA
0040AAF9  |.  C786 88160000>mov     dword ptr [esi+1688], 64
0040AB03  |.  8B45 CC       mov     eax, dword ptr [ebp-34]
0040AB06  |.  33D2          xor     edx, edx
0040AB08  |.  B9 2C000000   mov     ecx, 2C
0040AB0D  |.  F7F1          div     ecx
0040AB0F  |.  8B45 CC       mov     eax, dword ptr [ebp-34]
0040AB12  |.  8D8D CCFBFFFF lea     ecx, dword ptr [ebp-434]
0040AB18  |.  D1E8          shr     eax, 1
0040AB1A  |.  03D0          add     edx, eax
0040AB1C  |.  81C2 4654BC00 add     edx, 0BC5446
0040AB22  |.  8955 CC       mov     dword ptr [ebp-34], edx
0040AB25  |.  8B55 CC       mov     edx, dword ptr [ebp-34]
0040AB28  |.  52            push    edx                              ; /Arg3
0040AB29  |.  68 601D4A00   push    004A1D60                         ; |Arg2 = 004A1D60

ASCII "%u"
0040AB2E  |.  51            push    ecx                              ; |Arg1
0040AB2F  |.  E8 00680700   call    00481334                         ; \大水牛鼠.00481334
0040AB34  |.  83C4 0C       add     esp, 0C
0040AB37  |.  8D85 CCFBFFFF lea     eax, dword ptr [ebp-434]
0040AB3D  |.  50            push    eax
0040AB3E  |.  E8 B5310700   call    0047DCF8
0040AB43  |.  59            pop     ecx
0040AB44  |.  83F8 03       cmp     eax, 3
0040AB47  |.  7C 18         jl      short 0040AB61
0040AB49  |.  8A95 CEFBFFFF mov     dl, byte ptr [ebp-432]
0040AB4F  |.  8A8D CCFBFFFF mov     cl, byte ptr [ebp-434]
0040AB55  |.  888D CEFBFFFF mov     byte ptr [ebp-432], cl
0040AB5B  |.  8895 CCFBFFFF mov     byte ptr [ebp-434], dl
0040AB61  |>  8BC8          mov     ecx, eax
0040AB63  |.  8D9C0D CCFBFF>lea     ebx, dword ptr [ebp+ecx-434]
0040AB6A  |.  83F9 11       cmp     ecx, 11
0040AB6D  |.  7D 1C         jge     short 0040AB8B
0040AB6F  |>  8B45 CC       /mov     eax, dword ptr [ebp-34]
0040AB72  |.  33D2          |xor     edx, edx
0040AB74  |.  F7F1          |div     ecx
0040AB76  |.  33D2          |xor     edx, edx
0040AB78  |.  BE 0A000000   |mov     esi, 0A
0040AB7D  |.  F7F6          |div     esi
0040AB7F  |.  80C2 30       |add     dl, 30
0040AB82  |.  41            |inc     ecx
0040AB83  |.  8813          |mov     byte ptr [ebx], dl
0040AB85  |.  43            |inc     ebx
0040AB86  |.  83F9 11       |cmp     ecx, 11
0040AB89  |.^ 7C E4         \jl      short 0040AB6F
0040AB8B  |>  C685 DDFBFFFF>mov     byte ptr [ebp-423], 39
0040AB92  |.  C685 DEFBFFFF>mov     byte ptr [ebp-422], 39
0040AB99  |.  C685 DFFBFFFF>mov     byte ptr [ebp-421], 39
0040ABA0  |.  C685 E0FBFFFF>mov     byte ptr [ebp-420], 0
0040ABA7  |>  0FBE85 CCFBFF>movsx   eax, byte ptr [ebp-434]
0040ABAE  |.  83F8 30       cmp     eax, 30
0040ABB1  |.  75 07         jnz     short 0040ABBA

继续单步跟踪到此处[ebp-434]=0012F13C  
0040ABB3  |.  C685 CCFBFFFF>mov     byte ptr [ebp-434], 39
将计算过的机器码第一位改为9

0040ABBA  |>  66:C745 E0 38>mov     word ptr [ebp-20], 38
0040ABC0  |.  8D95 CCFBFFFF lea     edx, dword ptr [ebp-434]
0040ABC6  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
0040ABC9  |.  E8 86100800   call    0048BC54
0040ABCE  |.  8BD0          mov     edx, eax
0040ABD0  |.  FF45 EC       inc     dword ptr [ebp-14]
0040ABD3  |.  8B45 08       mov     eax, dword ptr [ebp+8]
0040ABD6  |.  E8 61110800   call    0048BD3C
0040ABDB  |.  8B45 08       mov     eax, dword ptr [ebp+8]
0040ABDE  |.  BA 02000000   mov     edx, 2
0040ABE3  |.  66:C745 E0 44>mov     word ptr [ebp-20], 44
0040ABE9  |.  50            push    eax
0040ABEA  |.  8D45 F4       lea     eax, dword ptr [ebp-C]
0040ABED  |.  FF4D EC       dec     dword ptr [ebp-14]
0040ABF0  |.  E8 17110800   call    0048BD0C
0040ABF5  |.  58            pop     eax
0040ABF6  |.  66:C745 E0 38>mov     word ptr [ebp-20], 38
0040ABFC  |.  FF45 EC       inc     dword ptr [ebp-14]
0040ABFF  |.  8B55 D0       mov     edx, dword ptr [ebp-30]
0040AC02  |.  64:67:8916 00>mov     dword ptr fs:[0], edx
0040AC08  |>  5F            pop     edi
0040AC09  |.  5E            pop     esi
0040AC0A  |.  5B            pop     ebx
0040AC0B  |.  8BE5          mov     esp, ebp
0040AC0D  |.  5D            pop     ebp
0040AC0E  \.  C3            retn

注册窗口显示的注册码为956678014051627384056293092011
刚才计算完的数据为95667801405162738405这是机器码的前半部份

接着看后半部份。6293092011这是从哪里算来的呢。我前面说过是读网卡的mac地址

程序是怎么读网卡的地址呢。我们用OD加载程序。下个CoInitialize断点,不要问我为什么要下这个断点

。问我也不说。

769D85D3 >  8BFF            mov     edi, edi
769D85D5    55              push    ebp
769D85D6    8BEC            mov     ebp, esp
769D85D8    6A 02           push    2
769D85DA    FF75 08         push    dword ptr [ebp+8]
769D85DD    E8 11BDFCFF     call    CoInitializeEx
769D85E2    5D              pop     ebp
769D85E3    C2 0400         retn    4

第一次断下按F9
第二次断下的时候,看堆栈。
0012F4E4   00401DFC  返回到 大水牛鼠.00401DFC 来自 <jmp.&OLE32.CoInitialize>
0012F4E8   00000000
0012F4EC   00A52952
0012F4F0   00A5293D  ASCII "95667801405162738405"

看到了什么呢。用硬盘序列号算出来的前半部份机器码
我们按F12返回

00401DFC   .  6A 00         push    0
00401DFE   .  6A 00         push    0
00401E00   .  6A 00         push    0
00401E02   .  6A 03         push    3
00401E04   .  6A 04         push    4
00401E06   .  6A 00         push    0
00401E08   .  6A 00         push    0
00401E0A   .  6A FF         push    -1
00401E0C   .  6A 00         push    0
00401E0E   .  E8 0DEE0900   call    <jmp.&OLE32.CoInitializeSecurity>
00401E13   .  85C0          test    eax, eax
00401E15   .  74 60         je      short 00401E77
00401E17   .  66:C745 C0 2C>mov     word ptr [ebp-40], 2C
00401E1D   .  BA 841A4A00   mov     edx, 004A1A84                              ;  ASCII

"0000000000"
00401E22   .  8D45 F8       lea     eax, dword ptr [ebp-8]
00401E25   .  E8 2A9E0800   call    0048BC54
00401E2A   .  FF45 CC       inc     dword ptr [ebp-34]
00401E2D   .  8D55 F8       lea     edx, dword ptr [ebp-8]
00401E30   .  8B45 08       mov     eax, dword ptr [ebp+8]
00401E33   .  E8 049F0800   call    0048BD3C
00401E38   .  8B45 08       mov     eax, dword ptr [ebp+8]
00401E3B   .  BA 02000000   mov     edx, 2
00401E40   .  66:C745 C0 38>mov     word ptr [ebp-40], 38
00401E46   .  50            push    eax
00401E47   .  8D45 F8       lea     eax, dword ptr [ebp-8]
00401E4A   .  FF4D CC       dec     dword ptr [ebp-34]
00401E4D   .  E8 BA9E0800   call    0048BD0C
00401E52   .  FF4D CC       dec     dword ptr [ebp-34]
00401E55   .  8D45 FC       lea     eax, dword ptr [ebp-4]
00401E58   .  BA 02000000   mov     edx, 2
00401E5D   .  E8 AA9E0800   call    0048BD0C
00401E62   .  58            pop     eax
00401E63   .  66:C745 C0 20>mov     word ptr [ebp-40], 20
00401E69   .  8B55 B0       mov     edx, dword ptr [ebp-50]
00401E6C   .  64:67:8916 00>mov     dword ptr fs:[0], edx
00401E72   .  E9 38030000   jmp     004021AF
00401E77   >  B2 01         mov     dl, 1
00401E79   .  A1 D47B4600   mov     eax, dword ptr [467BD4]
00401E7E   .  E8 BD720000   call    00409140
00401E83   .  8945 AC       mov     dword ptr [ebp-54], eax
00401E86   .  8B4D AC       mov     ecx, dword ptr [ebp-54]
00401E89   .  51            push    ecx                                        ; /Arg1
00401E8A   .  E8 89FAFFFF   call    00401918                                   ; \大水牛

鼠.00401918
00401E8F   .  59            pop     ecx
00401E90   .  8B45 AC       mov     eax, dword ptr [ebp-54]
00401E93   .  8B10          mov     edx, dword ptr [eax]
00401E95   .  FF52 14       call    dword ptr [edx+14]
00401E98   .  85C0          test    eax, eax
00401E9A   .  7E 38         jle     short 00401ED4
00401E9C   .  66:C745 C0 44>mov     word ptr [ebp-40], 44
00401EA2   .  33C9          xor     ecx, ecx
00401EA4   .  894D F4       mov     dword ptr [ebp-C], ecx
00401EA7   .  8D4D F4       lea     ecx, dword ptr [ebp-C]
00401EAA   .  FF45 CC       inc     dword ptr [ebp-34]
00401EAD   .  33D2          xor     edx, edx
00401EAF   .  8B45 AC       mov     eax, dword ptr [ebp-54]
00401EB2   .  8B18          mov     ebx, dword ptr [eax]
00401EB4   .  FF53 0C       call    dword ptr [ebx+C]
00401EB7   .  8D55 F4       lea     edx, dword ptr [ebp-C]
00401EBA   .  8D45 FC       lea     eax, dword ptr [ebp-4]
00401EBD   .  E8 7A9E0800   call    0048BD3C
00401EC2   .  FF4D CC       dec     dword ptr [ebp-34]
00401EC5   .  8D45 F4       lea     eax, dword ptr [ebp-C]
00401EC8   .  BA 02000000   mov     edx, 2
00401ECD   .  E8 3A9E0800   call    0048BD0C
00401ED2   .  EB 31         jmp     short 00401F05

单步F8到此处。看寄存器

EAX 0012F568
ECX 0012F568
EDX 00A56DD0 ASCII "00:00:E8:F1:1C:B8"  这个东西大家都看得明白呢。网卡的MAC地址
EBX 00467C20 大水牛鼠.00467C20
ESP 0012F4EC
EBP 0012F574
ESI 00A5293D ASCII "95667801405162738405"
EDI 00A52952
EIP 00401ED2 大水牛鼠.00401ED2

程序使用这个地址。算出机器码的后半部份。知道了这些东西。我相信,聪明的你。应该知道怎么破解它

了吧。只要有一台机能播放这个视频。修改一下程序。在读硬盘序列号的时候。改成可以运行的硬盘序列

号。读完网卡地址的时候。改成可以运行的电脑的网卡mac地址。经过测试。视频可以正常播放。只是会

出现一个 高度无损解压缩出错 的消息框。我修改了程序。不出现这个框。视频文件可以正常播放完。

就此本文算写完了。这个软件的破解也算完成了。关于如何改程序。别来问我。

谢谢关注 无下文

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (20)
雪    币: 559
活跃值: (354)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
不错 关注!!!
2008-8-9 20:57
0
雪    币: 167
活跃值: (1574)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
3
强大 学习一下

PS: 莫非这个就是官方的那套加密软件
2008-8-10 15:09
0
雪    币: 333
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wan
4
屏幕录像专家应该也可这样来完美破,只要你有一套正版注册码
2008-8-10 21:06
0
雪    币: 167
活跃值: (1574)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
5
不可以的 远比这个要复杂的多的多 ~
2008-8-11 16:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
很强大,很厉害的说。
2008-8-11 16:29
0
雪    币: 1611
活跃值: (1059)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
Patch  硬件ID!~
2008-8-11 20:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
真不错。继续学习。
2008-8-14 23:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
求脱壳,
我是菜鸟
现在遇到一个Version: ASProtect 2.2 SKE build 04.25 Release [Extract]壳
经od载入,运行脚本的时候,查出有偷代码
现在请高手帮忙脱壳
目标软件:abcK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6e0p5#2y4$3u0T1M7#2)9J5k6h3y4G2L8g2)9J5c8X3q4T1j5#2)9J5k6i4A6A6M7l9`.`.
讲解步骤越详细越好,谢谢!
2008-10-10 13:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
机器码为30位应该是加密系统第一代吧.
现在黑吧等用的是35位机器码第二代加密系统.
第三代加密系统为40位机器码.

据软件官方介绍第二代加密系统:
1-10,15-20为硬盘ID
11-14为硬盘ID与CPU ID组合
21-30为网卡序列号
31-34为CPU ID
产生注册码只利用前20位
按照楼主方法,Patch了硬盘与CPU的ID,应该破解算成功了,但播放时出现“Stream read error”错误提示,无动画只有声音。
只好继续跟,找到下面循环
00441252   >  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
00441255   . |E8 E6FDFFFF   CALL d-j.00441040
0044125A   . |8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
0044125D   . |80B8 8C000000>CMP BYTE PTR DS:[EAX+8C],0
00441264   .^\74 EC         JE SHORT d-j.00441252
正常文件在此被解密播放,但PATSH文件此处只能播放2祯后就出现错误。

请高手指点指点,谢谢!!!
2008-12-17 10:05
0
雪    币: 60
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习了~~~
2008-12-17 10:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
都是高手啊!
2009-2-7 23:00
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
好文章!有意思!
2009-2-8 08:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
。也可能是我没这个能力。如果有...[/QUOTE]
!!!!!!!!!!!!!!!!
2009-2-11 23:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
学习了,多谢共享
2009-2-13 11:08
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
谢谢楼主分享…………
2009-2-13 19:46
0
雪    币: 199
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
向大家学习
2009-2-14 09:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
我靠,看不懂
2009-2-14 13:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
有难度,慢慢学习中……
2009-4-9 20:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
太强大了,这篇文章收下了,研究研究
2009-4-21 22:59
0
雪    币: 1275
活跃值: (511)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
牛人...

好爽....
2009-11-7 20:33
0
游客
登录 | 注册 方可回帖
返回