讓w32dasm中的中文串正確顯示! (3千字)

看雪資料發表於2001-03-25

毫無疑問,w32dasm 是我們的武器。哪一位破客離得了它呀!IDA雖號稱最強大,但我一般不願去碰它。
(w32dasm我用的是自制的白金版, 不象所謂的黃金版有一個醜陋的小黑視窗)
不過,w32dasm有太多地方需要完善。當反彙編有中文字串的軟體時,遇到的一個顯著問題是中文串都以亂碼顯示,
這可是大大的不好! 現在讓我們來解決它!
首先,用w32dasm 反彙編一個軟體(如:notepad.exe), 然後, 然後怎麼呢?當然是按下Ctrl-D祭出我們的
終極法寶softice啦,下斷:
bpx gdi32!textout
F5後隨便在w32dasm中移動一下游標,softice便攔截下來
按下F12就回到了 下面45E77E處。把附近的程式碼稍稍細看一下就會發現,作者對於要顯示的字串是逐字元顯示的,這樣做的目的可能是有時為了以紅色顯示串的某一部分。如從串資源引用視窗雙擊某一串時,游標將移到那個串上並以紅色顯示那個串。在大多數情況下用不著這樣。我們只要一口氣將串顯示出來中文串就能正確顯示了,這樣顯示速度還更快!

Break due to BPX #0187:0045E782  (ET=4.41 seconds)
:u 45e754 l  40
原始碼段:
017F:0045E754  6A01                PUSH      01          ;* Change here
017F:0045E756  8BD6                MOV      EDX,ESI      ;* and here
017F:0045E758  03D3                ADD      EDX,EBX      ;* and here
017F:0045E75A  81C2B4126F00        ADD      EDX,006F12B4
017F:0045E760  52                  PUSH      EDX
017F:0045E761  FFB3A0126F00        PUSH      DWORD PTR [EBX+006F12A0]
017F:0045E767  8B4DF4              MOV      ECX,[EBP-0C]
017F:0045E76A  0FAFCE              IMUL      ECX,ESI
017F:0045E76D  8B45F8              MOV      EAX,[EBP-08]
017F:0045E770  03C8                ADD      ECX,EAX
017F:0045E772  51                  PUSH      ECX
017F:0045E773  FFB35C126F00        PUSH      DWORD PTR [EBX+006F125C]
017F:0045E779  E802060500          CALL      GDI32!TextOutA
017F:0045E77E  46                  INC      ESI
017F:0045E77F  8B55FC              MOV      EDX,[EBP-04]
017F:0045E782  3BF2                CMP      ESI,EDX      ;* Change here
017F:0045E784  0F823BFFFFFF        JB        0045E6C5
017F:0045E78A  8B8BADF60100        MOV      ECX,[EBX+0001F6AD]
017F:0045E790  85C9                TEST      ECX,ECX
017F:0045E792  747B                JZ        0045E80F

改成如下程式碼段:
================ Sun Mar 25 22:21:53 2001
:u 45e754 l  40
017F:0045E754  FF75FC              PUSH      DWORD PTR [EBP-04] ;串的長度
017F:0045E757  90                  NOP
017F:0045E758  8BD3                MOV      EDX,EBX            ;EBX串的偏移基址,直接置入edx
017F:0045E75A  81C2B4126F00        ADD      EDX,006F12B4
017F:0045E760  52                  PUSH      EDX                ;串的地址
017F:0045E761  FFB3A0126F00        PUSH      DWORD PTR [EBX+006F12A0]
017F:0045E767  8B4DF4              MOV      ECX,[EBP-0C]
017F:0045E76A  0FAFCE              IMUL      ECX,ESI
017F:0045E76D  8B45F8              MOV      EAX,[EBP-08]
017F:0045E770  03C8                ADD      ECX,EAX
017F:0045E772  51                  PUSH      ECX
017F:0045E773  FFB35C126F00        PUSH      DWORD PTR [EBX+006F125C]
017F:0045E779  E802060500          CALL      GDI32!TextOutA
017F:0045E77E  46                  INC      ESI
017F:0045E77F  8B55FC              MOV      EDX,[EBP-04]
017F:0045E782  3BF6                CMP      ESI,ESI            ; 不用迴圈了
017F:0045E784  0F823BFFFFFF        JB        0045E6C5
017F:0045E78A  8B8BADF60100        MOV      ECX,[EBX+0001F6AD]
017F:0045E790  85C9                TEST      ECX,ECX
017F:0045E792  747B                JZ        0045E80F

建議保留原來的版本,當需要反彙編中文軟體時就用這個改良版。

相關文章