破解和混合編程實例HackerReverseEngineering_第1頁
破解和混合編程實例HackerReverseEngineering_第2頁
破解和混合編程實例HackerReverseEngineering_第3頁
破解和混合編程實例HackerReverseEngineering_第4頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、 創建一個最簡單的保護機制并破解它; 選一個實例, 在此基礎上學習十六進制編輯器, API窺測器 與 反匯編器(IDA Pro) 破解一個實際的例子 0551-36028242022-3-7最簡單的密碼保護算法: 密碼存放位置: 程序中/ 配置文件/注冊表密碼保護措施: 無 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”;/ “標記密碼不匹配 0551-36028242022-3-7黑客反向工程熱身else cout “password oknhello ,legal user|n “; /“標記”密碼匹配 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 結果分析2022-3-黑客反向工程熱身編譯后的程序執行 猜測密碼-憑運氣,難度大 分析程序的組成代碼 數據(密碼字符串)2022-3-黑客反向工程熱身 data: 數據段 rda

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

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

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

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

8、242022-3-7分析過程:.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使用密碼串進行比較的程序塊.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傳遞兩個參數 :push offset s_Mygoodpasswor ;參考密碼lea ecx, ebp+var_68; 用戶輸入密碼區 push ecxcall strcmp C 規范:從右到左的順序將參數壓入堆棧。恢復的結果為: strcmp(var_68, myGOODpasswordn)黑客反向工程-C規范的知識 0551-36028242022-3-7黑客反向工程-C規范的知識 1 從堆棧中刪除參數不由函數自

12、身完成,而是由調用程序完成,這樣能創建數目可變的參數。 調用程序 被調用程序 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 指令知該函數個數為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 檢查函數返回值是否等于零,若為0,表示密碼正確,進行相應提示;否則轉錯誤處理程序。修改: JNZ-JZ, test eax,eaxxor eax,eax等 JZ: 74-JNZ: 75 XOR: 0551-36028242022-3-7黑客反向工程-外科手術(改程序)解決方法:使用直接編輯二進制工具 hiew32等.Hiew32 list1_p7g.exe目標: 尋找 JZ 機器代碼定位 1068h偏移, 將 改為 0551-36028242022-3-7黑客反向工程預備知識客反向工程預備知識客反向工程預備知識客反向工程預備知識客反

溫馨提示

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

評論

0/150

提交評論