【文章标题】: 不完全破解诸葛起名 + 算法分析
【文章作者】: KAN-LI
【作者邮箱】: TOM8147@HOTMAIL.COM
【作者主页】: 看雪论坛
【作者QQ号】: 591258070
【软件名称】: 诸葛起名 1。9
【软件大小】: 自己看属性吧
【下载地址】: 天空软件
【加壳方式】: ASPack 2.12
【编写语言】: Microsoft Visual Basic 6.0
【使用工具】: OD ,PEID
【操作平台】: WINXP SP2
【软件介绍】: 算命,起名 的东西
【作者声明】: 只是感兴趣,没有其他目的
--------------------------------------------------------------------------------
【详细过程】
  今天下了个软件,想看看它的算法,一跟之下,痛苦啊,开始用万能断点断下后,出现用户名,本想算法就在附近,谁知道后来
  的路还长呢。真是跑完一个 CALL,又一个 CALL ,(现在破解真难啊 )说真的不是我说作者,好长的计算确出现明码,我差点就想
  作个内存注册机算了,但后来一下还是跟跟吧,注册机也不想发了,开发一个软件不容易啊,我只是学习而尔
  不过这个算法部分真的长气,不信你看看(我尽量省略了 N 多的代码,不然。。。。。。。)
  软件的壳很弱,手脱很容易就完了
  
  005F6F05   .  FF15 9C124000 CALL DWORD PTR DS:[<&msvbvm60.__vbaFreeO>;  这里下段(经简略了N多步,来到这里)
  005F6F0B   .  66:39BD 00FFF>CMP WORD PTR SS:[EBP-100],DI                ;  这里检查你有没有输入用户名
  005F6F12      74 0A         JE SHORT 11.005F6F1E                        ;没你就完了
  005F6F14   .  B8 ACDE4300   MOV EAX,11.0043DEAC
  005F6F19   .  E9 9B010000   JMP 11.005F70B9
  005F6F1E   >  8B45 DC       MOV EAX,DWORD PTR SS:[EBP-24]
  005F6F21   .  50            PUSH EAX
  005F6F22   .  FF15 2C104000 CALL DWORD PTR DS:[<&msvbvm60.__vbaLenBs>;  msvbvm60.__vbaLenBstr
  005F6F28   .  85C0          TEST EAX,EAX
  005F6F2A   .  75 0A         JNZ SHORT 11.005F6F36
  005F6F2C   .  B8 C4DE4300   MOV EAX,11.0043DEC4
  005F6F31   .  E9 83010000   JMP 11.005F70B9
  005F6F36   >  8D45 DC       LEA EAX,DWORD PTR SS:[EBP-24]
  005F6F39   .  8D4D D8       LEA ECX,DWORD PTR SS:[EBP-28]
  005F6F3C   .  50            PUSH EAX
  005F6F3D   .  51            PUSH ECX
  005F6F3E   .  E8 5DF9FEFF   CALL 11.005E68A0                         ;  关键CALL
  005F6F43   .  66:3D FFFF    CMP AX,0FFFF
  005F6F47      0F85 67010000 JNZ 11.005F70B4                          ;  爆破点,爆破成功但有自检(没时间看它)
  
  ——————————————————————————————————————————————————————————
  F7 跟进 005F6F3D ,这里又省略 N 多代码
  
  005E6913   .  50            PUSH EAX
  005E6914   .  E8 174C1200   CALL 11.0070B530                         ;  关键 CALL
  005E6919   .  8BD0          MOV EDX,EAX
  005E691B   .  8D4D E8       LEA ECX,DWORD PTR SS:[EBP-18]
  005E691E   .  FF15 44124000 CALL DWORD PTR DS:[<&msvbvm60.__vbaStrMo>;  msvbvm60.__vbaStrMove
  005E6924   .  8D4D E8       LEA ECX,DWORD PTR SS:[EBP-18]
  005E6927   .  FF15 98124000 CALL DWORD PTR DS:[<&msvbvm60.__vbaFreeS>;  msvbvm60.__vbaFreeStr
  005E692D   .  8B0D 1CD37000 MOV ECX,DWORD PTR DS:[70D31C]            ;  注册码
  005E6933   .  8B17          MOV EDX,DWORD PTR DS:[EDI]
  005E6935   .  51            PUSH ECX
  
  ——————————————————————————————————————————————————————
  F7 跟进 005E6913 ,代码多啊 ,看见都害怕
  
  0070B5A3   .  FF15 2C104000 CALL DWORD PTR DS:[<&msvbvm60.__vbaLenBs>;  计算机器码位数
  0070B5A9   .  8BC8          MOV ECX,EAX
  0070B5AB   .  FF15 28114000 CALL DWORD PTR DS:[<&msvbvm60.__vbaI2I4>>;  msvbvm60.__vbaI2I4
  0070B5B1   .  BA 14E94E00   MOV EDX,11.004EE914                      ;  字符串-表
  0070B5B6   .  8D4D A0       LEA ECX,DWORD PTR SS:[EBP-60]
  0070B5B9   .  8BF8          MOV EDI,EAX
  0070B5BB   .  FF15 DC114000 CALL DWORD PTR DS:[<&msvbvm60.__vbaStrCo>;  msvbvm60.__vbaStrCopy
  0070B5C1   .  8B4D A0       MOV ECX,DWORD PTR SS:[EBP-60]
  0070B5C4   .  8D55 8C       LEA EDX,DWORD PTR SS:[EBP-74]
  0070B5C7   .  51            PUSH ECX
  0070B5C8   .  52            PUSH EDX
  0070B5C9   .  FF15 1C124000 CALL DWORD PTR DS:[<&msvbvm60.__vbaStrTo>;  msvbvm60.__vbaStrToAnsi
  0070B5CF   .  50            PUSH EAX
  0070B5D0   .  8D4D A4       LEA ECX,DWORD PTR SS:[EBP-5C]
  0070B5D3   .  0FBFC7        MOVSX EAX,DI
  0070B5D6   .  50            PUSH EAX
  0070B5D7   .  51            PUSH ECX
  0070B5D8   .  6A 20         PUSH 20
  0070B5DA   .  FF15 C4104000 CALL DWORD PTR DS:[<&msvbvm60.__vbaStrFi>;  msvbvm60.__vbaStrFixstr
  0070B5E0   .  8B3D 44124000 MOV EDI,DWORD PTR DS:[<&msvbvm60.__vbaSt>;  msvbvm60.__vbaStrMove
  0070B5E6   .  8BD0          MOV EDX,EAX
  0070B5E8   .  8D4D 98       LEA ECX,DWORD PTR SS:[EBP-68]
  0070B5EB   .  FFD7          CALL EDI                                 ;  <&msvbvm60.__vbaStrMove>
  0070B5ED   .  8D55 94       LEA EDX,DWORD PTR SS:[EBP-6C]
  0070B5F0   .  50            PUSH EAX
  0070B5F1   .  52            PUSH EDX
  0070B5F2   .  FF15 1C124000 CALL DWORD PTR DS:[<&msvbvm60.__vbaStrTo>;  msvbvm60.__vbaStrToAnsi
  0070B5F8   .  50            PUSH EAX
  0070B5F9   .  8B03          MOV EAX,DWORD PTR DS:[EBX]
  0070B5FB   .  8D4D 9C       LEA ECX,DWORD PTR SS:[EBP-64]
  0070B5FE   .  50            PUSH EAX
  0070B5FF   .  51            PUSH ECX
  0070B600   .  FF15 1C124000 CALL DWORD PTR DS:[<&msvbvm60.__vbaStrTo>;  msvbvm60.__vbaStrToAnsi
  0070B606   .  50            PUSH EAX
  0070B607   .  E8 ACC3D1FF   CALL 11.004279B8
  0070B60C   .  8985 08FFFFFF MOV DWORD PTR SS:[EBP-F8],EAX
  0070B612   .  FF15 70104000 CALL DWORD PTR DS:[<&msvbvm60.__vbaSetSy>;  msvbvm60.__vbaSetSystemError
  0070B618   .  8B55 9C       MOV EDX,DWORD PTR SS:[EBP-64]
  0070B61B   .  52            PUSH EDX
  0070B61C   .  53            PUSH EBX
  0070B61D   .  8B1D 68114000 MOV EBX,DWORD PTR DS:[<&msvbvm60.__vbaSt>;  msvbvm60.__vbaStrToUnicode
  0070B623   .  FFD3          CALL EBX                                 ;   <&msvbvm60.__vbaStrToUnicode>
  0070B625   .  8B45 94       MOV EAX,DWORD PTR SS:[EBP-6C]
  0070B628   .  8D4D 90       LEA ECX,DWORD PTR SS:[EBP-70]
  0070B62B   .  50            PUSH EAX
  0070B62C   .  51            PUSH ECX
  0070B62D   .  FFD3          CALL EBX
  0070B62F   .  8D55 A4       LEA EDX,DWORD PTR SS:[EBP-5C]
  0070B632   .  50            PUSH EAX
  0070B633   .  52            PUSH EDX
  0070B634   .  6A 20         PUSH 20
  0070B636   .  FF15 64104000 CALL DWORD PTR DS:[<&msvbvm60.__vbaLsetF>;  msvbvm60.__vbaLsetFixstr
  0070B63C   .  8B45 8C       MOV EAX,DWORD PTR SS:[EBP-74]
  0070B63F   .  8D4D A0       LEA ECX,DWORD PTR SS:[EBP-60]
  0070B642   .  50            PUSH EAX
  0070B643   .  51            PUSH ECX
  0070B644   .  FFD3          CALL EBX
  0070B646   .  8B95 08FFFFFF MOV EDX,DWORD PTR SS:[EBP-F8]
  0070B64C   .  33DB          XOR EBX,EBX
  0070B64E   .  3BD6          CMP EDX,ESI
  0070B650   .  8D55 8C       LEA EDX,DWORD PTR SS:[EBP-74]
  0070B653   .  8D45 90       LEA EAX,DWORD PTR SS:[EBP-70]
  0070B656   .  52            PUSH EDX
  0070B657   .  8D4D 94       LEA ECX,DWORD PTR SS:[EBP-6C]
  0070B65A   .  50            PUSH EAX
  0070B65B   .  8D55 98       LEA EDX,DWORD PTR SS:[EBP-68]
  0070B65E   .  51            PUSH ECX
  0070B65F   .  8D45 9C       LEA EAX,DWORD PTR SS:[EBP-64]
  0070B662   .  52            PUSH EDX
  0070B663   .  0F95C3        SETNE BL
  0070B666   .  50            PUSH EAX
  0070B667   .  6A 05         PUSH 5
  0070B669   .  F7DB          NEG EBX
  0070B66B   .  FF15 EC114000 CALL DWORD PTR DS:[<&msvbvm60.__vbaFreeS>;  msvbvm60.__vbaFreeStrList
  0070B671   .  83C4 18       ADD ESP,18
  0070B674   .  66:3BDE       CMP BX,SI
  0070B677   .  0F84 80000000 JE 11.0070B6FD
  0070B67D   .  8D4D A4       LEA ECX,DWORD PTR SS:[EBP-5C]
  0070B680   .  51            PUSH ECX
  0070B681   .  6A 20         PUSH 20
  0070B683   .  FF15 C4104000 CALL DWORD PTR DS:[<&msvbvm60.__vbaStrFi>;  msvbvm60.__vbaStrFixstr
  0070B689   .  8BD0          MOV EDX,EAX
  0070B68B   .  8D4D 9C       LEA ECX,DWORD PTR SS:[EBP-64]
  0070B68E   .  FFD7          CALL EDI
  0070B690   .  8D55 9C       LEA EDX,DWORD PTR SS:[EBP-64]
  0070B693   .  52            PUSH EDX
  0070B694   .  E8 B7FBFFFF   CALL 11.0070B250           ;  又一个要进入的 CALL,晕
  
  _______________________________________________________________________________________________________________________
  不用说又是 F7 跟进 0070B694 了,千万别说苦(自愿的),不用说有省略 NNNNNNN 多的代码
  
  0070B35A   > /66:3BBD 50FFF>CMP DI,WORD PTR SS:[EBP-B0]           ;这是一个循环
  0070B361   . |0F8F A3000000 JG 11.0070B40A
  0070B367   . |8B55 08       MOV EDX,DWORD PTR SS:[EBP+8]
  0070B36A   . |8D45 C8       LEA EAX,DWORD PTR SS:[EBP-38]
  0070B36D   . |0FBFCF        MOVSX ECX,DI
  0070B370   . |8955 90       MOV DWORD PTR SS:[EBP-70],EDX
  0070B373   . |50            PUSH EAX
  0070B374   . |8D55 88       LEA EDX,DWORD PTR SS:[EBP-78]
  0070B377   . |51            PUSH ECX
  0070B378   . |8D45 B8       LEA EAX,DWORD PTR SS:[EBP-48]
  0070B37B   . |52            PUSH EDX
  0070B37C   . |50            PUSH EAX
  0070B37D   . |C745 D0 01000>MOV DWORD PTR SS:[EBP-30],1
  0070B384   . |C745 C8 02000>MOV DWORD PTR SS:[EBP-38],2
  0070B38B   . |C745 88 08400>MOV DWORD PTR SS:[EBP-78],4008
  0070B392   . |FF15 F4104000 CALL DWORD PTR DS:[<&msvbvm60.rtcMidChar>;  msvbvm60.rtcMidCharVar
  0070B398   . |8D4D B8       LEA ECX,DWORD PTR SS:[EBP-48]
  0070B39B   . |51            PUSH ECX
  0070B39C   . |FF15 28104000 CALL DWORD PTR DS:[<&msvbvm60.__vbaStrVa>;  msvbvm60.__vbaStrVarMove
  0070B3A2   . |8BD0          MOV EDX,EAX
  0070B3A4   . |8D4D E0       LEA ECX,DWORD PTR SS:[EBP-20]
  0070B3A7   . |FFD6          CALL ESI
  0070B3A9   . |8D55 B8       LEA EDX,DWORD PTR SS:[EBP-48]
  0070B3AC   . |8D45 C8       LEA EAX,DWORD PTR SS:[EBP-38]
  0070B3AF   . |52            PUSH EDX
  0070B3B0   . |50            PUSH EAX
  0070B3B1   . |6A 02         PUSH 2
  0070B3B3   . |FFD3          CALL EBX
  0070B3B5   . |83C4 0C       ADD ESP,0C
  0070B3B8   . |8D55 88       LEA EDX,DWORD PTR SS:[EBP-78]
  0070B3BB   . |8D4D E0       LEA ECX,DWORD PTR SS:[EBP-20]
  0070B3BE   . |C745 88 08400>MOV DWORD PTR SS:[EBP-78],4008
  0070B3C5   . |52            PUSH EDX
  0070B3C6   . |894D 90       MOV DWORD PTR SS:[EBP-70],ECX
  0070B3C9   . |FF15 24114000 CALL DWORD PTR DS:[<&msvbvm60.rtcIsNumer>;  msvbvm60.rtcIsNumeric
  0070B3CF   . |66:85C0       TEST AX,AX
  0070B3D2   . |74 15         JE SHORT 11.0070B3E9
  0070B3D4   . |8B45 DC       MOV EAX,DWORD PTR SS:[EBP-24]
  0070B3D7   . |8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]
  0070B3DA   . |50            PUSH EAX
  0070B3DB   . |51            PUSH ECX
  0070B3DC   . |FF15 58104000 CALL DWORD PTR DS:[<&msvbvm60.__vbaStrCa>;  可疑
  0070B3E2   . |8BD0          MOV EDX,EAX                              ;  这里会产生每次累加的数值
  0070B3E4   . |8D4D DC       LEA ECX,DWORD PTR SS:[EBP-24]
  0070B3E7   . |FFD6          CALL ESI
  0070B3E9   > |B8 01000000   MOV EAX,1            ;  367174231585435 ,我机器上的,不过下面截取后会变为 36717423
  0070B3EE   . |66:03C7       ADD AX,DI            ;做下一轮的计算
  0070B3F1   . |0F80 2F010000 JO 11.0070B526
  0070B3F7   . |8BF8          MOV EDI,EAX
  0070B3F9   .^\E9 5CFFFFFF   JMP 11.0070B35A                          ;  这里跳回
  
                                                                         ;当你跑完上面这个 CALL,你已经死了半截了,来到下面
  
  
  
  0070B6E4   .  FF15 14104000 CALL DWORD PTR DS:[<&msvbvm60.__vbaStrI4>;  产生注册码 进
  
  ——————————————————————————————————————————————————————————
  F7 进入了 0070B6E4 后,别以为完了,还有 CALL 你玩呢 
  
  73475987    FF15 B01A3973   CALL DWORD PTR DS:[<&OLEAUT32.#110>]     ; 进入吧
  
  ——————————————————————————————————————————————————————————-
  进入后当然不那么容易看到最后的结果(算法呢)
  
  7711C7AB   .  E8 1D000000   CALL OLEAUT32.7711C7CD                   ;  一个一个又一个,晕 
  
  ——————————————————————————————————————————————————-
                                                                     ;进入后来到下面
  
  7711C7CD   $  8BFF          MOV EDI,EDI
  7711C7CF  /.  55            PUSH EBP
  7711C7D0  |.  8BEC          MOV EBP,ESP
  7711C7D2  |.  33C0          XOR EAX,EAX
  7711C7D4  |.  3945 08       CMP DWORD PTR SS:[EBP+8],EAX
  7711C7D7  |.  0F9CC0        SETL AL
  7711C7DA  |.  50            PUSH EAX
  7711C7DB  |.  FF75 0C       PUSH DWORD PTR SS:[EBP+C]
  7711C7DE  |.  FF75 08       PUSH DWORD PTR SS:[EBP+8]
  7711C7E1  |.  E8 05030000   CALL OLEAUT32.7711CAEB                ;又一个进入的 CALL
  ————————————————————————————————————————————————————————
  《〈〈〈〈〈〈〈〈〈〈〈〈〈       终于见到梦想的最终 算法了      〉〉〉〉〉〉〉〉〉〉〉〉〉》》》》》》》》》》》
  
  7711CB01   > /8B45 08       MOV EAX,DWORD PTR SS:[EBP+8]         ;第一个循环开始
  7711CB04   . |33D2          XOR EDX,EDX
  7711CB06   . |6A 0A         PUSH 0A
  7711CB08   . |5B            POP EBX
  7711CB09   . |F7F3          DIV EBX
  7711CB0B   . |83C2 30       ADD EDX,30
  7711CB0E   . |66:8911       MOV WORD PTR DS:[ECX],DX
  7711CB11   . |41            INC ECX
  7711CB12   . |41            INC ECX
  7711CB13   . |85C0          TEST EAX,EAX
  7711CB15   . |8945 08       MOV DWORD PTR SS:[EBP+8],EAX
  7711CB18   .^\77 E7         JA SHORT OLEAUT32.7711CB01           ;跳回
  
  
  7711CB1A   .  66:8321 00    AND WORD PTR DS:[ECX],0
  7711CB1E   .  49            DEC ECX
  7711CB1F   .  49            DEC ECX
  7711CB20   .  5B            POP EBX
  7711CB21   >  66:8B16       MOV DX,WORD PTR DS:[ESI]
  7711CB24   .  66:8B01       MOV AX,WORD PTR DS:[ECX]
  7711CB27   .  66:8911       MOV WORD PTR DS:[ECX],DX
  7711CB2A   .  49            DEC ECX
  7711CB2B   .  66:8906       MOV WORD PTR DS:[ESI],AX
  7711CB2E   .  49            DEC ECX
  7711CB2F   .  46            INC ESI                                  ;产生注册码
  
  
--------------------------------------------------------------------------------
【经验总结】
  标题写不完全破解,是实在没气看它完的算法,感觉实在太长了,已经耗费了我两个多小时了。注册码是跟出来了
  但一次次的累算下来,可能要搞好多时间。。。。明天还要上早班呢。今天就到这里吧,有空我把算法全走一遍
  再在这贴下补充完,大家见谅,错误的地方请指出
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2005年11月10日 1:08:01