本程式示範如何解析 PE(Portable Executable)檔案結構,若目標程式已匯入 USER32.dll 的 MessageBoxA,則在其程式碼區(.text)尾端注入一段顯示訊息框的機器碼,並修改入口點(Entry Point)導向新程式碼。此技術常用於軟體保護、熱修補或惡意程式碼分析研究。
GetOpenFileName)。CreateFileMapping + MapViewOfFile 將整個 PE 映射至記憶體,直接操作映射視圖即修改檔案內容。MZ)與 PE 標誌(PE\0\0)。.rdata 區段的 IMAGE_IMPORT_DESCRIPTOR,尋找 USER32.dll 及 MessageBoxA 的 FirstThunk 位址。.text 與 .rdata 的原始偏移與虛擬位址。.text 區末尾可用空間(SizeOfRawData - VirtualSize)。FirstRun)複製至該空間。AddressOfEntryPoint 指向新程式碼起始位置。.text 區的 VirtualSize。MessageBoxA 真實位址(IAT 項)與返回原入口點的相對位移。CheckPEValid:驗證 PE 標誌。HaveMessageBox / CheckFunction:掃描匯入表尋找 MessageBoxA。IniData:定位 .text、.rdata 區段表項。AddCode / ModifyCode:執行實際注入與位址修正。FirstRun:注入的機器碼模板,包含 push MB_ICONINFORMATION、call 取得字串位址、call MessageBoxA、jmp 原入口點。程式需修改自身程式碼區(寫入 .text),連結時須加入 /section:.text,rw 參數賦予區段可寫屬性(參考「系列11:把資料寫到程式碼段」)。
.text 區剩餘空間不足,注入失敗。本範例完整展示 PE 結構解析、匯入表遍歷、區段空間計算與程式碼注入的核心步驟,是理解 Windows 執行檔內部運作的優良教材。實際應用時務必遵守法律法規與軟體授權條款。