OD反匯編EXE添加一個啟動時的消息框
最近有一個要修改PE文件的需求,就先從EXE文件下手吧,我也是初學一個小時而已,不過之前接觸過一點匯編罷了,這篇文章算是個DEMO,主要的思路是將其反匯編得到匯編代碼后,然后手動修改他的邏輯首先跳轉到彈框區域再跳轉回來去執行原來的代碼,相關的工具有ollydbg,以及要修改的一個xp系統自帶的掃雷軟件,還有參考的文章,都會在文末給出。
描述
首先准備好要用到的OD工具也就是ollydbg和掃雷這個軟件。

使用OD將掃雷導入之后,自動定位到了入口點。

之后選擇前2行將其Ctrl + C復制,主要是為了空出來足夠的位置讓我們完成指令的修改。


然后返回到OD,我們需要找到HEX數據是00的地方,通常也就是尾部位置存在的空白位置,注意我們是不能直接插入一些指令的,只能跳過去執行了我們想要的代碼之后再跳回來執行原代碼,我們可以使用右擊-查找-二進制字符串,多輸入幾個0點擊搜索即可,因為在掃雷中前邊也有一堆00數據段,我們可以使用Ctrl + L,不斷搜索下一個。

我們定位到尾部的00位置后,我們多選擇一些行,選中幾十行,右擊-編輯-使用00填充。

現在我們隨便空幾行,我是在01004A65這個地址開始修改,可以直接Ctrl + G,定位到這個位置。

我們選定這個位置后,開始打一個空格,嘗試修改一下匯編代碼,填入PUSH 0。


之后我們再占用一下位置,填寫一下如下的代碼,這個01004AB5是我隨意寫的,只是為了占一個位置。

接着我們需要找到彈窗的地址,右擊-查找-名稱,在彈出的窗口點一下名稱,讓他排一下序,我們找到&USER32.MessageBoxW,之后右擊-復制到剪貼板-地址。


之后我們定位到01004A73這個位置,填入CALL DWORD PTR DS:[010010B8],在DS:[010010B8]中的地址就是剛才復制的地址。


這樣彈出消息框的部分就完成了,四個push加一個call就是彈消息框的,中間的兩個push第一個就是傳標題第二個就是傳內容的,現在我們依舊再寫兩行語句進行占位,這主要是為了后邊啟動邏輯方面用,也就是為了最初的時候我們復制的啟動時定位的那兩行使用。

之后我們再空出來幾行代碼,在01004A91地址上右擊-編輯-二進制編輯。

在UNICODE區域填入Title,然后保存。


同樣空幾行位置,在01004AE3添加一個Hello World。


之后我們回到01004A67,在此處開始添加匯編,雙擊或者按空格都可以,在01004A67位置修改為PUSH 01004A91,之后接着修改,在下一個位置也就是01004A6C修改為PUSH 01004A9F,也就是將剛才兩個添加的字符串放置於此處引用。

緊接着我們修改啟動的邏輯,點擊右邊的EIP定位到入口位置。

在最初的時候我們選擇了前2行位置的代碼進行了復制,現在我們同樣選中前2行,然后右擊-編輯-用NOP填充。


然后在第一個位置也就是01004A65,填入JMP 01004A65,也就是我們剛才找到的編輯過的00段的第一個位置。

然后我們再回到01004A65,從01004A79開始按照順序將原來的2行匯編填充進去,就是在最初的時候我們復制到記事本的代碼,出現了多個nop的話我們就對於要編輯的從01004A79開始重新右擊-編輯-用00填充,然后再接着填寫,注意最后我們還有一個jmp跳回的操作,也就是在上圖的nop后的第一條語句地址即01003E28。


到這基本就差不多了,思路就是從入口開始執行我們自己的代碼,然后執行完了再跳轉回去繼續執行原來的代碼。之后我們右擊-編輯-復制所有修改到可執行文件。


右擊-保存文件,選是,即可保存,注意這邊還是要另存為一個文件名,用來和原來的有所區分。

保存過后,運行該文件即可看到效果。

Blog
https://blog.touchczy.top/#/
參考
http://www.downcc.com/soft/24420.html
https://www.xiazaiba.com/html/3979.html
https://www.52pojie.cn/thread-217068-1-1.html
