首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Delphi 替換第三方 DLL 的逆向分析與重寫指南

     編輯:程式設計綜合問答

核心步驟

  1. 導出表分析:用 Dependency Walker (depends.exe) 打開 A.dll,導出所有函數名、序數、參數約定(stdcall/cdecl)。
  2. 動態調試:用 OllyDbg / x64dbg 掛載調用進程,在疑似調用處下斷點,觀察棧帧:
    ESP+4 = 返回地址,ESP+8 起為參數(stdcall 由被調用者清棧)。
  3. 參數推導:結合業務邏輯,推斷每個參數類型(整數、指針、結構體指針、回調函數指針等)。
  4. 重寫 B.dll:
    - 使用相同導出名/序數(exports 段或 .def 文件)。
    - 完全複製參數列表、調用約定、返回值類型。
    - 實現業務邏輯(可為空存根、日誌記錄、新算法)。
  5. 替換驗證:將 A.dll 改名備份,放入 B.dll,運行宿主程序測試。

關鍵注意點

  • 調用約定必須一致:Delphi 默認 stdcall,C/C++ 默認 cdecl,錯誤會導致棧平衡崩潰。
  • 結構體對齊:#pragma pack(push,1) 確保與原 DLL 內存佈局一致。
  • 線程安全:若原 DLL 有全局狀態,B.dll 需模擬或重構為無狀態。
  • 數字簽名/校驗:宿主可能校驗 DLL 哈希,需 Hook 校驗點或簽名繞過。

工具鏈推薦

任務工具
靜態導出分析Dependency Walker, DLL Export Viewer
動態調試x64dbg (推薦), OllyDbg, IDA Pro
編譯構建Delphi 10.4+, Visual Studio (C++ 寫 DLL 同樣適用)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved