公路座標計算系統 1.0
【軟體名稱】:公路座標計算系統
【整理日期】: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加密,我的功力還不夠,只能盡我的能力,把我所知道的寫出來與大家一起分享,研究。有誰能真正分析出完整的加密演算法的話,希望能加以補充,大家一起進步!!!
相關文章
- SVG 座標系統2018-11-30SVG
- aecmap直接用地理座標系計算面積2024-06-05
- Shader 中的座標計算2018-09-20
- OpenGL 座標系統詳解2023-11-07
- 中國雲端計算的雲棲“座標”2020-09-14
- 計算機訂座系統及操作——CRS介紹2009-12-07計算機
- 形象化理解笛卡爾座標系和極座標系2018-09-23
- 座標系的生成2024-09-22
- 【計算幾何】求線段相交交點座標2017-03-04
- 百度地圖計算兩座標點之間距離計算2014-08-15地圖
- SVG座標系統和transformation徹底理解2017-04-24SVGORM
- GPS獲取座標 顯示Google map偏差計算2014-02-21Go
- Qt中QGraphicsView三種座標系統詳解2015-02-28QTView
- canvas座標系原點2018-09-10Canvas
- canvas 座標系原點2018-09-10Canvas
- SOSP:計算機系統研究的風向標2017-11-23計算機
- 地心地固座標系(ECEF)與站心座標系(ENU)的轉換2021-10-08
- jquery position()計算的是元素所佔據位置的座標2017-04-12jQuery
- 招聘—軟體系統架構師,座標北京知春路2021-09-18架構
- OpenGL ES on iOS --- 座標系統與矩陣轉換2017-12-14iOS矩陣
- 理解SVG座標系統和變換: transform屬性2015-09-23SVGORM
- Qt - 座標系及轉換2024-03-07QT
- 關於學習CRS計算機訂座系統的實踐報告2009-12-07計算機
- C++ opencv的圓轉矩形,極座標轉笛卡爾座標系2020-10-29C++OpenCV
- 機器人工具座標系標定原理2020-11-05機器人
- CAD夢想畫圖如何自定義座標系統2021-06-16
- 將座標系統儲存為一個檔案.prj2018-09-13
- 理解SVG座標系統和變換: 建立新視窗2015-09-23SVG
- Python量化交易系統實戰--計算交易指標2024-04-13Python指標
- WebGL座標系的小祕密2019-09-06Web
- android自定義View——座標系2019-02-08AndroidView
- 【matplotlib 實戰】--平行座標系2023-10-04
- 計算機系統2020-11-08計算機
- 雷達座標變換及其相關運算2024-05-14
- 使用AxisHelper幫助理解View and Data API中的座標系統2015-12-10ViewAPI
- 螢幕座標、裝置座標以及邏輯座標的區別2014-04-14
- OpenGL座標系與幾何變換2015-12-28
- 安卓自定義View基礎:座標系2016-05-25安卓View