饮羽公路造价V1.88破解分析
破解人:lchhome[OCN][DFCG]

一、此软件是用VB6.0编写,无壳。
二、因用W32dsm反汇编找到任何有用的字符串,用GetVBRes载入程序,找到“注册码错误”改为任意字符“happy new year”,再用W32dsm反汇编,这下可找到“happy new year”,双击,再往上找,可找到关键跳转句“0079063C     0F84 16010000  JE yglzj.00790758”,把JE改为JNE,可跳到“注册码成功”,但这不是完美爆破,仍然有功能限制,不管它,用OD载入程序,跳到0079063C句,然后往上找,如下:

007904AA   . E8 93D2C7FF    CALL <JMP.&MSVBVM60.__vbaStrCmp>         看见没有,比较函数,重要,按F2下断吧,然后按F9进入程                                                                  序,在注册框中填入“用户名:lchhome@163.com,注册码:1234567890”                                                               后,按F8跟进
007904AF   . 85C0           TEST EAX,EAX
007904B1   . 0F85 A2000000  JNZ yglzj.00790559                把假注册码比较后,继续往下跳到 00790559句 ,走    
007904B7   . B8 04000280    MOV EAX,80020004
007904BC   . 8985 58FFFFFF  MOV DWORD PTR SS:[EBP-A8],EAX
007904C2   . 6A 0A          PUSH 0A
007904C4   . 5F             POP EDI
 ............................................................

                      中间一段省略

............................................................
00790531   . E8 E8D1C7FF    CALL <JMP.&MSVBVM60.#595>
00790536   . 8985 B8FEFFFF  MOV DWORD PTR SS:[EBP-148],EAX
0079053C   . C785 B0FEFFFF >MOV DWORD PTR SS:[EBP-150],3
00790546   . 8D95 B0FEFFFF  LEA EDX,DWORD PTR SS:[EBP-150]
0079054C   . 8D4D C4        LEA ECX,DWORD PTR SS:[EBP-3C]
0079054F   . E8 42D2C7FF    CALL <JMP.&MSVBVM60.__vbaVarMove>
00790554   . E9 9A010000    JMP yglzj.007906F3
00790559   > 8B03           MOV EAX,DWORD PTR DS:[EBX]         跳到此处,往下走
0079055B   . 68 38B0A600    PUSH yglzj.00A6B038
00790560   . 68 48B0A600    PUSH yglzj.00A6B048
00790565   . 68 44B0A600    PUSH yglzj.00A6B044
0079056A   . 68 40B0A600    PUSH yglzj.00A6B040
0079056F   . 53             PUSH EBX
00790570   . FF90 F8060000  CALL DWORD PTR DS:[EAX+6F8]         这里有个CAll,按F7跟进
00790576   . 3BC7           CMP EAX,EDI
00790578   . 7D 11          JGE SHORT yglzj.0079058B
0079057A   . 68 F8060000    PUSH 6F8
0079057F   . 68 F0304500    PUSH yglzj.004530F0
00790584   . 53             PUSH EBX
00790585   . 50             PUSH EAX
............................................................

                      中间一段省略

............................................................
0079062D   . E8 16D1C7FF    CALL <JMP.&MSVBVM60.__vbaFreeVarList>
00790632   . 83C4 0C        ADD ESP,0C
00790635   . 66:39BD A0FEFF>CMP WORD PTR SS:[EBP-160],DI
0079063C     0F84 16010000  JE yglzj.00790758                           停在此处,往上找关键函数
00790642   . B8 04000280    MOV EAX,80020004
00790647   . 8985 58FFFFFF  MOV DWORD PTR SS:[EBP-A8],EAX
0079064D   . 6A 0A          PUSH 0A
0079064F   . 5F             POP EDI
00790650   . 89BD 50FFFFFF  MOV DWORD PTR SS:[EBP-B0],EDI
00790656   . 8985 68FFFFFF  MOV DWORD PTR SS:[EBP-98],EAX
0079065C   . 89BD 60FFFFFF  MOV DWORD PTR SS:[EBP-A0],EDI
00790662   . C785 F8FEFFFF >MOV DWORD PTR SS:[EBP-108],yglzj.0044ED2>
0079066C   . 89B5 F0FEFFFF  MOV DWORD PTR SS:[EBP-110],ESI
00790672   . 8D95 F0FEFFFF  LEA EDX,DWORD PTR SS:[EBP-110]
00790678   . 8D8D 70FFFFFF  LEA ECX,DWORD PTR SS:[EBP-90]
0079067E   . E8 95D0C7FF    CALL <JMP.&MSVBVM60.__vbaVarDup>
00790683   . 68 CCE94500    PUSH yglzj.0045E9CC                      ;  UNICODE "happy new year"    看见没有,注册码错误提示


跟进00790570句,按F8继续走,会到如下:
00793118   > 55             PUSH EBP
00793119   . 8BEC           MOV EBP,ESP
............................................................

                      中间一段省略

