Cracking – 3. část
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Cracking – 3. částCracking – 3. část

 

Cracking – 3. část

Google       Google       4. 9. 2006       26 136×

  • Debugger SoftICE
  • Anti-debugové triky
  • Další nástroje používané crackery

Cracking a anticracking jsou dvě techniky, které od sebe nelze odloučit. Schopnosti i nástroje crackerů se zdokonalují, stejně jako se zdokonalují i schopnosti programátorů, kteří chtějí svůj software chránit. Programátor je v tomto boji o krok napřed, protože on určuje jakou ochranu bude jeho program mít. Jenomže dost programátorů svůj krok napřed promarní špatnou ochranou. Ochrana, která je nepřekonatelná, neexistuje, ale ochrana, která crackerovi znepříjemní práci… Všechny ochrany proti debuggerům, kterými se zde budu zabývat budou zaměřeny proti debuggeru Soft-Ice. Nemá cenu se zabývat ochranými prostředky pro jiné debuggery, protože by to bylo jako získat korunu a ztratit milión.

Soft-Ice

Debugger Soft-Ice používá drtivá většina všech crackerů. Svými schopnostmi při nastavování breakpointů, krokování programu, prací s pamětí a celkově prací s debugovaným programem převyšuje všechny ostatní debuggery. Dalo by se říci, že ovládání Soft-Ice je jednoduché a přitom geniální. Soft-Ice se ovládá pomocí příkazů, které se píší do příkazové řádky, kterou obsahuje. Příkazů jsem napočítal přes 170. Ačkoliv je to velké číslo, tak se nemusíte děsit, protože většina příkazů se dá velice jednoduše zapamatovat a velkou část z nich možná ani nevyužijete. Už to je důkazem rozsáhlých schopností Soft-Ice. Tento debugger má jenom jednu vadu na kráse (jestli se to tak dá nazvat) a tou je, že většina ochran v aplikacích je zaměřena na něj. Není ale třeba zoufat, protože existují nástroje jako je Frogs-Ice, který dokáže Soft-Ice skrýt. Většina anti-debugových triků neuspěje, ale ty co jsou úspěšné, musíte před debuggingem odstranit. Proto je dobré společně se Soft-Ice používat některý z méně známých debuggerů. Ideálním je OllyDbg.

O Soft-Ice by se dalo psát hodiny, ale bohužel moje znalosti tohoto debuggeru jsou pouze základní, takže vás odkážu na jednu stránku, kde naleznete popis příkazů a postup při instalaci a konfiguraci Soft-Ice. Mám radši OllyDbg, a tak to asi i zůstane.

Soft-Ice si můžete zakoupit ZDE

Anti-debugové triky

Triků proti debuggerům je velké množství, i když příchod Windows XP znamenal pro anti-debugové triky velké síto. Důvodem je, že ve Windows XP standardně nelze v aplikacích přepínat mezi Ring módy. Kvůli tomu musel být odstraněn ze SafeDiscu trik s debug registrem (viz první část seriálu). Zvěřejním zde několik ochran, které fungují jak ve Windows 9x, tak ve Windows XP.

Detekce Soft-Ice voláním INT 3

Tato metoda detekce je přiliš známá na to, aby mohla crackera překvapit, ale pokud ji šikovně zamaskujete, tak může potrápit.

.586P
.MODEL FLAT, stdcall
;---------------------------------------
; konstanty
MB_OK          EQU     0
MB_ICONERROR   EQU     10h
;---------------------------------------
; externí funkce
EXTERN MessageBoxA@16:NEAR
EXTERN ExitProcess@4:NEAR
EXTERN SetUnhandledExceptionFilter@4:NEAR
;---------------------------------------
; direktivy pro připojení knihoven
INCLUDELIB C:\MASM32\LIB\USER32.LIB
INCLUDELIB C:\MASM32\LIB\KERNEL32.LIB
;---------------------------------------
; segment s daty
_DATA SEGMENT
titulek        DB      "Detekce pomocí přerušení INT 3", 0
zprava1        DB      "Soft-Ice nalezen!", 0
zprava2        DB      "Soft-Ice nebyl nalezen.", 0
oldESP         DD      0
oldEAX         DD      0
_DATA ENDS
;---------------------------------------
; segment s kódem
_TEXT SEGMENT
Start:
;---------------------------------------
; nastaví SEH pro případ chyby
      MOV [oldESP], ESP
      PUSH OFFSET CHYBA
      CALL SetUnhandledExceptionFilter@4
      MOV [oldEAX], EAX
