• 标 题: 【原创】 一个会计软件的算法分析过程(详细)
  • 作 者:liyangsj
  • 时 间:2005-01-10 12:16

一个会计软件的算法分析过程(详细)
【破解作者】 jsliyangsj
【作者邮箱】 sjcrack@yahoo.com.cn
【使用工具】 peid OllyDbg1.10
【破解平台】 Winxp
【软件名称】 总会计2000
【下载地址】 http://www.sfzc.com.cn/download/kj/zkj2000.exe
--------------------------------------------------------------------------------
分析:
程序没有壳,是Microsoft Visual C++ 6.0编写
用OD载入,选择用户名,点击“确定” 让你输入序列号不正确则退出
输入码必须16位,否则报错,我用OD插件ustrref.dll查找字符串“解密口令长度不对”
0040F237    .  83F8 10     cmp eax,10        必须16位
0040F23A    .  74 21       je short ZKJ2000.0040F25D
0040F23C    .  6A 00       push 0
0040F23E    .  6A 00       push 0
0040F240    .  68 8C3E5100 push ZKJ2000.00513E8C
0040F245    .  8BCF        mov ecx,edi
0040F247    .  E8 F8320C00 call <jmp.&MFC42.#4224>   出错!!

我的输入码1212121212121212    我的机器码:334Q0K1U4G3K3T52


