PE結構-合併節(附例項程式碼)
合併節:
1、拉伸到記憶體
2、將第一個節的記憶體大小、檔案大小改成一樣
Max = SizeOfRawData>VirtualSize?SizeOfRawData:VirtualSize
SizeOfRawData = VirtualSize = 最後一個節的VirtualAddress + Max - SizeOfHeaders記憶體對齊後的大小
3、將第一個節的屬性改為包含所有節的屬性 (重點)
4、修改節的數量為1
BOOL MergingSection(IN OUT LPVOID* pImageBuffer)
{
//DOC頭
PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)*pImageBuffer;
//NT頭
PIMAGE_NT_HEADERS pNTHeader = (PIMAGE_NT_HEADERS)((DWORD)pDosHeader + pDosHeader->e_lfanew);
//標準PE頭
PIMAGE_FILE_HEADER pPEHeader = (PIMAGE_FILE_HEADER)(((DWORD)pNTHeader) + 4);
//可選PE頭
PIMAGE_OPTIONAL_HEADER32 pOptionHeader = (PIMAGE_OPTIONAL_HEADER32)((DWORD)pPEHeader + IMAGE_SIZEOF_FILE_HEADER);
if (*((PWORD)*pImageBuffer) != IMAGE_DOS_SIGNATURE)
{
printf("MZ檔案標誌頭不存在!");
free(pImageBuffer);
return false;
}
PIMAGE_SECTION_HEADER pSectionHeader = NULL;
pSectionHeader = (PIMAGE_SECTION_HEADER)((DWORD)pOptionHeader + pPEHeader->SizeOfOptionalHeader);
DWORD Max = pSectionHeader->SizeOfRawData > pSectionHeader->Misc.VirtualSize ? pSectionHeader->SizeOfRawData : pSectionHeader->Misc.VirtualSize;
PIMAGE_SECTION_HEADER pSectionHeader_tmp = pSectionHeader;
pSectionHeader_tmp += (pPEHeader->NumberOfSections - 1);
pSectionHeader->SizeOfRawData = pSectionHeader->Misc.VirtualSize = Align(pSectionHeader_tmp->VirtualAddress + Max - pOptionHeader->SizeOfHeaders, pOptionHeader->SectionAlignment);
pPEHeader->NumberOfSections = 1;
return true;
}
Github地址:https://github.com/vShellCode/Analysis-of-PE-structure
相關文章
- 結合例項學習|字元編碼和解碼字元
- JavaScript陣列合並程式碼例項JavaScript陣列
- JavaScript刪除元素節點程式碼例項JavaScript
- 抽象結合例項 Employee抽象
- shell script程式設計小結——附帶例項程式設計
- PE結構分析(二)
- JDK 7 新特性小結(包含例項程式碼)JDK
- PE 檔案結構圖
- dom操作程式碼例項
- css梯形程式碼例項CSS
- java class例項代表哪些結構Java
- PHP 圖片的合併,微信小程式碼合併,文字合併PHP微信小程式
- 結合案例寫出工廠方法模式例項模式
- PE檔案結構複習
- PE檔案結構解析3
- PE檔案結構解析1
- PE檔案結構解析2
- JavaScript in運算子程式碼例項JavaScript
- 設計模式例項程式碼設計模式
- table表格美化程式碼例項
- 純css tab選項卡程式碼例項CSS
- jQuery tab選項卡效果程式碼例項jQuery
- 手把手教你使用OpenCV庫(附例項、Python程式碼解析)OpenCVPython
- PHP高階特性-反射Reflection以及Factory工廠設計模式的結合使用[程式碼例項]PHP反射設計模式
- 深入剖析Vue原始碼 - 選項合併(下)Vue原始碼
- 深入剖析Vue原始碼 - 選項合併(上)Vue原始碼
- 資料結構--線段樹合併資料結構
- 羽夏殼世界—— PE 結構(上)
- canvas刮刮樂程式碼例項Canvas
- canvas載入效果程式碼例項Canvas
- CSS空心箭頭程式碼例項CSS
- JavaScript運動框架程式碼例項JavaScript框架
- jQuery.map()方法程式碼例項jQuery
- CSS橢圓效果程式碼例項CSS
- CSS條紋背景程式碼例項CSS
- flex居中佈局程式碼例項Flex
- JavaScript取餘數程式碼例項JavaScript
- canvas繪製扇形程式碼例項Canvas