您的位置:首页精文荟萃破解文章 → 英语八哥 V3.6

英语八哥 V3.6

时间:2004/10/15 1:01:00来源:本站整理作者:蓝点我要评论(0)

 【软件限制】:功能限制
【作者声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!
【破解工具】:TRW2000娃娃修改版、Ollydbg1.09、PEiD、W32Dasm 9.0白金版

—————————————————————————————————  
【过    程】:

英语八哥.exe 无壳。 P-Code 的东东。
据说完整注册还需要一个DLL文件,我这里只是简单探讨一下其注册码的保护方式,我也没有那个DLL文件。
哎,非要碰上这个难缠的P-Code,用了我2天的宝贵时间来分析,许多的指令不知道其涵义,只能是猜测+调试了。
不明白P-Code的许多命令都要来两次,呵呵,我现在已然是晕头转向了。错误之处烦请方家指正!
点“注册”没有一点提示,于是用TRW的万能断点,简单就找到了比较的地方,但是找算法却花了20倍的时间!
我的水平很低,许多地方无法写清楚了。抱歉!
突然想起作者推崇的“黄金分割定律”,或许这个程序的算法也运用了“黄金分割比率”的某些方面呀。
向作者道歉了!佩服作者的编程功夫!真的奢望某某年之后我也能达到这个水平呀!

机器码:6004111345232619
试炼码:13572468

—————————————————————————————————
一、调用MSVBVM60.rtcMidCharBstr取5KA089DJ的字符:
5KA089DJ应该是我硬盘的某个信息,依稀记得曾调试过的某个软件也是取这个参数。


66024808    E8 1E000000     CALL MSVBVM60.rtcMidBstr
6602480D    C9              LEAVE
6602480E    C2 0C00         RETN 0C
66024811    33C9            XOR ECX,ECX
66024813  ^ EB E2           JMP SHORT MSVBVM60.660247F7
66024815    50              PUSH EAX
66024816    66:C745 F0 0300 MOV WORD PTR SS:[EBP-10],3
6602481C    E8 7A010000     CALL MSVBVM60.6602499B
66024821    D1E0            SHL EAX,1
66024823    8945 F8         MOV DWORD PTR SS:[EBP-8],EAX
66024826    8D45 F0         LEA EAX,DWORD PTR SS:[EBP-10]
66024829  ^ EB D1           JMP SHORT MSVBVM60.660247FC
6602482B >  8B4424 08       MOV EAX,DWORD PTR SS:[ESP+8]
6602482F    53              PUSH EBX
66024830    56              PUSH ESI
66024831    57              PUSH EDI
66024832    8D78 FF         LEA EDI,DWORD PTR DS:[EAX-1]
66024835    85FF            TEST EDI,EDI
66024837    0F8C 91260200   JL MSVBVM60.66046ECE
6602483D    81FF FFFFFF7F   CMP EDI,7FFFFFFF
66024843    0F8F 85260200   JG MSVBVM60.66046ECE
66024849    8B4424 10       MOV EAX,DWORD PTR SS:[ESP+10]
6602484D    8BDF            MOV EBX,EDI
6602484F    85C0            TEST EAX,EAX
66024851    0F84 7E260200   JE MSVBVM60.66046ED5
66024857    8B70 FC         MOV ESI,DWORD PTR DS:[EAX-4]
6602485A    3BFE            CMP EDI,ESI
6602485C    0F87 7A260200   JA MSVBVM60.66046EDC
66024862    8B4C24 18       MOV ECX,DWORD PTR SS:[ESP+18]
66024866    66:8339 0A      CMP WORD PTR DS:[ECX],0A
6602486A    75 35           JNZ SHORT MSVBVM60.660248A1
6602486C    8179 08 0400028>CMP DWORD PTR DS:[ECX+8],80020004
66024873    75 2C           JNZ SHORT MSVBVM60.660248A1
66024875    83C8 FF         OR EAX,FFFFFFFF
66024878    66:85C0         TEST AX,AX
6602487B    74 28           JE SHORT MSVBVM60.660248A5
6602487D    2BF3            SUB ESI,EBX
6602487F    8BC6            MOV EAX,ESI
66024881    50              PUSH EAX
66024882    8B4424 14       MOV EAX,DWORD PTR SS:[ESP+14]
                           ====>EAX=5KA089DJ