............................................................
007931C4   . 53             PUSH EBX
007931C5   . E8 E4A5C7FF    CALL <JMP.&MSVBVM60.__vbaOnError>
007931CA   . BA 14D84400    MOV EDX,yglzj.0044D814
007931CF   . 8B4D 18        MOV ECX,DWORD PTR SS:[EBP+18]
007931D2   . E8 CFA4C7FF    CALL <JMP.&MSVBVM60.__vbaStrCopy>
007931D7   . 8975 DC        MOV DWORD PTR SS:[EBP-24],ESI
007931DA   . 8B7D 0C        MOV EDI,DWORD PTR SS:[EBP+C]
007931DD   . FF37           PUSH DWORD PTR DS:[EDI]
007931DF   . E8 AAA4C7FF    CALL <JMP.&MSVBVM60.__vbaLenBstr>
007931E4   . 8BC8           MOV ECX,EAX
007931E6   . E8 09A5C7FF    CALL <JMP.&MSVBVM60.__vbaI2I4>
007931EB   . 8985 90FEFFFF  MOV DWORD PTR SS:[EBP-170],EAX
007931F1   . 895D E0        MOV DWORD PTR SS:[EBP-20],EBX    
007931F4   . 6A 02          PUSH 2                            以下这一段把用户名“lchhome@163.com”每个字符的ASCII值进行累加
007931F6   . 5E             POP ESI                           .........................................
007931F7   > 8B45 E0        MOV EAX,DWORD PTR SS:[EBP-20]       
007931FA   . 66:3B85 90FEFF>CMP AX,WORD PTR SS:[EBP-170]
00793201   . 7F 60          JG SHORT yglzj.00793263            循环完后跳
00793203   . 899D 7CFFFFFF  MOV DWORD PTR SS:[EBP-84],EBX
00793209   . 89B5 74FFFFFF  MOV DWORD PTR SS:[EBP-8C],ESI
0079320F   . 8D8D 74FFFFFF  LEA ECX,DWORD PTR SS:[EBP-8C]
00793215   . 51             PUSH ECX
00793216   . 0FBFC0         MOVSX EAX,AX
00793219   . 50             PUSH EAX
0079321A   . FF37           PUSH DWORD PTR DS:[EDI]             用户名“lchhome@163.com”入栈
0079321C   . E8 61A4C7FF    CALL <JMP.&MSVBVM60.#631>
00793221   . 8BD0           MOV EDX,EAX
00793223   . 8D4D A0        LEA ECX,DWORD PTR SS:[EBP-60]
00793226   . E8 35A5C7FF    CALL <JMP.&MSVBVM60.__vbaStrMove>
0079322B   . 50             PUSH EAX
0079322C   . E8 3DA3C7FF    CALL <JMP.&MSVBVM60.#516>
00793231   . 66:0345 DC     ADD AX,WORD PTR SS:[EBP-24]         每个字符的ASCII值逐个进行累加,我的最后累加值为“&H527”
00793235   . 0F80 99280000  JO yglzj.00795AD4
0079323B   . 8945 DC        MOV DWORD PTR SS:[EBP-24],EAX
0079323E   . 8D4D A0        LEA ECX,DWORD PTR SS:[EBP-60]
00793241   . E8 F6A4C7FF    CALL <JMP.&MSVBVM60.__vbaFreeStr>
00793246   . 8D8D 74FFFFFF  LEA ECX,DWORD PTR SS:[EBP-8C]
0079324C   . E8 21A5C7FF    CALL <JMP.&MSVBVM60.__vbaFreeVar>
00793251   . 6A 01          PUSH 1
00793253   . 58             POP EAX
00793254   . 66:0345 E0     ADD AX,WORD PTR SS:[EBP-20]          计数器
00793258   . 0F80 76280000  JO yglzj.00795AD4
0079325E   . 8945 E0        MOV DWORD PTR SS:[EBP-20],EAX
00793261   .^EB 94          JMP SHORT yglzj.007931F7           ...............................................
00793263   > 8B7D 14        MOV EDI,DWORD PTR SS:[EBP+14]
00793266   . FF37           PUSH DWORD PTR DS:[EDI]
00793268   . E8 21A4C7FF    CALL <JMP.&MSVBVM60.__vbaLenBstr>
0079326D   . 8BC8           MOV ECX,EAX
0079326F   . E8 80A4C7FF    CALL <JMP.&MSVBVM60.__vbaI2I4>
00793274   . 8985 88FEFFFF  MOV DWORD PTR SS:[EBP-178],EAX    以下是把“&H527”与机器码“64640694”每个字符进行累加
0079327A   . 895D E0        MOV DWORD PTR SS:[EBP-20],EBX
0079327D   > 8B45 E0        MOV EAX,DWORD PTR SS:[EBP-20]      .....................................................
00793280   . 66:3B85 88FEFF>CMP AX,WORD PTR SS:[EBP-178]
00793287   . 0F8F 90000000  JG yglzj.0079331D
0079328D   . 899D 7CFFFFFF  MOV DWORD PTR SS:[EBP-84],EBX
00793293   . 89B5 74FFFFFF  MOV DWORD PTR SS:[EBP-8C],ESI
00793299   . 8D8D 74FFFFFF  LEA ECX,DWORD PTR SS:[EBP-8C]
0079329F   . 51             PUSH ECX
007932A0   . 0FBFC0         MOVSX EAX,AX                       
007932A3   . 50             PUSH EAX
007932A4   . FF37           PUSH DWORD PTR DS:[EDI]            机器码“64640694”入栈
007932A6   . E8 D7A3C7FF    CALL <JMP.&MSVBVM60.#631>
007932AB   . 8BD0           MOV EDX,EAX
007932AD   . 8D4D A0        LEA ECX,DWORD PTR SS:[EBP-60]
007932B0   . E8 ABA4C7FF    CALL <JMP.&MSVBVM60.__vbaStrMove>
007932B5   . 50             PUSH EAX
007932B6   . E8 ABA4C7FF    CALL <JMP.&MSVBVM60.#581>
007932BB   . DD9D 9CFEFFFF  FSTP QWORD PTR SS:[EBP-164]         依次把机器码逐个字符出栈浮点寄存器
007932C1   . 0FBF45 DC      MOVSX EAX,WORD PTR SS:[EBP-24]      提出用户名的累加值“&H527”
007932C5   . 8985 6CFEFFFF  MOV DWORD PTR SS:[EBP-194],EAX
007932CB   . DB85 6CFEFFFF  FILD DWORD PTR SS:[EBP-194]         把它装入浮点寄存器
007932D1   . DD9D 64FEFFFF  FSTP QWORD PTR SS:[EBP-19C]         它的十进制“1319”出栈
007932D7   . DD85 64FEFFFF  FLD QWORD PTR SS:[EBP-19C]
007932DD   . DC85 9CFEFFFF  FADD QWORD PTR SS:[EBP-164]         把“1319”与机器码逐个字符的累加值相加,为&H54E
007932E3   . DFE0           FSTSW AX
007932E5   . A8 0D          TEST AL,0D
007932E7   . 0F85 E2270000  JNZ yglzj.00795ACF
007932ED   . E8 6CA3C7FF    CALL <JMP.&MSVBVM60.__vbaFpI2>
007932F2   . 8945 DC        MOV DWORD PTR SS:[EBP-24],EAX
007932F5   . 8D4D A0        LEA ECX,DWORD PTR SS:[EBP-60]
007932F8   . E8 3FA4C7FF    CALL <JMP.&MSVBVM60.__vbaFreeStr>
007932FD   . 8D8D 74FFFFFF  LEA ECX,DWORD PTR SS:[EBP-8C]
00793303   . E8 6AA4C7FF    CALL <JMP.&MSVBVM60.__vbaFreeVar>
00793308   . 6A 01          PUSH 1
0079330A   . 58             POP EAX
0079330B   . 66:0345 E0     ADD AX,WORD PTR SS:[EBP-20]
0079330F   . 0F80 BF270000  JO yglzj.00795AD4
00793315   . 8945 E0        MOV DWORD PTR SS:[EBP-20],EAX
00793318   .^E9 60FFFFFF    JMP yglzj.0079327D                  ..................................................
0079331D   > 8B4D DC        MOV ECX,DWORD PTR SS:[EBP-24]
00793320   . E8 07A5C7FF    CALL <JMP.&MSVBVM60.__vbaI2Abs>
00793325   . 0FBFC0         MOVSX EAX,AX                        把“&H54E”放入EAX
00793328   . 69C0 40800000  IMUL EAX,EAX,8040                   EAX=EAX * &H8040=&H2A85380
0079332E   . 0F80 A0270000  JO yglzj.00795AD4
00793334   . 83C0 29        ADD EAX,29                          EAX=EAX+&H29=&H2A853A9(44585897)
00793337   . 0F80 97270000  JO yglzj.00795AD4
0079333D   . 8985 60FEFFFF  MOV DWORD PTR SS:[EBP-1A0],EAX
00793343   . DB85 60FEFFFF  FILD DWORD PTR SS:[EBP-1A0]
00793349   . DD5D C8        FSTP QWORD PTR SS:[EBP-38]
0079334C   . D9E8           FLD1
0079334E   . 833D 00B0A600 >CMP DWORD PTR DS:[A6B000],0
00793355     75 08          JNZ SHORT yglzj.0079335F
00793357   . DC35 B8174000  FDIV QWORD PTR DS:[4017B8]
0079335D   . EB 11          JMP SHORT yglzj.00793370
0079335F   > FF35 BC174000  PUSH DWORD PTR DS:[4017BC]
00793365   . FF35 B8174000  PUSH DWORD PTR DS:[4017B8]
0079336B   . E8 E4A0C7FF    CALL <JMP.&MSVBVM60._adj_fdiv_m64>
00793370   > DFE0           FSTSW AX
00793372   . A8 0D          TEST AL,0D
00793374   . 0F85 55270000  JNZ yglzj.00795ACF
0079337A   . 51             PUSH ECX
0079337B   . 51             PUSH ECX
0079337C   . DD1C24         FSTP QWORD PTR SS:[ESP]
0079337F   . DD45 C8        FLD QWORD PTR SS:[EBP-38]
00793382   . 51             PUSH ECX
00793383   . 51             PUSH ECX
00793384   . DD1C24         FSTP QWORD PTR SS:[ESP]
00793387   . E8 3AA1C7FF    CALL <JMP.&MSVBVM60.__vbaPowerR8>
0079338C   . E8 DFA2C7FF    CALL <JMP.&MSVBVM60.__vbaFPInt>
00793391   . DD5D B8        FSTP QWORD PTR SS:[EBP-48]         装入实数“81”   ST1
00793394   . D9E8           FLD1
00793396   . 833D 00B0A600 >CMP DWORD PTR DS:[A6B000],0
0079339D   . 75 08          JNZ SHORT yglzj.007933A7
0079339F   . DC35 C0174000  FDIV QWORD PTR DS:[4017C0]
007933A5   . EB 11          JMP SHORT yglzj.007933B8
007933A7   > FF35 C4174000  PUSH DWORD PTR DS:[4017C4]
007933AD   . FF35 C0174000  PUSH DWORD PTR DS:[4017C0]
007933B3   . E8 9CA0C7FF    CALL <JMP.&MSVBVM60._adj_fdiv_m64>
007933B8   > DFE0           FSTSW AX
007933BA   . A8 0D          TEST AL,0D
007933BC   . 0F85 0D270000  JNZ yglzj.00795ACF
007933C2   . 51             PUSH ECX
007933C3   . 51             PUSH ECX
007933C4   . DD1C24         FSTP QWORD PTR SS:[ESP]
007933C7   . DD45 C8        FLD QWORD PTR SS:[EBP-38]
007933CA   . 51             PUSH ECX
007933CB   . 51             PUSH ECX
007933CC   . DD1C24         FSTP QWORD PTR SS:[ESP]
007933CF   . E8 F2A0C7FF    CALL <JMP.&MSVBVM60.__vbaPowerR8>
007933D4   . E8 97A2C7FF    CALL <JMP.&MSVBVM60.__vbaFPInt>
007933D9   . DD5D B0        FSTP QWORD PTR SS:[EBP-50]        装入实数“354”   ST2
007933DC   . D9E8           FLD1
007933DE   . 833D 00B0A600 >CMP DWORD PTR DS:[A6B000],0
007933E5   . 75 08          JNZ SHORT yglzj.007933EF
007933E7   . DC35 C0134000  FDIV QWORD PTR DS:[4013C0]
007933ED   . EB 11          JMP SHORT yglzj.00793400
007933EF   > FF35 C4134000  PUSH DWORD PTR DS:[4013C4]
007933F5   . FF35 C0134000  PUSH DWORD PTR DS:[4013C0]
007933FB   . E8 54A0C7FF    CALL <JMP.&MSVBVM60._adj_fdiv_m64>
00793400   > DFE0           FSTSW AX
00793402   . A8 0D          TEST AL,0D
00793404   . 0F85 C5260000  JNZ yglzj.00795ACF
0079340A   . 51             PUSH ECX
0079340B   . 51             PUSH ECX
0079340C   . DD1C24         FSTP QWORD PTR SS:[ESP]
0079340F   . DD45 C8        FLD QWORD PTR SS:[EBP-38]
00793412   . 51             PUSH ECX
00793413   . 51             PUSH ECX
00793414   . DD1C24         FSTP QWORD PTR SS:[ESP]
00793417   . E8 AAA0C7FF    CALL <JMP.&MSVBVM60.__vbaPowerR8>
0079341C   . E8 4FA2C7FF    CALL <JMP.&MSVBVM60.__vbaFPInt>
00793421   . DD5D A8        FSTP QWORD PTR SS:[EBP-58]         装入实数“6677”   ST3
00793424   . DD45 C8        FLD QWORD PTR SS:[EBP-38]
00793427   . 833D 00B0A600 >CMP DWORD PTR DS:[A6B000],0
0079342E   . 75 08          JNZ SHORT yglzj.00793438
00793430   . DC35 90854000  FDIV QWORD PTR DS:[408590]          把上面的EAX值(44585897)/固定实数“18633”=2392(取整数)
00793436   . EB 11          JMP SHORT yglzj.00793449
00793438   > FF35 94854000  PUSH DWORD PTR DS:[408594]
0079343E   . FF35 90854000  PUSH DWORD PTR DS:[408590]
00793444   . E8 0BA0C7FF    CALL <JMP.&MSVBVM60._adj_fdiv_m64>
00793449   > DFE0           FSTSW AX
0079344B   . A8 0D          TEST AL,0D
0079344D   . 0F85 7C260000  JNZ yglzj.00795ACF
00793453   . E8 18A2C7FF    CALL <JMP.&MSVBVM60.__vbaFPInt>
00793458   . DD5D D0        FSTP QWORD PTR SS:[EBP-30]
0079345B   . DD45 D0        FLD QWORD PTR SS:[EBP-30]
0079345E   . DC1D 501B4000  FCOMP QWORD PTR DS:[401B50]
00793464   . DFE0           FSTSW AX
00793466   . 9E             SAHF
00793467   . 76 60          JBE SHORT yglzj.007934C9
 ............................................................

                      中间一段省略