; více o SEHU se dosvíte po tomto příkladu
;---------------------------------------
      MOV EAX, 4
      MOV EBP, 4243484Bh
; pokud zavoláte přerušení INT 3 s těmito hodnotami,
; tak pokud je Soft-Ice aktivní bude v EAX jiná
; hodnota než 4
      INT 3
      PUSH EAX      ; EAX si uložím na zásobník
;----------------------------------------
; nastaví předcházející obsluhu SEH
      PUSH DWORD PTR [oldEAX]
      CALL SetUnhandledExceptionFilter@4
;----------------------------------------
      POP EAX       ; obnovím návratovou hodnotu
      CMP EAX, 4    ; je Soft-Ice aktivní?
      JNZ Aktivni
NoAktivni:
      PUSH MB_OK
      PUSH OFFSET titulek
      PUSH OFFSET zprava2
      PUSH 0
      CALL MessageBoxA@16
      JMP KONEC
Aktivni:
      PUSH MB_ICONERROR
      PUSH OFFSET titulek
      PUSH OFFSET zprava1
      PUSH 0
      CALL MessageBoxA@16
KONEC:
      PUSH 0
      CALL ExitProcess@4
CHYBA:
      MOV ESP, [oldESP]
      PUSH OFFSET NoAktivni
      RET
_TEXT ENDS
END Start

SEH

SEH (Structured Exception Handling) je prevencí před pádem programu. Při různých přerušeních a API funkcích v případě neúspěchu může dojít k pádu programu, ovšem nedojde k němu, pokud je nastaven SEH. Je velice dobré ho používat zvlášť v operačním systému tak „stabilním“ jako je Windows. Pokud nastane v aplikaci chyba, tak program skočí na návěstí CHYBA, které jsem určil před voláním API funkce SetUnhandledExceptionFilter. SEH není jedinou možností prevence před pádem programu, ale rozhodně je nejjednodušší na použití. Aplikaci SEHu můžete vidět na příkladu detekce Soft-Ice pomocí přerušení INT 3h.

Detekce Soft-Ice pomocí otevření jeho ovladačů, voláním API funkce CreateFileA (SICE, NTICE)

Toto je nejčastěji používaná detekce Soft-Ice. Dají se s její pomocí zjistit i jiné aktivní VxD knihovny a Sys ovladače. Celým vtipem této detekční rutiny je pokusit se otevřít VxD ovladač Soft-Ice. Pokud se nám povede ho otevřít, tak je Soft-Ice aktivní.

.586P
.MODEL FLAT, stdcall 
;------------------------------------------
; konstanty 
FILE_FLAG_WRITE_THROUGH		EQU  	80000000h
FILE_SHARE_READ			EQU	1h 
OPEN_EXISTING			EQU	3h 
FILE_ATTRIBUTE_NORMAL		EQU	80h 
MB_OK				EQU	0 
;------------------------------------------
; externí funkce 
EXTERN CreateFileA@28:NEAR 
EXTERN SetUnhandledExceptionFilter@4:NEAR 
EXTERN MessageBoxA@16:NEAR 
EXTERN ExitProcess@4:NEAR 
;-------------------------------------------
; direktivy pro připojení knihoven 
INCLUDELIB C:\MASM32\LIB\USER32.LIB 
INCLUDELIB C:\MASM32\LIB\KERNEL32.LIB 
;-------------------------------------------
; segment s daty 
_DATA SEGMENT 
TITULEK		DB	"Detekce pomocí CreateFileA", 0
ZPRAVA1		DB	"Soft-Ice nalezen", 0
ZPRAVA2		DB	"Soft-Ice nebyl nalezen", 0
oldESP		DD	0
oldEAX		DD	0 
SOFTICEXP	DB	"\\.\NTICE", 0
; jméno ovladače Soft-Ice pro Windows NT/2k/XP
; pokud byste chtěli provést test ve Windows 98 
; je název ovladače SICE. Zde uvede pouze pro 
; Windows XP, ale mohli byste udělat test obou 
_DATA ENDS 
;-------------------------------------------
; segment s kódem 
_TEXT SEGMENT
START: 
;-------------------------------------------
; nastaví SEH pro případ chyby 
	MOV [oldESP], ESP 
	PUSH OFFSET CHYBA 
	CALL SetUnhandledExceptionFilter@4
	MOV [oldEAX], EAX 
