RVA字串乾坤大挪移

--偏移量轉換器的簡單用法

何知宇


  今天我結合一個簡單的例子來談談 ASCII 字串的 RVA 類字串的挪移中文化,主要是想將梁利鋒開發的偏移量轉換器的用法給大家作一簡單介紹,由於本人水平有限,所以不能說的很詳細,因為有些概念我也正在摸索體會中。: )
  必看文章推介: 偉乾的 ASCII 字串的中文化的文章;梁瑞本的 ASCII 字串中文化的文章;梁利鋒的基地址引深一文,還有其它的文章,可以體會一下基地址,虛偏移,實偏移,及數據偏移,代碼偏移的概念及字串挪移的原理及其它類別 ASCII 字串的中文化方法。

1.ASCII資源的中文化(1)(偉乾)
2.ASCII資源的中文化(2)(偉乾)
3.ASCII資源的中文化(3)(偉乾)
4.關於DLL檔案基地址以及ASCII字串的中文化修改(偉乾)
5.中文化ASCII字串的高級技巧——序言(梁瑞本)
6.中文化ASCII字串的高級技巧——C字串篇 (1) (梁瑞本)
7.中文化ASCII字串的高級技巧——C字串篇 (2) (梁瑞本)
8.中文化ASCII字串的高級技巧——PASCAL字串篇 (1) (梁瑞本)
9.中文化ASCII字串的高級技巧——PASCAL字串篇 (2) (梁瑞本)
10.基地址引深(梁利鋒)

  首先聲明的是,我只是結合一個極簡單的例子來淺淺的說說,希望對您的中文化有所幫助。還需要強調的一點是很多 ASCII 字串並不是 RVA字串,只有 RVA 字串才能使用這種方法。如果您對 RVA 字串的定義和分類還比較模糊,請先關閉此文檔,先去看看偉乾寫的 ASCII 資源的中文化文章,這是基礎。不然您可能說,我按照您的方法,算出 RVA 偏移量,但是在檔案中找不到 (或改了無效) ,都是因為不是這種 RVA 字串的緣故。
  例子程式是 B-jigsaw 4.1,一個拼圖遊戲,5.0 已經出來了,不過 5.0 中沒有我們可利用的 RVA 字串加以代換,所以還是拿老版本說說,界面如下圖所示,這是一個經過初期中文化後的軟體開始界面。

圖1

  大家可以看到,那個「OK」暫時沒有中文化,當然您也可以譯為「好」或「是」,不過今天我們要把它譯為「確定」,再來看看這個 OK 在UE 中的樣子您。如圖2

圖2

  注意到,字串不足以讓我們把「OK」中文化為「確定」,所以我們採用RVA字串的替換來實現它的中文化。再往後看,使用乾坤挪移,在這個具體的例子中,後面有個「Invalid registration code!」的 ASCII 字串,把它譯為「無效註冊碼!」後,多出的字串位置修改為「確定」綽綽有餘。(當然如果您在前期已經中文化了此字串,後面如果有足夠的 00 就可加以利用),就從這裡入手。將游標定位在「OK」處的首字串處,在UE的狀態欄就會顯示當前的實偏移量,一個是十六進制的,一個是十進制的。如圖3,639f2h 是十六進制,408050 為十進制。

圖3

  開啟 PosConv (偏移量轉換器),圖示是一個笑臉哎,軟體秉承了點晴系列軟體的一貫風格,簡捷明快,小巧實用,主界面如下,如圖4。PosConv ,支援 PE 格式的檔案,(32 位 Windows 程式的格式),不支援 NE 格式的檔案。( NE 是 16 位 Windows 程式的格式), 當然,也不支援 Dos 程式。: ) 
    目前的最新版本是 0.94 版,相比較以前的版本,新版本提供快速鍵(F12)呼出支援,這下使用就更方便啦!

圖4

圖5

  偏移量轉換器支援滑鼠拖曳,找到需中文化的程式檔案「bjigsaw.exe」直接拖到程式選擇視窗就行了,見圖5。當然您也可以透過點擊「...」瀏覽選定需中文化的程式檔案。選定檔案後,我們可以點擊「頂端」按鈕,這樣偏移量轉換器就永遠停留在最頂端,對於我們下面的尋找替換工作來說非常方便;當然如果您不想讓她停留在最頂端,再次點擊「頂端」按鈕取消該功能即可。
    圖 6 ,直接在實偏移欄中輸入 OK 的十六進制實偏移值,即 639f2,代碼欄則顯示計算出來的代碼RVA值,本例中為 F2454600。您可以看到程式已經自動根據您輸入的實偏移顯示了區段名,本例中為.data 區段。如圖 8。點擊「至剪貼板」即可將代碼值複製到剪貼板內,方便以後的操作。

