星期二, 8月 24, 2010

 

去掉CVSNT的廣告


自從更新了TortoiseCVS後CVSNT的廣告每天要用時總是要跳一次出來,看著不爽就把它去掉了,留一下memo。

事前工作:把 %CommonProgramFiles%\March Hare Software Ltd 中的所有 DLL 抄到 CVSNT 的安裝目錄中,不然 OllyDbg 無法載入調試。

CVSNT 2.5.05.3744把內容封到cvs.dll去了,首先用OllyDbg打開cvs.dll,提示要用loaddll載入時答「是」繼續載入。
尋找該處理的部份,按[Ctrl]+[N]彈出標籤清單,找出 USER32.GetTopWindow,選取後按[Enter]彈出呼叫清單,再選取第一項後按[Enter]轉到匯編代碼區。
往上看可找到類似這樣的代碼:
10083514   . 68 C0D70B10    PUSH cvs.100BD7C0                        ;  ASCII "LastAdvert"
10083519   . 68 B4D70B10    PUSH cvs.100BD7B4                        ;  ASCII "cvsadvert"
1008351E   . 68 04340A10    PUSH cvs.100A3404                        ;  ASCII "cvsnt"
10083523   . FFD6           CALL ESI                                 ;  <&cvstools.CGlobalSettings::GetUserValue>
10083525   . 83C4 10        ADD ESP,10
10083528   . 85C0           TEST EAX,EAX
1008352A   . 74 08          JE SHORT cvs.10083534
1008352C   . 895C24 1C      MOV DWORD PTR SS:[ESP+1C],EBX
10083530   . 895C24 20      MOV DWORD PTR SS:[ESP+20],EBX
10083534   > 8D4424 10      LEA EAX,DWORD PTR SS:[ESP+10]
10083538   . 50             PUSH EAX
10083539   . 68 A4D70B10    PUSH cvs.100BD7A4                        ;  ASCII "AdvertInterval"
1008353E   . 68 B4D70B10    PUSH cvs.100BD7B4                        ;  ASCII "cvsadvert"
10083543   . 68 04340A10    PUSH cvs.100A3404                        ;  ASCII "cvsnt"
10083548   . FFD6           CALL ESI
1008354A   . 83C4 10        ADD ESP,10
1008354D   . 85C0           TEST EAX,EAX
1008354F   . 75 21          JNZ SHORT cvs.10083572
10083551   . 8B4424 14      MOV EAX,DWORD PTR SS:[ESP+14]
10083555   . 3BC3           CMP EAX,EBX
10083557   . 7F 19          JG SHORT cvs.10083572
10083559   . 8B4C24 10      MOV ECX,DWORD PTR SS:[ESP+10]
1008355D   . 7C 08          JL SHORT cvs.10083567
1008355F   . 81F9 00C20100  CMP ECX,1C200
10083565   . 77 0B          JA SHORT cvs.10083572
10083567   > 3BC3           CMP EAX,EBX
10083569   . 7F 13          JG SHORT cvs.1008357E
1008356B   . 7C 05          JL SHORT cvs.10083572
1008356D   . 83F9 64        CMP ECX,64
10083570   . 73 0C          JNB SHORT cvs.1008357E
10083572   > 895C24 14      MOV DWORD PTR SS:[ESP+14],EBX
10083576   . C74424 10 8051>MOV DWORD PTR SS:[ESP+10],15180
1008357E   > 8D4C24 24      LEA ECX,DWORD PTR SS:[ESP+24]
10083582   . 51             PUSH ECX
10083583   . FF15 44D30910  CALL DWORD PTR DS:[<&MSVCR90._time64>]   ;  MSVCR90._time64
10083589   . 8B5424 14      MOV EDX,DWORD PTR SS:[ESP+14]
1008358D   . 8B6C24 28      MOV EBP,DWORD PTR SS:[ESP+28]
10083591   . 8B4424 18      MOV EAX,DWORD PTR SS:[ESP+18]
10083595   . 8B7C24 2C      MOV EDI,DWORD PTR SS:[ESP+2C]
10083599   . 83C4 04        ADD ESP,4
1008359C   . 035424 1C      ADD EDX,DWORD PTR SS:[ESP+1C]
100835A0   . 8BF5           MOV ESI,EBP
100835A2   . 134424 20      ADC EAX,DWORD PTR SS:[ESP+20]
100835A6   . 81C6 00C20100  ADD ESI,1C200
100835AC   . 8BCF           MOV ECX,EDI
100835AE   . 13CB           ADC ECX,EBX
100835B0   . 3BC1           CMP EAX,ECX
100835B2   . 7F 18          JG SHORT cvs.100835CC
100835B4   ? 7C 04          JL SHORT cvs.100835BA
100835B6   ? 3BD6           CMP EDX,ESI
100835B8   . 77 12          JA SHORT cvs.100835CC
100835BA   . 3BC7           CMP EAX,EDI
100835BC   . 0F8F 8A010000  JG cvs.1008374C
而後下則可找到以下代碼:
10083732   . 51             PUSH ECX
10083733   . 52             PUSH EDX
10083734   . 68 C0D70B10    PUSH cvs.100BD7C0                        ;  ASCII "LastAdvert"
10083739   . 68 B4D70B10    PUSH cvs.100BD7B4                        ;  ASCII "cvsadvert"
1008373E   . 68 04340A10    PUSH cvs.100A3404                        ;  ASCII "cvsnt"
10083743   . FF15 D4D70910  CALL DWORD PTR DS:[<&cvstools.CGlobalSet>;  cvstools.CGlobalSettings::SetUserValue
10083749   . 83C4 14        ADD ESP,14
1008374C   > 8B8C24 380C000>MOV ECX,DWORD PTR SS:[ESP+C38]
10083753   . 5F             POP EDI
10083754   . 5D             POP EBP
10083755   . 5E             POP ESI
10083756   . 5B             POP EBX
10083757   . 33CC           XOR ECX,ESP
10083759   . E8 F0480100    CALL cvs.1009804E
1008375E   . 81C4 2C0C0000  ADD ESP,0C2C
10083764   . C3             RETN
JG SHORT cvs.100835CC 下手,選取該行就按[Space]進行匯編:把 "Fill with NOP" 勾上然後把 JG SHORT 100835CC 改為 JMP 1008374C 再按 [Esc] 關閉匯編視窗。

然後右鍵選單→"Copy to executable"→"All",會彈出視窗確認,按 "Copy All" 後會跳出 cvs.dll 的視窗,在其中右鍵選單→"Save File" 另存為 "cvs_.dll" 後關閉 OllyDbg 後把 cvs.dll 更名為 cvs-org.dll,並把 cvs_.dll 更名為 cvs.dll

以為這樣就完了?不,事件還沒完結。

你要是執行 cvs.exe 的話你就會發現:
Trust verification failed for 'W:\work\cvsnt\cvs.dll' - image not signed
沒錯就是那個可惡的WinTrust。只好連同WinTrust一同幹掉。
查找一下關鍵字眼 "image not signed" 可發現:
W:\work\cvsnt>..\grep -r "image not signed" *
Binary file cvs.exe matches
Binary file cvsapi.dll matches
Binary file cvslock.exe matches
Binary file extnt.exe matches
逐一用OllyDbg打開,按[Ctrl]+[N]彈出標籤清單,找出 WINTRUST.WinVerifyTrust,選取後按[Enter]彈出呼叫清單,再選取第一項後按[Enter]轉到匯編代碼區。
代碼會像:
00401158  |. E8 DD0A0000    CALL <JMP.&WINTRUST.WinVerifyTrust>
0040115D  |. 8945 FC        MOV DWORD PTR SS:[EBP-4],EAX
00401160  |. 837D FC 00     CMP DWORD PTR SS:[EBP-4],0
00401164  |. 74 6A          JE SHORT cvs.004011D0
或:
10022D80     E8 67050000    CALL <JMP.&WINTRUST.WinVerifyTrust>
10022D85  |. 85C0           TEST EAX,EAX
10022D87     0F84 FC000000  JE cvsapi.10022E89
JE 改成 JMP 後儲存、關閉、更名。

好了這回可以了。

標籤:


留言


發佈回應

發佈留言

留不了言?試試在這裡留吧。
回首頁