公路座標計算系統  1.0

看雪資料發表於2015-11-15

【軟體名稱】:公路座標計算系統
【整理日期】:2003.4.24
【最新版本】:1.0 Build 418
【檔案大小】:179KB
【軟體授權】:共享軟體
【使用平臺】:Win9x/Me/NT/2000/XP
【下載地址】:http://www.onlinedown.net/measure.htm
【軟體簡介】:包括直線,圓曲線座標,緩和曲線中樁計算,任意長度的邊樁的座標計算,任一點或任一樁號的座標計算(包括邊樁),並有測邊交會,單三角形,前方交會,後方交會,側方交會,座標正反算,計算器等工具。並新增任意角度的邊樁計算。

  

【作    者】:風雨無阻
【聲    明】:純技術交流,無任何商業目的
【破解工具】:fi2.5, Ollydbg1.09 中文版,AspackDie 1.41 漢化版,TRW2000娃娃漢化版,win98系統


【破解過程】
第一步:用fi探測一下,是Aspack2.11 的殼,使用AspackDie 1.41 漢化版脫殼成功。
第二步:填寫註冊資訊,啟動TRW2000娃娃漢化版,下萬能斷點bpx hmemcpy  回到程式點選註冊,程式被TRW攔截,pmodule 回到程式領空發現在00417801處,關閉TRW 使用Ollydbg1.09 中文版載入程式,在00417801處下斷點:分析如下

00417801  |. E8 941D0000    CALL <JMP.&MFC42.#3097>
                            --->讀入假碼 "87654321"

00417806  |. 8B4D F0        MOV ECX,DWORD PTR SS:[EBP-10]
00417809  |. 8B41 F8        MOV EAX,DWORD PTR DS:[ECX-8]
0041780C  |. 83F8 08        CMP EAX,8
0041780F  |. 75 19          JNZ SHORT UNPACKED.0041782A
                            --->比較位數是否是8位,如果不是則跳轉
                   
00417811  |. 8D55 F0        LEA EDX,DWORD PTR SS:[EBP-10]
00417814  |. 8BCF           MOV ECX,EDI
00417816  |. 52             PUSH EDX
                            --->此時EDX所指向的記憶體單元儲存的是假碼的地址

00417817  |. 68 1E040000    PUSH 41E
0041781C  |. E8 791D0000    CALL <JMP.&MFC42.#3097>
                            --->讀入假碼 abcdefgh

00417821  |. 8B45 F0        MOV EAX,DWORD PTR SS:[EBP-10]
00417824  |. 8378 F8 08     CMP DWORD PTR DS:[EAX-8],8
00417828  |. 74 1F          JE SHORT UNPACKED.00417849
                            --->比較位數是否是8位,如果是則跳轉

0041782A  |> 8D4D E8        LEA ECX,DWORD PTR SS:[EBP-18]
0041782D  |. C645 FC 01     MOV BYTE PTR SS:[EBP-4],1
00417831  |. E8 7E1B0000    CALL <JMP.&MFC42.#800>
00417836  |. 8D4D E4        LEA ECX,DWORD PTR SS:[EBP-1C]
00417839  |. 885D FC        MOV BYTE PTR SS:[EBP-4],BL
0041783C  |. E8 731B0000    CALL <JMP.&MFC42.#800>
00417841  |. 8975 FC        MOV DWORD PTR SS:[EBP-4],ESI
00417844  |. E9 3E060000    JMP UNPACKED.00417E87

00417849  |> 8D4D F0        LEA ECX,DWORD PTR SS:[EBP-10]
0041784C  |. 51             PUSH ECX
0041784D  |. 68 1C040000    PUSH 41C
00417852  |. 8BCF           MOV ECX,EDI
00417854  |. E8 411D0000    CALL <JMP.&MFC42.#3097>
                            --->讀入機器碼共8位我的是"40019524"

00417859  |. 8B75 F0        MOV ESI,DWORD PTR SS:[EBP-10]
0041785C  |. 8D55 D4        LEA EDX,DWORD PTR SS:[EBP-2C]
0041785F  |. 2BF2           SUB ESI,EDX
00417861  |. 8D45 D4        LEA EAX,DWORD PTR SS:[EBP-2C]
00417864  |. BA 08000000    MOV EDX,8
                            --->EDX = 8

00417869  |> 8A0C06         /MOV CL,BYTE PTR DS:[ESI+EAX]
                            --->依次將機器碼40019524送入CL

0041786C  |. 8808           |MOV BYTE PTR DS:[EAX],CL
                            --->將CL內容送入DS:[EAX]儲存

0041786E  |. 40             |INC EAX
                            --->EAX = EAX + 1

0041786F  |. 4A             |DEC EDX
                            --->EDX = EDX - 1

