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à
到最後 我打算再來一下手動脫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參考自