除editplus 2.10a的NAG(供初學者參考) (2千字)

看雪資料發表於2001-02-16

如何去除EditPlus 2.10a的NAG

本文僅供初學者參考,因為本人也是初學者。

用ExeScope可以發現,NAG不是以視窗資源的形式存在的,因此用DASM反彙編查詢視窗ID來找出產生NAG的地方的方法是無用的,以前2.00版倒是可以的,只是先去殼,好像是petite加的殼吧。

既然DASM派不上用場,那隻好用除錯工具硬追,關鍵是找到開窗的API函式,
可以注意到editplus的NAG是一個非模式視窗(非模式視窗這個概念大家應該明白吧,有些windows下程式設計能力的人都應該知道,它是相對於模式視窗而言的,不必關閉此視窗就可以做繼續動用程式的其它功能,如文字編輯器中的“查詢字元對話方塊”等等),經過幾次試探,找到一個可用的斷點,
bpx createdialogindirectparama

所需工具,trw200或soft-ice,一個十六進位制編輯器(我用的是Ultra Edit 8.0)

1、用trw2000載入editplus.exe,下斷點,bpx createdialogindirectparama,
2、將被攔下四次,第四次攔下時,下命令,pmodule返回,看到如下程式碼

015F:004A9653  MOV      EAX,[EAX+1C]
015F:004A9656  PUSH    EBX
015F:004A9657  PUSH    DWORD 004A9224
015F:004A965C  PUSH    EAX
015F:004A965D  PUSH    DWORD [EBP+08]
015F:004A9660  PUSH    DWORD [EBP+10]
015F:004A9663  CALL    `USER32!CreateDialogIndirectParamA`    ;跳出NAG
015F:004A9669  LEA      ECX,[EBP-1C]    ;我們停在這裡
015F:004A966C  MOV      [EBP-18],EAX
015F:004A966F  MOV      [EBP-04],BL
015F:004A9672  CALL    004AA836
015F:004A9677  JMP      SHORT 004A9696
015F:004A9679  MOV      ECX,[EBP-2C]
015F:004A967C  CALL    004AC642
015F:004A9681  MOV      EAX,[EBP-24]
015F:004A9684  OR      DWORD [EAX+2C],BYTE -01

3、返回到呼叫此NAG的地方,返回好幾個ret,還要被它嚇住哦!
來到這兒

015F:0042D7ED  CALL    0042F570
015F:0042D7F2  JMP      0042D9DD
015F:0042D7F7  CMP      EAX,BYTE +6B
015F:0042D7FA  JNZ      0042D813      ;此處一定要跳,改成JMP就可以了
015F:0042D7FC  PUSH    EAX
015F:0042D7FD  MOV      EAX,[ESI+1C]
015F:0042D800  PUSH    EAX
015F:0042D801  CALL    `USER32!KillTimer`
015F:0042D807  MOV      ECX,ESI
015F:0042D809  CALL    0042D210    ;這個CALL彈出NAG
015F:0042D80E  JMP      0042D9DD
015F:0042D813  CMP      EAX,BYTE +6D
015F:0042D816  JNZ      0042D88F
015F:0042D818  MOV      ECX,[ESI+1C]
015F:0042D81B  PUSH    EAX
015F:0042D81C  PUSH    ECX

4、總結:在editplus.exe中,用十六進位制編輯器進行修改

Find:83 F8 6B 75 17 50 8B 46 1C
              ^^
          EB

是不是很容易:)
by mjing,2000/2/16,
E-mail:mjing@wx88.net

相關文章