66024886    03D8            ADD EBX,EAX
                           ====>EBX=依次取5KA089DJ字符的HEX值

66024888    53              PUSH EBX
66024889    FF15 EC190066   CALL DWORD PTR DS:[<&OLEAUT32.#150>]; OLEAUT32.SysAllocStringByteLen
6602488F    8BF0            MOV ESI,EAX
66024891    85F6            TEST ESI,ESI
66024893    0F84 51260200   JE MSVBVM60.66046EEA
66024899    8BC6            MOV EAX,ESI
6602489B    5F              POP EDI
6602489C    5E              POP ESI
6602489D    5B              POP EBX
6602489E    C2 0C00         RETN 0C


—————————————————————————————————
比较取的字符是否是数字:


77A32A0E    F3:66:A7        REPE CMPS WORD PTR ES:[EDI],WORD PTR DS:>
                           ====>比较所取的字符是否是数字。每个字符都比较2次,呵呵。

6610344F    E8 03CDFFFF     CALL MSVBVM60.__vbaBoolVarNull
                           ====>晕,再比较一次


取硬盘参数5KA089DJ。如果是数字则直接保留;是字母则取其字符的HEX值的10进制值并加上其所在的位数。
5KA089DJ得出577680897582     呵呵,这个答案是猜测的,抱歉没能找到转换的地方。


—————————————————————————————————
调用OLEAUT32.VarBstrCat 连接所得出的字符:


66025324 >  55               PUSH EBP
66025325    8BEC             MOV EBP,ESP
66025327    8D45 08          LEA EAX,DWORD PTR SS:[EBP+8]
6602532A    50               PUSH EAX
6602532B    FF75 08          PUSH DWORD PTR SS:[EBP+8]
6602532E    FF75 0C          PUSH DWORD PTR SS:[EBP+C]
66025331    FF15 6CFE1066    CALL DWORD PTR DS:[6610FE6C]; OLEAUT32.VarBstrCat
66025337    85C0             TEST EAX,EAX
66025339    0F8C D11A0200    JL MSVBVM60.66046E10
6602533F    8B45 08          MOV EAX,DWORD PTR SS:[EBP+8]
                            ====>5KA089DJ最后得出 EAX=577680897582

66025342    5D               POP EBP
66025343    C2 0800          RETN 8
—————————————————————————————————
下面再取577680897582:


66024882    8B4424 14       MOV EAX,DWORD PTR SS:[ESP+14]
                           ====>EAX=577680897582

66024886    03D8            ADD EBX,EAX
                      1、  ====>EBX=897582       从第7位取577680897582
                      2、  ====>EBX=7680897582   从第3位取577680897582

66024888    53              PUSH EBX
66024889    FF15 EC190066   CALL DWORD PTR DS:[<&OLEAUT32.#150>] ; OLEAUT32.SysAllocStringByteLen
6602488F    8BF0            MOV ESI,EAX
66024891    85F6            TEST ESI,ESI
66024893    0F84 51260200   JE MSVBVM60.66046EEA
66024899    8BC6            MOV EAX,ESI
                      1、  ====>897   取897582的前3位
                      2、  ====>768   取7680897582的前3位

6602489B    5F              POP EDI
6602489C    5E              POP ESI
6602489D    5B              POP EBX
6602489E    C2 0C00         RETN 0C

66024A2A    8B41 FC          MOV EAX,DWORD PTR DS:[ECX-4]
66024A2D    2BC2             SUB EAX,EDX
66024A2F    52               PUSH EDX
66024A30    03C1             ADD EAX,ECX
66024A32    50               PUSH EAX
                      3、  ====>EAX=582
                      4、  ====>EAX=768582
66024A33    FF15 EC190066    CALL DWORD PTR DS:[<&OLEAUT32.#150>]           ; OLEAUT32.SysAllocStringByteLen
66024A39    8BF0             MOV ESI,EAX
66024A3B    85F6             TEST ESI,ESI
66024A3D    0F84 84240200    JE MSVBVM60.66046EC7
66024A43    8BC6             MOV EAX,ESI
66024A45    5E               POP ESI
66024A46    C2 0800          RETN 8
—————————————————————————————————
对上面所取的字符进行连接:

66105616    FFD3             CALL EBX    ; MSVBVM60.__vbaVarAdd
66105618    57               PUSH EDI
66105619    33C0             XOR EAX,EAX
6610561B    8A46 02          MOV AL,BYTE PTR DS:[ESI+2]
6610561E    83C6 03          ADD ESI,3
66105621    FF2485 58EA0F66  JMP DWORD PTR DS:[EAX*4+660FEA58]

跟进MSVBVM60.__vbaVarAdd:

77A2F04D >/$  55             PUSH EBP
77A2F04E  |.  8BEC           MOV EBP,ESP
77A2F050  |.  53             PUSH EBX
77A2F051  |.  56             PUSH ESI
77A2F052  |.  8B75 08        MOV ESI,DWORD PTR SS:[EBP+8]
77A2F055  |.  57             PUSH EDI
77A2F056  |.  85F6           TEST ESI,ESI
77A2F058  |.  75 2E          JNZ SHORT OLEAUT32.77A2F088
77A2F05A  |.  33DB           XOR EBX,EBX
77A2F05C  |>  8B45 0C        MOV EAX,DWORD PTR SS:[EBP+C]
77A2F05F  |.  85C0           TEST EAX,EAX
77A2F061  |.  75 2A          JNZ SHORT OLEAUT32.77A2F08D
77A2F063  |.  2145 08        AND DWORD PTR SS:[EBP+8],EAX
77A2F066  |>  8B45 08        MOV EAX,DWORD PTR SS:[EBP+8]
77A2F069  |.  03C3           ADD EAX,EBX
77A2F06B  |.  50             PUSH EAX
77A2F06C  |.  6A 00          PUSH 0
77A2F06E  |.  E8 194EF8FF    CALL OLEAUT32.SysAllocStringByteLen
77A2F073  |.  8B4D 10        MOV ECX,DWORD PTR SS:[EBP+10]
77A2F076  |.  85C0           TEST EAX,EAX
77A2F078  |.  8901           MOV DWORD PTR DS:[ECX],EAX
77A2F07A  |.  75 19          JNZ SHORT OLEAUT32.77A2F095
77A2F07C  |.  B8 0E000780    MOV EAX,8007000E
77A2F081  |>  5F             POP EDI
77A2F082  |.  5E             POP ESI
77A2F083  |.  5B             POP EBX
77A2F084  |.  5D             POP EBP
77A2F085  |.  C2 0C00        RETN 0C

577680897582重新连接的结果为:577897768582  
然后再分别取前6位、后6位运算。

—————————————————————————————————
分别取768582、577897与程序给的654321相加:

77A2F546    E8 B420F8FF     CALL OLEAUT32.VariantChangeTypeEx
77A2F54B    85C0            TEST EAX,EAX
77A2F54D    8945 08         MOV DWORD PTR SS:[EBP+8],EAX
77A2F550  ^ 0F8C ADFDFFFF   JL OLEAUT32.77A2F303
77A2F556    DD45 E0         FLD QWORD PTR SS:[EBP-20]
                           ====>SS:[EBP-20]=654321.0000000000    程序自给
77A2F559    DC45 F0         FADD QWORD PTR SS:[EBP-10]
                        1、====>ST=654321.0000000000 + 768582.0000000000=1422903.0000000000000
                        2、====>ST=654321.0000000000 + 577897.0000000000=701353.00000000000000
77A2F55C    DD55 F8         FST QWORD PTR SS:[EBP-8]
77A2F55F    8B4D FC         MOV ECX,DWORD PTR SS:[EBP-4]
77A2F562    B8 0000F07F     MOV EAX,7FF00000
77A2F567    23C8            AND ECX,EAX
77A2F569    6A 05           PUSH 5
77A2F56B    3BC8            CMP ECX,EAX
77A2F56D    5B              POP EBX
77A2F56E    0F85 E0000000   JNZ OLEAUT32.77A2F654
77A2F574    DDD8            FSTP ST
77A2F576    DBE2            FCLEX
77A2F578    C745 08 0A00028>MOV DWORD PTR SS:[EBP+8],8002000A
77A2F57F  ^ E9 9FFDFFFF     JMP OLEAUT32.77A2F323

—————————————————————————————————
将1422903和701053转换成UNICODE格式:

661034CF    E8 FA15FEFF     CALL MSVBVM60.__vbaStrI4
661034D4    50              PUSH EAX
                        1、====>EAX=1422903
                        2、====>EAX=701353
661034D5    33C0            XOR EAX,EAX
661034D7    8A06            MOV AL,BYTE PTR DS:[ESI]
661034D9    46              INC ESI
661034DA    FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]

—————————————————————————————————  
将1422903和701053 连接起来:

660FE996    E8 8969F2FF     CALL MSVBVM60.__vbaStrCat
660FE99B    50              PUSH EAX
660FE99C    33C0            XOR EAX,EAX
660FE99E    8A06            MOV AL,BYTE PTR DS:[ESI]
660FE9A0    46              INC ESI
660FE9A1    FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]

66025324 >  55              PUSH EBP
66025325    8BEC            MOV EBP,ESP
66025327    8D45 08         LEA EAX,DWORD PTR SS:[EBP+8]
6602532A    50              PUSH EAX
6602532B    FF75 08         PUSH DWORD PTR SS:[EBP+8]
6602532E    FF75 0C         PUSH DWORD PTR SS:[EBP+C]
66025331    FF15 6CFE1066   CALL DWORD PTR DS:[6610FE6C]; OLEAUT32.VarBstrCat
66025337    85C0            TEST EAX,EAX
66025339    0F8C D11A0200   JL MSVBVM60.66046E10
6602533F    8B45 08         MOV EAX,DWORD PTR SS:[EBP+8]
                           ====>EAX=1422903701053
66025342    5D              POP EBP
66025343    C2 0800         RETN 8

—————————————————————————————————
取1422903701053的前8位14229037的16进制值:

66103650    E8 7150FEFF     CALL MSVBVM60.__vbaI4ErrVar
66103655    50              PUSH EAX
                           ====>EAX=00D91E2D(H)=14229037(D)
66103656    33C0            XOR EAX,EAX
66103658    8A06            MOV AL,BYTE PTR DS:[ESI]
6610365A    46              INC ESI
6610365B    FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]

