Alexa是一個發布全球網站排名資訊的網站,他的網址是http://www.alexa.com。Alexa通過在用戶端安裝Alexa工具條來收集採樣全球網站的訪問資料,以這些資料為依據對全球網站進行排名,類似於電視收視率的統計。Alexa工具條是一種類似於Google工具條的IE外掛程式,你可以在下面URL中下載:http://download.alexa.com/index.cgi。
一、Alexa工具條的工作原理
Alexa工具條是一種基於BHO和Toolbar Bands技術的一種IE外掛程式。它以DLL檔案的形式存在於系統中,是一種COM組件,IE會在運行時將其載入到自身進程中去,所以一般情況下防火牆是無法禁止該軟體訪問網路的,這就為他的木馬角色提供了先天的便利,而且比本機Sniff軟體收集密碼的優勢是:無論是HTTP還是HTTPS的網站,不管通訊通道是否加密,只要是IE頁面的表單都能收集到。具體原理可以查閱《關於Alexa排名作弊的一些解惑》。
系統在安裝了Alexa工具條後,會在系統目錄下產生AlxTB1.dll和AlxRes.dll兩個DLL檔案(有些情況下是AlxTB2.dll,而不是AlxTB1.dll。那是因為Alexa工具條會自動上網更新的原因)。Alexa工具條的主要二進位代碼存在於AlxTB1.dll檔案中,這個檔案同時也被註冊成多個COM組件,他完成了BHO和Toolbar Bands的COM介面,並將IE的WebBrowser控制項封裝為一個COM組件供AlxRes.dll調用。AlxRes.dll檔案僅包含少量的二進位代碼,大量的代碼是HTML和javascript代碼,他們以資源的形式存在於AlxRes.dll檔案中,你可以通過res://AlxRes.dll/CHTML/about.html這樣的URL來訪問這些資源。也許你會奇怪:又不是做網站,為什麼軟體的代碼會是javascript寫的?這就是Alexa工具條垃圾的地方。Alexa工具條的主介面是由HTML+javascript實現的。這些javascript代碼通過調用AlxTB1.dll實現的COM介面來實現軟體的全部功能。這樣做不僅導致軟體的效率低下,而且產生大量的資源泄漏,絕對是一種VERY超級SB的開發模式,但是卻為我們修改Alexa工具條的功能提供了方便——根本不需要CRACKER知識,只要一個PE資源修改工具就可以對Alexa工具條的代碼進行修改了。
二、破解Alexa工具條
當然,Alexa也不是真傻,絕對不會蠢到讓自己的代碼被你用資源修改工具隨便改。為了防止AlxRes.dll中的資源被隨意修改,他採取了計算檔案校正和的保護方法,要是發現檔案被修改,就會拒絕載入。我們在修改代碼前,必須破解這種保護機制。
AlxTB1.dll匯出一個名叫ChecksumResources的函數,這個函數就是用來計算檔案校正和的。用c32asm反組譯碼AlxRes.dll檔案,查看字串調用列表,找到"ChecksumResources"字串,跳轉到調用該字串的代碼,於100017C0處。往下翻幾行,在100017F6處找到一句跳轉,採用爆破方式,用NOP指令覆蓋JNZ指令即可。通俗點講:就是將AlxRes.dll檔案位移"0x17F6"處的兩個位元組"75 11"改成"90 90",你可以使用WinHex之類的16進位編輯軟體來修改。
::100017C0:: 68 9C700010 PUSH 1000709C :BYJMP JmpBy:100017A4,100017B1, ->: ChecksumResources
::100017C5:: 57 PUSH EDI
::100017C6:: FF15 1C500010 CALL [1000501C] >>>: KERNEL32.DLL:GetProcAddress
::100017CC:: 85C0 TEST EAX, EAX
::100017CE:: 74 0E JE SHORT 100017DE :JMPDOWN
::100017D0:: 8D4D DC LEA ECX, [EBP-24]
::100017D3:: 51 PUSH ECX
::100017D4:: FF35 44740010 PUSH DWORD PTR [10007444]
::100017DA:: FFD0 CALL EAX
::100017DC:: 59 POP ECX
::100017DD:: 59 POP ECX
::100017DE:: 57 PUSH EDI :BYJMP JmpBy:100017CE,
::100017DF:: FF15 18500010 CALL [10005018] >>>: KERNEL32.DLL:FreeLibrary
::100017E5:: 8D45 B8 LEA EAX, [EBP-48]
::100017E8:: 50 PUSH EAX
::100017E9:: 8D45 DC LEA EAX,
<