91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ESP定律原理是什么

發布時間:2021-12-03 19:31:36 來源:億速云 閱讀:189 作者:柒染 欄目:網絡安全

ESP定律原理是什么,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

0x00 前言

疫情期間閑著也是閑著,在逆向某軟件時深入了解了下ESP定律,然后就想寫個文章記錄并分享下。

ESP定律又稱堆棧平衡定律,是應用頻率最高的脫殼方法之一 ,不論是新手還是老手都經常用到。據我所知,ESP定律是一位外國大牛發現的,但目前已無從考證(未找到相關資料)。

0x01 前置知識


棧(stack)是內存中分配的一段空間。 向一個棧插入新元素又稱作入(push)放到棧頂元素的上面,使之成為新的棧頂元素; 從一個棧刪除元素又稱作出棧(pop),它把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

ESP定律原理是什么

call

相當于高級語言中的函數調用。 當執行call指令時,進行兩步操作: 將下一條的指令的地址壓入棧中,再跳轉到該地址處。 相當于:

push ip 
jmp near ptr 地址

ret && retf

與call指令相對應,將當前的ESP寄存器中指向的地址出棧,然后跳轉到這個地址。 相當于:
pop ip
#ret
pop IP
pop CS
#retf

0x02 操作示例

這是我寫的一個帶殼的32位小程序,用來當做esp定律應用的一個示例。這是一個比較機械的方法,但可以對esp定律有一個感性的認識。

首先用Exeinfo Pe查殼,發現是nspack殼。

ESP定律原理是什么

接下來用od載入程序,單步步入后,如箭頭所示發現ESP寄存器變紅。

ESP定律原理是什么

此時單擊右鍵選中該寄存器進行數據窗口跟隨。然后選中數據窗口任意字符下硬件斷點(byte,word,dword均可)。

ESP定律原理是什么

f9運行后,f8連續單步步過找到OEP( 程序的入口點 )。選中該地址單擊右鍵選中用OllyDump脫殼調試進程,然后進行脫殼(如果發現程序不能打開,可以試試勾選重建輸入表)。

ESP定律原理是什么

接著用Exeinfo Pe查殼,殼已經被去掉了。

ESP定律原理是什么

0x03 原理詳解

首先,殼實質上是一個子程序,它在程序運行時首先取得控制權并對程序進行壓縮。 同時隱藏程序真正的OEP。大多數病毒就是基于此原理,從而防止被殺毒軟件掃描。

殼的類型:

? 解壓->運行
? 解壓->運行->解壓.->運行
? 解壓 decoder|encoded code->decode ->exc
? Run the virtual machine

而脫殼的目的就是找到真正的OEP(入口點)。

而我們所講到的ESP定律的本質是堆棧平衡,具體如下:

讓我們看下加了殼的這個小程序的入口的各個寄存器的情況

EAX 00000000
ECX 004E820D offset r1.<ModuleEntryPoint>
EDX 004E820D offset r1.<ModuleEntryPoint>
EBX 0036C000
ESP 0072FF74
EBP 0072FF80
ESI 004E820D offset r1.<ModuleEntryPoint>
EDI 004E820D offset r1.<ModuleEntryPoint>
EIP 004E820D r1.<ModuleEntryPoint>

然后是到OEP時各寄存器的情況

EAX 0072FFCC
ECX 004E820D offset r1.<ModuleEntryPoint>
EDX 004E820D offset r1.<ModuleEntryPoint>
EBX 0036A000
ESP 0072FF74
EBP 0072FF80
ESI 004E820D offset r1.<ModuleEntryPoint>
EDI 004E820D offset r1.<ModuleEntryPoint>
EIP 00401500 r1.00401500

我們發現只有EIP和EAX寄存器的數值發生了變化,而EAX保存的是OEP的地址,這是什么原因呢?

由于在程序自解密或者自解壓過程中, 多數殼會先將當前寄存器狀態壓棧, 如使用pushad, 而在解壓結束后, 會將之前的寄存器值出棧, 如使用popad. 因此在寄存器出棧時, 往往程序代碼被恢復, 此時硬件斷點觸發(這就是我們要下硬件斷點的原因),然后在程序當前位置, 只需要一些單步操作, 就會到達正確的OEP位置.  

0x04 適用范圍

我自己總結了一個比較小白的方法,那就是載入程序后只有esp寄存器內容發生變化,那么這個程序多半可以用ESP定律(如有錯誤多謝指正)。

幾乎全部的壓縮殼, 一些早期的加密殼 (這是在網上收集到的資料總結的,經過我自己的實踐,基本準確)。

看完上述內容,你們掌握ESP定律原理是什么的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

esp
AI

五华县| 界首市| 平乐县| 石狮市| 建平县| 云南省| 萨嘎县| 浙江省| 深泽县| 璧山县| 鹿邑县| 罗江县| 丰宁| 沁阳市| 安平县| 高雄县| 隆尧县| 龙门县| 师宗县| 花莲县| 黄梅县| 双鸭山市| 芦溪县| 乌鲁木齐县| 阿克苏市| 安西县| 沁水县| 沅陵县| 班玛县| 炉霍县| 泸溪县| 安丘市| 邻水| 三都| 黄平县| 罗山县| 海伦市| 白河县| 鲜城| 锡林浩特市| 聂荣县|