............................................................
0079349F   . E8 BCA2C7FF    CALL <JMP.&MSVBVM60.__vbaStrMove>
007934A4   . 50             PUSH EAX
007934A5   . E8 BCA2C7FF    CALL <JMP.&MSVBVM60.#581>
007934AA   . DD5D D0        FSTP QWORD PTR SS:[EBP-30]
007934AD   . 8D45 9C        LEA EAX,DWORD PTR SS:[EBP-64]
007934B0   . 50             PUSH EAX
007934B1   . 8D45 A0        LEA EAX,DWORD PTR SS:[EBP-60]
007934B4   . 50             PUSH EAX
007934B5   . 56             PUSH ESI
007934B6   . E8 99A2C7FF    CALL <JMP.&MSVBVM60.__vbaFreeStrList>
007934BB   . 83C4 0C        ADD ESP,0C
007934BE   . 8D8D 74FFFFFF  LEA ECX,DWORD PTR SS:[EBP-8C]
007934C4   . E8 A9A2C7FF    CALL <JMP.&MSVBVM60.__vbaFreeVar>
007934C9   > DD45 B8        FLD QWORD PTR SS:[EBP-48]                取“2392”的前两位“23”装入浮点寄位器
007934CC   . DC4D D0        FMUL QWORD PTR SS:[EBP-30]               ST1(81)*23=a1
007934CF   . DC4D D0        FMUL QWORD PTR SS:[EBP-30]               a1*23=a2
007934D2   . DC4D D0        FMUL QWORD PTR SS:[EBP-30]               a2*23=a3="985527"
007934D5   . DD45 B0        FLD QWORD PTR SS:[EBP-50]                把ST2“354”装入浮点寄位器
007934D8   . DC4D D0        FMUL QWORD PTR SS:[EBP-30]               ST2*23=b1
007934DB   . DC4D D0        FMUL QWORD PTR SS:[EBP-30]               b1*23=b2
007934DE   . DEC1           FADDP ST(1),ST                           b2+a3=c1(1172793)
007934E0   . DD45 A8        FLD QWORD PTR SS:[EBP-58]                把ST3“6677”装入浮点寄位器
007934E3   . DC4D D0        FMUL QWORD PTR SS:[EBP-30]               ST3*23=d1
007934E6   . DEC1           FADDP ST(1),ST                           d1+c1=e1(1326364)
007934E8   . DD5D C0        FSTP QWORD PTR SS:[EBP-40]
007934EB   . DFE0           FSTSW AX
007934ED   . A8 0D          TEST AL,0D
007934EF     0F85 DA250000  JNZ yglzj.00795ACF
 ............................................................

                      中间一段省略