圖6

圖7

    對於絕大多數軟體來說,一般不需要您來選擇區段,如本例,程式可智能根據實偏移值來判斷並自動選擇區段。只有某些很少見的軟體出現區段重疊時才需要用戶進行區段選擇。那位朋友可能要問了,如果我「不幸」碰到一個這樣的情況,該如何處理呢 ? 問得好,其實不用麻煩您,偏移量轉換器覺察到有區段重疊時,會自動跳出對話框來提示您,還是看看圖您,唉,這樣的例子還真不好找,嗯,找到了,大家看看。

圖8

    程式提醒我們有區段重疊,並且給出了重疊的區段名稱,即「BSS」和「.tls」。點擊「選擇」按鈕,進入區段選擇界面,如圖 9。我們只需把重疊的區段前的復選框的「√」清除即可。如圖10。點擊確定繼續進行,夠智能您 ? 順便再多說兩句,進行區段選擇時,當您點擊任一.text、.data等區段, (裝入程式不同,區段名也會有所不同) ,filemin,filemax,將顯示該區段中實偏移量的最大值與最小值,您也可以根據實偏移量的範圍來判斷具體處於那個區段,不過,我很懶,所以都交給偏移量轉換器代勞了。

圖9 圖10

     好了,還是回到例子中來您,在 UE 中開啟尋找功能,將剪貼板內保存的代碼值剪貼至尋找視窗後,如圖9設定。向上搜索此代碼,並記下位置。 (這個向上搜索不一定,大多數情況下是在字串的前面不遠的地方,不過也有在後面的例子) 。

圖11

  在這個程式中只找到了一處,位於0x2364處。如下圖所示。對於其它軟體,有時我們找到的不止一處,那麼倒底是那個代碼需要修改呢 ? 這就需要我們進行修改測試啦,雖然大多情況下我們找到的並不會很多,如果逐一修改測試還是比較麻煩,漢化新世紀的偉@偉乾介紹了一個比較簡單的方法,+1,如 F2454600 改為 F3454600 ,儲存看看執行的界面原來顯示 OK 是否變成了 K ,如果是說明我們找到了,如果不是,說明這個不是,尋找下一個。如果還是沒有找到,只能說明您老兄粗心,計算步驟有錯,再試試。「什麼什麼,已經檢查好幾遍了,還是找不到RVA偏移量」,這個不是RVA字串,請認真看看有關文章

圖12

  現在可以回去修改程式了,例子程式中我在「無效註冊碼 ! 」的後面隔兩個00的位置上添加「確定」字串,即「C8B7B6A8」,如圖所示。當然您也可以在其它位置修改,但要注意必須和上一字串至少要有一個00相隔。

圖13

  接著,我們把游標定位在「確定」的首字串處,讀出它的實偏移量,如圖12所示。十六進制為63a5cH。再次啟用偏移量轉換器,此偏移量仍位於data區段,如圖13,輸入63a5c,計算出其代碼偏移量為5C464600。 (這裡又有一個技巧了。我們用滑鼠選擇,從「OK」開始,一直選擇到「確定」前面,看看我們選擇的代碼的長度,然後RVA代碼減去或加上這個長度,就是我們需要修改後的RVA代碼。注意,這裡的RVA代碼是低位在前,高位在後顯示的。在本例中,距離是比較短的,所以這個技巧就很方便了。如果您乾坤挪移功力太高,距離太遠了,我們可以將游標定位在兩個字串的首字串處,將實偏移相減就是距離了。不過在遠距離操作中,若超出了區段,這個技巧就無法適用了。)

圖12

圖13

  在 UE 中,跳轉到0x2364處,將「F2454600」修改為「5C464600」。如圖14所示。

圖14

  儲存,試執行一下,下圖就是結果圖,我們的目的實現了。原來的「OK」我們並沒有動它,這就是乾坤大挪移 !

圖15

  文章到這裡就結束了,這裡主要是結合一個 RVA 字串的中文化講了一下偏移量轉換器的使用方法,希望對您有所幫助。

                                                                        止稿於2000年10月21日

   



回教學