;-------------------------------------------
	PUSH 0
	PUSH FILE_ATTRIBUTE_NORMAL
	PUSH OPEN_EXISTING
	PUSH 0
	PUSH FILE_SHARE_READ 
	PUSH FILE_FLAG_WRITE_THROUGH
	PUSH OFFSET SOFTICEXP
	CALL CreateFileA@28
	PUSH EAX	; uložím si návratovou hodnotu
;--------------------------------------------
; nastaví předcházející hodnotu SEH
	PUSH DWORD PTR [oldEAX]
	CALL SetUnhandledExceptionFilter@4
;--------------------------------------------
	POP EAX 
	CMP EAX, -1	; pokud funkce neuspěla EAX = -1
	JNZ Aktivni 
NoAktivni: 
	PUSH MB_OK
	PUSH OFFSET TITULEK	
	PUSH OFFSET ZPRAVA2
	PUSH 0
	CALL MessageBoxA@16
	JMP KONEC 
Aktivni: 
	PUSH MB_OK 
	PUSH OFFSET TITULEK 
	PUSH OFFSET ZPRAVA1 	
	PUSH 0
	CALL MessageBoxA@16
KONEC: 
	PUSH 0
	CALL ExitProcess@4
CHYBA: 
	MOV ESP, [oldESP]
	JMP NoAktivni
_TEXT ENDS 
END START

Detekce Soft-Ice pomocí otevření jeho ovladače voláním API funkce _lcreat

API funkce _lcreat se už téměř nepoužívá a je ve Windows kvůli kompatibilitě se staršími 16 bitovými programy. Přesto je lepší než CreateFileA, protože je méně nápadná. Budu se snažit otevřít ovladač SIWVIDSTART (pro Windows 9x je to SIWVID).

.586P
.MODEL FLAT, stdcall 
;-------------------------------------
; konstanty 
MB_OK			EQU	0 
;-------------------------------------
; externí funkce 
EXTERN SetUnhandledExceptionFilter@4:NEAR 
EXTERN _lcreat@8:NEAR 
EXTERN MessageBoxA@16:NEAR 
EXTERN ExitProcess@4:NEAR 
;-------------------------------------
; direktivy pro připojení knihoven 
INCLUDELIB C:\MASM32\LIB\USER32.LIB
INCLUDELIB C:\MASM32\LIB\KERNEL32.LIB 
;-------------------------------------
; segment s daty 
_DATA SEGMENT 
TITULEK		DB	"Detekce pomocí _lcreat", 0 
ZPRAVA1		DB	"Soft-Ice nalezen!", 0
ZPRAVA2		DB	"Soft-Ice nebyl nalezen!", 0 
oldESP		DD	0
oldEAX		DD	0
OVLADACxp	DB	"\\.\SIWVIDSTART", 0
_DATA ENDS 
;--------------------------------------
; segment s kódem 
_TEXT SEGMENT 
START: 
;--------------------------------------
; nastaví SEH pro případ chyby 
	MOV [oldESP], ESP 
	PUSH OFFSET CHYBA 
	CALL SetUnhandledExceptionFilter@4
	MOV [oldEAX], EAX 
;--------------------------------------
; teď se pokusím otevřít ten ovladač
	PUSH 0
	PUSH OFFSET OVLADACxp
	CALL _lcreat@8
	PUSH EAX 
;--------------------------------------
; nastaví přecházející obsluhu SEH 
	PUSH DWORD PTR [oldEAX]
	CALL SetUnhandledExceptionFilter@4 
;--------------------------------------
	POP EAX 
	CMP EAX, -1
	JNZ Aktivni 
NoAktivni: 
	PUSH MB_OK 
	PUSH OFFSET TITULEK 
	PUSH OFFSET ZPRAVA2 
	PUSH 0
	CALL MessageBoxA@16
	JMP KONEC 
Aktivni: 
	PUSH MB_OK 
	PUSH OFFSET TITULEK 
	PUSH OFFSET ZPRAVA1
	PUSH 0
	CALL MessageBoxA@16
KONEC: 
	PUSH 0
	CALL ExitProcess@4
CHYBA: 
	MOV [oldESP], ESP	
	JMP NoAktivni 
_TEXT ENDS 
END START