............................................................
0079354B   . 8D85 64FFFFFF  LEA EAX,DWORD PTR SS:[EBP-9C]
00793551   . 50             PUSH EAX
00793552   . 8D85 74FFFFFF  LEA EAX,DWORD PTR SS:[EBP-8C]
00793558   . 50             PUSH EAX
00793559   . 56             PUSH ESI
0079355A   . E8 E9A1C7FF    CALL <JMP.&MSVBVM60.__vbaFreeVarList>
0079355F   . 83C4 0C        ADD ESP,0C
00793562   . 66:395D A4     CMP WORD PTR SS:[EBP-5C],BX
00793566     0F85 9D000000  JNZ yglzj.00793609
 
经过一连串跳转后来这里:
 
0079396A   > 66:837D A4 07  CMP WORD PTR SS:[EBP-5C],7
0079396F   . 0F85 A5000000  JNZ yglzj.00793A1A
00793975   . 8D45 C8        LEA EAX,DWORD PTR SS:[EBP-38]
00793978   . 8985 FCFEFFFF  MOV DWORD PTR SS:[EBP-104],EAX
0079397E   . C785 F4FEFFFF >MOV DWORD PTR SS:[EBP-10C],4005
00793988   . 8D85 F4FEFFFF  LEA EAX,DWORD PTR SS:[EBP-10C]
0079398E   . 50             PUSH EAX
0079398F   . 8D85 74FFFFFF  LEA EAX,DWORD PTR SS:[EBP-8C]
00793995   . 50             PUSH EAX
00793996   . E8 119DC7FF    CALL <JMP.&MSVBVM60.#613>
0079399B   . C785 6CFFFFFF >MOV DWORD PTR SS:[EBP-94],7
007939A5   . 89B5 64FFFFFF  MOV DWORD PTR SS:[EBP-9C],ESI
007939AB   . 8D85 64FFFFFF  LEA EAX,DWORD PTR SS:[EBP-9C]
007939B1   . 50             PUSH EAX
007939B2   . 53             PUSH EBX
007939B3   . 8D85 74FFFFFF  LEA EAX,DWORD PTR SS:[EBP-8C]
007939B9   . 50             PUSH EAX
007939BA   . 8D45 A0        LEA EAX,DWORD PTR SS:[EBP-60]
007939BD   . 50             PUSH EAX
007939BE   . E8 119CC7FF    CALL <JMP.&MSVBVM60.__vbaStrVarVal>
007939C3   . 50             PUSH EAX
007939C4   . E8 B99CC7FF    CALL <JMP.&MSVBVM60.#631>
007939C9   . 8BD0           MOV EDX,EAX
007939CB   . 8D4D 9C        LEA ECX,DWORD PTR SS:[EBP-64]
007939CE   . E8 8D9DC7FF    CALL <JMP.&MSVBVM60.__vbaStrMove>
007939D3   . 50             PUSH EAX
007939D4   . E8 8D9DC7FF    CALL <JMP.&MSVBVM60.#581>
007939D9   . DD9D 9CFEFFFF  FSTP QWORD PTR SS:[EBP-164]       把(44585897)的前六位“445858”出栈浮点寄位器
007939DF   . DD85 9CFEFFFF  FLD QWORD PTR SS:[EBP-164]
007939E5   . DC45 C0        FADD QWORD PTR SS:[EBP-40]        “445858”+e1(1326364)=f1(1772222)
007939E8   . DD5D C0        FSTP QWORD PTR SS:[EBP-40]
007939EB   . DFE0           FSTSW AX
007939ED   . A8 0D          TEST AL,0D
007939EF   . 0F85 DA200000  JNZ yglzj.00795ACF
007939F5   . 8D45 9C        LEA EAX,DWORD PTR SS:[EBP-64]
007939F8   . 50             PUSH EAX
007939F9   . 8D45 A0        LEA EAX,DWORD PTR SS:[EBP-60]
007939FC   . 50             PUSH EAX
007939FD   . 56             PUSH ESI
007939FE   . E8 519DC7FF    CALL <JMP.&MSVBVM60.__vbaFreeStrList>
00793A03   . 8D85 64FFFFFF  LEA EAX,DWORD PTR SS:[EBP-9C]
00793A09   . 50             PUSH EAX
00793A0A   . 8D85 74FFFFFF  LEA EAX,DWORD PTR SS:[EBP-8C]
00793A10   . 50             PUSH EAX
00793A11   . 56             PUSH ESI
00793A12   . E8 319DC7FF    CALL <JMP.&MSVBVM60.__vbaFreeVarList>
00793A17   . 83C4 18        ADD ESP,18
00793A1A   > 6A 08          PUSH 8
00793A1C   . 5B             POP EBX
00793A1D   . 66:395D A4     CMP WORD PTR SS:[EBP-5C],BX
00793A21   . 7D 1A          JGE SHORT yglzj.00793A3D
00793A23   . DD45 C0        FLD QWORD PTR SS:[EBP-40]        把f1装入浮点寄位器
00793A26   . DC05 88854000  FADD QWORD PTR DS:[408588]       f1+固定实数“78266315”=g1(80038537)
00793A2C   . DD5D C0        FSTP QWORD PTR SS:[EBP-40]
00793A2F   . DFE0           FSTSW AX
00793A31   . A8 0D          TEST AL,0D
00793A33     0F85 96200000  JNZ yglzj.00795ACF
00793A39   . 66:395D A4     CMP WORD PTR SS:[EBP-5C],BX
00793A3D   > 0F85 A2000000  JNZ yglzj.00793AE5