0040F25D    > \8D4D 94     lea ecx,dword ptr ss:[ebp-6C]
0040F260    .  51          push ecx
0040F261    .  E8 D42D0C00 call <jmp.&ZB_DLL.Bm3GetYJInfo>
0040F266    .  83C4 04     add esp,4
0040F269    .  8D4D EC     lea ecx,dword ptr ss:[ebp-14]
0040F26C    .  E8 41310C00 call <jmp.&MFC42.#540>
0040F271    .  33F6        xor esi,esi
0040F273    .  68 A03D5100 push ZKJ2000.00513DA0
0040F278    .  8D4D EC     lea ecx,dword ptr ss:[ebp-14]
0040F27B    .  8975 FC     mov dword ptr ss:[ebp-4],esi
0040F27E    .  E8 95310C00 call <jmp.&MFC42.#860>
0040F283    .  8B45 EC     mov eax,dword ptr ss:[ebp-14]
0040F286    .  8B48 F8     mov ecx,dword ptr ds:[eax-8]
0040F289    .  51          push ecx
0040F28A    .  50          push eax
0040F28B    .  8D8D 4CEFFF>lea ecx,dword ptr ss:[ebp-10B4]
0040F291    .  FF15 B89D4E>call dword ptr ds:[<&ZB_DLL.CBm3Blowfis>;  ZB_DLL.CBm3Blowfish::CBm3Blowfish
0040F297    .  8B47 64     mov eax,dword ptr ds:[edi+64]
0040F29A    .  8D55 BC     lea edx,dword ptr ss:[ebp-44]
0040F29D    .  6A 0A       push 0A
0040F29F    .  52          push edx
0040F2A0    .  50          push eax
0040F2A1    .  C645 FC 01  mov byte ptr ss:[ebp-4],1
0040F2A5    .  E8 962D0C00 call <jmp.&ZB_DLL.Bm3WordToByte>        ;  第一次处理输入码
0040F2AA    .  83C4 0C     add esp,0C
0040F2AD    .  8D45 BC     lea eax,dword ptr ss:[ebp-44]
0040F2B0    .  8D8D 4CEFFF>lea ecx,dword ptr ss:[ebp-10B4]
0040F2B6    .  6A 08       push 8
0040F2B8    .  50          push eax
0040F2B9    .  FF15 A09D4E>call dword ptr ds:[<&ZB_DLL.CBm3Blowfis>;  第2次处理输入码
0040F2BF    .  33C0        xor eax,eax
0040F2C1    >  8A4C05 BC   mov cl,byte ptr ss:[ebp+eax-44]
0040F2C5    .  8A5405 94   mov dl,byte ptr ss:[ebp+eax-6C]            此处发现我最终的结果 
…………………………………………………………………………………………………………………………
0012D408  1CEB3030
0012D40C  00000F4A      由于最后两位必须是FF,修正FFFF0F4A
…………………………………………………………………………………………………………………………
0040F2C9    .  3ACA        cmp cl,dl
0040F2CB    .  75 1E       jnz short ZKJ2000.0040F2EB
0040F2CD    .  40          inc eax
0040F2CE    .  83F8 06     cmp eax,6
0040F2D1    .^ 7C EE       jl short ZKJ2000.0040F2C1
0040F2D3    .  8B45 C2     mov eax,dword ptr ss:[ebp-3E]
0040F2D6    .  3C FF       cmp al,0FF
0040F2D8    .  75 24       jnz short ZKJ2000.0040F2FE              ;  计算后的倒数3,4位必须是FF
0040F2DA    .  891D B8FA51>mov dword ptr ds:[51FAB8],ebx
0040F2E0    .  8935 BCFA51>mov dword ptr ds:[51FABC],esi
0040F2E6    .  E9 BF000000 jmp ZKJ2000.0040F3AA
0040F2EB    >  56          push esi
0040F2EC    .  56          push esi
0040F2ED    .  68 643E5100 push ZKJ2000.00513E64
0040F2F2    .  8BCF        mov ecx,edi
0040F2F4    .  E8 4B320C00 call <jmp.&MFC42.#4224>
0040F2F9    .  E9 23030000 jmp ZKJ2000.0040F621
0040F2FE    >  25 FF000000 and eax,0FF
0040F303    .  891D BCFA51>mov dword ptr ds:[51FABC],ebx
0040F309    .  8BC8        mov ecx,eax
0040F30B    .  B8 ABAAAAAA mov eax,AAAAAAAB
0040F310    .  F7E1        mul ecx
0040F312    .  C1EA 03     shr edx,3
0040F315    .  81C2 D00700>add edx,7D0
0040F31B    .  8BC1        mov eax,ecx
0040F31D    .  8915 C0FA51>mov dword ptr ds:[51FAC0],edx
0040F323    .  33D2        xor edx,edx
0040F325    .  B9 0C000000 mov ecx,0C
0040F32A    .  F7F1        div ecx
0040F32C    .  42          inc edx
0040F32D    .  8915 C4FA51>mov dword ptr ds:[51FAC4],edx
0040F333    .  8D55 DC     lea edx,dword ptr ss:[ebp-24]
0040F336    .  52          push edx
0040F337    .  E8 14350C00 call <jmp.&MFC42.#3811>
0040F33C    .  8B00        mov eax,dword ptr ds:[eax]
0040F33E    .  56          push esi
0040F33F    .  8D4D E8     lea ecx,dword ptr ss:[ebp-18]
0040F342    .  8945 E8     mov dword ptr ss:[ebp-18],eax
0040F345    .  E8 00350C00 call <jmp.&MFC42.#3337>
0040F34A    .  8B40 14     mov eax,dword ptr ds:[eax+14]
0040F34D    .  8B0D C0FA51>mov ecx,dword ptr ds:[51FAC0]
0040F353    .  05 6C070000 add eax,76C
0040F358    .  3BC1        cmp eax,ecx
0040F35A    .  7C 45       jl short ZKJ2000.0040F3A1
0040F35C    .  56          push esi
0040F35D    .  8D4D E8     lea ecx,dword ptr ss:[ebp-18]
0040F360    .  E8 E5340C00 call <jmp.&MFC42.#3337>
0040F365    .  8B40 14     mov eax,dword ptr ds:[eax+14]
0040F368    .  8B0D C0FA51>mov ecx,dword ptr ds:[51FAC0]
0040F36E    .  05 6C070000 add eax,76C
0040F373    .  3BC1        cmp eax,ecx
0040F375    .  75 17       jnz short ZKJ2000.0040F38E
0040F377    .  56          push esi
0040F378    .  8D4D E8     lea ecx,dword ptr ss:[ebp-18]
0040F37B    .  E8 CA340C00 call <jmp.&MFC42.#3337>
0040F380    .  8B40 10     mov eax,dword ptr ds:[eax+10]
0040F383    .  8B0D C4FA51>mov ecx,dword ptr ds:[51FAC4]
0040F389    .  40          inc eax
0040F38A    .  3BC1        cmp eax,ecx
0040F38C    .  7E 13       jle short ZKJ2000.0040F3A1
0040F38E    >  56          push esi
0040F38F    .  56          push esi
0040F390    .  68 403E5100 push ZKJ2000.00513E40
0040F395    .  8BCF        mov ecx,edi
0040F397    .  E8 A8310C00 call <jmp.&MFC42.#4224>
0040F39C    .  E9 80020000 jmp ZKJ2000.0040F621
0040F3A1    >  8B45 C2     mov eax,dword ptr ss:[ebp-3E]
0040F3A4    .  891D B8FA51>mov dword ptr ds:[51FAB8],ebx
0040F3AA    >  80FC FF     cmp ah,0FF                              ;  计算后倒数1,2位必须是FF
0040F3AD    .  0F84 4E0100>je ZKJ2000.0040F501

………………………………………………………………………………………………………………………………
进入第一次处理输入码:0040F2A5    .  E8 962D0C00 call 第一次处理输入码 2次F7
………………………………………………………………………………………………………………………………
10001B50 Z>/$  53          push ebx
10001B51   |.  56          push esi
10001B52   |.  8B7424 0C   mov esi,dword ptr ss:[esp+C]
10001B56   |.  57          push edi
10001B57   |.  56          push esi                                ; /String
10001B58   |.  FF15 2CA109>call dword ptr ds:[<&KERNEL32.lstrlenA>>; \lstrlenA
10001B5E   |.  A8 01       test al,1
10001B60   |.  0F85 980000>jnz ZB_DLL.10001BFE
10001B66   |.  8B4C24 18   mov ecx,dword ptr ss:[esp+18]
10001B6A   |.  D1E8        shr eax,1
10001B6C   |.  3BC1        cmp eax,ecx
10001B6E   |.  0F87 8A0000>ja ZB_DLL.10001BFE
10001B74   |.  33FF        xor edi,edi
10001B76   |.  85C0        test eax,eax
10001B78   |.  0F86 820000>jbe ZB_DLL.10001C00
10001B7E   |.  8B5C24 14   mov ebx,dword ptr ss:[esp+14]           ;  准备储存的地址
10001B82   |>  0FBE0E      /movsx ecx,byte ptr ds:[esi]
10001B85   |.  83F9 61     |cmp ecx,61                             ;  判断是否为小写
10001B88   |.  7C 0A       |jl short ZB_DLL.10001B94
10001B8A   |.  83F9 7A     |cmp ecx,7A
10001B8D   |.  7F 05       |jg short ZB_DLL.10001B94
10001B8F   |.  83E9 57     |sub ecx,57                             ;  小写就-57
10001B92   |.  EB 1C       |jmp short ZB_DLL.10001BB0
10001B94   |>  83F9 41     |cmp ecx,41
10001B97   |.  7C 0A       |jl short ZB_DLL.10001BA3               ;  判断是否为大写
10001B99   |.  83F9 5A     |cmp ecx,5A
10001B9C   |.  7F 05       |jg short ZB_DLL.10001BA3
10001B9E   |.  83E9 37     |sub ecx,37                             ;  大写就-37得到原字母
10001BA1   |.  EB 0D       |jmp short ZB_DLL.10001BB0
10001BA3   |>  83F9 30     |cmp ecx,30
10001BA6   |.  7C 56       |jl short ZB_DLL.10001BFE               ;  判断是否为数字
10001BA8   |.  83F9 39     |cmp ecx,39
10001BAB   |.  7F 51       |jg short ZB_DLL.10001BFE
10001BAD   |.  83E9 30     |sub ecx,30                             ;  数字就-30
10001BB0   |>  8D14C9      |lea edx,dword ptr ds:[ecx+ecx*8]       ;  输入码第一位*8+原输入码临时保存
10001BB3   |.  0FBE4E 01   |movsx ecx,byte ptr ds:[esi+1]          ;  下一位注册码
10001BB7   |.  C1E2 02     |shl edx,2                              ;  第一次的结果左移2位
10001BBA   |.  83F9 61     |cmp ecx,61                             ;  检查是否为小写字母
10001BBD   |.  7C 0A       |jl short ZB_DLL.10001BC9
10001BBF   |.  83F9 7A     |cmp ecx,7A
10001BC2   |.  7F 05       |jg short ZB_DLL.10001BC9
10001BC4   |.  83E9 57     |sub ecx,57
10001BC7   |.  EB 1C       |jmp short ZB_DLL.10001BE5
10001BC9   |>  83F9 41     |cmp ecx,41                             ;  检查是否为大写
10001BCC   |.  7C 0A       |jl short ZB_DLL.10001BD8
10001BCE   |.  83F9 5A     |cmp ecx,5A
10001BD1   |.  7F 05       |jg short ZB_DLL.10001BD8
10001BD3   |.  83E9 37     |sub ecx,37                             ;  大写就-37得到原字母
10001BD6   |.  EB 0D       |jmp short ZB_DLL.10001BE5
10001BD8   |>  83F9 30     |cmp ecx,30
10001BDB   |.  7C 21       |jl short ZB_DLL.10001BFE
10001BDD   |.  83F9 39     |cmp ecx,39
10001BE0   |.  7F 1C       |jg short ZB_DLL.10001BFE
10001BE2   |.  83E9 30     |sub ecx,30                             ;  数字-30
10001BE5   |>  03D1        |add edx,ecx                            ;  把第一个输入码计算再左移的数值加上第二位
10001BE7   |.  81FA FF0000>|cmp edx,0FF                            ;  看看有没有超过0FF
10001BED   |.  7F 0F       |jg short ZB_DLL.10001BFE
10001BEF   |.  88141F      |mov byte ptr ds:[edi+ebx],dl           ;  储存到0012D430开始的地址
10001BF2   |.  47          |inc edi                                ;  准备储存到下一个地址
10001BF3   |.  83C6 02     |add esi,2                              ;  两位两位计算储存,
10001BF6   |.  3BF8        |cmp edi,eax                            ;  比较次数8次16的一半
10001BF8   |.^ 72 88       \jb short ZB_DLL.10001B82
10001BFA   |.  5F          pop edi
10001BFB   |.  5E          pop esi
10001BFC   |.  5B          pop ebx
10001BFD   |.  C3          retn
10001BFE   |>  33C0        xor eax,eax
10001C00   |>  5F          pop edi
10001C01   |.  5E          pop esi
10001C02   |.  5B          pop ebx
10001C03   \.  C3          retn

分析:上面是两个输入码一次处理,第一个输入码(当成十六进制只能0~7)*9的值左移2位+第2个输入码的值
第2个输入码如果是数字,直接相加,,若是大写字母ACSII-37再相加即可,(输入字符不可以小写)
………………………………………………………………………………………………………………………………
进入第2次处理输入码
0040F2B9    .  FF15 A09D4E>call dword ptr ds:[<&ZB_DLL.CBm3Blowfis>;  第2次处理输入码
………………………………………………………………………………………………………………………………
10001260 Z>/$  8B4424 08   mov eax,dword ptr ss:[esp+8]
10001264   |.  53          push ebx
10001265   |.  8BD9        mov ebx,ecx
10001267   |.  8BC8        mov ecx,eax
10001269   |.  C1E9 03     shr ecx,3
1000126C   |.  C1E1 03     shl ecx,3
1000126F   |.  3BC8        cmp ecx,eax
10001271   |.  74 06       je short ZB_DLL.10001279
10001273   |.  33C0        xor eax,eax
10001275   |.  5B          pop ebx
10001276   |.  C2 0800     retn 8
10001279   |>  85C0        test eax,eax
1000127B   |.  76 20       jbe short ZB_DLL.1000129D
1000127D   |.  56          push esi
1000127E   |.  8B7424 0C   mov esi,dword ptr ss:[esp+C]            ;  第一次计算码地址0012D430
10001282   |.  57          push edi
10001283   |.  8D78 07     lea edi,dword ptr ds:[eax+7]
10001286   |.  C1EF 03     shr edi,3
10001289   |>  8D56 04     /lea edx,dword ptr ds:[esi+4]           ;  计算后的第5位注册码的地址
1000128C   |.  8BCB        |mov ecx,ebx                            ;  密码表地址
1000128E   |.  52          |push edx                               ;  第5位地址
1000128F   |.  56          |push esi                               ;  第1位地址
10001290   |.  E8 2B040000 |call ZB_DLL.CBm3Blowfish::Blowfish_dec>;  进入
10001295   |.  83C6 08     |add esi,8
10001298   |.  4F          |dec edi
10001299   |.^ 75 EE       \jnz short ZB_DLL.10001289
1000129B   |.  5F          pop edi
1000129C   |.  5E          pop esi
1000129D   |>  B8 01000000 mov eax,1
100012A2   |.  5B          pop ebx
100012A3   \.  C2 0800     retn 8
………………………………………………………………………………………………………………………………
10001290   |.  E8 2B040000 |call ZB_DLL.CBm3Blowfish::Blowfish_dec>;  进入
………………………………………………………………………………………………………………………………
100016C0 Z>/$  8B51 44     mov edx,dword ptr ds:[ecx+44]   ;  不变值   D3B2368E
100016C3   |.  53          push ebx                        ;  0012C3C0
100016C4   |.  55          push ebp
100016C5   |.  56          push esi                        ;  0012D430
100016C6   |.  8B7424 10   mov esi,dword ptr ss:[esp+10]   ;  0012D430
100016CA   |.  57          push edi                        ;  1,下面没有PUSH了就是说堆栈的值一个都不变
100016CB   |.  8B06        mov eax,dword ptr ds:[esi]      ;  取计算后的前六位
100016CD   |.  33D0        xor edx,eax                     ;  前6位与D3B2368E XOR
100016CF   |.  33C0        xor eax,eax                     ;  清零
100016D1   |.  895424 14   mov dword ptr ss:[esp+14],edx   ;  XOR后保存到0012C394(临时储存后面好多都储存这里)
100016D5   |.  8BFA        mov edi,edx                     ;  值又给了EDI
100016D7   |.  8A4424 16   mov al,byte ptr ss:[esp+16]     ;  指针   刚才算出来的第3,4位
100016DB   |.  C1EF 18     shr edi,18                      ;  指针  把刚才数值SHR 18位就是取第1,2两位
100016DE   |.  8B8481 4804>mov eax,dword ptr ds:[ecx+eax*4>;  固定值可以变化
100016E5   |.  8B5CB9 48   mov ebx,dword ptr ds:[ecx+edi*4>;  固定值可以变化
100016E9   |.  03C3        add eax,ebx                     ;  两位固定值相加
100016EB   |.  33DB        xor ebx,ebx                     ;  其中一个清零
100016ED   |.  8ADE        mov bl,dh                       ;  第6,7位给了BH
100016EF   |.  8BBC99 4808>mov edi,dword ptr ds:[ecx+ebx*4>;  固定值可以变化
100016F6   |.  33C7        xor eax,edi
100016F8   |.  8BFA        mov edi,edx                     ;  取代edi
100016FA   |.  81E7 FF0000>and edi,0FF                     ;  指针  取最后2位A8
10001700   |.  8B9CB9 480C>mov ebx,dword ptr ds:[ecx+edi*4>;  固定值可以变化
10001707   |.  8B79 40     mov edi,dword ptr ds:[ecx+40]   ;  不变值  F01AE404
1000170A   |.  03C3        add eax,ebx                     ;  EAX与固定值相加
1000170C   |.  33DB        xor ebx,ebx                     ;  清零固定值
1000170E   |.  33C7        xor eax,edi                     ;  EAX值再与另一固定值
10001710   |.  8B7C24 18   mov edi,dword ptr ss:[esp+18]   ;  输入码的计算后的后8位地址
10001714   |.  3307        xor eax,dword ptr ds:[edi]      ;  刚才上面算出来的EAX,再与后四位XOR
10001716   |.  894424 14   mov dword ptr ss:[esp+14],eax   ;  把结果保存在0012C394
1000171A   |.  8BE8        mov ebp,eax
1000171C   |.  8A5C24 16   mov bl,byte ptr ss:[esp+16]     ;  指针  取刚才保存的3,4位
10001720   |.  C1ED 18     shr ebp,18                      ;  指针  把刚才保存的值SHR18就是前第1,2为
10001723   |.  8B9C99 4804>mov ebx,dword ptr ds:[ecx+ebx*4>;  固定值可以变化
1000172A   |.  035CA9 48   add ebx,dword ptr ds:[ecx+ebp*4>;  固定值可以变化
1000172E   |.  8BEB        mov ebp,ebx
10001730   |.  33DB        xor ebx,ebx
10001732   |.  8ADC        mov bl,ah                       ;  指针 取刚保存的第5,6位
10001734   |.  33AC99 4808>xor ebp,dword ptr ds:[ecx+ebx*4>;  固定值可以变化
1000173B   |.  8BD8        mov ebx,eax                     ;  把算好的给了EBX
1000173D   |.  81E3 FF0000>and ebx,0FF                     ;  指针 取最后两位
10001743   |.  03AC99 480C>add ebp,dword ptr ds:[ecx+ebx*4>;  固定值可以变化
1000174A   |.  8B59 3C     mov ebx,dword ptr ds:[ecx+3C]   ;  不变值
1000174D   |.  33EB        xor ebp,ebx                     ;  刚加好的数与刚才的固定值XOR
1000174F   |.  33DB        xor ebx,ebx
10001751   |.  33D5        xor edx,ebp                     ;  EDX与刚才的值XOR
10001753   |.  895424 14   mov dword ptr ss:[esp+14],edx   ;  临时储存0012C394
10001757   |.  8A5C24 16   mov bl,byte ptr ss:[esp+16]     ;  取它的3,4位作指针
1000175B   |.  C1EA 18     shr edx,18                      ;  指针
1000175E   |.  8BAC99 4804>mov ebp,dword ptr ds:[ecx+ebx*4>;  固定值可以变化
10001765   |.  8B5C91 48   mov ebx,dword ptr ds:[ecx+edx*4>;  固定值可以变化
10001769   |.  8B5424 14   mov edx,dword ptr ss:[esp+14]   ;  从0012C943取刚才的值
1000176D   |.  03EB        add ebp,ebx                     ;  相加
1000176F   |.  33DB        xor ebx,ebx                     ;  清零
10001771   |.  8ADE        mov bl,dh                       ;  第6,7位当指针
10001773   |.  33AC99 4808>xor ebp,dword ptr ds:[ecx+ebx*4>;  取固定值与EBP XOR
1000177A   |.  8BDA        mov ebx,edx                     ;  从0012C094中取的值给了EBX
1000177C   |.  81E3 FF0000>and ebx,0FF                     ;  取后两位作指针
10001782   |.  03AC99 480C>add ebp,dword ptr ds:[ecx+ebx*4>;  固定值可以变化
10001789   |.  8B59 38     mov ebx,dword ptr ds:[ecx+38]   ;  不变的值
1000178C   |.  33EB        xor ebp,ebx
1000178E   |.  33DB        xor ebx,ebx
10001790   |.  33C5        xor eax,ebp
10001792   |.  894424 14   mov dword ptr ss:[esp+14],eax   ;  储存并准备分成4组,分别作指针取值计算改变EDX
10001796   |.  8BE8        mov ebp,eax
10001798   |.  8A5C24 16   mov bl,byte ptr ss:[esp+16]
1000179C   |.  C1ED 18     shr ebp,18
1000179F   |.  8B9C99 4804>mov ebx,dword ptr ds:[ecx+ebx*4>
100017A6   |.  035CA9 48   add ebx,dword ptr ds:[ecx+ebp*4>
100017AA   |.  8BEB        mov ebp,ebx
100017AC   |.  33DB        xor ebx,ebx
100017AE   |.  8ADC        mov bl,ah
100017B0   |.  33AC99 4808>xor ebp,dword ptr ds:[ecx+ebx*4>
100017B7   |.  8BD8        mov ebx,eax
100017B9   |.  81E3 FF0000>and ebx,0FF
100017BF   |.  03AC99 480C>add ebp,dword ptr ds:[ecx+ebx*4>
100017C6   |.  8B59 34     mov ebx,dword ptr ds:[ecx+34]
100017C9   |.  33EB        xor ebp,ebx
100017CB   |.  33D5        xor edx,ebp
100017CD   |.  33DB        xor ebx,ebx
100017CF   |.  895424 14   mov dword ptr ss:[esp+14],edx   ;  储存并准备分成4组,分别作指针取值计算改变EAX
100017D3   |.  8A5C24 16   mov bl,byte ptr ss:[esp+16]
100017D7   |.  C1EA 18     shr edx,18
100017DA   |.  8BAC99 4804>mov ebp,dword ptr ds:[ecx+ebx*4>
100017E1   |.  8B5C91 48   mov ebx,dword ptr ds:[ecx+edx*4>
100017E5   |.  8B5424 14   mov edx,dword ptr ss:[esp+14]
100017E9   |.  03EB        add ebp,ebx
100017EB   |.  33DB        xor ebx,ebx
100017ED   |.  8ADE        mov bl,dh
100017EF   |.  33AC99 4808>xor ebp,dword ptr ds:[ecx+ebx*4>
100017F6   |.  8BDA        mov ebx,edx
100017F8   |.  81E3 FF0000>and ebx,0FF
100017FE   |.  03AC99 480C>add ebp,dword ptr ds:[ecx+ebx*4>
10001805   |.  8B59 30     mov ebx,dword ptr ds:[ecx+30]
10001808   |.  33EB        xor ebp,ebx
1000180A   |.  33DB        xor ebx,ebx
1000180C   |.  33C5        xor eax,ebp
1000180E   |.  894424 14   mov dword ptr ss:[esp+14],eax   ;  储存并准备分成4组,分别作指针取值计算改变
10001812   |.  8BE8        mov ebp,eax
10001814   |.  8A5C24 16   mov bl,byte ptr ss:[esp+16]
10001818   |.  C1ED 18     shr ebp,18
1000181B   |.  8B9C99 4804>mov ebx,dword ptr ds:[ecx+ebx*4>
10001822   |.  035CA9 48   add ebx,dword ptr ds:[ecx+ebp*4>
10001826   |.  8BEB        mov ebp,ebx
10001828   |.  33DB        xor ebx,ebx
1000182A   |.  8ADC        mov bl,ah
1000182C   |.  33AC99 4808>xor ebp,dword ptr ds:[ecx+ebx*4>
10001833   |.  8BD8        mov ebx,eax
10001835   |.  81E3 FF0000>and ebx,0FF
1000183B   |.  03AC99 480C>add ebp,dword ptr ds:[ecx+ebx*4>
10001842   |.  8B59 2C     mov ebx,dword ptr ds:[ecx+2C]
10001845   |.  33EB        xor ebp,ebx
10001847   |.  33DB        xor ebx,ebx
10001849   |.  33D5        xor edx,ebp
1000184B   |.  895424 14   mov dword ptr ss:[esp+14],edx   ;  储存并准备分成4组,分别作指针取值计算改变
1000184F   |.  8A5C24 16   mov bl,byte ptr ss:[esp+16]
10001853   |.  C1EA 18     shr edx,18
10001856   |.  8BAC99 4804>mov ebp,dword ptr ds:[ecx+ebx*4>
1000185D   |.  8B5C91 48   mov ebx,dword ptr ds:[ecx+edx*4>
10001861   |.  8B5424 14   mov edx,dword ptr ss:[esp+14]
10001865   |.  03EB        add ebp,ebx
10001867   |.  33DB        xor ebx,ebx
10001869   |.  8ADE        mov bl,dh
1000186B   |.  33AC99 4808>xor ebp,dword ptr ds:[ecx+ebx*4>
10001872   |.  8BDA        mov ebx,edx
10001874   |.  81E3 FF0000>and ebx,0FF
1000187A   |.  03AC99 480C>add ebp,dword ptr ds:[ecx+ebx*4>
10001881   |.  8B59 28     mov ebx,dword ptr ds:[ecx+28]
10001884   |.  33EB        xor ebp,ebx
10001886   |.  33DB        xor ebx,ebx
10001888   |.  33C5        xor eax,ebp
1000188A   |.  894424 14   mov dword ptr ss:[esp+14],eax   ;  储存并准备分成4组,分别作指针取值计算改变
1000188E   |.  8BE8        mov ebp,eax
10001890   |.  8A5C24 16   mov bl,byte ptr ss:[esp+16]
10001894   |.  C1ED 18     shr ebp,18
10001897   |.  8B9C99 4804>mov ebx,dword ptr ds:[ecx+ebx*4>
1000189E   |.  035CA9 48   add ebx,dword ptr ds:[ecx+ebp*4>
100018A2   |.  8BEB        mov ebp,ebx
100018A4   |.  33DB        xor ebx,ebx
100018A6   |.  8ADC        mov bl,ah
100018A8   |.  33AC99 4808>xor ebp,dword ptr ds:[ecx+ebx*4>
100018AF   |.  8BD8        mov ebx,eax
100018B1   |.  81E3 FF0000>and ebx,0FF
100018B7   |.  03AC99 480C>add ebp,dword ptr ds:[ecx+ebx*4>
100018BE   |.  8B59 24     mov ebx,dword ptr ds:[ecx+24]
100018C1   |.  33EB        xor ebp,ebx
100018C3   |.  33DB        xor ebx,ebx
100018C5   |.  33D5        xor edx,ebp
100018C7   |.  895424 14   mov dword ptr ss:[esp+14],edx   ;  储存并准备分成4组,分别作指针取值计算改变
100018CB   |.  8A5C24 16   mov bl,byte ptr ss:[esp+16]
100018CF   |.  C1EA 18     shr edx,18
100018D2   |.  8BAC99 4804>mov ebp,dword ptr ds:[ecx+ebx*4>
100018D9   |.  8B5C91 48   mov ebx,dword ptr ds:[ecx+edx*4>
100018DD   |.  8B5424 14   mov edx,dword ptr ss:[esp+14]
100018E1   |.  03EB        add ebp,ebx
100018E3   |.  33DB        xor ebx,ebx
100018E5   |.  8ADE        mov bl,dh
100018E7   |.  33AC99 4808>xor ebp,dword ptr ds:[ecx+ebx*4>
100018EE   |.  8BDA        mov ebx,edx
100018F0   |.  81E3 FF0000>and ebx,0FF
100018F6   |.  03AC99 480C>add ebp,dword ptr ds:[ecx+ebx*4>
100018FD   |.  8B59 20     mov ebx,dword ptr ds:[ecx+20]
10001900   |.  33EB        xor ebp,ebx
10001902   |.  33DB        xor ebx,ebx
10001904   |.  33C5        xor eax,ebp
10001906   |.  894424 14   mov dword ptr ss:[esp+14],eax   ;  储存并准备分成4组,分别作指针取值计算改变
1000190A   |.  8BE8        mov ebp,eax
1000190C   |.  8A5C24 16   mov bl,byte ptr ss:[esp+16]
10001910   |.  C1ED 18     shr ebp,18
10001913   |.  8B9C99 4804>mov ebx,dword ptr ds:[ecx+ebx*4>
1000191A   |.  035CA9 48   add ebx,dword ptr ds:[ecx+ebp*4>
1000191E   |.  8BEB        mov ebp,ebx
10001920   |.  33DB        xor ebx,ebx
10001922   |.  8ADC        mov bl,ah
10001924   |.  33AC99 4808>xor ebp,dword ptr ds:[ecx+ebx*4>
1000192B   |.  8BD8        mov ebx,eax
1000192D   |.  81E3 FF0000>and ebx,0FF
10001933   |.  03AC99 480C>add ebp,dword ptr ds:[ecx+ebx*4>
1000193A   |.  8B59 1C     mov ebx,dword ptr ds:[ecx+1C]
1000193D   |.  33EB        xor ebp,ebx
1000193F   |.  33DB        xor ebx,ebx
10001941   |.  33D5        xor edx,ebp
10001943   |.  895424 14   mov dword ptr ss:[esp+14],edx   ;  储存并准备分成4组,分别作指针取值计算改变
10001947   |.  8A5C24 16   mov bl,byte ptr ss:[esp+16]
1000194B   |.  C1EA 18     shr edx,18
1000194E   |.  8BAC99 4804>mov ebp,dword ptr ds:[ecx+ebx*4>
10001955   |.  8B5C91 48   mov ebx,dword ptr ds:[ecx+edx*4>
10001959   |.  8B5424 14   mov edx,dword ptr ss:[esp+14]
1000195D   |.  03EB        add ebp,ebx
1000195F   |.  33DB        xor ebx,ebx
10001961   |.  8ADE        mov bl,dh
10001963   |.  33AC99 4808>xor ebp,dword ptr ds:[ecx+ebx*4>
1000196A   |.  8BDA        mov ebx,edx
1000196C   |.  81E3 FF0000>and ebx,0FF
10001972   |.  03AC99 480C>add ebp,dword ptr ds:[ecx+ebx*4>
10001979   |.  8B59 18     mov ebx,dword ptr ds:[ecx+18]
1000197C   |.  33EB        xor ebp,ebx
1000197E   |.  33DB        xor ebx,ebx
10001980   |.  33C5        xor eax,ebp
10001982   |.  894424 14   mov dword ptr ss:[esp+14],eax   ;  储存并准备分成4组,分别作指针取值计算改变
10001986   |.  8BE8        mov ebp,eax
10001988   |.  8A5C24 16   mov bl,byte ptr ss:[esp+16]
1000198C   |.  C1ED 18     shr ebp,18
1000198F   |.  8B9C99 4804>mov ebx,dword ptr ds:[ecx+ebx*4>
10001996   |.  035CA9 48   add ebx,dword ptr ds:[ecx+ebp*4>
1000199A   |.  8BEB        mov ebp,ebx
1000199C   |.  33DB        xor ebx,ebx
1000199E   |.  8ADC        mov bl,ah
100019A0   |.  33AC99 4808>xor ebp,dword ptr ds:[ecx+ebx*4>
100019A7   |.  8BD8        mov ebx,eax
100019A9   |.  81E3 FF0000>and ebx,0FF
100019AF   |.  03AC99 480C>add ebp,dword ptr ds:[ecx+ebx*4>
100019B6   |.  8B59 14     mov ebx,dword ptr ds:[ecx+14]
100019B9   |.  33EB        xor ebp,ebx
100019BB   |.  33DB        xor ebx,ebx
100019BD   |.  33D5        xor edx,ebp
100019BF   |.  895424 14   mov dword ptr ss:[esp+14],edx   ;  储存并准备分成4组,分别作指针取值计算改变
100019C3   |.  8A5C24 16   mov bl,byte ptr ss:[esp+16]
100019C7   |.  C1EA 18     shr edx,18
100019CA   |.  8BAC99 4804>mov ebp,dword ptr ds:[ecx+ebx*4>
100019D1   |.  8B5C91 48   mov ebx,dword ptr ds:[ecx+edx*4>
100019D5   |.  8B5424 14   mov edx,dword ptr ss:[esp+14]
100019D9   |.  03EB        add ebp,ebx
100019DB   |.  33DB        xor ebx,ebx
100019DD   |.  8ADE        mov bl,dh
100019DF   |.  33AC99 4808>xor ebp,dword ptr ds:[ecx+ebx*4>
100019E6   |.  8BDA        mov ebx,edx
100019E8   |.  81E3 FF0000>and ebx,0FF
100019EE   |.  03AC99 480C>add ebp,dword ptr ds:[ecx+ebx*4>
100019F5   |.  8B59 10     mov ebx,dword ptr ds:[ecx+10]
100019F8   |.  33EB        xor ebp,ebx
100019FA   |.  33C5        xor eax,ebp
100019FC   |.  33DB        xor ebx,ebx
100019FE   |.  894424 14   mov dword ptr ss:[esp+14],eax   ;  储存并准备分成4组,分别作指针取值计算改变
10001A02   |.  8BE8        mov ebp,eax
10001A04   |.  8A5C24 16   mov bl,byte ptr ss:[esp+16]
10001A08   |.  8B9C99 4804>mov ebx,dword ptr ds:[ecx+ebx*4>
10001A0F   |.  C1ED 18     shr ebp,18
10001A12   |.  035CA9 48   add ebx,dword ptr ds:[ecx+ebp*4>
10001A16   |.  8BEB        mov ebp,ebx
10001A18   |.  33DB        xor ebx,ebx
10001A1A   |.  8ADC        mov bl,ah
10001A1C   |.  33AC99 4808>xor ebp,dword ptr ds:[ecx+ebx*4>
10001A23   |.  8BD8        mov ebx,eax
10001A25   |.  81E3 FF0000>and ebx,0FF
10001A2B   |.  03AC99 480C>add ebp,dword ptr ds:[ecx+ebx*4>
10001A32   |.  8B59 0C     mov ebx,dword ptr ds:[ecx+C]
10001A35   |.  33EB        xor ebp,ebx
10001A37   |.  33DB        xor ebx,ebx
10001A39   |.  33D5        xor edx,ebp
10001A3B   |.  895424 14   mov dword ptr ss:[esp+14],edx   ;  储存并准备分成4组,分别作指针取值计算改变
10001A3F   |.  8A5C24 16   mov bl,byte ptr ss:[esp+16]
10001A43   |.  C1EA 18     shr edx,18
10001A46   |.  8BAC99 4804>mov ebp,dword ptr ds:[ecx+ebx*4>
10001A4D   |.  8B5C91 48   mov ebx,dword ptr ds:[ecx+edx*4>
10001A51   |.  8B5424 14   mov edx,dword ptr ss:[esp+14]
10001A55   |.  03EB        add ebp,ebx
10001A57   |.  33DB        xor ebx,ebx
10001A59   |.  8ADE        mov bl,dh
10001A5B   |.  33AC99 4808>xor ebp,dword ptr ds:[ecx+ebx*4>
10001A62   |.  8BDA        mov ebx,edx
10001A64   |.  81E3 FF0000>and ebx,0FF
10001A6A   |.  03AC99 480C>add ebp,dword ptr ds:[ecx+ebx*4>
10001A71   |.  8B59 08     mov ebx,dword ptr ds:[ecx+8]
10001A74   |.  33EB        xor ebp,ebx
10001A76   |.  33DB        xor ebx,ebx
10001A78   |.  33C5        xor eax,ebp
10001A7A   |.  894424 14   mov dword ptr ss:[esp+14],eax   ;  断点1 储存并准备分成4组,分别作指针取值计算改变此处的EAX值与10001AB5同
10001A7E   |.  8BE8        mov ebp,eax
10001A80   |.  8A5C24 16   mov bl,byte ptr ss:[esp+16]
10001A84   |.  C1ED 18     shr ebp,18
10001A87   |.  8B9C99 4804>mov ebx,dword ptr ds:[ecx+ebx*4>
10001A8E   |.  035CA9 48   add ebx,dword ptr ds:[ecx+ebp*4>
10001A92   |.  8BEB        mov ebp,ebx
10001A94   |.  33DB        xor ebx,ebx
10001A96   |.  8ADC        mov bl,ah
10001A98   |.  33AC99 4808>xor ebp,dword ptr ds:[ecx+ebx*4>
10001A9F   |.  8BD8        mov ebx,eax
10001AA1   |.  81E3 FF0000>and ebx,0FF
10001AA7   |.  03AC99 480C>add ebp,dword ptr ds:[ecx+ebx*4>
10001AAE   |.  8B59 04     mov ebx,dword ptr ds:[ecx+4]
10001AB1   |.  8B09        mov ecx,dword ptr ds:[ecx]
10001AB3   |.  33EB        xor ebp,ebx
10001AB5   |.  33C8        xor ecx,eax                     ;  现在开始倒推:ECX是固定EB4A4B27我的结果码1CEB3030所以我的EAX必须是F7A17B17
10001AB7   |.  33D5        xor edx,ebp                     ;  断点2  推出EDX的值等同与上面10001A3B  EDX的值
10001AB9   |.  890E        mov dword ptr ds:[esi],ecx      ;  终于写入了0012D430
10001ABB   |.  8917        mov dword ptr ds:[edi],edx
10001ABD   |.  5F          pop edi
10001ABE   |.  5E          pop esi
10001ABF   |.  5D          pop ebp
10001AC0   |.  5B          pop ebx
10001AC1   \.  C2 0800     retn 8
10001AC4       90          nop
……………………………………………………………………………………………………………………………………
这里发现一张表是固定的,用于指针取之,计算:
0012C3C0  EB4A4B27
0012C3C4  80A9ECF0
0012C3C8  5336A06B
0012C3CC  E6332B22
0012C3D0  CB6960CA
0012C3D4  9ACE42FF
0012C3D8  B9088D52
0012C3DC  9B060A56
0012C3E0  1C38C9E5
0012C3E4  9C698BD0
0012C3E8  46184F38
0012C3EC  AA4B0D2E
0012C3F0  2170D567
0012C3F4  9B2CE490
0012C3F8  F86572A2
0012C3FC  71F00093
0012C400  F01AE404
0012C404  D3B2368E
0012C408  A34609DE
0012C40C  35B8F70C
0012C410  90B734C1
0012C414  BFA4758B
0012C418  DBAAB349
0012C41C  FA12B5D1
0012C420  1FD69CA1
0012C424  233CAC84
0012C428  6F3B7B61
0012C42C  133A7550
0012C430  0203C026
0012C434  E8CA811F
0012C438  D1314F7B
0012C43C  FDEF2BA1
0012C440  37B7E9F5
0012C444  20558ACB
0012C448  1B41EA90
0012C44C  F6148C49
0012C450  C809C03C
0012C454  B46B3421
0012C458  DE0FF17D
0012C45C  81ED4BC3
0012C460  CE28F22E
0012C464  B65890BF
0012C468  96C39A3C
0012C46C  E125F8C9
0012C470  8C34C5D9
0012C474  8AB9A855
0012C478  89ECFD8A
0012C47C  51913F5F
0012C480  4BF8C08A
0012C484  A29B8CFB
0012C488  CF1390D9
0012C48C  16B3B339
0012C490  834FAFEA
0012C494  0F92840A
0012C498  1F1E653D
0012C49C  1EC2826E
0012C4A0  0256D647
0012C4A4  D7B81E1F
0012C4A8  A91B0C57
下面还有还多的!!
………………………………………………………………………………………………………………………………

我的计算结果最后和1CEB3030  FFFF0F4A比较先推出EAX,再根据EAX推出EDX,然后把EDX带入上面EDX,
这样一点一点向上推,得到:我的经过第一次计算的前8位应该是346C23AD,后8位应该是AE6576A4
然后再把他们用第一次计算过程反计算!
最后我的输入码是1G300Z4T4U2T3A4K

————————————————————————————————————————————————
产生比较码:1CEB3030  FFFF0F4A的地方:
0040F261    .  E8 D42D0C00 call <jmp.&ZB_DLL.Bm3GetYJInfo>
————————————————————————————————————————————————
进入:
10001C10 Z>/$  81EC A40500>sub esp,5A4
10001C16   |.  57          push edi
10001C17   |.  B9 10000000 mov ecx,10
10001C1C   |.  33C0        xor eax,eax
10001C1E   |.  8D7C24 0C   lea edi,dword ptr ss:[esp+C]
10001C22   |.  F3:AB       rep stos dword ptr es:[edi]
10001C24   |.  8D4C24 0C   lea ecx,dword ptr ss:[esp+C]
10001C28   |.  8D4424 50   lea eax,dword ptr ss:[esp+50]
10001C2C   |.  51          push ecx
10001C2D   |.  C64424 54 0>mov byte ptr ss:[esp+54],0
10001C32   |.  C64424 10 3>mov byte ptr ss:[esp+10],37
10001C37   |.  894424 14   mov dword ptr ss:[esp+14],eax
10001C3B   |.  66:C74424 1>mov word ptr ss:[esp+18],100
10001C42   |.  E8 719B0800 call <jmp.&NETAPI32.Netbios>
10001C47   |.  8A4424 50   mov al,byte ptr ss:[esp+50]
10001C4B   |.  84C0        test al,al
10001C4D   |.  0F86 CA0000>jbe ZB_DLL.10001D1D
10001C53   |.  8A5424 51   mov dl,byte ptr ss:[esp+51]
10001C57   |.  B9 10000000 mov ecx,10
10001C5C   |.  33C0        xor eax,eax
10001C5E   |.  8D7C24 0C   lea edi,dword ptr ss:[esp+C]
10001C62   |.  F3:AB       rep stos dword ptr es:[edi]
10001C64   |.  8D4424 0C   lea eax,dword ptr ss:[esp+C]
10001C68   |.  56          push esi
10001C69   |.  50          push eax
10001C6A   |.  C64424 14 3>mov byte ptr ss:[esp+14],32
10001C6F   |.  885424 44   mov byte ptr ss:[esp+44],dl
10001C73   |.  E8 409B0800 call <jmp.&NETAPI32.Netbios>
10001C78   |.  B9 10000000 mov ecx,10
10001C7D   |.  33C0        xor eax,eax
10001C7F   |.  8D7C24 10   lea edi,dword ptr ss:[esp+10]
10001C83   |.  8D5424 1A   lea edx,dword ptr ss:[esp+1A]
10001C87   |.  F3:AB       rep stos dword ptr es:[edi]
10001C89   |.  BF 28700C10 mov edi,ZB_DLL.100C7028                  ;  ASCII "*               "
10001C8E   |.  83C9 FF     or ecx,FFFFFFFF
10001C91   |.  F2:AE       repne scas byte ptr es:[edi]
10001C93   |.  F7D1        not ecx
10001C95   |.  2BF9        sub edi,ecx
10001C97   |.  884424 40   mov byte ptr ss:[esp+40],al
10001C9B   |.  8BC1        mov eax,ecx
10001C9D   |.  8BF7        mov esi,edi
10001C9F   |.  8BFA        mov edi,edx
10001CA1   |.  C64424 10 3>mov byte ptr ss:[esp+10],33
10001CA6   |.  C1E9 02     shr ecx,2
10001CA9   |.  F3:A5       rep movs dword ptr es:[edi],dword ptr ds>
10001CAB   |.  8BC8        mov ecx,eax
10001CAD   |.  8D5424 10   lea edx,dword ptr ss:[esp+10]
10001CB1   |.  83E1 03     and ecx,3
10001CB4   |.  52          push edx
10001CB5   |.  F3:A4       rep movs byte ptr es:[edi],byte ptr ds:[>
10001CB7   |.  8D8C24 5801>lea ecx,dword ptr ss:[esp+158]
10001CBE   |.  66:C74424 1>mov word ptr ss:[esp+1C],258
10001CC5   |.  894C24 18   mov dword ptr ss:[esp+18],ecx
10001CC9   |.  E8 EA9A0800 call <jmp.&NETAPI32.Netbios>
10001CCE   |.  84C0        test al,al
10001CD0   |.  5E          pop esi
10001CD1   |.  75 4A       jnz short ZB_DLL.10001D1D
10001CD3   |.  8B8424 AC05>mov eax,dword ptr ss:[esp+5AC]
10001CDA   |.  8A8C24 5001>mov cl,byte ptr ss:[esp+150]
10001CE1   |.  8A9424 5101>mov dl,byte ptr ss:[esp+151]
10001CE8   |.  5F          pop edi
10001CE9   |.  8808        mov byte ptr ds:[eax],cl
10001CEB   |.  8A8C24 4E01>mov cl,byte ptr ss:[esp+14E]
10001CF2   |.  8850 01     mov byte ptr ds:[eax+1],dl
10001CF5   |.  8A9424 4F01>mov dl,byte ptr ss:[esp+14F]
10001CFC   |.  8848 02     mov byte ptr ds:[eax+2],cl
10001CFF   |.  8A8C24 5001>mov cl,byte ptr ss:[esp+150]
10001D06   |.  8850 03     mov byte ptr ds:[eax+3],dl
10001D09   |.  8A9424 5101>mov dl,byte ptr ss:[esp+151]
10001D10   |.  8848 04     mov byte ptr ds:[eax+4],cl
10001D13   |.  8850 05     mov byte ptr ds:[eax+5],dl
10001D16   |.  81C4 A40500>add esp,5A4
10001D1C   |.  C3          retn                                    
10001D1D   |>  8D8424 A803>lea eax,dword ptr ss:[esp+3A8]              没上网到这里
10001D24   |.  68 00010000 push 100                                 ; /pFileSystemNameSize = 00000100
10001D29   |.  8D4C24 0C   lea ecx,dword ptr ss:[esp+C]             ; |
10001D2D   |.  50          push eax                                 ; |pFileSystemNameBuffer
10001D2E   |.  8D5424 54   lea edx,dword ptr ss:[esp+54]            ; |
10001D32   |.  51          push ecx                                 ; |pFileSystemFlags
10001D33   |.  8D4424 10   lea eax,dword ptr ss:[esp+10]            ; |
10001D37   |.  52          push edx                                 ; |pMaxFilenameLength
10001D38   |.  50          push eax                                 ; |pVolumeSerialNumber
10001D39   |.  8D8C24 BC04>lea ecx,dword ptr ss:[esp+4BC]           ; |
10001D40   |.  68 00010000 push 100                                 ; |MaxVolumeNameSize = 100 (256.)
10001D45   |.  51          push ecx                                 ; |VolumeNameBuffer
10001D46   |.  68 24700C10 push ZB_DLL.100C7024                     ; |RootPathName = "C:\"
10001D4B   |.  C74424 28 0>mov dword ptr ss:[esp+28],0              ; |
10001D53   |.  FF15 24A109>call dword ptr ds:[<&KERNEL32.GetVolumeI>; \GetVolumeInformationA
10001D59   |.  8B8424 AC05>mov eax,dword ptr ss:[esp+5AC]
10001D60   |.  8B4C24 04   mov ecx,dword ptr ss:[esp+4]
10001D64   |.  8A5424 06   mov dl,byte ptr ss:[esp+6]
10001D68   |.  5F          pop edi
10001D69   |.  8848 02     mov byte ptr ds:[eax+2],cl
10001D6C   |.  8A4C24 03   mov cl,byte ptr ss:[esp+3]
10001D70   |.  C600 30     mov byte ptr ds:[eax],30
10001D73   |.  C640 01 30  mov byte ptr ds:[eax+1],30
10001D77   |.  8868 03     mov byte ptr ds:[eax+3],ch
10001D7A   |.  8850 04     mov byte ptr ds:[eax+4],dl
10001D7D   |.  8848 05     mov byte ptr ds:[eax+5],cl
10001D80   |.  81C4 A40500>add esp,5A4
10001D86   \.  C3          retn

分上网和没上网之分!!!!(估计它分为网络版本和,单机版本)
————————————————————————————————————————————————
整理:机器码:334Q0K1U4G3K3T52
      序列号:1G300Z4T4U2T3A4K

还有我发现,此软件,重新验证机制不太行,它写一文件在C:\WINDOWS\SYSTEM32\regyskjinfo16.sys
所以你也可以这样破解:你可以自己创建C:\WINDOWS\SYSTEM32\regyskjinfo16.sys,并写上32(是32位)的数字,如12121212121212121212121212121212即可通过!!
不行你换个数字好了!!
爆破点:
0040F2CB    . /75 1E       jnz short ZKJ2000.0040F2EB               ;  爆破点
0040F2CD    . |40          inc eax
0040F2CE    . |83F8 06     cmp eax,6
0040F2D1    .^|7C EE       jl short ZKJ2000.0040F2C1
0040F2D3    . |8B45 C2     mov eax,dword ptr ss:[ebp-3E]
0040F2D6    . |3C FF       cmp al,0FF
0040F2D8    . |75 24       jnz short ZKJ2000.0040F2FE               ;  爆破点



0040F3AD    . /0F84 4E0100>je ZKJ2000.0040F501                      ;  爆破点

注意:爆破后要输入两次序列号,就是在regyskjinfo16.sys写两次,就是32位的,(不知道有没有限制)