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格式第五講,手工添加節表