Resource Hacker:改的是執行檔裡不是程式碼的那一半
摘要
Resource Hacker 打開的是 Windows 執行檔裡的資源區段,讓你看、改、抽、批次換掉裡面的對話框、圖示、選單、字串表與版本資訊。做在地化與介面調整時很好用,但跳過備份這一步,代價很直接。
推薦- 軟體名稱
- Resource Hacker
- 版本
- 5.2.8
- 收費
- 免費
- 開源
- 非開源
- 作業系統
- Windows
- 更新時間
- 2026-10-06 20:13
一個 Windows 程式裡,不是程式碼的那一半
一個對話框就是一個方框:標題、幾行固定文字、三個輸入欄、兩顆按鈕。幾乎沒有一個地方是執行時才算出來的:每一顆控制項擺在哪、按鈕上寫什麼字、用哪套字型、Tab 鍵在欄位之間跳的順序 —— 這些全部在編譯時就決定好了,跟著執行檔一起存進一個區段,就擱在機器指令旁邊,卻從來不會被執行。標題列的圖示、啟動畫面的點陣圖、視窗上緣的選單、把按鍵對應到命令的快速鍵表,還有介面上每個字都從裡面讀出來的字串表,都在同一個地方。
這個安排,是一個程式可以不必重新編譯就換成另一種語言的原因,也是一個從沒看過原始碼的人可以改動它外觀的原因。Resource Hacker 就是針對這個區段做的檢視器與編輯器。把它指向一個執行檔,它會沿著資源目錄走一遍,把找到的東西攤成一棵樹:圖示、點陣圖、游標、對話框、選單、字串表、版本資訊、應用程式資訊清單,以及那些沒有更好形式的二進位資料。沒有一項是猜的:你看到的就是連結器當初放進去的東西。

四個動作,第四個最常被低估
第一個動作是看。動手改之前,先單純看一遍很值得,因為這棵樹會回答一些用別的方法很難問的問題:這個程式到底有幾個對話框、有沒有一個早就不再使用的語言字串表還留著、那組圖示是幾種尺寸湊起來的,還是只有一種尺寸而系統正在硬拉伸它。
第二個動作是改。文字、圖示、點陣圖甚至整個對話框版面,都能就地改掉 —— 改的是程式看得見的表面,不碰編譯器。對話框有視覺化的編輯畫面,控制項可拖曳縮放;選單、字串表與版本區塊用表單編輯。二進位資源可以逐位元組修補,這很少是正確答案,但偶爾是唯一答案。
第三個動作是抽。每個圖示、點陣圖與游標都能匯出成檔案,光這一點就讓很多人覺得這工具值得留著:一個早沒人維護的程式裡嵌著的圖示,往往是世上僅存的那一份。抽出資源也是拆解它的方法 —— 看清結構,再把改過的版本放回去。
第四個動作,才是讓這個工具從「有趣」變成「每週都會用到」的關鍵:批次。新增資源、刪除資源、取代資源是三件不同的事,而把這三件事套在一整組相關的執行檔上,並沒有比只做一次難多少。對維護多個建置版本的人來說,這是半個下午與一杯咖啡的差別。
改一個對話框,實際上在改什麼
視覺化編輯很順手,順手到會藏住一個真實的限制:對話框的版面單位不是像素。一個為某種語言的標籤算好寬度的欄位,換到另一種語言就會把字裁掉;為了挪出空間而搬動的一個控制項,有時候會壓到本來就已經很擠的鄰居。任何改動介面文字的人,都該預期改完要重新調尺寸,並在不只一種顯示縮放下確認 —— 對話框單位不像絕對座標那樣聽話。
工具也會把表單背後的資源腳本顯露出來。同一個改動要在很多對話框上重複時,這就很重要:改文字比拖控制項快,而腳本讓版面結構以畫布給不了的方式現形。它同時是編輯器究竟產出什麼的老實視角:表單疊在資源定義之上,不是替代品。

它真正能派上用場的地方
在地化是最明顯的一種。翻譯一個本來沒打算被翻譯的程式,通常就是直接改字串表與對話框版面。第二種是介面調整:把某句提示改個說法、把過時的圖示換成現在的、把原作者留得太擁擠的版面鬆開一點。第三種是遊戲模改:遊戲執行檔塞滿資源,選單、啟動畫面與介面美術的小改動,很大比例說穿了只是資源替換。
原文點名的三種人 —— 開發者、介面設計者、技術上有把握的使用者 —— 共通點不是技術程度,是意圖:這是給「已經知道自己要它寫什麼」的人改一件特定的事用的。拿它探索並不合適,資源樹不會告訴你對話框是做什麼用的。

工具管不到的那部分紀律
這裡的每個動作都直接寫進一個別的程式要靠它才能活的檔案,失敗的樣子不是警告視窗,是那個程式從此打不開。所以第一條規矩很無聊,但沒有商量餘地:第一次動手前先留一份完全沒碰過的原始檔,每一次都要,包括你確信這次一定會成功的那一次。在副本上作業、把正本收好,零成本,卻能刪掉最糟的結果。
第二條規矩是先弄懂資源再改。對話框是結構,不是圖;字串表有索引,索引被程式碼指著,從中間插一句字串,後面每句的編號都會跟著位移。第三條規矩是從小處開始:先換一個圖示,確認程式還能跑,再去動那個真正重要的對話框。這些習慣沒什麼光采,但它們就是「改過的程式」與「壞掉的程式」之間的全部差別。
它不是什麼
它不是開發環境,也不會幫你理解邏輯。資源描述的是程式長什麼樣、某個東西叫什麼名字;行為住在程式碼裡,這個工具刻意不碰。它也不是反編譯器,把兩者混在一起是最常見的誤會:從執行檔抽出一個對話框、換一個放回去,是正當且平常的操作;從機器碼還原原始碼是另一回事,在不同地方有不同的法律份量。它只做前者。
精確地說,它是個範圍收得很好的小工具:讀一個規格公開的檔案格式,老實把內容攤給你看,讓你改,然後退到一邊。企圖不大,而這正是它多年依然有用的原因。

結論
如果你曾經需要改掉某個程式介面上的一個字、換掉一個圖示,或想看看一個執行檔到底帶了什麼東西在身上,這是最短的一條路。介面樸素,說明完整,周圍的社群也把同一批實務問題回答了很多年。進場的代價只有一個習慣:先複製檔案。除此之外,它對人都很寬容。