使用ESP定律_手工脱壳
ESP定律脫殼一般的加殼軟件在執(zhí)行時(shí),首先要初始化,保存環(huán)境(保存各個(gè)寄存器的值),一般利用PUSHAD(相當(dāng)于把所有寄存器都?jí)簵?#xff09;,當(dāng)加殼程序的外殼執(zhí)行完畢以后,再來恢復(fù)各個(gè)寄存器的內(nèi)容,通過跨區(qū)段的轉(zhuǎn)移來跳到程序的OEP來執(zhí)行原程序,簡(jiǎn)單點(diǎn)來說就是會(huì)將加殼過程執(zhí)行一遍之后會(huì)跳到OEP來執(zhí)行源程序,當(dāng)我們找到了OEP的時(shí)候就是找到了源程序,即可實(shí)現(xiàn)脫殼。
通常在軟件的破解過程中,會(huì)遇到代碼經(jīng)過混淆器混淆的程序,此類混淆器可以稱之為殼,殼又可分為壓縮殼(常見的有UPX、北斗、ASDPack、Npack、PECompact等)和保護(hù)殼(如強(qiáng)殼Safengine、VMprotect、winlicense、Themida等),壓縮殼作用是把程序進(jìn)行體積縮小化處理,保護(hù)殼主要作用是混淆或加密代碼防止他人進(jìn)行逆向程序、破解程序。我們可以通過一些偵殼程序進(jìn)行識(shí)別,但有些殼會(huì)采用偽裝技術(shù)來混淆偵殼程序。
本次我們使用ESP定律來脫一個(gè)ASPack的殼,先來準(zhǔn)備課前工具,以后將使用這幾個(gè)工具。
DIE查殼工具:https://files.cnblogs.com/files/LyShark/DiE_0.64.zip 課件內(nèi)容:https://files.cnblogs.com/files/LyShark/ASPack.zip?
1.首先使用DIE載入查詢待脫殼程序,觀察是使用那種語言來實(shí)現(xiàn)的,還有判斷是加了那種殼,這里當(dāng)然是aspack
上面的報(bào)告可以看出,編譯器使用的是VC++ ,版本不確定,壓縮器使用的是ASPack2.12版本。
?
2.OD載入待脫殼的程序,會(huì)看到第一條指令是Pushad,這種指令往往是成對(duì)出現(xiàn)的,而且能夠使用ESP定律搞定。
?
3.接著我們按一下F8單步執(zhí)行一次,會(huì)發(fā)現(xiàn)右側(cè)寄存器窗口,只有ESP變成了紅色,這樣的情況可以使用ESP定律了。
?
4.在ESP寄存器上,右鍵,選擇在數(shù)據(jù)窗口中跟隨。
?
5.查看數(shù)據(jù)窗口,并選擇下面的區(qū)域,設(shè)置斷點(diǎn),硬件訪問斷點(diǎn),類型為DWORD
?
6.然后,F9 讓程序跑起來,會(huì)停在以下代碼區(qū)域。
?
7.然后按下F8,3次,到程序返回,最后看到下面的代碼處,說明已經(jīng)到了OEP的位置了。
?
8.直接脫殼,選擇用od dump 脫殼調(diào)試進(jìn)程。
?
9.點(diǎn)擊獲取OEP,脫殼,保存程序即可了。
?
10.最后,對(duì)比一下兩個(gè)文件,會(huì)發(fā)現(xiàn)大小發(fā)生變化了。
轉(zhuǎn)載于:https://www.cnblogs.com/LyShark/p/11139836.html
總結(jié)
以上是生活随笔為你收集整理的使用ESP定律_手工脱壳的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【VISIO2016箭头使用】
- 下一篇: 实验二《Java面向对象程序设计》实验报