查看單個文章
舊 2005-03-17, 09:07 AM   #1
peaceworld
中文化 作者
 
peaceworld 的頭像
榮譽勳章
UID - 1862
在線等級: 級別:15 | 在線時長:319小時 | 升級還需:1小時級別:15 | 在線時長:319小時 | 升級還需:1小時級別:15 | 在線時長:319小時 | 升級還需:1小時級別:15 | 在線時長:319小時 | 升級還需:1小時級別:15 | 在線時長:319小時 | 升級還需:1小時
註冊日期: 2002-12-06
文章: 206
現金: 235 金幣
資產: 37960 金幣
預設 好用的脫殼檔案資源修正工具-FixRes.

程式作者: dREAMtHEATER 先生/小姐,以下是他/她在"看雪學院"發表的完整說明文章.在此表示感謝之意.
=====================================================
重要提示:本作品完全由本人獨立創作,未參考任何第三方源碼。
我增加了幾個接口函數,使用之前請認真閱讀我的說明,防止誤操作!

請下載

版本更新說明:
我重寫了大部分代碼,並進行了大量測試,被測試的加殼程序:UPX v0.72, v1.25, FSG v2.0,
Aspack v2.12,其中UPX 0.72 對資源的處理比較變態,不過引擎針對此情況做了正確的分析,
目前完全可以正確地修復、重建 PE 資源,修復後 PE 文件資源可以被eXeScope、ResHacker、
PE Explorer 查看、編輯,非常好用了。

為了證明我的程序我更具有優越性,我測試了幾個 fly 給我的俄國老寫的類似程序,包括
pResFix v.0.2 by hapatsa,
ResFixer v 1.0 beta 1 by seeQ,
Resource Rebuilder v1.0 by Dr.Golova
他們只是簡單地將重建後的 resource section 保存成數據文件,如果你想生成真正能運行的
修復資源後的PE文件可能你自己還要做很多輔助工作,對PE格式、資源結構不熟悉的朋友我估
計很困難恢復到可用狀態,而我的程序把所有這一切均簡單化、自動化,生成真正的資源修復
後的可執行PE文件。

簡介:
很多被加殼的 PE 文件在脫殼以後,往往該 PE 文件的資源部分無法用某些資源查看器進行
查看、修改。這其中的主要原因是由於很多加殼程序將部分資源(如 Icon、Version
Information) 從資源節 (resource section) 移到了殼增加的節裡,這導致很多資源查看器不能
正確識別分佈在兩個節裡的資源(順便說一下,PE Explorer 基本能識別大部分這種情況的資
源),DT_FixRes 是一個 PE 文件資源修復、重建引擎,它可以將分佈在多個節裡的資源重新移
到一個資源節裡,保證大部分資源查看器能夠對脫殼後的 PE 文件資源進行查看、修改。使用者
可以通過編程方式在自己的程序中使用該引擎。該引擎特別適合進行軟件漢化工作的朋友。

聲明:
1.您可以免費使用該引擎,如果您發佈了使用該引擎的程序,請在相關說明中註明該引擎的版
權信息,以表示支持作者的辛勤勞動;
2.該引擎不能保證所有的 PE 文件經過修復能正常運行以及資源能夠被查看、編輯,作者不承
擔任何相關責任。

使用說明:
本引擎以動態鏈接庫(dll)形式實現,該 dll 輸出三個函數,其中輸出函數
FixResFromFile 你可以用任何適用 Win32 平台的編程語言去調用,下面僅給出 C/Delphi 語言
的函數原型:

C 形式函數原型:
BOOL __stdcall FixResFromFile(const char* AFileName, char* ErrBuff);

參數說明:
AFileName --- 指向你需要進行資源修正的 PE 文件路徑指針;
ErrBuff --- 指向一塊至少具有 80 個字節空間的 Buffer 指針,在執行該函數返回錯誤時,接
收錯誤消息。

特別提示:該函數適用任何 Win32 平台的編程語言去調用。


Delphi 形式函數原型(共三個函數):
<1> function FixResFromFile(const AFileName: PChar; ErrMsg: PChar): Boolean; stdcall;

參數說明:
同 C 形式函數原型參數說明。

<2> function FixResFromFileEx(const AFileName: string; var ErrMsg: string): Boolean;

參數說明:
其中 AFileName, ErrMsg 為 string 類型,使用之前無需再分配80 個字節空間的 Buffer,操作
更方便。其他說明同 <1> 。

<3> function FixResFromStream(var AStream: TMemoryStream; var ErrMsg: string): Boolean;

參數說明:
AStream 為 PE 映像的內存流,其他說明同 <1> 。

特別提示:引擎只在正確 PE 格式的基礎上修復、重建 PE 資源,因此應用以上函數之前請保證被
操作文件或者內存流均具有正確的 PE 格式,否則可能造成不可預期的錯誤。

調用範例(Delphi 語言):
procedure FixResDemo;
type
TFixPERes = function(const AFileName: PChar; ErrBuff: PChar): Boolean; stdcall;
var
ErrBuff: array[1..80] of Char;
Handle: THandle;
FixPERes: TFixPERes;
begin
Handle := LoadLibrary('DT_FixRes.dll');
if Handle <> 0 then
begin
@FixPERes := GetProcAddress(Handle, 'FixResFromFile');
if @FixPERes <> nil then
if not FixPERes(PChar('ur PE file'), @ErrBuff) then
ShowMessage(ErrBuff);
FreeLibrary(Handle);
end;
end;


其他:
我寫了一個測試該引擎的 Demo,請與該引擎 dll 放在同一文件目錄下測試,發現 bug 請發信通
知我。

dREAMtHEATER
2005-03-16

E-mail:NoteXPad@163.com
http://dREAMtHEATER.yeah.net
====================================================

程式圖片:

http://tinypic.com/28sebk

需要的朋友請按我下載

peaceworld 目前離線  
送花文章: 111, 收花文章: 31 篇, 收花: 125 次
回覆時引用此帖
有 11 位會員向 peaceworld 送花:
allenlao0927 (2007-12-27),coolk0415 (2015-12-28),cwvdavid (2011-05-30),doku (2011-11-19),jackypeng (2012-04-23),mini (2008-08-30),osk99x (2007-11-27),todobug (2011-06-13),yoyo007 (2007-12-29),莊小青 (2007-11-27),飛鳥 (2012-02-23)
感謝您發表一篇好文章