破解和混合編程實(shí)例HackerReverseEngineering_第1頁(yè)
破解和混合編程實(shí)例HackerReverseEngineering_第2頁(yè)
破解和混合編程實(shí)例HackerReverseEngineering_第3頁(yè)
破解和混合編程實(shí)例HackerReverseEngineering_第4頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 創(chuàng)建一個(gè)最簡(jiǎn)單的保護(hù)機(jī)制并破解它; 選一個(gè)實(shí)例, 在此基礎(chǔ)上學(xué)習(xí)十六進(jìn)制編輯器, API窺測(cè)器 與 反匯編器(IDA Pro) 破解一個(gè)實(shí)際的例子 0551-36028242022-3-7最簡(jiǎn)單的密碼保護(hù)算法: 密碼存放位置: 程序中/ 配置文件/注冊(cè)表密碼保護(hù)措施: 無(wú) if (strcmp(password entered, reference password) /* 密碼不正確 */ else /* 密碼正確 */ 0551-36028242022-3-7Protect_password#define legal_pswmy.good.passwordint main() char

2、user_psw666; cout user_psw; if (strcmp(legal_psw, user_psw) cout“wrong passwordn”;/ “標(biāo)記密碼不匹配 0551-36028242022-3-7黑客反向工程熱身else cout “password oknhello ,legal user|n “; /“標(biāo)記”密碼匹配 return 0; 2022-3- 申斥密碼不匹配/ 申斥密碼不匹配/ 申斥密碼不匹配2022-3- 0551-3602824600007d11: LCMapStringW00007d1f: kernel32.dll

3、0000805c: crackme 00h0000806a: enter passwd:0000807d: my.good.password0000808f: wrong password0000809c: password ok000080af:hello, legal user!000080c2: .?Avios000080de: .?Avistream 結(jié)果分析2022-3-黑客反向工程熱身編譯后的程序執(zhí)行 猜測(cè)密碼-憑運(yùn)氣,難度大 分析程序的組成代碼 數(shù)據(jù)(密碼字符串)2022-3-黑客反向工程熱身 data: 數(shù)據(jù)段 rda

4、ta: 只讀數(shù)據(jù), 字符串文字和常量. 如本程序中的 myGOODpasswordn“。 bss: 未初始化數(shù)據(jù), 比如函數(shù)和靜態(tài)變量。 idata: 包括導(dǎo)入庫(kù)和導(dǎo)入地址名稱表。 edata:包含了應(yīng)用程序或DLL的導(dǎo)出數(shù)據(jù)。 text(code): 代碼段。 0551-36028242022-3-7黑客反向工程熱身c中中,內(nèi)存數(shù)據(jù)分為如下幾個(gè)區(qū)內(nèi)存數(shù)據(jù)分為如下幾個(gè)區(qū) 1.棧- 由編譯器自動(dòng)分配釋放bp+xx, bp-xx。 2.堆- 一般由程序員分配釋放new(), delete() 函數(shù)。 3.全局區(qū)(靜態(tài)區(qū))共享存儲(chǔ)區(qū)。 初始化的全局變量和靜態(tài)變量在一塊區(qū)域(data)。 未初始化全局

5、和靜態(tài)變量放在相鄰區(qū)域(bss)。 4.另外還有一個(gè)專門(mén)放常量的地方(rdata)。 C+中中,內(nèi)存分成內(nèi)存分成5個(gè)區(qū),分別為:個(gè)區(qū),分別為:1.棧棧,里面的變量通常是局部變量、函數(shù)參數(shù)等。 0551-36028242022-3-7黑客反向工程熱身2.堆堆,由new分配的內(nèi)存塊,由delete回收。 3.自由存儲(chǔ)區(qū)自由存儲(chǔ)區(qū),由malloc等分配的內(nèi)存塊,和堆相似, 由free回收。4.全局全局/靜態(tài)存儲(chǔ)區(qū)靜態(tài)存儲(chǔ)區(qū),全局和靜態(tài)變量均被分配到同一塊內(nèi)存中,由該語(yǔ)言編譯器自行確定(與C語(yǔ)言有差別)。5.常量存儲(chǔ)區(qū)常量存儲(chǔ)區(qū),存放常量,不允許修改。 靜態(tài)變量/全局變量:全局/靜態(tài)存儲(chǔ)區(qū)。 常量存放

6、在常量區(qū)。程序放在代碼區(qū)。 0551-36028242022-3-7黑客反向工程熱身查看二進(jìn)制文件. 根據(jù): 編譯器將初始變量放在如下數(shù)據(jù)段中. data rdata 自定義段 0551-36028242022-3-7黑客反向工程熱身改寫(xiě)動(dòng)機(jī):隱藏密碼字符串,增加一點(diǎn)分析難度。int count = 0/ 從現(xiàn)在開(kāi)始從現(xiàn)在開(kāi)始, 所有初始化變量都放置在所有初始化變量都放置在.kpnc中中.#pragma data_seg(“kpnc”) char passwd=PASSWORD;#pragma data_seg()/ 現(xiàn)在所有初始變量又將放到默認(rèn)段現(xiàn)在所有初始變量又將放到默認(rèn)段rdata中了中

7、了.char buffPASSWORD_SIZE=“ “; 0551-36028242022-3-7黑客反向工程熱身改寫(xiě)后的源代碼清單-list1_p9.cppidag list1_p9.exe目標(biāo)代碼中出現(xiàn)了如下段落:textrdatadataidatakpnc只有在kpnc 段中才能看到密碼字符串信息 myGOODpasswordn“ 0551-36028242022-3-7黑客反向工程-熟練使用反匯編器修改二進(jìn)制代碼的工具:hiew(動(dòng)機(jī))反匯編工具: ida大家推薦工具:softice, 匯編:將匯編程序轉(zhuǎn)換為機(jī)器語(yǔ)言程序。反匯編: 將機(jī)器語(yǔ)言程序轉(zhuǎn)換為匯編指令。 0551-36028

8、242022-3-7分析過(guò)程:.rdata:00420000 00 00 00 00 24 79 F0 46 00 00 00 00 02 00 00 00 .$y餏. .rdata:00420010 35 00 00 00 00 00 00 00 00 60 02 00 50 61 73 73 5. .Passrdata:00420020 77 6F 72 64 20 4F 4B 0A 00 00 00 00 57 72 6F 6E word OK.Wronrdata:00420030 67 20 70 61 73 73 77 6F 72 64 0A 00 00 00 00 00 g pas

9、sword.rdata:00420040 6D 79 47 4F 4F 44 70 61 73 73 77 6F 72 64 0A 00 myGOODpassword.rdata:00420050 00 00 00 00 45 6E 74 65 72 20 70 61 73 73 77 6F .Enter passwordata:00420060 72 64 3A 20 20 20 00 00 00 00 00 00 73 74 72 20 rd: .strrdata:00420070 21 3D 20 4E 55 4C 4C 00 66 67 65 74 73 2E 63 00 != NUL

10、L.fgets.c黑客反向工程黑客反向工程-Ida -list1_7.exe 0551-36028242022-3-7使用密碼串進(jìn)行比較的程序塊.text:0040104D.text:00401052 add esp, 0Ch.text:00401055 push offset s_Mygoodpasswor (00420040h)myGOODpasswordn.text:0040105A lea ecx, ebp+var_68.text:0040105D push ecx.text:0040105E call strcmp.text:0040105E.text:00401063 add es

11、p, 8.text:00401066 test eax, eax.text:00401068 jz short loc_ 0551-36028242022-3-7 strcmp傳遞兩個(gè)參數(shù) :push offset s_Mygoodpasswor ;參考密碼lea ecx, ebp+var_68; 用戶輸入密碼區(qū) push ecxcall strcmp C 規(guī)范:從右到左的順序?qū)?shù)壓入堆棧?;謴?fù)的結(jié)果為: strcmp(var_68, myGOODpasswordn)黑客反向工程-C規(guī)范的知識(shí) 0551-36028242022-3-7黑客反向工程-C規(guī)范的知識(shí) 1 從堆棧中刪除參數(shù)不由函數(shù)自

12、身完成,而是由調(diào)用程序完成,這樣能創(chuàng)建數(shù)目可變的參數(shù)。 調(diào)用程序 被調(diào)用程序 call strcmp ret 8 addesp, +08 2 常用清除堆棧指令 add esp, XXX 32位: n_args = XXX/416位:n_args = XXX/2 pop regsub esp, -XXX 3 由call后的add esp, 8 指令知該函數(shù)個(gè)數(shù)為2。 0551-36028242022-3-7黑客反向工程-分析修改的程序text:00401063 add esp, 8.text:00401066 test eax, eax.text:00401068 jz short loc_40

13、1079.text:0040106A push offset_WrongPassword ;Wrong passwordn.text:0040106F call printf 檢查函數(shù)返回值是否等于零,若為0,表示密碼正確,進(jìn)行相應(yīng)提示;否則轉(zhuǎn)錯(cuò)誤處理程序。修改: JNZ-JZ, test eax,eaxxor eax,eax等 JZ: 74-JNZ: 75 XOR: 0551-36028242022-3-7黑客反向工程-外科手術(shù)(改程序)解決方法:使用直接編輯二進(jìn)制工具 hiew32等.Hiew32 list1_p7g.exe目標(biāo): 尋找 JZ 機(jī)器代碼定位 1068h偏移, 將 改為 0551-36028242022-3-7黑客反向工程預(yù)備知識(shí)客反向工程預(yù)備知識(shí)客反向工程預(yù)備知識(shí)客反向工程預(yù)備知識(shí)客反

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論