首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

逆向工程實戰:給 Windows 系統程序 打補丁注入自定義代碼

     編輯:關於C語言

逆向工程實戰:給 Windows 系統程序 打補丁注入自定義代碼

本文以 Windows XP calc.exe 為例,演示如何通過 LordPE 添加導入表、OllyDbg 修改代碼段,實現程序退出時自動啟動指定程序。僅供安全研究與教學用途,嚴禁用於惡意軟件製作。

核心思路

  1. 目標程序無所需導入函數(如 ShellExecuteA) → 需手動添加導入表。
  2. 在數據段尋找空間存放字符串參數(程序路徑、參數、動詞)。
  3. 定位程序退出點(ExitProcess 調用前),插入調用 ShellExecuteA 彈出目標程序,再正常退出。

工具鏈

  • LordPE:PE 結構查看、添加節區、導入表編輯。
  • OllyDbg (OD):動態調試、定位代碼、組裝指令、保存修改。

詳細步驟

1. 添加導入表函數

用 LordPE 打開 calc.exe,發現無 shell32.dll!ShellExecuteA。添加新節區(如 .Silvana),在導入表中加入 shell32.dll 及 ShellExecuteA。

2. 寫入字符串參數

OD 打開 calc.exe,在 .data 區尋找連續 00 填充字符串:

地址 0x10149E0: "CalcPro.exe"   // 目標程序
地址 0x10149E8: "open"          // 動詞
地址 0x10149F5: "apprun"        // 參數

3. 定位退出點並插入代碼

搜索 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    ; 原退出流程

4. 保存生成 calc1.exe

OD 中「複製到可執行文件」→ 保存,得到修補後程序。運行驗證:關閉計算機彈出 CalcPro.exe。

技術細節與避坑

  • 節區屬性:新增節區需設置可讀/可執行/可寫,確保代碼可執行、數據可寫。
  • 地址計算:字符串地址 = 模塊基址 + 節區 RVA + 節區內偏移,OD 中直接顯示虛擬地址。
  • 棧平衡:stdcall 調用約定由被調用者清棧,ShellExecuteA 7 參數 28 字節,ExitProcess 1 參數 4 字節,插入代碼無需手動調整 ESP。
  • ASLR/DEP:現代系統啟用 ASLR/DEP,靜態補丁失效,需動態注入或 Hook 技術(如 Detours、Frida)。

法律與道德警示

修改系統文件屬於逆向工程範疇,《計算機軟件保護條例》允許為互操作性進行必要逆向,但嚴禁破解授權、植入後門、傳播惡意代碼。本文旨在展示 PE 結構與調試技術原理,請在授權環境下合法研究。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved