Make your own free website on Tripod.com

小經驗
關於DLL檔案基地址以及ASCII字串的中文化修改
(偉乾)

    自從使用了明白的代碼轉換器之後,相信大家對.exe檔案中的ASCII字串的調整修改都已經非常熟悉了。明白《中文化ASCII字串的高級技巧》文章中提到一些調用的DLL檔案的基地址是不同的,但是沒有具體的實現方法。最近作的幾次關於Opera的中文化中,由於該軟體增加了一個新的DLL來加強它的電子郵件功能,而這個DLL的ASCII中文化就讓我一直頭痛。其中中文化一個界面"郵件"/"尋找",裡面的幾個字串,比如"&Find",都是ASCII字串,而且變成中文後位置不夠使用,結果就成了下面的樣子:

    在這次中文化中,使用明白的代碼轉換器之後無法找到相應的調用地址,因此無法完美的中文化修改。

    其實問題的關鍵是如何找到有關DLL的基地址 !
    於是偉去問了梁利鋒兄,得到回信:
    「對於明白的文章中關於字串的偏移量的問題,他說的對於exe檔案有效,但對於.dll就不行,我想應該是因為基地址不同造成的。一般的,C 寫的 EXE 檔案的基地址總是 400000h ,不過對於 DLL ,只有少數的基地址是 400000h ,關於基地址,可以使用 fi ,gtw 或 ProcDump 得到,就是那個 Base Of Image 項。」
    於是這次Opera 4b6中文化時開始嘗試。嘗試的結果是gtw沒有看到Base Of Image,fi和ProcDump都可以,由於fi是DOS界面風格,而ProcDump又是中文化者常用的工具,因此介紹使用ProcDump,截圖如下:
    等等,先告訴大家那個DLL是: OMail32.dll。

    步驟是: 1啟動ProDump(這裡使用的是1.62中文化版),單擊「PE編輯器」,2在選擇對話框種選擇OMail32.dll,3那個「物件基於」就是「Base Of Image」(似乎應該譯成映像之類才對您8-)),裡面的數字10000000就是我們需要的基地址。記住有七個0。
    現在就要看如何轉換了。明白已經用軟體實現了.EXE的轉換功能,不過我不是搞編程的,不懂原理,估計是相加您,驗證一下:


   
明白提供的例子是.exe的,基地址是: 400,000——4F008+400000=44F008,咦 ? 哦,懂了,反過來就是08F044(注意,是從後面每兩位兩位的反過來。編程高手不要笑出聲。)。那麼對於DLL就應該用10000000來相加了。OK,試試看:

    這是英文界面,我們用match做關鍵詞,用UE來開啟尋找看看:

    在這裡看到&Find[7字串]、Match c&ase[10字串]如果翻譯成: 「查看(&F)」[8字串]、「大小寫比對(&A)」[14字串],就需要增加空間,而Match wh&ole word only有22個字串[譯成「全字比對(&O)」,12字串],可以勻出空格來,它的地址是30ef4H。為了保證前面的&Find有足夠的空間,因此「全字比對(&O)將向後移兩格,地址是30ef6H。
    先找原始的調用地址: 30ef4+10000000=10030EF4,倒過來: F40E0310,在UE中反向尋找:

    原來找不到的地址現在果然找到了 !
    剩下的其實大家都會了: 新的調用地址是: 30ef6+10000000=10030EF6,就是F60E0310,修改。此處省略若干動作,最後的結果如下:

    對比原來的中文化,覺得舒服多了。
    其實這只是一個小小的經驗,而且是借助了前人的幫助、高手的指點,之所以寫出來,是希望給還沒有時間嘗試的朋友一個參考,也希望可以幫助有心深入中文化的朋友。
    再次謝謝明白梁利鋒所給與的指點和幫助。



回教學