00417870  |.^75 F7          \JNZ SHORT UNPACKED.00417869
                            --->總共迴圈8次

00417872  |. 8D85 30FFFFFF  LEA EAX,DWORD PTR SS:[EBP-D0]
                            --->此時EAX = 0069EF94
                                而69EF94內容是一字串“WL750415”

00417878  |. 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]
                            --->機器碼地址送入ECX

0041787B  |. 50             PUSH EAX
0041787C  |. 51             PUSH ECX
                            --->將機器碼和“WL750415”入棧

0041787D  |. 885D DC        MOV BYTE PTR SS:[EBP-24],BL
00417880  |. E8 BBFCFFFF    CALL UNPACKED.00417540
                            --->跳轉到下面繼續執行
---------------------------------------
00417540  /$ 8B4424 04      MOV EAX,DWORD PTR SS:[ESP+4]
                            --->EAX指向機器碼

00417544  |. 56             PUSH ESI
00417545  |. 8B7424 0C      MOV ESI,DWORD PTR SS:[ESP+C]
00417549  |. 8A08           MOV CL,BYTE PTR DS:[EAX]
                            --->將機器碼的第一位4送入CL = 34H
0041754B  |. D0E1           SHL CL,1
                            --->CL左移一位也就是CL = CL * 2 = 68H
     
0041754D  |. 880E           MOV BYTE PTR DS:[ESI],CL
                            --->將計算結果儲存

0041754F  |. 8A10           MOV DL,BYTE PTR DS:[EAX]
                            --->將機器碼的第一位4送入DL = 34H

00417551  |. 8A48 01        MOV CL,BYTE PTR DS:[EAX+1]
                            --->將機器碼的第二位0送入CL = 30H

00417554  |. C0EA 06        SHR DL,6
                            --->DL右移6位,DL = 00H

00417557  |. 80E2 02        AND DL,2
                            --->與2進行"與"運算後 DL = 00H

0041755A  |. C0E1 02        SHL CL,2
                            --->CL左移兩位 CL = CL * 4 = C0H

0041755D  |. 0AD1           OR DL,CL
                            --->或運算DL = C0H

0041755F  |. 8856 01        MOV BYTE PTR DS:[ESI+1],DL
                            --->將計算結果儲存

00417562  |. 8A50 01        MOV DL,BYTE PTR DS:[EAX+1]
                            --->送入機器碼的第二位0
00417565  |. 8A48 02        MOV CL,BYTE PTR DS:[EAX+2]
                            --->送入機器碼的第三位0
00417568  |. C0EA 05        SHR DL,5
0041756B  |. 80E2 06        AND DL,6
0041756E  |. C0E1 03        SHL CL,3
00417571  |. 0AD1           OR DL,CL
00417573  |. 8856 02        MOV BYTE PTR DS:[ESI+2],DL
                            --->將計算結果儲存

00417576  |. 8A50 02        MOV DL,BYTE PTR DS:[EAX+2]
00417579  |. 8A48 03        MOV CL,BYTE PTR DS:[EAX+3]
                            --->送入機器碼的第3,4 位"0,1"進行計算
0041757C  |. C0EA 04        SHR DL,4
0041757F  |. 80E2 0E        AND DL,0E
00417582  |. C0E1 04        SHL CL,4
00417585  |. 0AD1           OR DL,CL
00417587  |. 8856 03        MOV BYTE PTR DS:[ESI+3],DL
0041758A  |. 8A50 03        MOV DL,BYTE PTR DS:[EAX+3]
0041758D  |. 8A48 04        MOV CL,BYTE PTR DS:[EAX+4]
                            --->送入機器碼的第4,5位"1,9"進行計算
00417590  |. C0EA 03        SHR DL,3
00417593  |. 80E2 1E        AND DL,1E
00417596  |. C0E1 05        SHL CL,5
00417599  |. 0AD1           OR DL,CL
0041759B  |. 8856 04        MOV BYTE PTR DS:[ESI+4],DL
0041759E  |. 8A50 04        MOV DL,BYTE PTR DS:[EAX+4]
004175A1  |. 8A48 05        MOV CL,BYTE PTR DS:[EAX+5]
                            --->送入機器碼的第5,6 位"9,5"進行計算
004175A4  |. C0EA 02        SHR DL,2
004175A7  |. 80E2 3E        AND DL,3E
004175AA  |. C0E1 06        SHL CL,6
004175AD  |. 0AD1           OR DL,CL
004175AF  |. 8856 05        MOV BYTE PTR DS:[ESI+5],DL
004175B2  |. 8A50 05        MOV DL,BYTE PTR DS:[EAX+5]
004175B5  |. 8A48 06        MOV CL,BYTE PTR DS:[EAX+6]
                            --->送入機器碼的第6,7 位"5,2"進行計算