00793AE5   > 66:837D A4 09  CMP WORD PTR SS:[EBP-5C],9
00793AEA     7C 13          JL SHORT yglzj.00793AFF
00793AEC   . DD45 C0        FLD QWORD PTR SS:[EBP-40]
00793AEF   . DC45 C8        FADD QWORD PTR SS:[EBP-38]
00793AF2   . DD5D C0        FSTP QWORD PTR SS:[EBP-40]
00793AF5   . DFE0           FSTSW AX
00793AF7   . A8 0D          TEST AL,0D
00793AF9   . 0F85 D01F0000  JNZ yglzj.00795ACF
00793AFF   > 8B45 10        MOV EAX,DWORD PTR SS:[EBP+10]
00793B02   . FF30           PUSH DWORD PTR DS:[EAX]
00793B04   . E8 859BC7FF    CALL <JMP.&MSVBVM60.__vbaLenBstr>
00793B09   . 8BC8           MOV ECX,EAX
00793B0B   . E8 E49BC7FF    CALL <JMP.&MSVBVM60.__vbaI2I4>
00793B10   . 66:3D 0900     CMP AX,9                           注册码位小于9位跳走,(不能跳走,否则完了)
00793B14   . 0F8C 1F1F0000  JL yglzj.00795A39
00793B1A   . 66:3D 0B00     CMP AX,0B                          注册码位大于11位跳走,(不能跳走,否则完了)
00793B1E   . 0F8F 151F0000  JG yglzj.00795A39
00793B24   . 8B45 0C        MOV EAX,DWORD PTR SS:[EBP+C]
00793B27   . 8985 FCFEFFFF  MOV DWORD PTR SS:[EBP-104],EAX
00793B2D   . C785 F4FEFFFF >MOV DWORD PTR SS:[EBP-10C],4008
00793B37   . 8D85 F4FEFFFF  LEA EAX,DWORD PTR SS:[EBP-10C]
00793B3D   . 50             PUSH EAX
00793B3E   . 8D85 74FFFFFF  LEA EAX,DWORD PTR SS:[EBP-8C]
00793B44   . 50             PUSH EAX
00793B45   . E8 689BC7FF    CALL <JMP.&MSVBVM60.#520>
00793B4A   . C785 ECFEFFFF >MOV DWORD PTR SS:[EBP-114],yglzj.0045EE1>;  UNICODE "blroad@com"     
00793B54   . C785 E4FEFFFF >MOV DWORD PTR SS:[EBP-11C],8008
00793B5E   . 8D85 74FFFFFF  LEA EAX,DWORD PTR SS:[EBP-8C]
00793B64   . 50             PUSH EAX
00793B65   . 8D85 E4FEFFFF  LEA EAX,DWORD PTR SS:[EBP-11C]
00793B6B   . 50             PUSH EAX
00793B6C   . E8 719BC7FF    CALL <JMP.&MSVBVM60.__vbaVarTstEq>
00793B71   . 8985 98FEFFFF  MOV DWORD PTR SS:[EBP-168],EAX
00793B77   . 8D8D 74FFFFFF  LEA ECX,DWORD PTR SS:[EBP-8C]
00793B7D   . E8 F09BC7FF    CALL <JMP.&MSVBVM60.__vbaFreeVar>
00793B82   . 66:83BD 98FEFF>CMP WORD PTR SS:[EBP-168],0
00793B8A   . 74 12          JE SHORT yglzj.00793B9E
00793B8C   . BA 30EE4500    MOV EDX,yglzj.0045EE30                   ;  UNICODE "8684253736"     00793B91   . 8B4D 18        MOV ECX,DWORD PTR SS:[EBP+18]
00793B94   . E8 0D9BC7FF    CALL <JMP.&MSVBVM60.__vbaStrCopy>
00793B99   . E9 9B1E0000    JMP yglzj.00795A39
00793B9E   > 8D45 C0        LEA EAX,DWORD PTR SS:[EBP-40]
0............................................................

                      中间一段省略

