初學小記bmp2txt v1.22全過程
標 題:初學小記bmp2txt v1.22全過程
發信人:xuanqing
時 間:2004-4-05 週一, 下午11:33
詳細資訊:
破解目標
bmp2txt v1.22
軟體簡介
一個ASC編輯的軟體,把bmp圖片轉換成形似的ASC字元圖案
破解作者
xuanqing[BCG]
破解工具
ollydbg1.09d(en),ollydump,ImportREC1.42
破解目的
本不為破解而破解,只因為技術而破解.對作者表示歉意.
破解環境
WINDOWS XP (cn OEM with sp1)
相關關鍵字
telock0.98脫殼,浮點比較指令,序號產生器C++程式碼
破解說明
小菜剛剛(矇混)加入BCG,剛剛開始學習手動脫殼,第一次接觸浮點指令
這是第一次以[BCG]字尾發表破文,錯誤和不足難免百出,還請大蝦指出.
破解過程
1.脫殼
peid偵測為TeLock0.98,按照二哥提供的教程中方法原封不動的搞定脫殼
(其實後來看這個演算法很簡單,完全可以不脫搞定的-__-)
先試著載入,數異常的次數,直到執行(15次既正常啟動)
再次載入,點14次,然後在[esp+4]上下斷
shift+f9執行,被斷下
之後小心的用f7和f4即可到達oep:4044a4
ollydump之
用ImportREC1.42修復,level3搜尋後,剩下少數幾個(我這裡是4個)無效指標,cut掉
fixdump
檢驗檔案已經執行正常
(其實,這個脫殼過程按照fly大蝦的筆記也可以完成,但我還沒有看太明白,
所以還是用ImportREC1.42搞定了)
2.演算法分析
這個軟體的演算法部分有一些浮點指令,
透過查閱論壇上網友提供的intel80x86Opcodes.pdf
可以詳細的知道每條指令的具體含義.
而這個演算法又相對簡單,是在破解中學習浮點的好例子
透過下bp MessageBoxA和一定的向回追溯,可以找到註冊碼的合法性檢驗部分
註釋如下:
00403790 . 51 PUSH ECX
00403791 . 56 PUSH ESI
00403792 . 57 PUSH EDI
00403793 . 8BF1 MOV ESI,ECX
00403795 . 6A 01 PUSH 1
00403797 . E8 140C0000 CALL <JMP.&mfc42.#6334_?UpdateData@CWnd@@QA>
0040379C . 8B86 A0000000 MOV EAX,DWORD PTR DS:[ESI+A0]
004037A2 . 8DBE A0000000 LEA EDI,DWORD PTR DS:[ESI+A0]
004037A8 . 8B48 F8 MOV ECX,DWORD PTR DS:[EAX-8]
004037AB . 85C9 TEST ECX,ECX
004037AD . 74 5F JE SHORT Bmp2TxtO.0040380E
004037AF . 6A 2D PUSH 2D ; '-'
004037B1 . 8BCF MOV ECX,EDI
004037B3 . E8 6A0C0000 CALL <JMP.&mfc42.#2763_?Find@CString@@QBEHD>; 在key串中查詢'-'
004037B8 . 83F8 04 CMP EAX,4 ; 是否在第五個位元組是?
004037BB . 75 43 JNZ SHORT Bmp2TxtO.00403800 ; 不是跳出非法註冊
004037BD . 8D4C24 08 LEA ECX,DWORD PTR SS:[ESP+8]
004037C1 . 68 44734000 PUSH Bmp2TxtO.00407344 ; ASCII "LI3SHU1CENG2BA4F-"
004037C6 . 51 PUSH ECX
004037C7 . 8BCF MOV ECX,EDI
004037C9 . E8 600C0000 CALL <JMP.&mfc42.#6223_?SpanIncluding@CStri>
004037CE . 8D4C24 08 LEA ECX,DWORD PTR SS:[ESP+8]
004037D2 . E8 F9090000 CALL <JMP.&mfc42.#800_??1CString@@QAE@XZ>
004037D7 . 8B3F MOV EDI,DWORD PTR DS:[EDI]
004037D9 . 837F F8 09 CMP DWORD PTR DS:[EDI-8],9 ; 只是查長度??一定有別的驗證地方
004037DD . 75 21 JNZ SHORT Bmp2TxtO.00403800
004037DF . 57 PUSH EDI ; /Arg1
004037E0 . 8BCE MOV ECX,ESI ; |
004037E2 . E8 C9000000 CALL Bmp2TxtO.004038B0 ; Bmp2TxtO.004038B0
004037E7 . 6A 00 PUSH 0
004037E9 . 6A 40 PUSH 40
004037EB . 68 7C734000 PUSH Bmp2TxtO.0040737C
004037F0 . E8 770A0000 CALL <JMP.&mfc42.#1200_?AfxMessageBox@@YGHP>
004037F5 . 8BCE MOV ECX,ESI
004037F7 . E8 C0080000 CALL <JMP.&mfc42.#4853_?OnOK@CDialog@@MAEXX>
004037FC . 5F POP EDI
004037FD . 5E POP ESI
004037FE . 59 POP ECX
004037FF . C3 RETN
00403800 > 6A 00 PUSH 0
00403802 . 6A 10 PUSH 10
00403804 . 68 6C734000 PUSH Bmp2TxtO.0040736C
00403809 . E8 5E0A0000 CALL <JMP.&mfc42.#1200_?AfxMessageBox@@YGHP>
0040380E > 8D4E 60 LEA ECX,DWORD PTR DS:[ESI+60]
00403811 . E8 DC0B0000 CALL <JMP.&mfc42.#5981_?SetFocus@CWnd@@QAEP>
00403816 . 5F POP EDI
00403817 . 5E POP ESI
00403818 . 59 POP ECX
00403819 . C3 RETN
經簡單分析可以知道這個軟體會在別的地方嚴格驗證註冊碼的合法性
大概搜尋了一下,即可知道註冊碼被存在了登錄檔裡面
下斷bp RegQuaryExA,重啟程式即可找到關鍵比較程式碼.
註釋如下:
00403250 /$ 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
00403256 |. 6A FF PUSH -1
00403258 |. 68 B04B4000 PUSH Bmp2TxtO.00404BB0
0040325D |. 50 PUSH EAX
0040325E |. 64:8925 00000>MOV DWORD PTR FS:[0],ESP
00403265 |. 83EC 14 SUB ESP,14
00403268 |. 53 PUSH EBX
00403269 |. 55 PUSH EBP
0040326A |. 56 PUSH ESI
0040326B |. 8B7424 30 MOV ESI,DWORD PTR SS:[ESP+30]
0040326F |. 33DB XOR EBX,EBX
00403271 |. 8BE9 MOV EBP,ECX
00403273 |. 3BF3 CMP ESI,EBX
00403275 |. 75 16 JNZ SHORT Bmp2TxtO.0040328D ; 是否有Reg儲存的註冊碼
00403277 |. 5E POP ESI
00403278 |. 5D POP EBP
00403279 |. 33C0 XOR EAX,EAX
0040327B |. 5B POP EBX
0040327C |. 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14]
00403280 |. 64:890D 00000>MOV DWORD PTR FS:[0],ECX
00403287 |. 83C4 20 ADD ESP,20
0040328A |. C2 0400 RETN 4
0040328D |> 68 48714000 PUSH Bmp2TxtO.00407148 ; ASCII "LI3SHU1CENG2BA4F-"
00403292 |. 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10]
00403296 |. E8 650F0000 CALL <JMP.&mfc42.#537_??0CString@@QAE@PBD@Z>
0040329B |. 56 PUSH ESI
0040329C |. 8D4C24 34 LEA ECX,DWORD PTR SS:[ESP+34]
004032A0 |. 895C24 2C MOV DWORD PTR SS:[ESP+2C],EBX
004032A4 |. E8 570F0000 CALL <JMP.&mfc42.#537_??0CString@@QAE@PBD@Z>
004032A9 |. 8D4424 14 LEA EAX,DWORD PTR SS:[ESP+14]
004032AD |. 68 48714000 PUSH Bmp2TxtO.00407148 ; ASCII "LI3SHU1CENG2BA4F-"
004032B2 |. 50 PUSH EAX
004032B3 |. 8D4C24 38 LEA ECX,DWORD PTR SS:[ESP+38]
004032B7 |. C64424 30 01 MOV BYTE PTR SS:[ESP+30],1
004032BC |. E8 6D110000 CALL <JMP.&mfc42.#6223_?SpanIncluding@CStri>
004032C1 |. 8D4C24 14 LEA ECX,DWORD PTR SS:[ESP+14]
004032C5 |. E8 060F0000 CALL <JMP.&mfc42.#800_??1CString@@QAE@XZ>
004032CA |. 6A 2D PUSH 2D
004032CC |. 8D4C24 34 LEA ECX,DWORD PTR SS:[ESP+34]
004032D0 |. E8 53110000 CALL <JMP.&mfc42.#6874_?Remove@CString@@QAE>
004032D5 |. 8B4C24 30 MOV ECX,DWORD PTR SS:[ESP+30]
004032D9 |. 8B41 F8 MOV EAX,DWORD PTR DS:[ECX-8]
004032DC |. 83F8 08 CMP EAX,8
004032DF |. 74 34 JE SHORT Bmp2TxtO.00403315
004032E1 |. 8D4C24 30 LEA ECX,DWORD PTR SS:[ESP+30]
004032E5 |. 885C24 28 MOV BYTE PTR SS:[ESP+28],BL
004032E9 |. E8 E20E0000 CALL <JMP.&mfc42.#800_??1CString@@QAE@XZ>
004032EE |. 8D4C24 0C LEA ECX,DWORD PTR SS:[ESP+C]
004032F2 |. C74424 28 FFF>MOV DWORD PTR SS:[ESP+28],-1
004032FA |. E8 D10E0000 CALL <JMP.&mfc42.#800_??1CString@@QAE@XZ>
004032FF |. 5E POP ESI
00403300 |. 5D POP EBP
00403301 |. 33C0 XOR EAX,EAX
00403303 |. 5B POP EBX
00403304 |. 8B4C24 14 MOV ECX,DWORD PTR SS:[ESP+14]
00403308 |. 64:890D 00000>MOV DWORD PTR FS:[0],ECX
0040330F |. 83C4 20 ADD ESP,20
00403312 |. C2 0400 RETN 4
00403315 |> 57 PUSH EDI
00403316 |. 33FF XOR EDI,EDI
00403318 |. 33F6 XOR ESI,ESI
0040331A |> 8B5424 34 /MOV EDX,DWORD PTR SS:[ESP+34] ; 去除了'-'的key串
0040331E |. 8A0416 |MOV AL,BYTE PTR DS:[ESI+EDX] ; 迴圈次字母
00403321 |. 884424 1C |MOV BYTE PTR SS:[ESP+1C],AL ; 入棧
00403325 |. 8B4C24 1C |MOV ECX,DWORD PTR SS:[ESP+1C] ; 0擴充套件存ECX
00403329 |. 51 |PUSH ECX
0040332A |. 8D4C24 14 |LEA ECX,DWORD PTR SS:[ESP+14]
0040332E |. E8 EF100000 |CALL <JMP.&mfc42.#2763_?Find@CString@@QBEH>; 查詢在上面長度10的固定字串中的位置
00403333 |. C1E7 04 |SHL EDI,4 ; 騰地方
00403336 |. 03F8 |ADD EDI,EAX ; 該字母在串中前面還有幾個字母,這個數值放到EDI的最低位元組
00403338 |. 46 |INC ESI ; 迴圈變數兼指標
00403339 |. 83FE 08 |CMP ESI,8
0040333C |.^ 7C DC JL SHORT Bmp2TxtO.0040331A
0040333E |. 8D5424 14 LEA EDX,DWORD PTR SS:[ESP+14] ; 指向前4位元組
00403342 |. 8BCD MOV ECX,EBP
00403344 |. 52 PUSH EDX ; /Arg1
00403345 |. 895C24 18 MOV DWORD PTR SS:[ESP+18],EBX ; |
00403349 |. E8 82000000 CALL Bmp2TxtO.004033D0 ; 取C:盤的volumeSerialNumber
004033D0 /$ 83EC 08 SUB ESP,8
004033D3 |. 56 PUSH ESI
004033D4 |. 8B7424 10 MOV ESI,DWORD PTR SS:[ESP+10]
004033D8 |. 85F6 TEST ESI,ESI
004033DA |. 75 09 JNZ SHORT Bmp2TxtO.004033E5
004033DC |. 33C0 XOR EAX,EAX
004033DE |. 5E POP ESI
004033DF |. 83C4 08 ADD ESP,8
004033E2 |. C2 0400 RETN 4
004033E5 |> 6A 00 PUSH 0 ; /pFileSystemNameSize = Null
004033E7 |. 8D4424 08 LEA EAX,DWORD PTR SS:[ESP+8] ; |
004033EB |. 6A 00 PUSH 0 ; |pFileSystemNameBuffer = Null
004033ED |. 8D4C24 10 LEA ECX,DWORD PTR SS:[ESP+10] ; |
004033F1 |. 50 PUSH EAX ; |pFileSystemFlags = 0012F5E4
004033F2 |. 8D5424 1C LEA EDX,DWORD PTR SS:[ESP+1C] ; |
004033F6 |. 51 PUSH ECX ; |pMaxFilenameLength = 0012F5E8
004033F7 |. 52 PUSH EDX ; |pVolumeSerialNumber = 0012F5F0
004033F8 |. 6A 00 PUSH 0 ; |MaxVolumeNameSize = 0
004033FA |. 6A 00 PUSH 0 ; |VolumeNameBuffer = Null
004033FC |. 68 1C734000 PUSH Bmp2TxtO.0040731C ; |RootPathName = "c:\
相關文章
- 記憶體訪問全過程2020-05-10記憶體
- LLM本地部署全過程記錄2024-05-10
- oracle10g_儲存過程學習小記2010-03-23Oracle儲存過程
- Java初學者:Jsp開發環境配置全過程2007-04-14JavaJS開發環境
- 【Elasticsearch學習】文件搜尋全過程2020-05-10Elasticsearch
- 【ETL工具】DataX + DataXWeb 初使用過程記錄2024-09-02Web
- c#呼叫儲存過程小記2011-08-25C#儲存過程
- 記一次前端面試的全過程2018-11-24前端面試
- 記錄NLTK安裝使用全過程--python2022-03-28Python
- 接入頂象技術小程式驗證碼全過程2020-09-21
- 一個小專案(爬蟲)的誕生全過程2016-06-13爬蟲
- 攜程小程式初體驗2018-06-09
- 設定autotrace全過程2008-07-29
- Hydro OJ搭建全過程2024-05-03
- 談談本人學Linux的小過程2020-08-20Linux
- 11g RAC庫恢復過程小記2014-02-12
- 近期編寫tcbs儲存過程小記(1)2011-09-08儲存過程
- 記一次MySQL資料遷移到SQLServer全過程2022-04-24MySqlServer
- 記錄一個sql最佳化的全過程.txt2013-03-15SQL
- 從0開始搭建微信小程式(前後端)的全過程2019-04-14微信小程式後端
- MapReduce 執行全過程解析2019-08-05
- 頁面載入全過程2018-11-27
- DNS解析全過程及原理2013-07-15DNS
- centos 安裝MySQL全過程2014-09-10CentOSMySql
- 記錄小程式touchmove事件中setData優化過程2019-02-28事件優化
- 儲存過程入門初識2012-06-15儲存過程
- 初學微信小程式 TodoList2019-02-16微信小程式
- 記一次使用gdb診斷gc問題全過程2023-02-04GC
- .記一次使用gdb診斷gc問題全過程2023-02-04GC
- 隨機過程學習筆記——概論2020-10-06隨機筆記
- 學習筆記 過程、同義詞、序列2007-05-25筆記
- Git伺服器搭建全過程2015-07-07Git伺服器
- C語言編譯全過程2010-10-19C語言編譯
- oracle for redhat as4.0 cluster 全過程2007-03-01OracleRedhat
- TDP for SQL安裝配置全過程2008-01-30SQL
- linux iSCSI target配置全過程2007-10-25Linux
- 000 上傳本地庫到Github遠端庫過程全記錄2022-06-13Github
- 開發一個Node命令列小玩具全過程--高顏統計工具2018-08-14命令列