004175B8  |. D0EA           SHR DL,1
004175BA  |. 80E2 7E        AND DL,7E
004175BD  |. C0E1 07        SHL CL,7
004175C0  |. 0AD1           OR DL,CL
004175C2  |. 8856 06        MOV BYTE PTR DS:[ESI+6],DL
004175C5  |. 8A50 06        MOV DL,BYTE PTR DS:[EAX+6]
                            --->送入機器碼的第7,8 位"2,4"進行計算
004175C8  |. 80E2 FE        AND DL,0FE
004175CB  |. 8856 07        MOV BYTE PTR DS:[ESI+7],DL
004175CE  |. 5E             POP ESI
004175CF  \. C3             RETN
                            --->此處返回繼續
                            --->最後的計算結果
                               DS:[ESI] =  68 C0 80 12 26 4E 1A 32

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

00417885  |. 8D95 30FFFFFF  LEA EDX,DWORD PTR SS:[EBP-D0]
0041788B  |. 8D85 30FEFFFF  LEA EAX,DWORD PTR SS:[EBP-1D0]
                            --->此時EAX指向 0069EE94  B6 EE 69 00 AA 7E 00 00
00417891  |. 52             PUSH EDX
                            --->將剛剛計算的結果地址入棧

00417892  |. 50             PUSH EAX
00417893  |. E8 C8FBFFFF    CALL UNPACKED.00417460
                            --->???????這個地方我跟進過,不過沒有搞懂,好像是
                                DES加密演算法,總共加密了四次
                                還請各位密界高手指點??????????

00417898  |. 8D4D D4        LEA ECX,DWORD PTR SS:[EBP-2C]
0041789B  |. 6A 01          PUSH 1
0041789D  |. 8D95 30FEFFFF  LEA EDX,DWORD PTR SS:[EBP-1D0]
004178A3  |. 51             PUSH ECX
                            --->機器碼入棧
004178A4  |. 52             PUSH EDX
                            --->將00417893處的計算結果入棧

004178A5  |. E8 F6FBFFFF    CALL UNPACKED.004174A0
                            --->此CALL對機器碼進行了變換得到以下結果
                                由於過於複雜,就不列出來了。  
                 
004178AA  |. 8B45 D7        MOV EAX,DWORD PTR SS:[EBP-29]
                            --->EAX = BB3373CB

004178AD  |. 8B4D D6        MOV ECX,DWORD PTR SS:[EBP-2A]
                            --->ECX = 3373CB30

004178B0  |. 8B55 D5        MOV EDX,DWORD PTR SS:[EBP-2B]
                            --->EDX = 73CB3010

004178B3  |. 25 FF000000    AND EAX,0FF
004178B8  |. 83F0 04        XOR EAX,4
004178BB  |. 81E1 FF000000  AND ECX,0FF
                            --->ECX = 00000030

004178C1  |. 50             PUSH EAX
                            --->EAX = 000000CF 註冊碼前半部分最後兩位是"CF"

004178C2  |. 8B45 D4        MOV EAX,DWORD PTR SS:[EBP-2C]
                            --->EAX = CB301038

004178C5  |. 81E2 FF000000  AND EDX,0FF
004178CB  |. 83F1 0A        XOR ECX,0A
004178CE  |. 25 FF000000    AND EAX,0FF
004178D3  |. 83F2 08        XOR EDX,8
004178D6  |. 51             PUSH ECX
                            --->ECX = 0000003A 註冊碼前半部分5,6兩位是"3A"

004178D7  |. 83F0 06        XOR EAX,6
004178DA  |. 52             PUSH EDX
                            --->ECX = 00000018 註冊碼前半部分3,4兩位是"18"

004178DB  |. 50             PUSH EAX
                            --->ECX = 0000003E 註冊碼前半部分1,2兩位是"3E"
                                至此註冊碼的前半部分已經完成"3E183ACF"

004178DC  |. 8D4D E4        LEA ECX,DWORD PTR SS:[EBP-1C]
004178DF  |. 68 28104200    PUSH UNPACKED.00421028                   ;  ASCII "%02X%02X%02X%02X"
004178E4  |. 51             PUSH ECX
004178E5  |. E8 741C0000    CALL <JMP.&MFC42.#2818>
                            --->將前面計算的兩位兩位的註冊碼組合

004178EA  |. 83C4 34        ADD ESP,34
004178ED  |. 8D55 E8        LEA EDX,DWORD PTR SS:[EBP-18]
004178F0  |. 8BCF           MOV ECX,EDI
004178F2  |. 52             PUSH EDX
004178F3  |. 68 1E040000    PUSH 41E
004178F8  |. E8 9D1C0000    CALL <JMP.&MFC42.#3097>
004178FD  |. 8D4D E8        LEA ECX,DWORD PTR SS:[EBP-18]
00417900  |. E8 8F1C0000    CALL <JMP.&MFC42.#4204>
                            --->將假碼的小寫字母轉換為大寫字母