............................................................
00793BEE   . 6A 01          PUSH 1
00793BF0   . 8D85 54FFFFFF  LEA EAX,DWORD PTR SS:[EBP-AC]
00793BF6   . 50             PUSH EAX
00793BF7   . 8D45 9C        LEA EAX,DWORD PTR SS:[EBP-64]
00793BFA   . 50             PUSH EAX
00793BFB   . E8 D499C7FF    CALL <JMP.&MSVBVM60.__vbaStrVarVal>
00793C00   . 50             PUSH EAX                                把g1(80038537)压入堆栈
00793C01   . E8 7C9AC7FF    CALL <JMP.&MSVBVM60.#631>
00793C06   . 8BD0           MOV EDX,EAX                             “800”
00793C08   . 8D4D 88        LEA ECX,DWORD PTR SS:[EBP-78]
00793C0B   . E8 509BC7FF    CALL <JMP.&MSVBVM60.__vbaStrMove>
 ............................................................

                      中间一段省略

............................................................
00793C5F   . 50             PUSH EAX
00793C60   . 6A 05          PUSH 5
00793C62   . 8D85 14FFFFFF  LEA EAX,DWORD PTR SS:[EBP-EC]
00793C68   . 50             PUSH EAX
00793C69   . 8D45 90        LEA EAX,DWORD PTR SS:[EBP-70]
00793C6C   . 50             PUSH EAX
00793C6D   . E8 6299C7FF    CALL <JMP.&MSVBVM60.__vbaStrVarVal>
00793C72   . 50             PUSH EAX
00793C73   . E8 0A9AC7FF    CALL <JMP.&MSVBVM60.#631>
00793C78   . 8BD0           MOV EDX,EAX                            “853”
00793C7A   . 8D4D 84        LEA ECX,DWORD PTR SS:[EBP-7C]
00793C7D   . E8 DE9AC7FF    CALL <JMP.&MSVBVM60.__vbaStrMove>
00793C82   . C785 7CFFFFFF >MOV DWORD PTR SS:[EBP-84],3
00793C8C   . 89B5 74FFFFFF  MOV DWORD PTR SS:[EBP-8C],ESI
00793C92   . 8B45 88        MOV EAX,DWORD PTR SS:[EBP-78]
00793C95   . 8985 74FEFFFF  MOV DWORD PTR SS:[EBP-18C],EAX
00793C9B   . 8365 88 00     AND DWORD PTR SS:[EBP-78],0
00793C9F   . 8D85 74FFFFFF  LEA EAX,DWORD PTR SS:[EBP-8C]
00793CA5   . 50             PUSH EAX
00793CA6   . 6A 01          PUSH 1
00793CA8   . 8B45 10        MOV EAX,DWORD PTR SS:[EBP+10]
00793CAB   . FF30           PUSH DWORD PTR DS:[EAX]              假码“1234567890”
00793CAD   . E8 D099C7FF    CALL <JMP.&MSVBVM60.#631>
00793CB2   . 8BD0           MOV EDX,EAX                           “123”
00793CB4   . 8D4D A0        LEA ECX,DWORD PTR SS:[EBP-60]
00793CB7   . E8 A49AC7FF    CALL <JMP.&MSVBVM60.__vbaStrMove>
00793CBC   . 50             PUSH EAX
00793CBD   . E8 A49AC7FF    CALL <JMP.&MSVBVM60.#581>
00793CC2   . E8 A59AC7FF    CALL <JMP.&MSVBVM60.__vbaFpR8>
00793CC7   . DD9D 58FEFFFF  FSTP QWORD PTR SS:[EBP-1A8]
00793CCD   . 8B95 74FEFFFF  MOV EDX,DWORD PTR SS:[EBP-18C]
00793CD3   . 8D4D 98        LEA ECX,DWORD PTR SS:[EBP-68]
00793CD6   . E8 859AC7FF    CALL <JMP.&MSVBVM60.__vbaStrMove>
00793CDB   . 50             PUSH EAX
00793CDC   . E8 1B98C7FF    CALL <JMP.&MSVBVM60.__vbaR8Str>
00793CE1   . DC9D 58FEFFFF  FCOMP QWORD PTR SS:[EBP-1A8]        把“800”与“123”比较
00793CE7   . DFE0           FSTSW AX
00793CE9   . 9E             SAHF
00793CEA   . 74 0C          JE SHORT yglzj.00793CF8
00793CEC   . C785 54FEFFFF >MOV DWORD PTR SS:[EBP-1AC],1
00793CF6   . EB 07          JMP SHORT yglzj.00793CFF
00793CF8   > 83A5 54FEFFFF >AND DWORD PTR SS:[EBP-1AC],0
00793CFF   > C785 3CFFFFFF >MOV DWORD PTR SS:[EBP-C4],3
00793D09   . 89B5 34FFFFFF  MOV DWORD PTR SS:[EBP-CC],ESI
00793D0F   . 8B45 84        MOV EAX,DWORD PTR SS:[EBP-7C]      “853”
00793D12   . 8985 70FEFFFF  MOV DWORD PTR SS:[EBP-190],EAX
00793D18   . 8365 84 00     AND DWORD PTR SS:[EBP-7C],0
00793D1C   . 8D85 34FFFFFF  LEA EAX,DWORD PTR SS:[EBP-CC]
00793D22   . 50             PUSH EAX
00793D23   . 53             PUSH EBX
00793D24   . 8B45 10        MOV EAX,DWORD PTR SS:[EBP+10]
00793D27   . FF30           PUSH DWORD PTR DS:[EAX]           
00793D29   . E8 5499C7FF    CALL <JMP.&MSVBVM60.#631>
00793D2E   . 8BD0           MOV EDX,EAX                       假码最后三位数“890”
00793D30   . 8D4D 94        LEA ECX,DWORD PTR SS:[EBP-6C]
00793D33   . E8 289AC7FF    CALL <JMP.&MSVBVM60.__vbaStrMove>
00793D38   . 50             PUSH EAX
00793D39   . E8 289AC7FF    CALL <JMP.&MSVBVM60.#581>
00793D3E   . E8 299AC7FF    CALL <JMP.&MSVBVM60.__vbaFpR8>
00793D43   . DD9D 4CFEFFFF  FSTP QWORD PTR SS:[EBP-1B4]
00793D49   . 8B95 70FEFFFF  MOV EDX,DWORD PTR SS:[EBP-190]
00793D4F   . 8D4D 8C        LEA ECX,DWORD PTR SS:[EBP-74]
00793D52   . E8 099AC7FF    CALL <JMP.&MSVBVM60.__vbaStrMove>
00793D57   . 50             PUSH EAX
00793D58   . E8 9F97C7FF    CALL <JMP.&MSVBVM60.__vbaR8Str>       
00793D5D   . DC9D 4CFEFFFF  FCOMP QWORD PTR SS:[EBP-1B4]       把“853”与“890”比较
00793D63   . DFE0           FSTSW AX
00793D65   . 9E             SAHF
00793D66   . 74 05          JE SHORT yglzj.00793D6D
 ............................................................

                      中间一段省略

