# 壓縮殼脫殼 ###### tags: `learning` 本來打算在 ollydbg 教學上再學,但是有點懶得把當初的 winxp 裝回來,乾脆直接用別的檔案試試看,壓縮殼應該不會差太多吧... 這次的目標從這個[影片](https://www.youtube.com/watch?v=xFXd1mv0ucE)上看到的 **以下強烈建議在 win10 以下版本進行脫殼** :::info 因為 win10 要向下兼容,所以多用了一個叫 apphelp 的 dll ,造成之後修復 IAT 會出現問題,**脫殼請在最低系統上進行** ::: ## ESP 定律找 OEP 一開始會停在入口點, F9 執行後會停在 upx 解壓縮前,為了保存 registers ,會先用一個 pushad 把 registers 壓在 stack 上,解完後會在回復,因此直接在相關的 stack address 下一個 hardware breakpoint : pushad 保存 regs  對這個地址下斷點,等回復的時候就會停住了,接下來就離 OEP 不遠了  硬體斷點  F9 開開心心的跑下去,直到訪問到硬體斷點,刪除斷點後觀察附近的指令,發現有個大跳躍到 0x4021d0 ,基本就可以確定是 OEP 了  ## Dump 脫完殼的 binary 脫完後將之保存但不要關掉 dbg , scylla 內建有 dump 功能,用他的就好  ## 修復 IAT 我不知道為啥 scylla 找 IAT 每次都找錯 = = ,所以最好手動找一下  看起來很像用 IAT call function ,跟進去看發現一堆跳轉的指令,,ds:[] 放的地址應該就是 IAT 沒錯   考慮到放置 address 的地方應該是 data 而不是指令,我在 data window 下跟蹤下去,發現一堆奇怪東西,但仔細看會發現都是 `0x75f0????` 這種模式(有些不太一樣不過別在意),合理懷疑都是地址  用地址的呈現方式看看   OK 開始找 IAT 的起點和終點 起點:  終點:  注意到 IAT 表的結尾是 0 不是地址,計算下大小是 0x10e8 把起點和大小填到 scylla 上  get import  fix dump  執行看看新的脫殼檔案  成功!
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up