QQ連發器製作原理及防範

QQ連發器製作原理及防範
  

這是03年的一篇分析文章,以前在黑客防線上刊登過。最近有人關注這個,就貼在這裡了。

本文首發於黑客防線2003年第9期
編者按:最近網絡上熱鬧的事情很多,不過很多事情都似乎與我們無關。但是對於經常用QQ的朋友來說,我們今天要談的話題就可能與您息息相關了。走遍各大BBS,特別是在病毒板塊,我們隨處可以聽到求救之聲。不過,我們今天主要談的是關於這種QQ連發器的製作原理,看過之後,您還能說您不知道如何防範嗎?
QQ連發器製作原理及防範

5月28日,瑞星全球反病毒監測網截獲了利用QQ進行傳播的木馬病毒:「QQ 連發器」(Trojan.WebAuto、Trojan.WebAuto.a)。該病毒會偷偷藏在用戶的系統中,發作時會尋找QQ窗口,每隔1分鐘就給所有在線上的QQ好友發送諸如「激情電影爽啊!給你也推薦一下,完全免費--」之類的假消息,誘惑用戶點擊一個網站,如果有人點擊並進入該網站的話,會自動下在一個EXE文件執行。該EXE文件會將自己保存在system32目錄下,並且會修改用戶機器的註冊表,使得IE首頁指向上面提到的網站,並且在註冊表中RUN選項下面添加鍵值指向system32的病毒文件副本使得機器每次啟動後都會自動加載該程序。在WebAuto.exe文件運行的過程中,它還會創建並執行一個EXEAuto.exe的文件,又創建Qupdate.exe文件,並在註冊表中RUN選項下加入load鍵並指向該文件。
目前該病毒已經出現多個版本,涉及到該問題的網站也非常之多。對於很多版本來說,為了避免被人調試分析,其EXE文件都經過了加殼處理的。這裡我們列舉很多網友碰到過的幾個網站:
http://www.film****.com/
http://www.happy***.net
http://www.qq5**.com
http://p163.nease.net
http://bbll.bl.am
http://www.qq3344.com
當然,目前有些網站或許已經良心發現,有的將有關代碼去掉了,有的網站已經無法訪問,而還有的網站已經關閉。不過,這種打廣告的方法確實是非常令人痛恨的。
下面我們具體分析一下QQ連發器的相關原理。
一、QQ連發器WEBAUTO.EXE文件的原理
關於這個文件的運作方式,在安全焦點上linuxh4cker做了比較細緻的分析。不過,我這覺得這裡還是有必要談一下。
其實操縱QQ這種思想最初是在中國黑客,愛情森林等病毒上用到的。在《黑客防線》今年5月份發行的增刊上,pkxp/CVC發表的「基於P2P思想的QQ蠕蟲的原理和防範」一文中也提到過,並且有編程代碼分析。
筆者通過對WebAuto.exe的反彙編和分析,對其行為步驟總結如下:
———————————————Main————————————————————
1.通過GetStartUpInfoA函數獲得進程信息。
2.通過GetModuleHandleA函數得到當前程序句柄。
3.將字符串廣告中網址http://www.happy666.net的Base64編碼後的字串「aHR0cD......."壓入堆棧。
4.通過GetActiveWindow獲得當前活動窗口句柄。
5.通過ShowWindow(設置SW_Hide)將剛才的活動窗口隱藏。
6.利用CreateMutexA創建名為「WebAuto」的互斥體,避免同一個程序多次同時運行。
7.如果當前程序執行體已經存在或者CreateMutexA返回錯誤,則當前程序退出。否則,繼續。
———————————————主循環———————————————————
8.將內存中40324C位置的值增加1。如果該值為28H(即循環40次),則跳到30步執行,否則繼續。
9.通過GetModulFileNameA獲得當前程序的完整路徑名稱。
10.通過GetSystemDirectoryA獲得系統目錄。
11.通過sprintf函數合併系統目錄和「WebAuto.exe「得到目標路徑,譬如C:\winnt\system32\webauto.exe。
12.通過CopyFileA函數將當前運行的文件拷貝到剛才得到的目標路徑,最後一個參數為False,這樣即使目標文件存在,也不會出錯。
13.在註冊表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion
\Run下添加WebAuto.exe鍵值並指向剛才的目標路徑。
14.在註冊表HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion
\Run添加WebAuto.exe鍵值並指向剛才的目標路徑。
15.將上面經過Base64編碼的網址信息還原為網址字符串http://www.happy666.net。
16.修改註冊表HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main下的鍵值Start Page指向剛才得到的網址http://www.happy666.net。
17.調用sleep函數,默認休息一分鐘。(如果後面沒有找到發送消息窗口,這裡的休息時間將設置為500毫秒)。
18.跳到20步執行。
19.跳到第8步繼續循環。

