星期二, 8月 24, 2010
去掉CVSNT的廣告
自從更新了TortoiseCVS後CVSNT的廣告每天要用時總是要跳一次出來,看著不爽就把它去掉了,留一下memo。
事前工作:把
CVSNT 2.5.05.3744把內容封到cvs.dll去了,首先用OllyDbg打開cvs.dll,提示要用loaddll載入時答「是」繼續載入。
尋找該處理的部份,按[Ctrl]+[N]彈出標籤清單,找出
往上看可找到類似這樣的代碼:
然後右鍵選單→"Copy to executable"→"All",會彈出視窗確認,按 "Copy All" 後會跳出 cvs.dll 的視窗,在其中右鍵選單→"Save File" 另存為 "cvs_.dll" 後關閉 OllyDbg 後把
以為這樣就完了?不,事件還沒完結。
你要是執行 cvs.exe 的話你就會發現:
查找一下關鍵字眼 "image not signed" 可發現:
代碼會像:
好了這回可以了。
事前工作:把
%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
後儲存、關閉、更名。好了這回可以了。
標籤: Software
發佈留言