00D91E2D就是运算注册码的核心参数!!!
—————————————————————————————————
用14229037生成软件上所显示的机器码:
呵呵,我实在是太累了,这一步无法详细跟踪了,最后再给个简单的求逆方式。^O^^O^

66103675    E8 6315FEFF     CALL MSVBVM60.rtBstrFromErrVar
6610367A    50              PUSH EAX
                           ====>EAX=140069162    很象我的机器码的某些位呀^O^^O^
6610367B    33C0            XOR EAX,EAX
6610367D    8A06            MOV AL,BYTE PTR DS:[ESI]
6610367F    46              INC ESI
66103680    FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]

660F99F0    57              PUSH EDI
660F99F1    56              PUSH ESI
660F99F2    8B73 FC         MOV ESI,DWORD PTR DS:[EBX-4]
660F99F5    D1EE            SHR ESI,1
660F99F7    56              PUSH ESI
660F99F8    6A 00           PUSH 0
660F99FA    FF15 E8190066   CALL DWORD PTR DS:[<&OLEAUT32.#4>] ; OLEAUT32.SysAllocStringLen
660F9A00    8BF8            MOV EDI,EAX
...........
.......
660F9A27    41              INC ECX
660F9A28    4A              DEC EDX
660F9A29    66:8930         MOV WORD PTR DS:[EAX],SI
660F9A2C  ^ 75 F3           JNZ SHORT MSVBVM60.660F9A21
660F9A2E    8BC7            MOV EAX,EDI
660F9A30    5E              POP ESI
660F9A31    5F              POP EDI
660F9A32  ^ EB B8           JMP SHORT MSVBVM60.660F99EC

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
====>下面是填入试炼码后拦截的关键部分:
—————————————————————————————————  
分别取试炼码13572468和核心参数14229037。并转换成UNICODE格式:

6601B79B    FFD6            CALL ESI
6601B79D    837D 0C FF      CMP DWORD PTR SS:[EBP+C],-1
6601B7A1    8BF8            MOV EDI,EAX
6601B7A3    75 01           JNZ SHORT MSVBVM60.6601B7A6
6601B7A5    4F              DEC EDI
6601B7A6    57              PUSH EDI
6601B7A7    53              PUSH EBX
6601B7A8    FF15 E8190066   CALL DWORD PTR DS:[<&OLEAUT32.#4>]; OLEAUT32.SysAllocStringLen
6601B7AE    3BC3            CMP EAX,EBX
6601B7B0    8945 FC         MOV DWORD PTR SS:,EAX
                           ====>[EBP-4]=EAX=14229037      机器码生成的核心参数
6601B7B3    0F84 E9F90100   JE MSVBVM60.6603B1A2
6601B7B9    47              INC EDI
6601B7BA    57              PUSH EDI
6601B7BB    50              PUSH EAX
6601B7BC    FF75 0C         PUSH DWORD PTR SS:[EBP+C]
6601B7BF    FF75 08         PUSH DWORD PTR SS:[EBP+8]
                           ====>[EBP+8]=13572468          试炼码
6601B7C2    53              PUSH EBX
6601B7C3    53              PUSH EBX
6601B7C4    FFD6            CALL ESI
                           ====>将试炼码和14229037转换成UNICODE格式
6601B7C6    8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
                    1、    ====>EAX=1357248
                    2、    ====>EAX=14229037  
6601B7C9    5F              POP EDI
6601B7CA    5E              POP ESI
6601B7CB    5B              POP EBX
6601B7CC    C9              LEAVE
6601B7CD    C2 0800         RETN 8

—————————————————————————————————  
下面是调用 MSVBVM60.__vbaI4Str 取14229037的16进制值

66103597    E8 BB1FFEFF      CALL MSVBVM60.__vbaI4Str
                            ====>取14229037的16进制值00D91E2D
6610359C    50               PUSH EAX
                            ====>EAX=00D91E2D
6610359D    33C0             XOR EAX,EAX
6610359F    8A06             MOV AL,BYTE PTR DS:[ESI]
661035A1    46               INC ESI
661035A2    FF2485 58EA0F66  JMP DWORD PTR DS:[EAX*4+660FEA58]

—————————————————————————————————
下面是对00D91E2D进行简单的 除2 运算,取得商:

6610533B    59               POP ECX
6610533C    58               POP EAX
6610533D    99               CDQ
6610533E    F7F9             IDIV ECX
                            ====>EAX=00D91E2D / 2=006C8F16(H)=7114518(D)
66105340    50               PUSH EAX
66105341    33C0             XOR EAX,EAX
66105343    8A06             MOV AL,BYTE PTR DS:[ESI]
66105345    46               INC ESI
66105346    FF2485 58EA0F66  JMP DWORD PTR DS:[EAX*4+660FEA58]

—————————————————————————————————  
下面是取商006C8F16的10进制值:

661034CF    E8 FA15FEFF      CALL MSVBVM60.__vbaStrI4
661034D4    50               PUSH EAX
                            ====>EAX=7114518
661034D5    33C0             XOR EAX,EAX
661034D7    8A06             MOV AL,BYTE PTR DS:[ESI]
661034D9    46               INC ESI
661034DA    FF2485 58EA0F66  JMP DWORD PTR DS:[EAX*4+660FEA58]

—————————————————————————————————  
下面是调用 rtcStrReverse 命令将7114518倒序排列:^O^^O^

660F9A00    8BF8             MOV EDI,EAX
                            ====>EDI=EAX=7114518
660F9A02    85FF             TEST EDI,EDI
660F9A04    75 07            JNZ SHORT MSVBVM60.660F9A0D
660F9A06    6A 0E            PUSH 0E
660F9A08    E8 85BBF2FF      CALL MSVBVM60.66025592
660F9A0D    66:832477 00     AND WORD PTR DS:[EDI+ESI*2],0
660F9A12    8D0477           LEA EAX,DWORD PTR DS:[EDI+ESI*2]
660F9A15    8BD6             MOV EDX,ESI
660F9A17    4E               DEC ESI
660F9A18    85D2             TEST EDX,EDX
660F9A1A    8BCB             MOV ECX,EBX
660F9A1C    76 10            JBE SHORT MSVBVM60.660F9A2E
660F9A1E    8D56 01          LEA EDX,DWORD PTR DS:[ESI+1]
660F9A21    66:8B31          MOV SI,WORD PTR DS:[ECX]
660F9A24    48               DEC EAX
660F9A25    48               DEC EAX
660F9A26    41               INC ECX
660F9A27    41               INC ECX
660F9A28    4A               DEC EDX
660F9A29    66:8930          MOV WORD PTR DS:[EAX],SI
660F9A2C  ^ 75 F3            JNZ SHORT MSVBVM60.660F9A21
660F9A2E    8BC7             MOV EAX,EDI
                            ====>EAX=8154117       倒序排列的结果!注意!!
660F9A30    5E               POP ESI
660F9A31    5F               POP EDI
660F9A32  ^ EB B8            JMP SHORT MSVBVM60.660F99EC

—————————————————————————————————  
下面是调用 MSVBVM60.__vbaLenBstr 命令取8154117的长度:

661071D4    E8 F2D6F1FF      CALL MSVBVM60.__vbaLenBstr
661071D9    50               PUSH EAX
                            ====>EAX=7    以此长度取下面的试炼码进行比较!
661071DA    33C0             XOR EAX,EAX
661071DC    8A06             MOV AL,BYTE PTR DS:[ESI]
661071DE    46               INC ESI
—————————————————————————————————  
下面是调用 MSVBVM60.rtcLeftVar 命令取试炼码的前7位字符:

660248EE >  55               PUSH EBP
660248EF    8BEC             MOV EBP,ESP
660248F1    83EC 10          SUB ESP,10
660248F4    8B45 10          MOV EAX,DWORD PTR SS:[EBP+10]
660248F7    56               PUSH ESI
660248F8    03C0             ADD EAX,EAX
660248FA    57               PUSH EDI
660248FB    50               PUSH EAX
660248FC    8D45 F0          LEA EAX,DWORD PTR SS:[EBP-10]
660248FF    FF75 0C          PUSH DWORD PTR SS:[EBP+C]
66024902    50               PUSH EAX
66024903    E8 11000000      CALL MSVBVM60.rtcLeftVar
66024908    8BF0             MOV ESI,EAX
6602490A    8B45 08          MOV EAX,DWORD PTR SS:[EBP+8]
6602490D    8BF8             MOV EDI,EAX
6602490F    A5               MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
66024910    A5               MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
66024911    A5               MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
66024912    A5               MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
66024913    5F               POP EDI
66024914    5E               POP ESI
66024915    C9               LEAVE
66024916    C2 0C00          RETN 0C

66024919 >  55               PUSH EBP
6602491A    8BEC             MOV EBP,ESP
6602491C    83EC 10          SUB ESP,10
6602491F    56               PUSH ESI
66024920    57               PUSH EDI
66024921    FF35 B0FE1066    PUSH DWORD PTR DS:[6610FEB0]
66024927    FF15 AC100066    CALL DWORD PTR DS:[<&KERNEL32.TlsGetvalue>]
6602492D    8D70 50          LEA ESI,DWORD PTR DS:[EAX+50]
66024930    56               PUSH ESI
66024931    FF75 0C          PUSH DWORD PTR SS:[EBP+C]
66024934    E8 37000000      CALL MSVBVM60.66024970
66024939    83F8 FF          CMP EAX,-1
6602493C    0F84 52250200    JE MSVBVM60.66046E94
66024942    FF75 10          PUSH DWORD PTR SS:[EBP+10]
66024945    50               PUSH EAX
                            ====>EAX=13572468           试炼码
66024946    E8 18FEFFFF      CALL MSVBVM60.rtcLeftBstr
                            ====>取试炼码的前7位!
6602494B    66:833E 08       CMP WORD PTR DS:[ESI],8
6602494F    8945 F8          MOV DWORD PTR SS:[EBP-8],EAX
                            ====>[EBP-8]=EAX=1357246    试炼码的前7位
66024952    66:C745 F0 0800  MOV WORD PTR SS:[EBP-10],8
66024958    0F84 24250200    JE MSVBVM60.66046E82
6602495E    8B45 08          MOV EAX,DWORD PTR SS:[EBP+8]
66024961    8D75 F0          LEA ESI,DWORD PTR SS:[EBP-10]
66024964    8BF8             MOV EDI,EAX
66024966    A5               MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
66024967    A5               MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
66024968    A5               MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
66024969    A5               MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
6602496A    5F               POP EDI
6602496B    5E               POP ESI
6602496C    C9               LEAVE
6602496D    C2 0C00          RETN 0C

—————————————————————————————————  
下面是调用 OLEAUT32.VarCmp 进行比较了:^O^^O^^O^^O^

66100055    FF15 60FE1066    CALL DWORD PTR DS:[6610FE60] ; OLEAUT32.VarCmp
6610005B    8945 08          MOV DWORD PTR SS:[EBP+8],EAX
6610005E    8B75 08          MOV ESI,DWORD PTR SS:[EBP+8]
66100061    85F6             TEST ESI,ESI
66100063    0F8C E9780000    JL MSVBVM60.66107952
                            ====>不跳则OVER!     呵呵,可惜无法爆破了。
66100069    8D46 FF          LEA EAX,DWORD PTR DS:[ESI-1]
6610006C    5F               POP EDI
6610006D    5E               POP ESI
6610006E    5B               POP EBX
6610006F    C9               LEAVE
66100070    C2 0C00          RETN 0C

跟进OLEAUT32.VarCmp:

77A329D3  |.  8B75 08        MOV ESI,DWORD PTR SS:[EBP+8]
                            ====>ESI=1357246            试炼码的前7位!
77A329D6  |.  57             PUSH EDI
77A329D7  |.  85F6           TEST ESI,ESI
77A329D9  |.  75 4C          JNZ SHORT OLEAUT32.77A32A27
77A329DB  |.  2175 FC        AND DWORD PTR SS:[EBP-4],ESI
77A329DE  |>  8B4D 0C        MOV ECX,DWORD PTR SS:[EBP+C]
                            ====>ECX=8154117    呵呵,这就是我的注册码了!     
77A329E1  |.  85C9           TEST ECX,ECX
77A329E3  |.  75 4A          JNZ SHORT OLEAUT32.77A32A2F
77A329E5  |.  33DB           XOR EBX,EBX
77A329E7  |>  395D FC        CMP DWORD PTR SS:[EBP-4],EBX
77A329EA  |.  8B55 FC        MOV EDX,DWORD PTR SS:[EBP-4]
77A329ED  |.  72 02          JB SHORT OLEAUT32.77A329F1
77A329EF  |.  8BD3           MOV EDX,EBX
77A329F1  |>  8B45 10        MOV EAX,DWORD PTR SS:[EBP+10]
77A329F4  |.  85C0           TEST EAX,EAX
77A329F6  |.  75 5B          JNZ SHORT OLEAUT32.77A32A53
77A329F8  |.  85D2           TEST EDX,EDX
77A329FA  |.  74 60          JE SHORT OLEAUT32.77A32A5C
77A329FC  |.  8BC2           MOV EAX,EDX
77A329FE  |.  D1E8           SHR EAX,1
77A32A00  |.  8945 10        MOV DWORD PTR SS:[EBP+10],EAX
77A32A03  |.  8B7D 0C        MOV EDI,DWORD PTR SS:[EBP+C]
77A32A06  |.  8B75 08        MOV ESI,DWORD PTR SS:[EBP+8]
77A32A09  |.  8B4D 10        MOV ECX,DWORD PTR SS:[EBP+10]
77A32A0C  |.  33C0           XOR EAX,EAX
77A32A0E  |.  F3:66:A7       REPE CMPS WORD PTR ES:[EDI],WORD PTR DS:[ESI]
                            ====>逐位比较!有一个不同就OVER了!
77A32A11  |.  74 05          JE SHORT OLEAUT32.77A32A18
                            ====>不跳则OVER!
77A32A13  |.  1BC0           SBB EAX,EAX
77A32A15  |.  83D8 FF        SBB EAX,-1
77A32A18  |>  85C0           TEST EAX,EAX
77A32A1A  |.  7F 45          JG SHORT OLEAUT32.77A32A61
77A32A1C  |.  7D 16          JGE SHORT OLEAUT32.77A32A34
77A32A1E  |.  33C0           XOR EAX,EAX
77A32A20  |>  5F             POP EDI
77A32A21  |.  5E             POP ESI
77A32A22  |.  5B             POP EBX
77A32A23  |.  C9             LEAVE
77A32A24  |.  C2 1000        RETN 10

—————————————————————————————————
【算 法  总 结】:
这应该是我跟踪过的最麻烦的P-Code程序了。
程序首先取我的硬盘某个参数5KA089DJ生成运算注册码的核心参数14229037,再用14229037生成显示出来的机器码。
呵呵,我学习 SIMONYAN 大侠的教材简单猜测一下过程,感谢 SIMONYAN 大侠!
1、我的机器码是6004111345232619  取机器码的前5位60041 和后4位 2619
2、分别倒序排列:60041->14006   2619->9162
3、将这2部分连接起来:140069162
4、140069162-125840125=14229037 (125840125应该是固定参数)这样就得出了我上面的核心参数了。
5、14229037 / 2=7114518  (取商)   
6、7114518 倒序排列:8154117      这个就是我的注册码了!

当然,这个求逆过程有些是我的猜测,并不一定是完全正确的。
以前有人说过其注册码是10位的,但是我分析的这个3.6版却没有这个限制,或许程序还有其它的暗桩。
限于我的水平太低,只能分析到这一步了,欢迎老师们指教!^O^^O^^O^^O^
—————————————————————————————————
【注册信息保存】:
REGEDIT4

[HKEY_CURRENT_USER\Software\VB and VBA Program Settings\bogo\enbogo]
"englishbogo"="7114518"
—————————————————————————————————  
【整        理】:
机器码:6004111345232619
注册码:8154117
—————————————————————————————————

    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程