1. 程式人生 > >PE格式第五講,手工添加節表

PE格式第五講,手工添加節表

現在 mod 不難 作者 最好 case 中新 pe文件 文件大小

         PE格式第五講,手工添加節表

作者:IBinary
出處:http://www.cnblogs.com/iBinary/
版權所有,歡迎保留原文鏈接進行轉載:)

首先我們要用匯編編寫一段匯編代碼,用來生成標準PE

一丶標準PE生成的匯編代碼

.386
.model flat, stdcall
option casemap:none

include windows.inc
include user32.inc
include kernel32.inc

includelib user32.lib
includelib kernel32.lib

.data
    g_szMsg db 
"Hello PE!", 0dh, 0ah, 00 .code START: invoke MessageBoxA, NULL, offset g_szMsg, NULL, MB_OK invoke ExitProcess, 0 end START

然後可以生成一個標準PE

技術分享

當然為了講解這裏使用標準PE,你也可以自己隨便找個PE嘗試.

二丶手工添加節表

手工添加節表,我們首先有幾個步驟

/*

1.復制一個節到最後一個節下面
2.在NT頭中的文件頭中,修改節區數量的個數
3.修改節表中新節的虛擬地址大小 
4.修改節表中文件的對齊值
5.修改節表中新節的虛擬地址
6.修改可選頭(選線頭或者叫做擴展頭)中的鏡像大小
*/
寫完才發現好像比這裏面多一項,自己看下吧.有圖有教程.不難.

首先我們先做第一步,找到最後一個節,拷貝一份,復制到下面

1.尋找最後一個節,復制到下面

當然也可以不是最後一個,不過最後一個比較方便

使用010 Edit打開我們的Hello.exe,找到最後一個節

技術分享

010有強大的模版功能,使用模版,可以直接找到最後一個節,我們可以看到,現在有3個節存在

復制最後一個節,拷貝到0220h的地方

技術分享

現在已經完成了第一步了,復制節到下邊

2.修改NT頭中的文件頭中的節區數量

技術分享

修改為4,使用模版功能可以快速找到

3.修改表中虛擬地址大小

使用010的模版重新解析以下,會發現我們的節已經添加了,現在要做的就是修正偏移了.

技術分享

點擊我們的節,開始修正偏移即可

修改我們新添加節的虛擬地址大小

技術分享

4.修改新節中的虛擬地址

技術分享

上一個節的虛擬地址是從3000開始的,所以我們修改為4000h,相差一個分頁即可.但是註意上圖可以看出,我正要修改,還沒有修改,這裏我是修改了,只不過為了方便大家觀看為什麽修改,所以我在開始編輯的時候就截圖了

5.修改文件對齊值

技術分享

文件對齊值默認是512,也就是200h,所以這裏不用修改,但是註意,文件對齊值在可選頭中可以設置的.不過最好不要動了.

6.設置文件偏移

技術分享

上一個節的文件偏移是800開始,代表了節區的地址在800的位置,那麽我們新添加的就改為A00h

%200(文件對齊值)對齊,這個地方使我們的節區

7.添加文件大小

上面我們設置了文件對齊值是200h了,那麽我們就要添加200h(512)個字節,在對應的文件偏移處

我們設置的文件偏移處是A00,所以拷貝512個對齊值復制到A00位置即可.

技術分享

8.設置文件映射大小

我們新添加了一個節,那麽映射到內存中就要多出一個分頁大小,我們要設置一下

設置位置 NT頭->可選頭->sizeofImage(文件映射大小)

技術分享

保存PE文件,我們運行,然後OD調試查看.

技術分享

OD查看一下是否成功添加節

技術分享

跳轉到虛擬地址處查看

技術分享

是我們設置的90,所以已經成功添加了一個節

作者:IBinary
出處:http://www.cnblogs.com/iBinary/
版權所有,歡迎保留原文鏈接進行轉載:)

PE格式第五講,手工添加節表