............................................................
00793DC2   . 50             PUSH EAX
00793DC3   . 8D85 44FFFFFF  LEA EAX,DWORD PTR SS:[EBP-BC]
00793DC9   . 50             PUSH EAX
00793DCA   . 8D85 54FFFFFF  LEA EAX,DWORD PTR SS:[EBP-AC]
00793DD0   . 50             PUSH EAX
00793DD1   . 8D85 64FFFFFF  LEA EAX,DWORD PTR SS:[EBP-9C]
00793DD7   . 50             PUSH EAX
00793DD8   . 8D85 74FFFFFF  LEA EAX,DWORD PTR SS:[EBP-8C]
00793DDE   . 50             PUSH EAX
00793DDF   . 53             PUSH EBX
00793DE0   . E8 6399C7FF    CALL <JMP.&MSVBVM60.__vbaFreeVarList>  这里把g1值“80038537”的前三位“800”和第五至第七位“853”                                                                  与注册码“1234567890”的前三位“123”和后三位“890”比较,
00793DE5   . 83C4 48        ADD ESP,48 
00793DE8   . 66:83BD 98FEFF>CMP WORD PTR SS:[EBP-168],0          比较          
00793DF0   . 0F85 431C0000  JNZ yglzj.00795A39              若都相等则不跳,否则完了(千万不能跳),这说明真注册码的前三位g1                                                           值的前三位,后三位则为g1值的第五至第七位
00793DF6   . 8D45 C0        LEA EAX,DWORD PTR SS:[EBP-40]
00793DF9   . 8985 FCFEFFFF  MOV DWORD PTR SS:[EBP-104],EAX
 ............................................................

                      中间一段省略

............................................................
00793F2D   . 50             PUSH EAX
00793F2E   . 8D85 54FFFFFF  LEA EAX,DWORD PTR SS:[EBP-AC]
00793F34   . 50             PUSH EAX
00793F35   . 8D85 64FFFFFF  LEA EAX,DWORD PTR SS:[EBP-9C]
00793F3B   . 50             PUSH EAX
00793F3C   . 8D85 74FFFFFF  LEA EAX,DWORD PTR SS:[EBP-8C]
00793F42   . 50             PUSH EAX
00793F43   . 6A 06          PUSH 6
00793F45   . E8 FE97C7FF    CALL <JMP.&MSVBVM60.__vbaFreeVarList>
00793F4A   . 83C4 30        ADD ESP,30
00793F4D   . 66:837D DC 00  CMP WORD PTR SS:[EBP-24],0
00793F52   . 0F85 5E010000  JNZ yglzj.007940B6



007940B6   > 66:837D DC 01  CMP WORD PTR SS:[EBP-24],1
007940BB   . 0F85 5E010000  JNZ yglzj.0079421F
00794ECD   > 66:837D DC 0B  CMP WORD PTR SS:[EBP-24],0B
00794ED2   . 0F85 5E010000  JNZ yglzj.00795036
00794ED8   . 89BD 7CFFFFFF  MOV DWORD PTR SS:[EBP-84],EDI
00794EDE   . 89B5 74FFFFFF  MOV DWORD PTR SS:[EBP-8C],ESI
00794EE4   . 8D85 74FFFFFF  LEA EAX,DWORD PTR SS:[EBP-8C]
............................................................

                      中间一段省略

