計程車管理 1.2 演算法分析

看雪資料發表於2004-08-16

【破文作者】sLtYJ[D.4s][DFCG]

【作者郵箱】sltyj@263.net

【作者主頁】龍族聯盟論壇 DFCG官方論壇

【使用工具】OD,PEiD

【作業系統】Windows XP

【軟體名稱】計程車管理 1.2

【下載地址】http://bj.onlinedown.net/soft/27925.htm

【軟體大小】1.41 MB

【程式語言】Borland Delphi 6.0 - 7.0

【軟體簡介】

 一個小而全的計程車管理軟體,能實現車輛,車票,駕駛員,繳費的查詢等 

【破解宣告】我是一隻小菜鳥,偶得一點心得,願與大家分享:)

--------------------------------------------------------------------------------

【內容】

    首先用Peid 檢測程式程式,無殼!顯示編寫語言是Borland Delphi 6.0 - 7.0,隨即拿出DEDE來進行反編譯...
另人鬱悶的是居然出錯,可能作者動了手腳吧~~只好用OD直接來了,下斷BP GetWindowTextA,點選註冊後被OD斷下,經過
一番尋找,終於找到關鍵點,下面是小弟的一點膚淺分析,有錯誤的地方還請各位前輩多多指點!謝過!

005271CF   .  55            PUSH    EBP                              ;  //來到這裡
005271D0   .  68 05745200   PUSH    00527405
005271D5   .  64:FF30       PUSH    DWORD PTR FS:[EAX]
005271D8   .  64:8920       MOV     FS:[EAX],ESP
005271DB   .  8D85 F4FDFFFF LEA     EAX,[EBP-20C]
005271E1   .  8B55 FC       MOV     EDX,[EBP-4]                      ;  user32.77D13A50
005271E4   .  8B92 08030000 MOV     EDX,[EDX+308]                    ;  user32.77D154B4
005271EA   .  B9 FF000000   MOV     ECX,0FF
005271EF   .  E8 94D3EDFF   CALL    00404588                         ;  //計算特徵碼的長度 我的等於17位 十六進位制就是11
005271F4   .  BF FF000000   MOV     EDI,0FF
005271F9   .  8D85 F4FEFFFF LEA     EAX,[EBP-10C]
005271FF   >  C600 20       MOV     BYTE PTR [EAX],20
00527202   .  40            INC     EAX
00527203   .  4F            DEC     EDI
00527204   .^ 75 F9         JNZ     SHORT 005271FF
00527206   .  8B45 FC       MOV     EAX,[EBP-4]                      ;  user32.77D13A50
00527209   .  8B80 08030000 MOV     EAX,[EAX+308]                    ;  //得到特徵碼  d 00A7AC54
0052720F   .  E8 98D3EDFF   CALL    004045AC
00527214   .  85C0          TEST    EAX,EAX                          ;  //比較
00527216   .  7E 6A         JLE     SHORT 00527282
00527218   .  8945 F4       MOV     [EBP-C],EAX
0052721B   .  BF 01000000   MOV     EDI,1                            ;  //EDI=1 準備作為記位器
00527220   .  8DB5 F5FDFFFF LEA     ESI,[EBP-20B]
00527226   .  8D9D F5FEFFFF LEA     EBX,[EBP-10B]
0052722C   >  803E 2D       CMP     BYTE PTR [ESI],2D                ;  //判斷得到的特徵碼是否為"-"
0052722F   .  74 2F         JE      SHORT 00527260                   ;  //是就跳過
00527231   .  8D85 F0FDFFFF LEA     EAX,[EBP-210]
00527237   .  8A16          MOV     DL,[ESI]
00527239   .  E8 96D2EDFF   CALL    004044D4                         ;  //得到數字的十六進位制值
0052723E   .  8B85 F0FDFFFF MOV     EAX,[EBP-210]
00527244   .  E8 0F1EEEFF   CALL    00409058                         ;  //將得到的十六進位制還原為數字 結果放入EAX
00527249   .  8BC8          MOV     ECX,EAX                          ;  //ECX=EAX
0052724B   .  83C1 43       ADD     ECX,43                           ;  //ECX=ECX+43
0052724E   .  8BC7          MOV     EAX,EDI                          ;  //EAX=EDI(數字位數)
00527250   .  51            PUSH    ECX                              ;  //壓入ECX
00527251   .  B9 06000000   MOV     ECX,6                            ;  //ECX=6
00527256   .  99            CDQ                                      ;  //將EAX的32位值擴充套件64位,需要EDX(這裡EDX清零)
00527257   .  F7F9          IDIV    ECX                              ;  //EAX=EAX/ECX 就是將數字位數除於6,餘數進EDX
00527259   .  59            POP     ECX                              ;  //彈出ECX
0052725A   .  03CA          ADD     ECX,EDX                          ;  //ECX=ECX+EDX
0052725C   .  880B          MOV     [EBX],CL                         ;  //ECX的值轉化成字元-→就是註冊碼
0052725E   .  EB 09         JMP     SHORT 00527269
00527260   >  B8 5A000000   MOV     EAX,5A                           ;  //EAX=5A
00527265   .  2BC7          SUB     EAX,EDI                          ;  //EAX=EAX-EDI(數字位數)
00527267   .  8803          MOV     [EBX],AL                         ;  //得到的十六進位制值轉為字元
00527269   >  8BC7          MOV     EAX,EDI
0052726B   .  B9 06000000   MOV     ECX,6                            ;  ECX=6
00527270   .  99            CDQ
00527271   .  F7F9          IDIV    ECX                              ;  //EAX=EAX/ECX 就是將數字位數除於6,餘數進EDX
00527273   .  85D2          TEST    EDX,EDX                          ;  //檢查餘數是否為零
00527275   .  75 03         JNZ     SHORT 0052727A                   ;  //不是,跳...
00527277   .  C603 2D       MOV     BYTE PTR [EBX],2D                ;  //餘數為零,給註冊碼加上"-"符號
0052727A   >  47            INC     EDI                              ;  //EDI=EDI+1  作為記位器
0052727B   .  43            INC     EBX                              ;  //組合已得到的註冊碼
0052727C   .  46            INC     ESI
0052727D   .  FF4D F4       DEC     DWORD PTR [EBP-C]                ;  //計數器減1
00527280   .^ 75 AA         JNZ     SHORT 0052722C                   ;  //比較是否計算完成
00527282   >  8D85 E8FDFFFF LEA     EAX,[EBP-218]
00527288   .  8D95 F4FEFFFF LEA     EDX,[EBP-10C]                    ;  //d 12F1C4 可看到註冊碼 在次亦可製作記憶體序號產生器
0052728E   .  E8 BDD2EDFF   CALL    00404550
00527293   .  8B85 E8FDFFFF MOV     EAX,[EBP-218]
00527299   .  8D95 ECFDFFFF LEA     EDX,[EBP-214]
0052729F   .  E8 1019EEFF   CALL    00408BB4
005272A4   .  8B95 ECFDFFFF MOV     EDX,[EBP-214]                    ;  comctl32.77315889
005272AA   .  8D85 F4FEFFFF LEA     EAX,[EBP-10C]
005272B0   .  B9 FF000000   MOV     ECX,0FF
005272B5   .  E8 CED2EDFF   CALL    00404588
005272BA   .  8D95 E4FDFFFF LEA     EDX,[EBP-21C]
005272C0   .  8B45 FC       MOV     EAX,[EBP-4]                      ;  user32.77D13A50
005272C3   .  8B80 00030000 MOV     EAX,[EAX+300]
005272C9   .  E8 D244F4FF   CALL    0046B7A0
005272CE   .  8B85 E4FDFFFF MOV     EAX,[EBP-21C]                    ;  //d 00ABA26C 得到假碼 剛才輸的是676767676767
005272D4   .  50            PUSH    EAX                              ;  //放入EAX
005272D5   .  8D85 E0FDFFFF LEA     EAX,[EBP-220]
005272DB   .  8D95 F4FEFFFF LEA     EDX,[EBP-10C]
005272E1   .  E8 6AD2EDFF   CALL    00404550
005272E6   .  8B95 E0FDFFFF MOV     EDX,[EBP-220]                    ;  user32.77D13B33
005272EC   .  58            POP     EAX                              ;  //彈出假碼 676767676767
005272ED   .  E8 06D4EDFF   CALL    004046F8
005272F2      0F85 BC000000 JNZ     005273B4                         ;  //比較 不一樣 跳 (爆破點)
005272F8   .  B2 01         MOV     DL,1
005272FA   .  A1 60164400   MOV     EAX,[441660]
005272FF   .  E8 C8A4F1FF   CALL    004417CC
00527304   .  8945 F8       MOV     [EBP-8],EAX
00527307   .  33C0          XOR     EAX,EAX
00527309   .  55            PUSH    EBP
0052730A   .  68 77735200   PUSH    00527377
0052730F   .  64:FF30       PUSH    DWORD PTR FS:[EAX]
00527312   .  64:8920       MOV     FS:[EAX],ESP
00527315   .  BA 02000080   MOV     EDX,80000002
0052731A   .  8B45 F8       MOV     EAX,[EBP-8]                      ;  //下面的操作就是將註冊資訊寫入登錄檔
0052731D   .  E8 86A5F1FF   CALL    004418A8
00527322   .  B1 01         MOV     CL,1
00527324   .  BA 1C745200   MOV     EDX,0052741C                     ;  ASCII "Software\\Microsoft\\Windows\\CurrentVersion"
00527329   .  8B45 F8       MOV     EAX,[EBP-8]
0052732C   .  E8 BBA6F1FF   CALL    004419EC
00527331   .  84C0          TEST    AL,AL
00527333   .  74 24         JE      SHORT 00527359
00527335   .  8D85 DCFDFFFF LEA     EAX,[EBP-224]
0052733B   .  8D95 F4FEFFFF LEA     EDX,[EBP-10C]
00527341   .  E8 0AD2EDFF   CALL    00404550
00527346   .  8B8D DCFDFFFF MOV     ECX,[EBP-224]
0052734C   .  BA 50745200   MOV     EDX,00527450                     ;  ASCII "ProductMac"
00527351   .  8B45 F8       MOV     EAX,[EBP-8]
00527354   .  E8 2FA8F1FF   CALL    00441B88
00527359   >  33C0          XOR     EAX,EAX
0052735B   .  5A            POP     EDX
0052735C   .  59            POP     ECX
0052735D   .  59            POP     ECX
0052735E   .  64:8910       MOV     FS:[EAX],EDX
00527361   .  68 7E735200   PUSH    0052737E
00527366   >  8B45 F8       MOV     EAX,[EBP-8]
00527369   .  E8 0AA5F1FF   CALL    00441878
0052736E   .  8B45 F8       MOV     EAX,[EBP-8]
00527371   .  E8 06C1EDFF   CALL    0040347C
00527376   .  C3            RETN

--------------------------------------------------------------------------------

【總結】

總得來說,此軟體的演算法還是比較簡單的!就是依次取得機器的特徵碼,然後進行運算,最後結果轉化為字元!如此迴圈....組合後得到最後的註冊碼!水平有限,有什麼不對的地方請各位指正,謝謝!:)

--------------------------------------------------------------------------------

【爆破地址】

005272F2 JNZ--→NOP

--------------------------------------------------------------------------------

【版權宣告】本文純屬技術交流, 轉載請註明作者並保持文章的完整, 謝謝!

相關文章