1. 程式人生 > >160個crackme之005ajj.2破解思路及手脫UPX殼還有手動修復IAT

160個crackme之005ajj.2破解思路及手脫UPX殼還有手動修復IAT

(感覺標題好長 哎呀 不重要了 本文以一個新手的角度來寫)

我們先觀察下都給了什麼

還有一個txt文字 開啟看看 我還百度了下SOFTICE和TRW

至於TRW

不知道是不是這個

TRW2000操作手冊

https://www.pediy.com/kssd/tutorial/append-c.htm

執行之後 下邊圖片區滾動播放 三字經 我想笑

輸入11111111111111 發現沒啥變化

0x01:

    先查一下有沒有加殼

    

發現加了UPX殼   愛盤找個UPX脫殼機    (UPX是一個著名的壓縮殼,主要功能是壓縮PE檔案(比如exe,dll等檔案)

再查下殼 發現沒了 只顯示時Delphi的程式(發現程式也變大了 143KBà

448KB)

到最後 我打算再來一下手動脫UPX殼

0x02:

雖然是Delphi的程式 我還是打算先用下OD (習慣了)

    那就載入看看

發現直接就是程式OEP所在

接著還是用上最簡單的方法 查詢關鍵字串來定位關鍵程式碼

雙擊進入

我打算向上翻 將註冊尚未成功 的段首全部下上斷點(一共四個)

下圖是最上面的那個 段首

下圖這個時 厲害厲害 那一段的 我不確定這是不是段首 但是和上面那四段很相似 而且後邊也有retn 所以我還是下了一個斷點

執行程式 輸入iqiqiya 斷在這裡

F8單步 向下走 下邊這幾個跳轉全部都是 會跳過恭喜恭喜 那就都修改下Z標誌位 使得跳轉不成立

步過他們之後

然後直接F9執行程式

會發現右下角 註冊了 滑鼠移動到 註冊了 上邊 會出現 恭喜恭喜

人之初 性本善 性相近 習相遠 接著重複 。。。

0x03:

再用Dede看看

可以看到關鍵地址為004473E4 和OD字串搜尋是一樣的 直接OD中Ctrl+G 輸入即可

對比一下

關於演算法分析

演算法不好是硬傷啊

0x04:

在試試手脫UPX殼

F8向下單步走

走了一步

發現ESP暫存器變紅

右鍵ESP 選擇HW break [ESP]

點選選單欄 除錯à硬體斷點 可以看到已經下好了斷點

F9執行一次 斷在了這裡

接著一步F8

即可到達OEP

右鍵OD脫殼除錯程序

這時候如果直接選擇脫殼 然後儲存 不管是不是勾選重建輸入表 都是執行不了的

(執行還是會報錯的,因為還沒有修復資源 我們來試一下 看看怎麼個報錯)

11111為勾選了的 啟動報錯為

不勾選的為2222222

報錯為

可以看到是無法啟動的

我們重新來右鍵OllyDump脫殼除錯程序

把這個紅框處的複製下,一會修復的時候會用到然後點選脫殼按鈕,命名儲存想要修復資源,那就需要用到Import REConstructor

(注意:如果出現程式到達OEP後,用Import REC修復的時候找不到程序 那就找到Import REC的主程式

右鍵以管理員許可權執行就好了)

或者直接下邊Command視窗輸入bp GetProcAddress 回車即可

斷了下來 但是可以看地址都比較大(7開頭的) 所以Alt+F9返回會程式領空

(這時候就必須注意了 必須用xp下的OD才可以執行到程式領空 親測win10無效)

mov ds:[ebx],eax就是在寫IAT了,eax就是函式地址

ebx的值我們要找的IAT的VA,此時我的ebx=0044A104

我們先不急,繼續看一下

也許它的IAT還會分開存在別的位置呢

把那個GetProcAddress的斷點刪掉,在資料視窗定位到ebx,也就是0044A104處

然後在 mov ds:[ebx],eax 這裡f2下斷,然後f9執行
觀察資料窗口裡是不是開始寫值了,我們繼續f9,f9,f9......
ebx在不斷的增大,資料視窗在不斷的寫值..突然一下,呵呵ebx減小了

A10C………………….大概到A6DC 開始減小
記下這個值ebx=54e898,接著我們繼續f9,f9,f9....
只要是ebx在增大我們就不必注意..但是減小的話我們就要記下來
(中間有幾次短暫的減小過程 可以忽略)
我們要記住ebx的最小值,一直到它寫完IAT
什麼時候寫完?就是你再按f9時程式跑飛的時候

好了.程式終於跑飛了.

(什麼鬼 居然沒有截到圖 難受 難道虛擬機器截圖有延時???)

我們記錄的ebx最小值應該是ebx=0044A1BC,其實這個值也不需要那麼精確
只要比他小都行

所以IAT的va=44A1BC,rva=va-400000=04A1BC

好了.現在我們可以藉助ImportRec來幫我們找IAT了(接下來我還是用的win10)

三個引數

OEP=4768C

RVA=04A1BC

size=10000(這個值不要太大,也不要太小,太小了找不全.,太大了找到的蠻多都是無效,你可以先確定為2000再慢慢增加或減小,這個程式要很大)

我用的是2000

好的.然後我們ctrl+f2重新執行.再把程式執行到oep處

用importrec找到我們的程式,填入OEP,RVA,SIZE這是哪個引數

然後點選獲取函式

有很多無效函式.我們把它刪掉

再來修復我們的111111111.exe

執行....

ok,成功 但是還是不可以執行。。。。。。。。。。。。簡直沒脾氣

其實蠻多壓縮殼脫殼後都可以用這種方法找到IAT(這個方法還是很棒的 期待下次邂逅 哈哈)

仔細分析原因

後來我測試了 如果直接用xp來進行ESP定律脫殼 根本用不到ImportREC 直接選擇預設的使用OliyDump就可以脫掉殼 還可以成功執行

這個故事告訴我們 還是XP環境用OD更為合適

手動查詢IAT參考自