00417905  |. 8B45 E4        MOV EAX,DWORD PTR SS:[EBP-1C]
                            --->EAX = 真碼,在這設斷點,就可得到真碼前半部分,也可作成記憶體序號產生器

00417908  |. 8B4D E8        MOV ECX,DWORD PTR SS:[EBP-18]
                            --->ECX = 假碼

0041790B  |. 8B35 38B44100  MOV ESI,DWORD PTR DS:[<&MSVCRT._mbscmp>] ;  MSVCRT._mbscmp
00417911  |. 50             PUSH EAX                                 ; /s2
00417912  |. 51             PUSH ECX                                 ; |s1
00417913  |. FFD6           CALL ESI                                 ; \_mbscmp
00417915  |. 83C4 08        ADD ESP,8
00417918  |. 85C0           TEST EAX,EAX
0041791A  |. 0F85 49050000  JNZ UNPACKED.00417E69
                            --->測試跳轉,可以在此爆破,注意後面還有一處。

00417920  |. 8B55 DB        MOV EDX,DWORD PTR SS:[EBP-25]
00417923  |. 8B45 DA        MOV EAX,DWORD PTR SS:[EBP-26]
00417926  |. 8B4D D9        MOV ECX,DWORD PTR SS:[EBP-27]
00417929  |. 81E2 FF000000  AND EDX,0FF
0041792F  |. 83F2 06        XOR EDX,6
00417932  |. 25 FF000000    AND EAX,0FF
00417937  |. 52             PUSH EDX
                            --->EDX = 0000007E 註冊碼前後部分7,8兩位是7E

00417938  |. 8B55 D8        MOV EDX,DWORD PTR SS:[EBP-28]
0041793B  |. 81E1 FF000000  AND ECX,0FF
00417941  |. 83F0 03        XOR EAX,3
00417944  |. 81E2 FF000000  AND EDX,0FF
0041794A  |. 83F1 0B        XOR ECX,0B
0041794D  |. 50             PUSH EAX
                            --->EAX = 000000B8 註冊碼前後部分5,6兩位是B8

0041794E  |. 83F2 0C        XOR EDX,0C
00417951  |. 51             PUSH ECX
                            --->ECX = 00000038 註冊碼前後部分3,4兩位是38

00417952  |. 52             PUSH EDX
                            --->EDX = 0000007F 註冊碼前後部分1,2兩位是7F

00417953  |. 8D45 E4        LEA EAX,DWORD PTR SS:[EBP-1C]
00417956  |. 68 28104200    PUSH UNPACKED.00421028                   ;  ASCII "%02X%02X%02X%02X"
0041795B  |. 50             PUSH EAX
0041795C  |. E8 FD1B0000    CALL <JMP.&MFC42.#2818>
                            --->將前面計算的兩位兩位的註冊碼組合

00417961  |. 83C4 18        ADD ESP,18
00417964  |. 8D4D E8        LEA ECX,DWORD PTR SS:[EBP-18]
00417967  |. 51             PUSH ECX
00417968  |. 68 1F040000    PUSH 41F
0041796D  |. 8BCF           MOV ECX,EDI
0041796F  |. E8 261C0000    CALL <JMP.&MFC42.#3097>
00417974  |. 8D4D E8        LEA ECX,DWORD PTR SS:[EBP-18]
00417977  |. E8 181C0000    CALL <JMP.&MFC42.#4204>
                            --->將假碼的小寫字母轉換為大寫字母

0041797C  |. 8B55 E4        MOV EDX,DWORD PTR SS:[EBP-1C]
                            --->真碼的後半部分

0041797F  |. 8B45 E8        MOV EAX,DWORD PTR SS:[EBP-18]
00417982  |. 52             PUSH EDX
00417983  |. 50             PUSH EAX
00417984  |. FFD6           CALL ESI
00417986  |. 83C4 08        ADD ESP,8
00417989  |. 85C0           TEST EAX,EAX
0041798B  |. 0F85 D8040000  JNZ UNPACKED.00417E69
                            --->測試跳轉,可以在此爆破。

【總    結】註冊成功後會在 C 盤建立一名為measure.dll的檔案,將其刪除就會又成為未註冊版。此次並未能完全透徹的分析處他的加密演算法,因為軟體作者使用了DES加密,我的功力還不夠,只能盡我的能力,把我所知道的寫出來與大家一起分享,研究。有誰能真正分析出完整的加密演算法的話,希望能加以補充,大家一起進步!!!

相關文章