国产十八禁AV网站,欧美日韩亚洲国产综合乱,亚洲国产aⅴ成人精品无吗,秋霞午夜福利影院合集


       找回密碼
       注冊(cè)

      QQ登錄

      只需一步,快速開(kāi)始

      anti-debuggers技術(shù)探討

      [復(fù)制鏈接]
      1#
      發(fā)表于 2008-9-28 16:33:37 | 只看該作者 |倒序?yàn)g覽 |閱讀模式
      “anti-”一詞在E文中是表示“反對(duì), 抵抗”之義的前綴,而“debugger”是泛指各種調(diào)試(出錯(cuò))器,包括大家熟悉的softice、TRW2000及DOS下的debug、turbodebug, 還包括一些大家不是很熟悉的監(jiān)測(cè)分析工具等等,凡是能夠?qū)?yīng)用程序進(jìn)行動(dòng)態(tài)跟蹤分析、調(diào)試、監(jiān)測(cè)的軟件都可以稱(chēng)作“debugger”。所謂“anti-debuggers”技術(shù), 顧名思義就是防止、防范這類(lèi)工具起作用的技術(shù),簡(jiǎn)而言之就是反調(diào)試、反跟蹤技術(shù)。 <BR>   為什么會(huì)有“anti-debuggers”技術(shù)的存在?它有什么作用呢?我們知道,世界上的事物總是對(duì)立與統(tǒng)一的結(jié)合,就像矛與盾的關(guān)系,有矛就有盾,失去了矛,盾也就沒(méi)有存在的必要了。 有人開(kāi)發(fā)各種軟件,為了防止別人未經(jīng)授權(quán)擅自使用,于是在程序中使用了加密防范技術(shù),使得任何其它人想要使用它都必須得到作者的許可,可是偏偏就有那么一些人(cracker)秉承“share”的理念, 非要靠自己的技術(shù)在特殊工具的幫助下親自動(dòng)手來(lái)揭開(kāi)“潘多拉盒子”之謎,于是加密者發(fā)現(xiàn)自己的東西被別人“竊取”,所以就要想出對(duì)付那些特殊工具、使它們失去作用的技術(shù), 這就是“anti-debuggers”技術(shù)產(chǎn)生的根源?,F(xiàn)在破解早已不是什么隱晦的事情了,各種debuggers為這種技術(shù)的實(shí)現(xiàn)奠定了基礎(chǔ),特別是像softice這種大哥級(jí)的人物,只要想起它, 加密者心里都會(huì)抖一抖,但是任何debugger本身也只不過(guò)是一個(gè)程序而已,它有自己的運(yùn)行方式,有自己的弱點(diǎn),有被別人當(dāng)作漏洞的地方,這就是“anti-debuggers”技術(shù)產(chǎn)生的基礎(chǔ)。 <BR>   講了這么多,是不是覺(jué)得有點(diǎn)形而上學(xué)呢?也許你會(huì)問(wèn),我怎么知道什么樣的程序使用了“anti-debuggers”技術(shù)呢?其實(shí)也沒(méi)有什么確定的方法來(lái)判斷應(yīng)用程序是否使用了“anti-debuggers”技術(shù), 不過(guò)我們始終要注意一點(diǎn),那就是“anti-debuggers”技術(shù)的目的主要是防止debugger的跟蹤、分析及調(diào)試,所以首先是要想辦法發(fā)現(xiàn)系統(tǒng)中存在的debuggers,然后采取行動(dòng)阻止debuggers起作用, 其表現(xiàn)無(wú)非就是出現(xiàn)異常死機(jī)、系統(tǒng)異常重啟、異常錯(cuò)誤、錯(cuò)誤警告、軟件自毀、更嚴(yán)重的還會(huì)破壞文件甚至大肆破壞系統(tǒng)。。。等等非??膳碌男袨?。當(dāng)然,不是說(shuō)凡是破解中遇到這些情況就一定說(shuō)明程序使用了“anti-debuggers”技術(shù), 首先你要排除異常的情況是否是由系統(tǒng)不穩(wěn)定或是被跟蹤的程序“正?!睊伋龅?,如果你的調(diào)試器本身不穩(wěn)定而導(dǎo)致系統(tǒng)異常,那就沒(méi)辦法了。不過(guò)值得慶幸的是如果你使用softice,通常不會(huì)有什么問(wèn)題的, 因?yàn)閟oftice真的是穩(wěn)定無(wú)比,就像泰山一樣,而其它的調(diào)試器就不敢恭維了^_^!不過(guò)正是由于softice實(shí)在太強(qiáng)大,因而現(xiàn)在的“anti-debuggers”技術(shù)主要是沖著它來(lái)的。在排除“正常”的錯(cuò)誤之后,如果有條件的話,我們還可以通過(guò)改變跟蹤系統(tǒng)、環(huán)境及電腦的方法來(lái)重演錯(cuò)誤事件,如果問(wèn)題依舊, 應(yīng)該可以肯定是中了“anti-debuggers”技術(shù)的陷井。 <BR>   下面給大家介紹一些常用的“anti-debuggers”技術(shù)(主要是debugger的檢測(cè)技術(shù)): <BR>1. 利用softice的后門(mén)指令(Back Door commands): <BR>  后門(mén)指令通過(guò)中斷INT 03來(lái)進(jìn)行,通過(guò)softice的后門(mén)指令可以獲得softice版本信息、獲得和設(shè)置斷點(diǎn)、執(zhí)行softice中的指令等。。。 <BR>----------------------------------------------------------------------------------------------- <BR>INT 03 子功能:獲取softice版本信息 <BR>入口參數(shù): <BR>-AX = 0000h <BR>-SI = 4647h ('FG') <BR>-DI = 4A4Dh ('JM') <BR>返回值:BCD版本號(hào)(如0280h = v2.80) <BR>----------------------------------------------------------------------------------------------- <BR>INT 03 子功能:彈出softice窗口并開(kāi)始調(diào)試程序 <BR>入口參數(shù): <BR>-AX = 0902h <BR>-SI = 4647h ('FG') <BR>-DI = 4A4Dh ('JM') <BR>-DS:BX -&gt; 寄存器初始化值 <BR>返回值:未知 <BR>寄存器初始化值的格式: <BR>偏移&nbsp;&nbsp;&nbsp;&nbsp;大小&nbsp;&nbsp;&nbsp;&nbsp;內(nèi)容 <BR>00h&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;SP初始化值 <BR>02h&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;SS初始化值 <BR>04h&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;IP初始化值 <BR>06h&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;CS初始化值 <BR>08h&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;DS和ES初始化值 <BR>0Ah&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;??? <BR>0Ch&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;??? <BR>0Eh&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;??? <BR>10h&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;AX初始化值 <BR>12h&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;??? (默認(rèn)為000AH ???) <BR>14h&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;??? (默認(rèn)為0001H ???) <BR>16h&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;&nbsp;&nbsp;??? (默認(rèn)為0100H ???) <BR>----------------------------------------------------------------------------------------------- <BR>INT 03 子功能:在softice窗口中顯示字符串 <BR>入口參數(shù): <BR>-AX = 0910h <BR>-SI = 4647h ('FG') <BR>-DI = 4A4Dh ('JM') <BR>-DS:DX -&gt; 需要顯示的ASCIZ字符串(最多100個(gè)字節(jié), 0Dh表示OK) <BR>返回值:無(wú) (在softice中顯示的字符串為“Soft-ICE is a debugger by Nu-Mega Technologies, Inc.”) <BR>----------------------------------------------------------------------------------------------- <BR>INT 03 子功能:執(zhí)行softice中的命令 <BR>入口參數(shù): <BR>-AX = 0911h <BR>-SI = 4647h ('FG') <BR>-DI = 4A4Dh ('JM') <BR>-DS:DX -&gt; ASCIZ命令字符串(最多100個(gè)字節(jié), 0Dh表示OK,例如:“HBOOT”,ODH,0) <BR>返回值:無(wú) <BR>說(shuō)明:這里的所說(shuō)的命令可以是我們?cè)趕oftice中使用的任何一個(gè)命令,例如:LDT, IDT, GDT, TSS, RS ... <BR>甚至是HBOOT,總之,通過(guò)這個(gè)功能調(diào)用,使用“anti-debuggers”技術(shù)的程序能夠完全控制softice的操作, <BR>比如它如果執(zhí)行HBOOT,那么結(jié)果就是重新啟動(dòng)系統(tǒng)了!??! <BR>----------------------------------------------------------------------------------------------- <BR>INT 03 子功能:獲取softice斷點(diǎn)信息 <BR>入口參數(shù): <BR>-AX = 0912h <BR>-SI = 4647h ('FG') <BR>-DI = 4A4Dh ('JM') <BR>返回值: <BR>-BH = 上一次斷點(diǎn)設(shè)置的入口序號(hào) <BR>-BL = 上一次斷點(diǎn)設(shè)置的類(lèi)型 <BR>-DH = 上一次被觸發(fā)的斷點(diǎn)的入口序號(hào) <BR>-DL = 上一次被觸發(fā)的斷點(diǎn)的類(lèi)型 <BR>斷點(diǎn)類(lèi)型值: <BR>00h&nbsp;&nbsp;&nbsp;&nbsp;BPM (斷點(diǎn)寄存器類(lèi)型) <BR>01h&nbsp;&nbsp;&nbsp;&nbsp;I/O <BR>02h&nbsp;&nbsp;&nbsp;&nbsp;INTerrupt <BR>03h&nbsp;&nbsp;&nbsp;&nbsp;BPX (INT 03形式的斷點(diǎn)) <BR>04h&nbsp;&nbsp;&nbsp;&nbsp;reserved <BR>05h&nbsp;&nbsp;&nbsp;&nbsp;range <BR>----------------------------------------------------------------------------------------------- <BR>INT 03 子功能:設(shè)置softice斷點(diǎn) <BR>入口參數(shù): <BR>-AX = 0913h <BR>-SI = 4647h ('FG') <BR>-DI = 4A4Dh ('JM') <BR>-DS:DX -&gt; 斷點(diǎn)結(jié)構(gòu)(breakpoint structure) <BR>返回值: <BR>-AX = 狀態(tài) <BR>00h 設(shè)置成功,此時(shí)BX = 斷點(diǎn)序號(hào) <BR>03h 斷點(diǎn)表已經(jīng)滿(mǎn) <BR>06h 內(nèi)存限制錯(cuò)誤 <BR>07h I/O限制錯(cuò)誤 <BR>09h 范圍限制錯(cuò)誤 <BR>16h 重復(fù)斷點(diǎn) <BR>----------------------------------------------------------------------------------------------- <BR>INT 03 子功能:清除softice斷點(diǎn) <BR>入口參數(shù): <BR>-AX = 0914h <BR>-SI = 4647h ('FG') <BR>-DI = 4A4Dh ('JM') <BR>-BX = 斷點(diǎn)序號(hào)(由子功能0913h返回的) <BR>返回值:BX(未知信息) <BR>----------------------------------------------------------------------------------------------- <BR>  我們可以看到,每個(gè)子功能的入口參數(shù)都有相同的部分:即SI = 4647h ('FG');DI = 4A4Dh ('JM'),這兩個(gè)入口值在softice中叫做“魔法值”(magic values), 凡是softice的后門(mén)指令都必須以這兩個(gè)數(shù)為標(biāo)志。 <BR>  利用softice的后門(mén)指令是非常常用的“anti-debuggers”技術(shù),因?yàn)樗^后門(mén)指令其實(shí)也就是softice自己所使用的,它不僅可以獲取softice的信息, 甚至可以隨意控制softice的操作,威力無(wú)比! <BR>2. 搜索由任何系統(tǒng)調(diào)試器所返回的魔法數(shù)--&gt;0F386h(magic number),通過(guò)調(diào)用INT 41H的子功能4Fh實(shí)現(xiàn),有下面的一些方式: <BR>----------------------------------------------------------------------------------------------- <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;ax,4fh <BR>  int&nbsp;&nbsp;&nbsp;&nbsp;41h <BR>  cmp&nbsp;&nbsp;&nbsp;&nbsp;ax, 0F386 <BR>  jz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SoftICE_detected <BR>----------------------------------------------------------------------------------------------- <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;bx, cs <BR>  lea&nbsp;&nbsp;&nbsp;&nbsp;dx, int41handler2 <BR>  xchg&nbsp;&nbsp;&nbsp;&nbsp;dx, es:[41h*4] <BR>  xchg&nbsp;&nbsp;&nbsp;&nbsp;bx, es:[41h*4+2] <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;ax,4fh <BR>  int&nbsp;&nbsp;&nbsp;&nbsp;41h <BR>  xchg&nbsp;&nbsp;&nbsp;&nbsp;dx, es:[41h*4] <BR>  xchg&nbsp;&nbsp;&nbsp;&nbsp;bx, es:[41h*4+2] <BR>  cmp&nbsp;&nbsp;&nbsp;&nbsp;ax, 0f386h <BR>  jz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SoftICE_detected <BR>int41handler2 PROC <BR>  iret <BR>int41handler2 ENDP <BR>----------------------------------------------------------------------------------------------- <BR>  xor&nbsp;&nbsp;&nbsp;&nbsp;ax,ax <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;es,ax <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;bx, cs <BR>  lea&nbsp;&nbsp;&nbsp;&nbsp;dx, int41handler <BR>  xchg&nbsp;&nbsp;&nbsp;&nbsp;dx, es:[41h*4] <BR>  xchg&nbsp;&nbsp;&nbsp;&nbsp;bx, es:[41h*4+2] <BR>  in&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;al, 40h <BR>  xor&nbsp;&nbsp;&nbsp;&nbsp;cx,cx <BR>  int&nbsp;&nbsp;&nbsp;&nbsp;41h <BR>  xchg&nbsp;&nbsp;&nbsp;&nbsp;dx, es:[41h*4] <BR>  xchg&nbsp;&nbsp;&nbsp;&nbsp;bx, es:[41h*4+2] <BR>  cmp&nbsp;&nbsp;&nbsp;&nbsp;cl,al <BR>  jnz&nbsp;&nbsp;&nbsp;&nbsp;SoftICE_detected <BR>int41handler PROC <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;cl,al <BR>  iret <BR>int41handler ENDP <BR>----------------------------------------------------------------------------------------------- <BR>  這個(gè)方法不只是針對(duì)softice,而是所有任意的系統(tǒng)調(diào)試器(debugger),因此效果比較明顯,也比較常用。 <BR>3. 通過(guò)中斷INT 68H檢測(cè)WinICE句柄: <BR>----------------------------------------------------------------------------------------------- <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;ah,43h <BR>  int&nbsp;&nbsp;&nbsp;&nbsp;68h <BR>  cmp&nbsp;&nbsp;&nbsp;&nbsp;ax,0F386h <BR>  jz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SoftICE_Detected <BR>----------------------------------------------------------------------------------------------- <BR>  注意:在softice中我們是不能通過(guò) BPINT 68 來(lái)設(shè)置斷點(diǎn)的,但是可以通過(guò)另外一個(gè)命令實(shí)現(xiàn):BPX exec_int if ax==68, 其中被調(diào)用的函數(shù)位于[ebp+1Dh],客戶(hù)EIP(client eip)位于[ebp+48h],這個(gè)斷點(diǎn)設(shè)置方法只對(duì)32位應(yīng)用程序有效; <BR>4. 利用WINDOWS的API函數(shù)CreateFileA來(lái)試圖打開(kāi)調(diào)試器的驅(qū)動(dòng)程序句柄,這就是著名的“MeltICE”方法,NuMega公司的人用這個(gè)方法來(lái)使Symbol Loader檢查softice是否已經(jīng)激活 (這段代碼位于nmtrans.dll中),雖然這個(gè)方法最初來(lái)源于softice,但是它對(duì)其它類(lèi)型的debugger檢測(cè)依然有效,調(diào)試器的驅(qū)動(dòng)程序句柄有如下一些例子: <BR>  SICE, SIWVID (對(duì)應(yīng)softice Win9x版) <BR>  NTICE (對(duì)應(yīng)softice WinNT版) <BR>  TRW、TRW2000、TRDEBUG (對(duì)應(yīng)TRWIN) <BR>  REGVXD (對(duì)應(yīng)Registry Monitor) <BR>  VKEYPRO (我也不知道這個(gè)對(duì)應(yīng)什么程序^_^) <BR>  FILEVXD (對(duì)應(yīng)File Monitor) <BR>  。。。 <BR>  具體檢測(cè)方法可以用下面的程序來(lái)說(shuō)明: <BR>BOOL IsSoftIce95Loaded() <BR>{ <BR>  HANDLE hFile; <BR>  hFile = CreateFile( "\\\\.\\SICE", GENERIC_READ | GENERIC_WRITE, <BR>          &nbsp;&nbsp;FILE_SHARE_READ | FILE_SHARE_WRITE, <BR>          &nbsp;&nbsp;NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); <BR>  if( hFile != INVALID_HANDLE_VALUE ) <BR>  { <BR>  &nbsp;&nbsp;CloseHandle(hFile); <BR>  &nbsp;&nbsp;return TRUE; <BR>  } <BR>  return FALSE; <BR>} <BR>  對(duì)應(yīng)于匯編代碼的檢測(cè)程序如下面所示: <BR>  push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;。。。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; <BR>  push&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;00402025&nbsp;&nbsp;&nbsp;&nbsp;; '\\.\SICE',0 <BR>  call&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CreateFileA <BR>  cmp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eax,-001 <BR>  jnz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SoftICE_detected <BR>  對(duì)于16位應(yīng)用程序或是兼容16位的應(yīng)用程序來(lái)說(shuō),它們并不支持API函數(shù)CreateFileA,而使用的是16位的_lopen函數(shù): <BR>  push&nbsp;&nbsp;&nbsp;&nbsp;00 <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;eax,[00656634]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; '\\.\SICE',0 <BR>  push&nbsp;&nbsp;&nbsp;&nbsp;eax <BR>  call&nbsp;&nbsp;&nbsp;&nbsp;KERNEL32!_lopen <BR>  inc&nbsp;&nbsp;&nbsp;&nbsp;eax <BR>  jnz&nbsp;&nbsp;&nbsp;&nbsp;SoftICE_detected <BR>為了檢測(cè)這些檢測(cè)程序,我們可以在softice中通過(guò)下面的斷點(diǎn)來(lái)攔截它們: <BR>  BPX CreateFileA if *(esp-&gt;4+4)=='SICE' || *(esp-&gt;4+4)=='SIWV' || *(esp-&gt;4+4)=='NTIC' <BR>  BPINT 30 if eax==002A001F &amp;&amp; (*edi=='SICE' || *edi=='SIWV')&nbsp;&nbsp;; 將會(huì)中斷3次 <BR>  BPINT 30 if (*edi=='SICE' || *edi=='SIWV') <BR>  BPX KERNEL32!ORD_0001 if *edi=='SICE' || *edi=='SIWV'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; 將會(huì)中斷3次 <BR>  BPX VMM_GetDDBList if eax-&gt;3=='SICE' || eax-&gt;3=='SIWV' <BR>5. 利用softice的邊界檢查簽名(The signature of BoundsChecker): <BR>----------------------------------------------------------------------------------------------- <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;ebp, 4243484Bh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; 'BCHK' <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;ax, 04h <BR>  int&nbsp;&nbsp;&nbsp;&nbsp;3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>  cmp&nbsp;&nbsp;&nbsp;&nbsp;al,4 <BR>  jnz&nbsp;&nbsp;&nbsp;&nbsp;SoftICE_Detected <BR>----------------------------------------------------------------------------------------------- <BR>  這個(gè)方法被大量地使用在網(wǎng)上各種加殼、加密軟件中; <BR>6. 搜索softice虛擬設(shè)備驅(qū)動(dòng)程序的ID值(ID of SoftICE VxD),通過(guò)調(diào)用INT 2FH的子功能1684h實(shí)現(xiàn): <BR>----------------------------------------------------------------------------------------------- <BR>  xor&nbsp;&nbsp;&nbsp;&nbsp;di,di <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;es,di <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;ax, 1684h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;bx, 0202h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; 搜索winice的VxD ID <BR>  int&nbsp;&nbsp;&nbsp;&nbsp;2Fh <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;ax, es&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; ES:DI 指向 VxD API 入口點(diǎn) <BR>  add&nbsp;&nbsp;&nbsp;&nbsp;ax, di <BR>  test&nbsp;&nbsp;&nbsp;&nbsp;ax,ax <BR>  jnz&nbsp;&nbsp;&nbsp;&nbsp;SoftICE_Detected <BR>----------------------------------------------------------------------------------------------- <BR>  xor&nbsp;&nbsp;&nbsp;&nbsp;di,di <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;es,di <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;ax, 1684h <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;bx, 7a5Fh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; 搜索SIWVID的VxD ID <BR>  int&nbsp;&nbsp;&nbsp;&nbsp;2fh <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;ax, es&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; ES:DI 指向 VxD API 入口點(diǎn) <BR>  add&nbsp;&nbsp;&nbsp;&nbsp;ax, di <BR>  test&nbsp;&nbsp;&nbsp;&nbsp;ax,ax <BR>  jnz&nbsp;&nbsp;&nbsp;&nbsp;SoftICE_Detected <BR>----------------------------------------------------------------------------------------------- <BR>  這種方法用得較少; <BR>7. 下面的方法同樣也是檢測(cè)softice的VxD ID來(lái)判斷它是否已經(jīng)裝入系統(tǒng),不過(guò)使用的不是中斷: <BR>----------------------------------------------------------------------------------------------- <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;eax, Device_ID&nbsp;&nbsp;; softice的VxD ID,對(duì)應(yīng)SICE等于202h;對(duì)應(yīng)SIWVID,等于07a5Fh; <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;edi, Device_Name ; VxD名字,針對(duì)于沒(méi)有VxD ID的情況,不過(guò)對(duì)于我們討論的問(wèn)題老說(shuō)是沒(méi)有意義的; <BR>  VMMCall Get_DDB <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;[DDB], ecx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; 如果VXD沒(méi)有安裝,ECX返回0,否則返回DDB <BR>----------------------------------------------------------------------------------------------- <BR>  VMMCall Test_Debug_Installed <BR>  je&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;not_installed <BR>----------------------------------------------------------------------------------------------- <BR>  這種方法只適用于系統(tǒng)0級(jí)(ring0),即虛擬設(shè)備驅(qū)動(dòng)程序VxD或者是使用VxdCall的ring3應(yīng)用程序;Get_DDB服務(wù)功能用來(lái)檢查指定的設(shè)備是否安裝,如果安裝,則將設(shè)備描述塊地址返回到ECX中;我們可以很容易的在softice中通過(guò)斷點(diǎn):bpx Get_DDB if ax==0202 || ax==7a5fh 來(lái)找到這個(gè)檢測(cè)程序處; <BR>8. 下面的方法通過(guò)VxDCall的后門(mén)(backdoor)來(lái)檢測(cè)系統(tǒng)中是否安裝了任何性質(zhì)的調(diào)試器: <BR>----------------------------------------------------------------------------------------------- <BR>  push&nbsp;&nbsp;0000004fh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; 功能號(hào)為4fh <BR>  push&nbsp;&nbsp;002a002ah&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; 高位字指定是哪一個(gè)VxD (VWIN32) <BR>          &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; 低位字指定使用什么服務(wù)(VWIN32_Int41Dispatch) <BR>  call&nbsp;&nbsp;Kernel32!ORD_001&nbsp;&nbsp;; VxdCall <BR>  cmp&nbsp;&nbsp;ax, 0f386h&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;; 系統(tǒng)調(diào)試器返回的魔法數(shù)(magic number) <BR>  jz&nbsp;&nbsp;&nbsp;&nbsp;SoftICE_detected <BR>----------------------------------------------------------------------------------------------- <BR>  這種方法因?yàn)槭褂昧薞xdCall,所以只能在Windows 95/98中使用(NT不支持VxD),為了檢測(cè)這種方法,我們可以在softice中通過(guò)下面的斷點(diǎn)來(lái)攔截它: <BR>BPINT 41 if ax==4f <BR>BPINT 30 if ax==0xF386&nbsp;&nbsp;; <BR>BPX Exec_PM_Int if eax==41 &amp;&amp; edx-&gt;1c==4f &amp;&amp; edx-&gt;10==002A002A <BR>BPX Kernel32!ord_0001 if esp-&gt;4==002A002A &amp;&amp; esp-&gt;8==4f&nbsp;&nbsp;; 非常非常慢?。?! <BR>9. 通過(guò)注冊(cè)表中的鍵值來(lái)直接檢測(cè)是否安裝了softice,不過(guò)并不能知道softice是否是激活的(即是否在內(nèi)存中): <BR>  -#1: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\SoftICE <BR>  -#2: HKEY_LOCAL_MACHINE\Software\NuMega\SoftICE <BR>  -#3: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\App Paths\Loader32.Exe <BR>  -#4: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\NTice <BR>  某些應(yīng)用程序發(fā)現(xiàn)了注冊(cè)表中的softice鍵值后會(huì)直接將其刪掉,從而破還已經(jīng)安裝好的softice, 在softice中可以用斷點(diǎn):BPX _regopenkey if *(esp-&gt;8+0x13)=='tICE' || *(esp-&gt;8+0x37)=='tICE'來(lái)攔截這種檢測(cè); <BR>10. 通過(guò)對(duì)整個(gè)內(nèi)存范圍對(duì)softice特征字符串的搜查來(lái)判斷softice是否已經(jīng)安裝并激活,下面是個(gè)例子: <BR>----------------------------------------------------------------------------------------------- <BR>DATA_SICE  DB   &nbsp;&nbsp;67h,66h,8bh,06h,0fh,22h,0d8h,26h,67h,66h <BR>       DB   &nbsp;&nbsp;8bh,46h,04h,66h,26h,67h,0fh,01h,10h <BR>DATA_SICE_END <BR>assume&nbsp;&nbsp;&nbsp;&nbsp;cs:code,ds:code <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;si,offset DATA_SICE <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;dx,cs <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;al,26h <BR>  xor&nbsp;&nbsp;&nbsp;&nbsp;bp,bp <BR>  cld <BR>loop1: <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;es,bp <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;cx,100h <BR>  xor&nbsp;&nbsp;&nbsp;&nbsp;di,di <BR>loop2: <BR>  repnz&nbsp;&nbsp;scasb <BR>  jnz&nbsp;&nbsp;&nbsp;&nbsp;loop3 <BR>  push&nbsp;&nbsp;&nbsp;&nbsp;cx <BR>  push&nbsp;&nbsp;&nbsp;&nbsp;si <BR>  push&nbsp;&nbsp;&nbsp;&nbsp;di <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;cx,offset DATA_SICE_END-offset DATA_SICE <BR>  repz&nbsp;&nbsp;&nbsp;&nbsp;cmpsb <BR>  jz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SoftICE_detected <BR>  pop&nbsp;&nbsp;&nbsp;&nbsp;di <BR>  pop&nbsp;&nbsp;&nbsp;&nbsp;si <BR>  pop&nbsp;&nbsp;&nbsp;&nbsp;cx <BR>  jmp&nbsp;&nbsp;&nbsp;&nbsp;short loop2 <BR>loop3: <BR>  add&nbsp;&nbsp;&nbsp;&nbsp;bp,10h <BR>  cmp&nbsp;&nbsp;&nbsp;&nbsp;bp,dx <BR>  jb&nbsp;&nbsp;&nbsp;&nbsp;loop1 <BR>not_found: <BR>  。。。 <BR>----------------------------------------------------------------------------------------------- <BR>11. 通過(guò)改變DOS中斷調(diào)用的25H/35H來(lái)設(shè)置改變?cè)械闹袛喾?wù)程序(主要是INT 01H和INT 03H),使系統(tǒng)崩潰,這個(gè)方法只是搞破壞,防止任何形式的對(duì)程序的非正常中斷, 因?yàn)槌绦蛞呀?jīng)改變了INT 01或INT 03中斷服務(wù)程序,使得我們使用調(diào)試器設(shè)置斷點(diǎn)或使用其它任何需要改變這兩個(gè)中斷的應(yīng)用程序時(shí)系統(tǒng)直接崩潰或死機(jī), 而不管是否這個(gè)斷點(diǎn)是如何產(chǎn)生的,甚至是正常程序出于正常需要的使用也不允許: <BR>----------------------------------------------------------------------------------------------- <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;ah, 25h <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;al, Int_Number (主要是INT 01H和INT 03H) <BR>  mov&nbsp;&nbsp;&nbsp;&nbsp;dx, offset New_Int_Routine <BR>  int&nbsp;&nbsp;&nbsp;&nbsp;21h <BR>----------------------------------------------------------------------------------------------- <BR>  這種方法本人曾經(jīng)領(lǐng)教過(guò),確實(shí)是很厲害,只要一設(shè)置斷點(diǎn),馬上死機(jī),不過(guò)多少顯得有點(diǎn)不道德,為什么這樣說(shuō)呢? 因?yàn)榧偃缰袛嗖⒉皇怯捎赿ebugger產(chǎn)生,而是某些應(yīng)用程序出于自身需要而產(chǎn)生的,這也要死機(jī),大家有沒(méi)有感覺(jué)有些強(qiáng)盜邏輯的味道呢! <BR>  上面介紹了這么多的“anti-debuggers”技術(shù),我想以后再碰到這樣的情況就不會(huì)那么頭暈了吧!不過(guò)你肯定會(huì)問(wèn)既然有如此多的“anti-debuggers”技術(shù), 那么我們?nèi)绾稳シ婪端鼈兡兀恳话阏f(shuō)來(lái)有三種方法可以試一下: <BR>  第一、也是最簡(jiǎn)單易行的辦法--采用專(zhuān)門(mén)的防止“anti-debuggers”技術(shù)的工具,比較有名的就是FrogsICE, 用它對(duì)付大部分含有“anti-debuggers”技術(shù)的應(yīng)用程序是沒(méi)有什么問(wèn)題的,其具體的使用方法請(qǐng)參閱主頁(yè)上“破解教學(xué)”中的“FrogsICE使用指南”; <BR>  第二、通過(guò)對(duì)程序的靜態(tài)分析(如用反編譯工具W32DASM分析程序代碼),找到其中“anti-debuggers”代碼部分,然后用編輯工具(如HIEW)修改程序, 使其“anti-debuggers”代碼失效;不過(guò)這種方法對(duì)于加殼的程序來(lái)說(shuō)沒(méi)有用處,因?yàn)榧託さ某绦蚴遣荒苓M(jìn)行靜態(tài)分析的,我們可以先脫殼,然后再用反編譯工具進(jìn)行分析; <BR>  第三、在對(duì)程序的動(dòng)態(tài)跟蹤過(guò)程中和程序斗法,動(dòng)態(tài)發(fā)現(xiàn)、找到“anti-debuggers”代碼的位置,然后將其殲滅,對(duì)于斷點(diǎn)的設(shè)置前面針對(duì)不同的“anti-debuggers”技術(shù)已經(jīng)分別討論過(guò)了。 這種方法難度較大,可有些時(shí)候卻是唯一的辦法,需要有很大的耐心(面對(duì)無(wú)數(shù)次的死機(jī)、藍(lán)屏。。。)!<BR>  最后,有關(guān)于上面所提到的中斷的更詳細(xì)信息,請(qǐng)參閱主頁(yè)上“匯編語(yǔ)言”中的“中斷大全”,里面有更多更詳細(xì)的相關(guān)中斷功能介紹。 <BR>
      您需要登錄后才可以回帖 登錄 | 注冊(cè)

      本版積分規(guī)則

      QQ|本地廣告聯(lián)系: QQ:905790666 TEL:13176190456|Archiver|手機(jī)版|小黑屋|汶上信息港 ( 魯ICP備19052200號(hào)-1 )

      GMT+8, 2025-4-20 08:49

      Powered by Discuz! X3.5

      © 2001-2025 Discuz! Team.

      快速回復(fù) 返回頂部 返回列表