Make your own free website on Tripod.com



ASCII 字串加長法 - 偏移量轉換

ASCII 部份的修改向來只能一對一修改,也就是兩個英文字可置換成一個中文字,那豈不是很多訊息會被迫截斷甚至放棄翻譯。

有沒有辦法自由加長呢 ? 其實有的,以 RVA 字串型態出現的都可以藉由修改 RVA 偏移量來達成

哪些程式的 ASCII 資源是以 RVA 字串型態存放呢 ? VC、Delphi、C++ Builder 這類通常都是。所以在此介紹 ASCII 字串加長法 - 偏移量轉換。

以 HD Tach 為例,右下角按鈕的 &Ok 訊息太短了沒辦法翻譯 (這是 Delphi 類 ASCII 資源)

首先找出 &Ok 字串如下圖。VC 與 Delphi 類程式差別在於,Delphi 類 ASCII 字串前面會多出 8 Bytes 的標示。其他的一樣,所以 VC 類略過本範例的 [標示] 即可。

注意下列 &Ok 的位址是 6FC14

接著執行 [點睛偏移量轉換器],按 # 載入上面程式,然後實偏移填 6FC14,就會算出 (RVA) 代碼 14084700。按下右下角 [複製代碼] 就會將代碼複製到剪貼簿。

接著用 UltraEdit 找出原程式 14084700 (16 進位),如下圖。也就是此處記錄著 &Ok 所放置的 RVA 偏移值。

只要我們可以將 RVA 偏移值改掉,指向其他位置,就可以輕易移動字串。可隨便移動字串位置的話,當然就可以自由加長字串了。

 

接下來,我們找一處可用來放置 [確定(O)] 的地方。通常程式頭尾一大串空白都可拿來使用,在此範例中,&Ok 的前面空出不少空間,我們就直接往前挪一點點即可。也就是預計放在 6FC0F (往前 5 Bytes)。

接著用 [點睛偏移量轉換器],實偏移填 6FC0F 就會算出 (RVA) 代碼 0F084700

重點,也就是將字串由 6FC14 挪到 6FC0F 後,您只要將剛剛的 14084700 改為 0F084700,就可以了。

要注意的是通常記錄 RVA 的位置有時不止一處,也就是可能多次調用,修改時需全數改掉,但有時需略過某些地方 (像是某某 Code 用到的,所以最好逐一測試一下)。

字串修改前後對照圖如下,至於 RVA 記錄的修改應該不用看圖了吧。

修改成品:

 

∼如塵∼

回索引