————————利用QQ發送消息的子程序(call from step19)————————
20.通過FindWinowExA函數尋找第一個標題為「發送消息「的窗口,得到其句柄。
21.如果沒有找到該窗口,將在第17步的休息時間改為500毫秒(1F4H),並返回到第19步執行。否則,繼續。
22.通過剛才得到的窗口句柄,通過FindWindowExA函數尋找RICHEDIT類的窗口句柄(即我們添發送消息的那個文本輸入框)。
23.通過FindWindowExA函數尋找「送消息(&S)」這個按鈕,如果沒有找到,說明找到的窗口不是QQ發送窗口,返回到第19步執行。否則繼續。
24.隨機選擇3條廣告信息中一條的Base64編碼字串,並將其通過Base64解碼還原。
25.通過sprintf函數將廣告信息和網址合併成要最終添加到QQ發送框的廣告信息。
26.通過SendMessageA函數(設置參數WM_SETTEXT)將廣告信息添加到QQ發送框中。
27.通過SetForegroundWindow函數將焦點放到QQ發送消息窗口。
28.通過keybd_event函數模擬CTRL,ENTER兩鍵的按下和放開。用來自動發送QQ消息。
29.將第17步的休息時間改為一分鐘(0EA60H=60000毫秒)。然後返回第19步繼續執行。