Další možnosti detekce Soft-Ice

Detekovat Soft-Ice v počítači je jedna věc, ale druhou věcí je, jestli je Soft-Ice aktivní. Už jsem měl tu čest s programem, který když viděl nainstalovaný „deaktivovaný“ Soft-Ice, tak se odmítal spustit. Zjistit jestli je Soft-Ice nainstalovaný se dá i pomocí registrů Windows. Konkrétně se jedná o tyto klíče:

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\SoftICE
HKEY_LOCAL_MACHINE\Software\NuMega\SoftICE

Touto cestou se dá také zjistit, kde je Soft-Ice nainstalován.

Tyto možnosti detekce jsou nejčastěji používané, a tak je dobré o nich vědět. Detekcí samozřejmě existuje mnohem víc a je jen na vás jestli svoje znalosti budete rozvíjet.

Detekce user debugeru pomocí API funkce IsDebuggerPresent

Přestože jsem říkal, že se ochrannými prostředky pro jiné debuggery než je Soft-Ice zabývat nebudu, tak jednu metodu zde uveřejním. Tento trik nedokáže detekovat OllyDbg ani SoftICE, ale poradí si třeba s debuggerem, který obsahuje Win32Dasm.

.586P
.MODEL FLAT, stdcall 
;---------------------------------------
; externí funkce 
EXTERN MessageBoxA@16:NEAR 
EXTERN ExitProcess@4:NEAR 
EXTERN IsDebuggerPresent@0:NEAR 
;---------------------------------------
; direktivy pro připojení knihoven 
INCLUDELIB C:\MASM32\LIB\USER32.LIB 
INCLUDELIB C:\MASM32\LIB\KERNEL32.LIB 
;---------------------------------------
; segment s daty 
_DATA SEGMENT 
TITULEK 	DB	"Detekce user debugeru", 0
ZPRAVA1		DB	"Debuger nalezen!", 0
ZPRAVA2		DB	"Debuger nebyl nalezen.", 0
_DATA ENDS 
;--------------------------------------
; segment s kódem 
_TEXT SEGMENT 
START:
; v tomto příkladu nemusím použít SEH, poněvadž 
; testuji přítomnost debuggeru nástrojem, který 
; je pro to určen, takže by bylo smutné, kdyby 
; způsobil chybu 
	CALL IsDebuggerPresent@0
	OR EAX, EAX 	; je EAX = 0?
	JNZ Aktivni
NoAktivni: 
	PUSH 0		; MB_OK 
	PUSH OFFSET TITULEK 
	PUSH OFFSET ZPRAVA2
	PUSH 0
	CALL MessageBoxA@16
	JMP KONEC 
Aktivni: 
	PUSH 0
	PUSH OFFSET TITULEK 
	PUSH OFFSET ZPRAVA1
	PUSH 0
	CALL MessageBoxA@16
KONEC: 
	PUSH 0
	CALL ExitProcess@4
_TEXT ENDS
END START

Pozn.: Jako kompilátor pro všechny uvedené příklady byl použity MASM32 v8 (Stáhněte zde).

Další programy používané crackery

RegistryMonitor

Tento program monitoruje přístupy programů do registrů Windows. Zobrazení přístupů do registru můžete filtrovat.
Stáhnout

FileMonitor

Uživatelské rozhraní tohoto programu je stejné jako RegistryMonitor s tím rozdílem, že FileMonitor zaznamenává pokusy o otevření aplikací.
Stáhnout

Resource Hacker

Pomocí tohoto šikovného prográmku si můžete prohlížet i modifikovat dialogy programu, ikony, kurzory, bitmapy…
Stáhnout

Tyto prográmky mohou být velice užitečné, ale dá se bez nich obejít. Až budeme probírat PE souborový formát, tak si představíme další programy, ale zatím se do nich nebudu pouštět.

V boji cracker vs. programátor má druhý jmenovaný krok napřed, takže doufám, že jsem vás naučil, jak svůj krok nepromarnit. Pokud máte jiný záměr než chránit svůj software, tak doufám, že jsem vás naučil, jak s programátorem srovnat krok.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

3 názory  —  3 nové  
Hlasování bylo ukončeno    
0 hlasů
Google
Autor se zabývá webovými programovacími jazyky a Assemblerem. Rád pracuje v Příkazovém řádku a experimentuje s operačními systémy.
Web    

Nové články

Obrázek ke článku Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý