本文以 Windows XP calc.exe 為例,演示如何通過 LordPE 添加導入表、OllyDbg 修改代碼段,實現程序退出時自動啟動指定程序。僅供安全研究與教學用途,嚴禁用於惡意軟件製作。
ShellExecuteA) → 需手動添加導入表。ExitProcess 調用前),插入調用 ShellExecuteA 彈出目標程序,再正常退出。用 LordPE 打開 calc.exe,發現無 shell32.dll!ShellExecuteA。添加新節區(如 .Silvana),在導入表中加入 shell32.dll 及 ShellExecuteA。

OD 打開 calc.exe,在 .data 區尋找連續 00 填充字符串:
地址 0x10149E0: "CalcPro.exe" // 目標程序 地址 0x10149E8: "open" // 動詞 地址 0x10149F5: "apprun" // 參數

搜索 ExitProcess 調用,覆蓋其前指令插入:
push 5 ; SW_SHOW push 0 ; hInstance push 0x10149E0 ; lpFile (CalcPro.exe) push 0x10149E8 ; lpVerb (open) push 0x10149F5 ; lpParameters (apprun) push 0 ; hwnd call ShellExecuteA ; 調用新導入函數 push 0 ; uExitCode call ExitProcess ; 原退出流程

calc1.exeOD 中「複製到可執行文件」→ 保存,得到修補後程序。運行驗證:關閉計算機彈出 CalcPro.exe。
stdcall 調用約定由被調用者清棧,ShellExecuteA 7 參數 28 字節,ExitProcess 1 參數 4 字節,插入代碼無需手動調整 ESP。修改系統文件屬於逆向工程範疇,《計算機軟件保護條例》允許為互操作性進行必要逆向,但嚴禁破解授權、植入後門、傳播惡意代碼。本文旨在展示 PE 結構與調試技術原理,請在授權環境下合法研究。