Crunch v1.1中的一段有趣的反跟蹤程式碼 (5千字)
歡迎有空光臨小站:http://go1.163.com/~st0ne/
『技術研習』 『以前更新』
--------------------------------------------------------------------------------
Crunch v1.1中的一段有趣的反跟蹤程式碼
【宣告】
我寫文章以交流為主,希望大家在轉載時能保持文章的完整性。
【前言】
這是在對Crunch.EXE脫殼時發現的一點有趣的東西,就寫了出來。其中利用一種特殊的方法---修改LDT表來進入Ring0級,然後在Ring0級檢測Test_Debug_Installed標誌來判斷當前是否有偵錯程式跟蹤,這種反跟蹤方法不用區別偵錯程式的型別。SoftICE、TRW2000、天意都可以檢測到,怎麼樣?有點意思吧。不過如果你要對付這種外殼加密軟體的話,就要小心一點了,別被當得死死的哦。:-)
作者: ljttt
寫作日期: 2000-10-02
1、前面的大部分分析過程同《對Crunch v1.1加殼程式的手動脫殼及反跟蹤程式碼的一點分析》一文中所述,這裡就不多說了。
2、跟蹤到如下程式碼處,我們的目標開始了!
015F:0066C266 53
PUSH EBX
015F:0066C267 E8C9100000 CALL
0066D335
015F:0066C26C 5B
POP EBX
015F:0066C26D 899D683C0000 MOV
[EBP+00003C68],EBX
015F:0066C273 BB76060000 MOV
EBX,00000676
015F:0066C278 03DD
ADD EBX,EBP
015F:0066C27A 899D643C0000 MOV
[EBP+00003C64],EBX
015F:0066C280 BB050A0000 MOV
EBX,00000A05
015F:0066C285 03DD
ADD EBX,EBP
015F:0066C287 FFD3
CALL EBX
<--內有反跟蹤程式碼
015F:0066C289 90
NOP
015F:0066C28A 60
PUSHAD
015F:0066C28B BB85230000 MOV
EBX,00002385
015F:0066C290 03DD
ADD EBX,EBP
015F:0066C292 53
PUSH EBX
015F:0066C293 FF950A210000 CALL
[EBP+0000210A]
015F:0066C299 8985F6160000 MOV
[EBP+000016F6],EAX
3、在 CALL EBX 處按F8鍵進入看看
015F:0066C9FF FFA56C3C0000 JMP
[EBP+00003C6C]
015F:0066CA05 8CD8
MOV AX,DS
015F:0066CA07 A804
TEST AL,04
015F:0066CA09 740F
JZ 0066CA1A
015F:0066CA0B 8DB51B0A0000 LEA
ESI,[EBP+00000A1B]
<--ESI=0066CA1B(這是檢測程式入口的地址
015F:0066CA11 BB460A0000 MOV
EBX,00000A46
015F:0066CA16 03DD
ADD EBX,EBP
<--EBX
015F:0066CA18 FFD3
CALL EBX
<--還要繼續深入
015F:0066CA1A C3
RET
4、在 CALL EBX 處我們繼續按F8鍵進入看看,這樣我們就到了關鍵處
015F:0066CA46 60
PUSHAD
015F:0066CA47 53
PUSH EBX
<--這裡實際上是為了留出空間儲存GDTR的內容
015F:0066CA48 0F014424FE SGDT
FWORD PTR [ESP-02] <--獲取GDTR的內容(6個位元組)
015F:0066CA4D 5B
POP EBX
<--EBX=GDTR的4個位元組的內容,實際上就是GDT的基地址
015F:0066CA4E 33C0
XOR EAX,EAX
<--EAX=0
015F:0066CA50 0F00C0
SLDT AX
<--獲取LDT表的選擇器到 AX 中
015F:0066CA53 24F8
AND AL,F8
<--限定AL大小
015F:0066CA55 03D8
ADD EBX,EAX
<--獲取LDT表在GDT表中的偏移地址
015F:0066CA57 8A6B07
MOV CH,[EBX+07]
<--獲取第8個位元組
015F:0066CA5A 8A4B04
MOV CL,[EBX+04]
<--獲取第5個位元組
015F:0066CA5D C1E110
SHL ECX,10
<--移動到高位
015F:0066CA60 668B4B02 MOV
CX,[EBX+02] <--獲取第3-4兩個位元組,此時ECX組合成為LDT表的基地址
015F:0066CA64 8D7908
LEA EDI,[ECX+08]
<--獲取LDT表第9個位元組偏移地址指標
015F:0066CA67 FC
CLD
015F:0066CA68 8BC6
MOV EAX,ESI
<--EAX=ESI=0066CA1B
015F:0066CA6A 66AB
STOSW
<--儲存兩個位元組,即CA1B到EDI指向的地址
015F:0066CA6C B8280000EC MOV
EAX,EC000028 <--EAX=EC000028
015F:0066CA71 AB
STOSD
<--儲存四個位元組,即EC000028到EDI+2指向的地址
015F:0066CA72 0FA4F010 SHLD
EAX,ESI,10
<--把ESI=0066CA1B進行移位,得到0066
015F:0066CA76 66AB
STOSW
<--儲存兩個位元組,即0066到EDI+6指向的地址
015F:0066CA78 61
POPAD
<--以上這些指令為了形成LDTR,使之指向0066CA1B,為以下的呼叫作準備
015F:0066CA79 9A000000000F00 CALL
000F:00000000 <--該呼叫實際上指向的015F:0066CA1B處
015F:0066CA80 C3
RET
5、我們在 CALL 000F:00000000 處按F8鍵繼續跟蹤分析
015F:0066CA1B 60
PUSHAD
015F:0066CA1C 33C0
XOR EAX,EAX
015F:0066CA1E BF3B0A0000 MOV
EDI,00000A3B
015F:0066CA23 03FD
ADD EDI,EBP
015F:0066CA25 CD20
INT 20 VXDCall Get_DDB
<--判斷DDB
015F:0066CA2B 7502
JNZ 0066CA2F
<--關鍵了!
015F:0066CA2D CD19
INT 19
<--超度
015F:0066CA2F CD20
INT 20 VXDCall Test_Debug_Installed <--判斷是否安裝了除錯環境
015F:0066CA35 7402
JZ 0066CA39
<--關鍵了!
015F:0066CA37 CD19
INT 19
015F:0066CA39 61
POPAD
015F:0066CA3A CB
RETF
【後記】
這種檢測跟蹤的方法比較新鮮(對我來說^_^)。我想這種方法可以檢測除錯環境,比單純的檢測SoftICE跟蹤來得更有意思。
--------------------------------------------------------------------------------
《加密及解密技術交流站》由 ljtt 製作 版權所有
©2000 -2001 All Rights Reserved
轉載本站所有文章請註明出處,尊重作者的勞動也是尊重你自己。讓我們一同撐起綠色的天空!
相關文章
- 對Crunch v1.1加殼程式的手動脫殼及反跟蹤程式碼的一點分析
(15千字)2000-10-02
- Acrobat Reader 5.0的反跟蹤程式碼部分 (5千字)2001-08-14BAT
- 關於StyleXP反跟蹤程式碼的分析以及WinDbg簡單教學
(7千字)2015-11-15
- MFC 程式的跟蹤 (一) (6千字)2001-05-01
- 淺談利用 TEB 實現的反跟蹤 (6千字)2003-02-09
- 利用SEH改變程式流程以達到反跟蹤的目的 (1千字)2001-06-29
- 幻影使用的反跟蹤技術2003-06-21
- 對Crunch v1.1主程式檔案的脫殼方法 ---ljtt2000-11-30
- 反跟蹤技術2021-01-05
- 如何跟蹤ASProtect外殼加密過的程式? (7千字)2001-04-13加密
- jivejdon程式碼跟蹤問題2013-05-30
- vcasm的多程式反跟蹤技術學習心得(菜鳥篇)2004-12-15ASM
- 如何收集Oracle程式中的SQL跟蹤資訊KU2022-03-21OracleSQL
- 二進位制入門--動態跟蹤原始碼和反彙編程式碼2018-03-08原始碼
- 脫Crunch/PE -> BitArts的殼。 (3千字)2002-05-03
- HP下對程式的跟蹤2009-02-27
- 【Longkin】ASP.NET應用程式跟蹤 --- (三) 在程式碼裡訪問跟蹤資訊2008-06-02ASP.NET
- RegHance v1.1破解實錄 (5千字)2001-03-26
- XDos v1.1~Dos的外殼程式 (9千字)2015-11-15
- 國慶節大家好!送個小甜餅給大家 ----- 有關Crunch v1.1加殼程式的ProcDump脫殼Script
(1千字)2000-10-02
- 敏捷專案中的跟蹤矩陣2008-07-01敏捷矩陣
- 程式碼效能分析-Dottrace跟蹤程式碼執行時間2011-12-22
- 一段win commander
5.1的smc破解程式碼 (2千字)2015-11-15
- 有趣的程式碼註釋2019-05-27
- 有趣的程式碼攻防戰2018-08-29
- 用ollydbg跟蹤te!lock加殼的軟體
(2千字)2015-11-15
- JVM中的本機記憶體跟蹤2019-07-06JVM記憶體
- 跟蹤model中屬性(值)的變更2014-11-05
- 關於oracle中session跟蹤的總結2014-11-27OracleSession
- 如何在 Git 中取消檔案的跟蹤2024-08-16Git
- 12個有用的Bug跟蹤應用程式2014-12-15
- 【Longkin】ASP.NET應用程式跟蹤---(一)跟蹤頁面2008-06-02ASP.NET
- PHP 程式碼除錯跟蹤工具 Ytrace2017-12-04PHP除錯
- 用ollydbg跟蹤asproctect1.2加殼的軟體
(1千字)2015-11-15
- 看一段VB6程式檢查時間的典型程式碼 (2千字)2000-12-28
- 5款Java程式設計師必須瞭解的錯誤跟蹤工具2015-02-03Java程式設計師
- 基於行跟蹤的ROWDEPENDENCIES實現資訊變化跟蹤2015-05-04
- SQL 的跟蹤方法trace2007-06-11SQL