————————寫入並運行EXEAuto.exe文件(call from step8)———————
30.將第8步用到的內存中40324C位置的值設置為0
31.通過GetProfileIntA函數獲得win.ini文件中AutoTime節CurTime的值,如果該值和某個值相等,則返回第9步繼續執行,否則,繼續。
32.通過Base64解碼得到網址http://update.myxq.com,並通過sprintf將其和myautoexe.exe組合得到網址http://update.myxq.com/myautoexe.exe(該文件為24K,和後面20K的QUpdate.exe文件功能好像是差不多)。
33.通過GetSystemDirectoryA獲得系統目錄,並將其通過sprintf函數與字符串EXEAuto.exe合併得到目標路徑C:\winnt\system32\EXEAuto.exe。
34.將myautoexe.exe內容寫到C:\winnt\system32\EXEAuto.exe文件(其中應該有細微變化,這裡筆者分析得不是太細緻,但基本功能應該是這樣)。
35.通過WriteProfileString將AutoTime節的CurTime值設置為1
36.通過ShellExecute函數調用執行C:\winnt\system32\EXEAuto.exe文件。
37.返回第9步繼續執行。
—————————————————————————————————————
其中EXEAuto.exe文件在每次開始運行時,會設置Win.ini文件中NextOpen節NextTime字段,其內容為「NextTime=下次OPEN 52 分 16 秒!「的形式。即表示下次是在52分10秒調出廣告窗口(譬如http://ads.myxq.com:88/ads.htm)。這個時間是不固定的。每次EXEAuto.exe文件重新運行時,其都會改變NextTime中的值。該文件還會將自己拷貝一份文件到C:\WINNT\System32\QUpdate.exe,並在註冊表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run中添加load鍵值指向C:\WINNT\System32\QUpdate.exe文件,這樣以後每次啟動時便會運行Qupdate.exe文件。
上面為了大家理解起來方便,我將各個程序模塊用虛線分開,並註明了每個模塊的功能。我想,大家看完之後,對QQ連發器的行為應該非常熟悉了。
WebAuto.exe文件一樣可以改回註冊表,我原以為這也是借用了中國黑客病毒所用到的監視註冊表的技術。通過上面的分析,大家應該也看得出來,其實際上是使用一個循環做到這點的,它本身並沒有對註冊表進行監視,而是不停地定期重新寫該值。當然也在不停地做Copy文件的操作。
關於WEBAUTO.EXE文件的運行方式和原理,我想到這裡應該已經介紹得很清楚。這裡不再繼續浪費版面了。讓我們進入下一個問題。

二、如何打造可以自動運行的EXE文件
關於這個問題,其實很早以前Nimda病毒就給這個功能做出了榜樣。在第7期的黑防專題中也提到了這個問題。
我們先看一點資料吧。
「該漏洞(錯誤的MIME頭漏洞)是由Juan Carlos Garcia Cuartango安全小組發現的,該小組發現MEMI在處理不正常的MIME類型時存在問題,攻擊者可以建立一個包含可執行文件的附件的HTML EMAIL並修改MIME頭,使IE不正確處理這個MIME所指定的執行文件附件。一般情況下如果附件是文本文件,IE會讀它,如果是VIDEOCLIP,IE會查看,如果是圖形文件,IE就會顯示它,但如果是一個EXE文件,IE就會提示用戶是否執行,但具有危害的是,當攻擊者更改MIME類型後,IE就會不經過提示用戶是否執行而直接運行,從而使攻擊者加在附件中的程序或者攻擊命令能夠按照攻擊者設想的情況實行。」
在我們碰到的大多數網站中,它們是將EXE文件Base64編碼後放在.mht和.eml格式的文件中,觸發文件下載並在本地執行的。.eml文件大家應該都比較熟悉了,這裡介紹一下mht文件格式。mht文件同樣也遵循MIME標準,包括IE、Outlook在內的許多軟件可以直接將這種格式的文件打開。當您用IE把一篇網頁另存為時,就會有這種格式讓您選擇,叫WEB檔案。說的簡單一點,就是把網頁中的全部類型的元素統一保存,而不會出現全部保存時的那個裝各種元素文件的文件夾,是保存和離線瀏覽網頁的好辦法,有點類似於PDF的感覺。其可以通過IE查看,當然用一些網頁編輯軟件也能打開。
MHTML指HTML文檔聚集的MIME封裝,其是用於定義發送郵件正文中的HTML內容的MIME (Multipurpose Internet Mail Extensions)結構的Internet標準。.MHT是一種相當常見的格式,可以將多個封裝的文件與HTML文檔相關聯。
MHTML會對當前的HTML頁面進行「快照」,並存放在電子郵件中使得可以向外發送或是可以使得該頁面可以在Internet Explorer中離線瀏覽。
下面我們看看MHT的具體格式:
Content-Type: multipart/related;//它定義了數據的類型,以便數據能被適當的處理。
type="multipart/alternative";//它定義了數據的類型,以便數據能被適當的處理。
boundary="====B===="   //定義分界線

--====B====             //分界線
Content-Type: multipart/alternative;
boundary="====A===="  //定義分界線

--====A====           //分界線
Content-Type: text/html;//它定義了數據的類型,以便數據能被適當的處理。
Content-Transfer-Encoding: quoted-printable

<iframe src=3Dcid:Mud height=3D0 width=3D0>
</iframe>
--====A====--         //分界線,後面有--

--====B====          //分界線
Content-Type: audio/x-wav;//它定義了數據的類型,以便數據能被適當的處理。
name="test.exe"           //這裡定義文件名字
Content-Transfer-Encoding: base64
//這裡決定了編碼方式,譬如對於vbs文件來說也可以採用quoted-printable
Content-ID: <Mud>  //對應了上面的src=3Dcid:Mud
//以下就是文件內容了,對於上面的設定來說,這裡就是EXE文件的Base64編碼。
TVqQAAMAAAAEAAAA//8AALgAAAAAAAAA(後面省略)  

--====B====//分界線
上面是一個對於一個簡單的VBS文件的測試,同樣我們也可以用BAT、EXE文件作為測試。不過對於EXE文件來說,由於很多字符是無法直接將其內容貼在後面的,所以其一般都必須通過特殊編碼後放上來,通常採用Base64編碼。
那什麼是Base64編碼呢?Base64是網絡上最常見的用於傳輸8Bit字節代碼的編碼方式之一,大家可以查看RFC2045~RFC2049,上面有MIME的詳細規範。
Base64要求把每三個8Bit的字節轉換為四個6Bit(3*8 = 4*6 = 24),然後在6Bit之前添加兩個高位0,形成四個8Bit的字節。這樣最後形成的每個字節實際上只有6個有效位,其只能表示0…63共64個數,或許這也正是Base64的由來。得到這些數後,然後通過一個碼表(其將0-63分別映射到26*2個大小寫字母(a..z,A..Z)、10個數字(0-9),和「+」、「-」兩個符號,共64個字符)將這些數字轉化為相應的字符,即得到相應的Base64編碼。看過EXE文件Base64編碼的朋友一定知道,其中含有很多A,為什麼呢?因為EXE文件中有很多字節0,而0在碼表中就對應著字符「A」啊!
或許您還會問,如果原碼個數不是3的整數倍怎麼辦?這時,我們需要將在原碼各位分隔成6位一組後,後面不足6位的補0,如果後面還不夠,以「=」補足4個Base64編碼字節。譬如,如果末尾字符只剩下m,那麼其Base64編碼為bQ= = 。這就是Base64編碼的全部過程。
而Base64的解碼過程則正好相反,這個解碼過程大家可以自己好好想想了。
好了,我們現在想想,應該如何將EXE文件Base64編碼後放入上面.mht文件中呢?
首先是如何對龐大的EXE文件進行Base64編碼的問題?難道我們自己一個一個的拆分字節位、查表嗎?我可沒有這個精力,一二十個字符我可能還行,再多了就沒有這個耐心了!年輕人儘管精力比較旺盛,但是不能用在這麼無聊的事情上面J。呵呵,不要告訴我,哪怕只對於20KBytes的文件來說,您有這個耐心!GOD,救護車!!!
那怎麼辦?其實很簡單,我們打開Outlook,新建一個文件,添加我們的EXE文件為附件,保存為eml文件後,我們可以以文本方式打開這個文件,裡面自然就會找到EXE文件的Base64編碼。Copy+Paste,就解決問題了。你也可以利用foxmail,就可以很容易得到你想得到的一些木馬或者攻擊行軟件的Base64的編碼格式文件,具體的操作方法是:你用FOXMAIL寫一封信,然後把你想得到Base64編碼的軟件增加到附件中去,然後查看信件的全部信息,這樣就可以得到該EXE文件的Base64編碼格式的代碼。
不過注意修改上面的編碼方式、文件名,呵呵,對了記得去掉我給的註釋。在上面的文件中,我們也可以採用BAT,用net命令添加管理員賬號哦。這裡不再一一敘述了。
對於從惡意網站下載的.eml和.mht的文件,很多朋友會感到非常驚訝:為什麼鼠標選中這個文件就會自動運行?其實,這是因為您的機器設置了預覽功能,平時,我們點擊一個htm文件的時候,左邊不是一樣會有預覽的效果嗎?既然可以預覽,自然便會觸發該文件中的代碼了。所以自動下載甚至運行就不足為怪了。

三、如何跟網頁扯上點關係
看過很多惡意網站,我見到過以下幾種方式,這裡介紹一下:
1.通過<frame src=」love.mht」>
這裡實際上採用的是HTML裡面的分幀標籤。譬如,某個網站採用了以下代碼:
<frame name="footer" scrolling="no" noresize target="main" src="520.mht">
如果您對分幀不瞭解的話,可以看看HTML方面的資料。網上可以搜出一大堆。其主要框架就是:
<frameset>
<frame src=..>
<frame src=..>
</frameset>
2.通過<iframe src=」love.mht」>
這裡採用的是活動幀,這也是大多數惡意網站採用的方法。舉個例子:
<iframe src=love.mht width=0 height=0></iframe>
3.通過window.open方法
譬如,某個網站採用了以下代碼:
window.open("love.mht",null,"width=1,height=1,top=1,left=1,location=no,menubar=no,toolbar=no,scrollbars=no,resizable=yes")
當然方法可能還有很多,這裡就不一一列舉了。

四、如何打造自己的QQ連發器
我想大家應該和我一樣,一定對QQ連發器深惡痛絕。不過,我們或許有時候自己也想做個測試一下(有這種想法真是罪過啊!),呵呵,那我們現在就僅當探討一下吧!
大家是否想過:為什麼會有這麼多網站用了同一個程序,但是其中的目標廣告網址卻不一樣呢?
思考中……
呵呵,我是作者我怕誰,我優先發言。我在想,是不是有某個配置程序可以專門來配置這個文件的網址信息呢?或者是作者將這個程序分別為幾個朋友網站各做了一個(僅修改某些信息就可以了)?還是哪位兄弟拿到樣本後,自己修改的那個EXE文件?我們不得而知啊!鬱悶……,誰可以告訴我!?
算了,對我來說這個問題並不是那麼重要。我們看看我們自己如何修改這個WebAuto.exe文件為我們自己所用吧!呵呵,不就是一個網址嗎?!
從上面第一部分的分析中我們可以看出,對於http://www.happy666.net這個網站,如果您直接在EXE文件中搜索這個字符串的話,肯定是搜索不到的,因為其是通過了Base64編碼的,不過我們可以找到http://www.happy666.net這串字符的Base64編碼。既然如此,我們將自己的網址Base64編碼後替換這串字符,是不是就可以打造自己的QQ連發器了呢?
對了,WebAuto.exe這個文件目前肯定已經上了各大殺毒軟件的黑名單了。呵呵,不過沒有多大關係,我們將其用各種加殼軟件改造一下,效果也會不錯!
既然如此,我想後面也就不用我說了吧。各自開工吧!

五、如何防範?
如果您已經中了QQ連發器,看了第一部分分析之後,我想也不用我來廢話了。其並沒有對進程作任何保護,進程直接就可以關閉,進程關閉之後,其它一切都好說。不過,有些網站可能對目標文件改名了的,不過,不要緊,譬如對於filem3344來說,其3個文件名為intenats.exe、widows.exe、sysfile.exe。你可能要問,我怎麼知道就是這幾個文件呢?很簡單,在system32目錄下按照時間排列圖標,最後3個文件就是了。哎,還是說了這麼多廢話!
如果您現在還沒有中QQ連發器,呵呵,我想看過本文之後,如果您腦袋稍微清醒一點,不是過於沉浸於什麼「免費激情電影」的話,您中招的機會也並不會太多J。
當然,如果您覺得其誘惑力實在過於巨大,無法抗拒的話。您可以這樣加固保險係數:打開IE,進入工具菜單,點擊「Internet選項」—「安全」—「自定義級別」—「下載」,選擇禁用,這樣的話就不用擔心那個EXE文件會自動下載、更不用說運行了。
如果您不希望這麼暴力,那就試試在IE瀏覽器地址欄中輸入「view-source:http://目標網址」,這時會將對方網站的源代碼顯示出來,先看看再說,如果您確保安全,呵呵,再進也不遲哦。
最後要說明的是上面那個漏洞的利用條件就是被攻擊目標使用IE5.0 IE5.01 IE5.5。這樣的話,您就可以通過升級您的IE瀏覽器阻止其自動執行。升級後至少它在下載文件前會詢問您是下載還是打開。這樣的話,您是否會覺得安全了很多呢?

後記:這個程序的跟蹤調試花了我不少功夫,不過也算是學到了一點調試方面的知識,儘管註冊表什麼的被修改過N次了,並且還不定期地彈出一些激情廣告(呵呵,人家肯定以為我在上XX網站了。不好,旁邊好像還有MM,形象大損了)。從目前情況看,涉及到QQ連發器的網站好像都差不多關閉或者拿掉相關代碼了。不過這種行為,是我們無數無辜Q友所痛恨的!衷心希望這種事情一去永不復返。

共2頁 上一頁 1 2 下一頁
綜合資訊大全
金牌測算
免費起名
免費測名
個性網名
個性簽名
個性資料