............................................................
00794F3C   . 57             PUSH EDI
00794F3D   . DD45 C0        FLD QWORD PTR SS:[EBP-40]
00794F40   . 51             PUSH ECX
00794F41   . 51             PUSH ECX
00794F42   . DD1C24         FSTP QWORD PTR SS:[ESP]
00794F45   . E8 D886C7FF    CALL <JMP.&MSVBVM60.__vbaStrR8>
00794F4A   . 8BD0           MOV EDX,EAX
00794F4C   . 8D4D 94        LEA ECX,DWORD PTR SS:[EBP-6C]
00794F4F   . E8 0C88C7FF    CALL <JMP.&MSVBVM60.__vbaStrMove>
00794F54   . 50             PUSH EAX
00794F55   . E8 2887C7FF    CALL <JMP.&MSVBVM60.#631>
00794F5A   . 8985 3CFFFFFF  MOV DWORD PTR SS:[EBP-C4],EAX          取g1值(80038537)的第四位至第七位“3853”
00794F60   . 899D 34FFFFFF  MOV DWORD PTR SS:[EBP-CC],EBX
00794F66   . 8D85 34FFFFFF  LEA EAX,DWORD PTR SS:[EBP-CC]
00794F6C   . 50             PUSH EAX
00794F6D   . 8D85 24FFFFFF  LEA EAX,DWORD PTR SS:[EBP-DC]
00794F73   . 50             PUSH EAX
00794F74   . E8 3387C7FF    CALL <JMP.&MSVBVM60.#613>
00794F79   . 8D85 54FFFFFF  LEA EAX,DWORD PTR SS:[EBP-AC]
00794F7F   . 50             PUSH EAX
00794F80   . 8D45 9C        LEA EAX,DWORD PTR SS:[EBP-64]
00794F83   . 50             PUSH EAX
00794F84   . E8 4B86C7FF    CALL <JMP.&MSVBVM60.__vbaStrVarVal>
00794F89   . 50             PUSH EAX                                 取g1值(80038537)的前四位(8003)
00794F8A   . E8 E786C7FF    CALL <JMP.&MSVBVM60.#519>
00794F8F   . 8BD0           MOV EDX,EAX
00794F91   . 8D4D 98        LEA ECX,DWORD PTR SS:[EBP-68]
00794F94   . E8 C787C7FF    CALL <JMP.&MSVBVM60.__vbaStrMove>
00794F99   . 50             PUSH EAX
00794F9A   . 68 58EE4500    PUSH yglzj.0045EE58                      ;  UNICODE "95"
00794F9F   . E8 6887C7FF    CALL <JMP.&MSVBVM60.__vbaStrCat>
00794FA4   . 8BD0           MOV EDX,EAX                            把“8003”与“95”连起来=“800395”
00794FA6   . 8D4D 8C        LEA ECX,DWORD PTR SS:[EBP-74]
00794FA9   . E8 B287C7FF    CALL <JMP.&MSVBVM60.__vbaStrMove>
00794FAE   . 50             PUSH EAX
00794FAF   . 8D85 24FFFFFF  LEA EAX,DWORD PTR SS:[EBP-DC]
00794FB5   . 50             PUSH EAX
00794FB6   . 8D45 90        LEA EAX,DWORD PTR SS:[EBP-70]
00794FB9   . 50             PUSH EAX
00794FBA   . E8 1586C7FF    CALL <JMP.&MSVBVM60.__vbaStrVarVal>
00794FBF   . 50             PUSH EAX                                   取g1值(80038537)的第四位至第七位“3853”
00794FC0   . E8 B186C7FF    CALL <JMP.&MSVBVM60.#519>
00794FC5   . 8BD0           MOV EDX,EAX
00794FC7   . 8D4D 88        LEA ECX,DWORD PTR SS:[EBP-78]
00794FCA   . E8 9187C7FF    CALL <JMP.&MSVBVM60.__vbaStrMove>
00794FCF   . 50             PUSH EAX
00794FD0   . E8 3787C7FF    CALL <JMP.&MSVBVM60.__vbaStrCat>
00794FD5   . 8BD0           MOV EDX,EAX                            把“800395”与“3853”连起来=“8003953853”这就是真注册码
00794FD7   . 8B4D 18        MOV ECX,DWORD PTR SS:[EBP+18]
00794FDA   . E8 8187C7FF    CALL <JMP.&MSVBVM60.__vbaStrMove>
 

三、算法总结
1、把用户名每个字符的ASCII值逐个进行累加    值设为A;
2、A+机器码的累加值=B      
3、B×&H8040=C
4、C+&H29=D
5、D的十进值/0x18633=E
6、ST1×E的十进值的前两位(F)×F=G
7、ST2×F×F+G=J
8、ST3×F+J=K
9、比较注册码的位数是否大于9并小于11位,否则结束。
10、把K的前三位和第五位至第七位分别与注册码的前三位和后三位比较,相等则继续往下走,否则结束。
11、把K值的前四位+一个固定值W+K值的第四位至第七位=真注册码

我电脑的注册码

机器码:64640694
用户名:lchhome@163.com
注册码:8003953853

  • 标 题: 建议
  • 作 者:Binny
  • 时 间:2005-03-06 22:36

谢谢,这个软件不错,这个东西对我也非常有用,不过,我在用自己的机器码注册时发现几个地方不一样,不过我就简单注册了但是没仔细分析算法,希望楼主注意以下几个地方,将这个破解进行到底:

我使用VB做了一个注册器,用于破解,但是,其中几个东西和作者的有出入:
Private Sub Command1_Click()
  Dim lConst(4) As Long
  lConst(0) = 81
  lConst(1) = 354
  lConst(2) = 6677
  lConst(3) = 95
  Debug.Print LoGetSN("lchhome@163.com", "64640694", lConst) '8003953853
  
  lConst(0) = 84
  lConst(1) = 371
  lConst(2) = 7147
  lConst(3) = 47
  Debug.Print LoGetSN("binny@vip.163.com", "198640389", lConst) '8089479398
End Sub

Private Function LoGetSN(fsUser As String, fsCode As String, flConst() As Long) As String
  Dim k As Long
  Dim lSum As Double
  Dim X As Long
  
  lSum = 0
  For k = 1 To Len(fsUser)
    lSum = lSum + Asc(Mid(fsUser, k, 1))
  Next k
  For k = 1 To Len(fsUser)
    lSum = lSum + Val(Mid(fsCode, k, 1))
  Next k
  lSum = lSum * 32832 + &H29
  X = Int(lSum / 18633)
  X = Left(X, 2)
  flConst(0) = flConst(0) * (X ^ 3)
  flConst(1) = flConst(1) * (X ^ 2) + flConst(0)
  flConst(2) = flConst(2) * X + flConst(1)
  flConst(2) = Left(lSum, 6) + flConst(2)
  lSum = CDbl(flConst(2)) + 78266315
  LoGetSN = Left(lSum, 4) & flConst(3) & Mid(lSum, 4, 4)
End Function

中间插入的那个“95”会根据[EBP-24]中的值来选择,而不是固定的:当[EBP-24]=以下值时,插入的东西不一样:
0-32,1-64,2-98,3-45
4-25,5-78,6-52,7-02
8-79,9-45,A-23,B-95
C-47,D-17,E-38,F-48
10-82,11-69,12-27

希望将程序中的 lConst 的数值来历搞清楚,谢谢!