WinRAR去广告
下載最新版本W(wǎng)inRAR,結(jié)果一打開就有廣告,說好的體驗30天呢。可能是之前裝過的WinRAR還殘留有注冊表信息吧,廣告如下:
打開x32dbg,附加到WinRAR進程,在DestoryWindow這個API下斷點,在調(diào)試器的命令行輸入bp DestoryWindow即可,點擊廣告窗口的關(guān)閉按鈕,在API中斷下,棧回溯返回地址就能找到廣告窗口的消息處理過程。在IDA中打開,找到對應(yīng)廣告窗口的消息處理函數(shù),交叉引用回溯,可以看到窗口類的注冊
可以看到這個窗口類名為RarReminder,Reminder是提示,提醒之類的意思,太真實了。
繼續(xù)看AdWndProc,可以發(fā)現(xiàn)一個詭異的URL
ad開頭肯定就是廣告的鏈接了,而緊接著的0xF4E9F0函數(shù)就是廣告的顯示函數(shù)了。IDA反編譯如下
HWND __thiscall sub_4BE9F0(LPVOID lpParam, int a2, HWND hWnd, int a4, int a5, char a6) {LPVOID v6; // ebxHWND v7; // eaxint v8; // ediint v9; // esiHINSTANCE v10; // ST28_4HWND v11; // eaxHWND result; // eaxbool v13; // zfWCHAR *v14; // esistruct tagRECT Rect; // [esp+Ch] [ebp-14h]v6 = lpParam;*((_DWORD *)lpParam + 2) = hWnd;*((_BYTE *)lpParam + 38) = a6;ShowWindow(hWnd, 0);sub_4BE560(a2);*((_DWORD *)v6 + 7) = a4;*((_DWORD *)v6 + 8) = a5;GetWindowRect(hWnd, &Rect);v7 = GetParent(hWnd);MapWindowPoints(0, v7, (LPPOINT)&Rect, 2u);if ( *((_DWORD *)v6 + 1) )DestroyWindow(*((HWND *)v6 + 1));v8 = Rect.left;v9 = Rect.right - Rect.left;v10 = *(HINSTANCE *)v6;v11 = GetParent(hWnd);result = CreateWindowExW(0,L"RarHtmlClassName",0,0x40000000u,v8,Rect.top,v9,Rect.bottom - Rect.top,v11,0,v10,v6);v13 = *((_DWORD *)v6 + 4) == 0;*((_DWORD *)v6 + 1) = result;if ( v13 ){if ( hWnd ){if ( !*((_DWORD *)v6 + 8) ){result = (HWND)*((_DWORD *)v6 + 7);if ( result ){result = (HWND)sub_4BE690(*((PCNZWCH *)v6 + 7));v14 = (WCHAR *)result;if ( result ){ShowWindow(hWnd, 5);SetWindowTextW(hWnd, v14);result = (HWND)j___free_base(v14);}}}}}else if ( result ){ShowWindow(result, 5);result = (HWND)UpdateWindow(*((HWND *)v6 + 1));}return result; }若直接將這個函數(shù)在開頭就ret掉,那么廣告的內(nèi)容就沒了,效果如下
說明這個窗口本質(zhì)上是個子窗口,不過我們可以通過修改這個函數(shù)內(nèi)容來使廣告內(nèi)容變?yōu)槲覀兿胍臇|西,這里懶得改了。
要去除廣告窗口,就要將這個父窗口也去掉,這其實很容易,我們可以在消息處理的開頭就修改控制流,直接跳轉(zhuǎn)到調(diào)用DestoryWindow的地址即可去除廣告。
patch后就算是去除廣告了。
總結(jié)
- 上一篇: 每周分享第 24 期
- 下一篇: scala问题解决sbt下载过慢的问题