Vous êtes sur la page 1sur 6

Bilgi Birikim Serisi (5)

Anti-Debug, Anti-Trace ve Anti Sourcer Metodlar


Bilindii gibi yazlan programlar debug programlar ile ileyileri incelenip farkl ilere zorlanabilirler.
Dier taraftan sourcer tr programlar araclyla yazlan programlarn kaynak kodlar kartlabilir.
Burada bu trl ilemlerin nasl engellenecei anlatlmaktadr.
Anti-Debugging metodlar iki katagoride incelenebilir:

1. Koruma Amal;
2. Kendi Kendini Deitiren Kodlar.
Bu tr koruma metodlar bugnlerde en fazla virslerde kullanlmaktadr. Bu tr trikler virsn yapt
iin zlmesini engeller bylece virsn nasl bulat ve orjinal kodu zlemez. Ayrca kaynak kodu
da kartlamaz. Bu tr rneklere ait kaynak kodlar dkmann sonuna doru verilmitir.
Bu tr triklerin en fazla kullanm alan bulduu baka bir alan ise kopyalamaya kar koruma
programlardr. Bu tr programlar ieride nasl kontrol yaptklar tespit edilemesin diye Anti-Debug,
Anti-Trace ve Anti-Source metodlaryla korunmaktadrlar. Dolays ile krlmalar olduka
glemektedir.
1. Koruma Amal:Koruma amal metodlar kullancnn kodu debug etmesi veya kaynak kodunu
kartmasn engelemek iin kullanlr. Bu tr metodlar normal alma esnasnda dzgn almasna
ramen Debug yaplrken sistemi sakatlamakta veya Debug programn gertmektedirler.
1.1. Interrupt'larn devre d braklmas:Interrupt'larn devre d braklmas en ok kullanlan
metodlardan biridir. Deiik metodlar vardr.
1.1.1. Donanm kontrol ile interrupt'n devre d braklmas: Port 21h zerinden kontrol
edilen 8259 Interrupt kontrolcsne komut gndererek IRQ hatlarnn devre d braklmas esasna
dayanr. Port 21h adresindeki her bit bir IRQ hattn kontrol eder. Bit 0 IRQ 0', Bit 1 IRQ 1'i eklinde.
Buradan 0-7 aras IRQ'lar kontrol edilebilir. Bu arada IRQ 1 klavye kontrolcsnden gelen sinyali tar.
Klavyeden her tua baslta IRQ1 arlr. Bu IRQ'nun karl olan INTERRUPT CPU tarafndan
arlarak baslan tula ilgili bilginin klavyenin belleinden alnmas salanr. Bylece her tua
bastnzda bilgi umaz. Bellee alnr. Eer Debug ilemi esnasnda bir sonraki komuta ge komutu
verilemezse program debug edilemez. Basite klavyeyi kilitleyerek kullancnn bir sonraki tua basmas
engellenir. Bylece program korunmu olur.
rnek:
Adres Hex Instruction
CS:0100
E4 21 IN AL,21
CS:0102
0C 02 OR AL,02
CS:0104
E6 21 OUT 21,AL
Dier taraftan, Klavyeye ait PPI (Programmable Peripheral Interface)'n bulunduu Port 61h'a komut
gnderilerekte klavye kilitlenebilir.
rnek: Adres
Hex Instruction
CS:0100
E4 61 IN AL,61
CS:0102
0C 80 OR AL,80
CS:0104
E6 61 OUT 61,AL
1.1.2. Yazlmla Interrupt'n devre d braklmas:Bu biraz daha kolay bir anti-debugging
metodu'dur. Tm yapmanz gereken Debugger'lar tarafndan kullanlabileceini dndnz interrupt
vektrlerini farkl adreslere yneltmek veya boaltmak. Bir baka metod ise hatalar kontrol eden
interrupt vektrlerini kendi zerinize alarak stnze aldnz hata konrolcsnn hatasn devreye
sokmak. Unutmamanz gereken ilem bittikten sonra eski vektrleri yerine getirmenizdir. Interrupt
vektrn Int 21h'n 25h fonksiyonunu kullanmak yerine kendinizin deitirmesi.nki Int 21h'
ardnzda debugger bunu anlayp kendisini zincire ekleyerek sizi kandrabilir. Bu sebeble gidip
kendiniz deitirmeniz nerilir. Aadaki rnek interrupt 03h - Breakpoint interrupt'nn ele geirilmesi
gsterilmektedir.

rnek: Adres
Hex Instruction
CS:0100
EB 04 JMP 0106
CS:0102
00 00 ADD [BX+SI],AL
CS:0104
00 00 ADD [BX+SI],AL
CS:0106
31 C0 XOR AX,AX
CS:0108
8E C0 MOV ES,AX
CS:010A
26 8B 1E 0C 00
MOV BX,ES:[000C]
CS:010F
89 1E 02 01 MOV [0102],BX
CS:0113
26 8B 1E 0E 00
MOV BX,ES:[000E]
CS:0118
89 1E 04 01 MOV [0104],BX
CS:011C
26 C7 06 4C 00 00 00
MOV Word Ptr ES:[000C],0000
CS:0123
26 C7 06 4E 00 00 00
MOV Word Ptr ES:[000E],0000
1.1.3. Vektr Ayarlamalar:Bu metod interrupt vektrleri zerinde oynayarak, bu vektrlere ak
ynlendirmeye dayanr. Bu tr bir ilem kodzc kodda da kullanlmaktadr. (Bkz. 2.1) Bu metodda
bilgiler interrupt vektrlerinin iaret ettii yerde tutulur. Elbetteki normal alma esnasnda 01h, 03h
kullanlmaz. Tabi debug etmeyi dnmyorsanz. Bu metod gayet gzel almaktadr.
rnek: Adres
Hex Instruction
CS:0100
31 C0 XOR AX,AX
CS:0102
8E D0 MOV SS,AX
CS:0104
BC 0E 00
MOV SP,000E
CS:0107
2E 8B 0E 34 12
MOV CX,CS:[1234]
CS:010C
50
PUSH AX
CS:010D
31 C8 XOR AX,CX
CS:010F
21 C5 AND BP,AX
CS:0111
58
POP AX
CS:0112
E2 F8 LOOP 010C
1.1.4. Interrupt Yerdeitirme:Bu biraz atlaka bir trik. Ve sadece programnzn artk daha fazla
debug istemediini dnyorsanz kullann. Interrupt 16h ve 21h'n vektrlerini 01h ve 03h'a
kopyalamakla ne yaplabilir. Normal bir almada byle bir ey yaplmaz. Eer kullanc program
debug etmek isterse programn iinde geen INT 01 komutlar normal bir INT komutuna dndrmek
zorundadr. Bu trik ok etkili olabilir. nki herhangi bir ekilde CD01(INT 01)'i CD16 (INT 16)'ya
deitirmek kolaydr. Ancak Int 03'iin zel komut olan 0CCh tek byte'tr. ve iki byte'lk bir komutla
deitirilemez.
rnek:
Adres Hex Instruction
CS:0100
FA
CLI
CS:0101
31 C0 XOR AX,AX
CS:0103
8E C0 MOV ES,AX
CS:0105
26 A1 84 00 MOV AX,ES:[0084]
CS:0109
26 A3 04 00 MOV ES:[0004],AX
CS:010D
26 A1 86 00 MOV AX,ES:[0086]
CS:0111
26 A3 06 00 MOV ES:[0006],AX
CS:0115
B4 4C MOV AH,4C
CS:0117
CD 01 INT 01
1.2. Zaman Kontrol:Nispeten daha az kullanlan bir metoddur. Ancak programn almas
esnasnda tm interrupt'lar devre d brakan debuggerlar (rnek: Borland Turbo Debugger) devre d
brakmak iin gayet kullanl bir metoddur. Bu metod basite saati kontrol eder ve deiene kadar ksr
dngde bekler. Bu deer interrupt 08h tarafndan deitirilir. Dier bir rnek eer Port 21h'dan okunan
deer (IN) 01h ile OR'lanr ve tekrar Port 21h'a yazlsa bile (IRQ 0' devreye sokar) Eer hala devreye
girmemi ise o zaman debugger aktiftir. unu dikkate almak gerekiyor. Bu metod RUN yaplyorsa
etkindir. Eer TRACE veya STEP by STEP altrlsa almaz.

rnek:
CS:0100
CS:0102
CS:0103
CS:0105
CS:0109
CS:010C
CS:010E

Adres Hex Instruction


2B C0 SUB AX,AX
FB
STI
8E D8 MOV DS,AX
8A 26 6C 04 MOV AH,[046C]
A0 6C 04
MOV AL,[046C]
3A C4 CMP AL,AH
74 F9 JZ 0109
1.3. Debugger' yanltmak: Bu metod gayet gzel bir tekniktir. Turbo Debugger ve benzeri
debugger'lar iin kullanlr. Bu ilem bir komutun ortasna atlayarak yaplr. Aslnda bir sonraki komut
aptal bir komuttur. ve ierisinde baka bir komutu ierir. Siz aptal komutu atlayp gerek komuta
atladnzda debugger' yanltm olursunuz. Ancak normal step debugger kullanyorsanz (rnek
Debug veya SymDeb) bu ie yaramayacaktr. nki komutlarnz komut komut altrldndan jump
ettii noktada sizi bekleyecektir.
rnek:Adres Hex Instruction
CS:0100
E4 21 IN AL,21
CS:0102
B0 FF MOV AL,FF
CS:0104
EB 02 JMP 0108
CS:0106
C6 06 E6 21 00
MOV Byte Ptr [21E6],00
CS:010B
CD 20 INT 20
una dikkat edin :Adres
Hex Instruction
CS:0108
E6 21 OUT 21,AL
Dikkat:Bu trik herhangi bir debugger'n almasn etkilemez. Bu sadece kullancnn baka bir
komutun altrldn dnrken baka bir komut altrlr.
1.4. Check CPU Flags: This is a nice trick, effective against almost any real mode debugger. What
you should do is simply set the trace flag off somewhere in your program, and check for it later. If it was
turned on, a debugger runs in the background...
rnek:Adres Hex Instruction
CS:0100
9C
PUSHF
CS:0101
58
POP AX
CS:0102
25 FF FE
AND AX,FEFF
CS:0105
50
PUSH AX
CS:0106
9D
POPF
Programn ortasnda :Adres Hex Instruction
CS:1523
9C
PUSHF
CS:1524
58
POP AX
CS:1525
25 00 01
AND AX,0100
CS:1528
74 02 JZ 152C
CS:152A
CD 20 INT 20
1.5. Debugger'n almasn kesme:Bu teknik debugger RUN modunda iken almasn keser.
Yapacanz ey programn ierisinde rastgele yerlere INT 3 komutu yerletirmek. RUN modunda
olduunuz halde program hep bir yerlerde kesilir ve siz srekli RUN demek durumunda kalrsnz. Bu
ise olduka skc bir durum. Eer debugger dnda iseniz bu bir rpda geecektir.
rnek:Adres Hex Instruction
CS:0100
B9 64 02
MOV CX,0264
CS:0103
BE 10 01
MOV SI,0110
CS:0106
AC
LODSB
CS:0107
CC
INT 3
CS:0108
98
CBW
CS:0109
01 C3 ADD BX,AX
CS:010B
E2 F9 LOOP 0106

1.6. Bilgisayar Stack kullanarak kertmek:Bu trik debugger'larn kendi stack'larn


kullanmak yerine kullanc programnn stack'n kullanmas esasna dayanr. Eer debug alyorsa
stack deiecektir. Stack kod alann gsterdiinden komutlar iletilirken aradaki stack blgesindeki
abuk sabuk komutlar sistemi kertir. Bylece debug yaplrken sistem ker. Eer debug almyorsa
bu alanlar deimeyeceinden program normal alr ve bu alan geer.
nemli not: Bu kodu altrrken CLI yapp i bittikten sonra STI yapmay unutmayn. Eer bu komut
aralnda herhangi bir interrupt arlrsa bu alan deieceinden bilgisayar olmadk bir yerde ker.
rnek:Adres Hex Instruction
CS:0100
8C D0 MOV AX,SS
CS:0102
89 E3 MOV BX,SP
CS:0104
0E
PUSH CS
CS:0105
17
POP SS
CS:0106
BC 0B 01
MOV SP,010B
CS:0109
90
NOP
CS:010A
90
NOP
CS:010B
EB 02 JMP 010F
CS:010D
90
NOP
CS:010E
90
NOP
CS:010F
89 DC MOV SP,BX
CS:0111
8E D0 MOV SS,AX
1.7. TD386'y V8086 modundayken kertmek:Bu Turbo Debugger'n V8086 modul
(TD386)'n kertmek iin gzel bir metoddur. Temeli sfra blme ilemidir. Sfra blme ilemi sistemi
kertip programn kesilmesine neden olur. Halbuki sfra blme ilemi INT 00h' arr. Eer siz INT
00h vektrn bir sonraki komuta getirirseniz bylece sistem aklmadan yoluna devam eder. Halbuki
Turbo Debugger bunu farkettii anda program keser. Normal alrken ise sorun kmaz.
nemli not: Eski INT 00h vektrn kaydetmeniz gerekiyor. iniz bittiinde bu vektrn dzeltin.
Eer bunu yapmazsanz sistem bir sonraki INT 00h arsnda kecektir.
rnek:Adres Hex Instruction
CS:0100
31 C0 XOR AX,AX
CS:0102
8E D8 MOV DS,AX
CS:0104
C7 06 00 00 12 01 MOV WORD PTR [0000],0112
CS:010A
8C 0E 02 00 MOV [0002],CS
CS:010E
B4 00 MOV AH,00
CS:0110
F6 F4 DIV AH
CS:0112
B8 00 4C
MOV AX,4C00
CS:0115
CD 21 INT 21
1.8. Herhangi bir V8086 Prosesini kertme:TD386'y gertme metodlarndan biri Hatal
Komut iletmektir. Ne yazkki, V8086 ortamnda alan baka bir program tarafndan iletilen bir hatal
komut ta sizin sisteminizi etkileyebilir. Metod sfra blme metodu ile ayndr. Ancak bu metodda
interrupt 0Dh (13) kullanlr. letilen hatal bir komut programda bir sonraki satrdan devam etmenizi
salar. Ancak Debugger zerinden altryorsanz iletilen komutla debugger duracak ve program
kesecektir. Bylece debug yaplmas engellenmi olur.nemli not: Orjinal interrupt vektrlerini eski
deerlerine dndrmezseniz herhangi bir sakatlk durumunda sistemin aklmasna neden olur.
rnek:Adres Hex Instruction
CS:0100
31 C0 XOR AX,AX
CS:0102
8E D8 MOV DS,AX
CS:0104
C7 06 34 00 13 01 MOV WORD PTR [0034],0113
CS:010A
8C 0E 36 00 MOV [0036],CS

CS:010E
CS:0113
CS:0116

83 3E FF FF 00
CMP WORD PTR [FFFF],+00
B8 00 4C
MOV AX,4C00
CD 21 INT 21

2. Kendi Kendini Deitiren Kodlar:


2.1. ifreleme / zme algoritmalar :lk katagori basit bir kod, bu kod ifrelidir ve basit bir
zme rutini eklenmitir. Bu arada eer debugger bir breakpoint koymusa buda arada kaynayacandan
farkl bir komuta dnecektir. Dolaysyla sistemin aklmasna neden olur. Bylece debugging ilemi
kesilir. Aadaki rnek Haifa virsnden alnmtr. Eer siz CS:0110 adresine breakpoint koyacak
olursanz, asla bu adrese ulaamazsnz. Sebebi ilemin sonucunda ne olaca kimse tarafndan
bilinemez.Dolaysyla ne kod iletilecei bilinemez.
Not: eer trace ilemi iin ok fazla uramak istemiyorsanz. zme ilemini kodun sonundan itibaren
balatn. Bylece enazndan ok fazla uramadan debug ilemini gerekletirebilirsiniz.
rnek:Adres Hex Instruction
CS:0100
BB 71 09
MOV BX,0971
CS:0103
BE 10 01
MOV DI,0110
CS:0106
91
XCHG AX,CX
CS:0107
91
XCHG AX,CX
CS:0108
2E 80 35 97 XOR Byte Ptr CS:[DI],97
CS:010C
47
INC DI
CS:010D
4B
DEC BX
CS:010E
75 F6 JNZ 0106
CS:0110
07
POP ES
CS:0111
07
POP ES

2.2. Kendini-Deitiren Kodlar


2.2.1. Basit Kendini Deitirme:Bu metod basit bir ifreleme metodlarna dayanr. Bir komutu
iletmeden evvel deitirmeye dayanr. Aadaki rnekte Call ilemi yapldktan sonra Call'dan sonra
gelen komut deitirilir. Eer 'P'/Debug veya F8/Turbo Debugger ile iletirseniz programn bir anda
sonlandn greceksiniz. Trace yaparsanz CD 20 olan bir sonraki komut trace ilemi esnasnda CC
20'ye dnecektir. CC Int 03h' ardndan debugger kontrol ele alabilir. Oysa buras CALL
yapldktan sonra rutinin ierisinde baka bir kod ile deitirilir.
rnek:Adres Hex Instruction
CS:0100
E8 04 00
CALL 0107
CS:0103
CD 20 INT 20
CS:0105
CD 21 INT 21
CS:0107
C7 06 03 01 B4 4C MOV Word Ptr [0103],4CB4
CS:010D
C3
RET
Dikkat:
Adres Hex Instruction
CS:0103
B4 4C MOV AH,4C
2.2.2. The Running Line (Kendi kendini ifreleme):Bu rnek Kendi kendini kontrol eden ve
kendi kendini deitiren bir koddur. Bazen "The Running Line" ismiyle anlur. Bu Serge Pachkovsky
tarafndan kodlanmtr.Basit trik noktalar olan bir gsterimdir. Ancak burada bahsedilen dier
tekniklerden farkl olarak, Bu greceli olarak vektr tablosundaki korumalar engeller. Bu son derece
basitletirilmi bir rnektir.
XOR AX, AX
MOV ES, AX
MOV WORD PTR ES:[4*1+0],OFFSET TRACER
MOV WORD PTR ES:[4*1+2],CS
MOV BP, SP

PUSHF
XOR BYTE PTR [BP-1], 1
POPF
MOV AX, 4C00H ; This will not be traced!
DB 3 DUP ( 98H )
DB C5H, 21H
TRACER:
PUSH BP
MOV BP, SP
MOV BP, WORD PTR [BP+2]
XOR BYTE PTR CS:[BP-1], 8
XOR BYTE PTR CS:[BP+0], 8
POP BP
IRET

2.2.3. Prefetch Instruction Queue (PIQ) Ayarlamalar:Bu metod herhangi bir debugger'
atlatabilir. veya herhangi bir bir seferde bir ilem yapan debugger'lar atlatabilir.PIQ CPU zerinde
bulunur. Komutlar iletmeden evvel bellee ekilir. Bylece iletmek iin tekrar ar yaplmaz. Zaten
CPU ierisinde mevcuttur. Eski CPU'larda bu 6 veya 4'tr. Yenilerde ise 25 kadardr. ilem basite u
ekilde tanmlanabilir. Bir ekilde PIQ ile Bellekteki bilgi farkllatrlr. Kod bu ekilde yazlr. Eer
debugger ierisinde ise adm adm program altrldndan PIQ her defasnda temizlenir. Dolaysyla
her zaman gncel kalr. Oysa normal alma esnasnda orjinal kalan ve deimeyen PIQ'dan dolay eski
kod ileme sokulur. Ve program bir sonraki satr iler geer. Oysa farkllamann olmadnda program
dner durur.
rnek:Adres Hex Instruction
CS:0100
B9 75 02
MOV CX,0275
CS:0103
BE 90 01
MOV SI,0190
CS:0106
89 F7 MOV DI,SI
CS:0108
AC
LODSB
CS:0109
C7 06 0F 01 24 06 MOV Word Ptr [010F],0624
CS:010F
34 73 XOR AL,73
CS:0111
AA
STOSB
CS:0112
C7 06 0F 01 24 06 MOV Word Ptr [010F],0624
CS:0118
E2 EE LOOP 0108
una Dikkat edin.
Adres Hex Instruction
CS:010F
24 06 AND AL,06
==========================================================================
=====
Aklamalar:
Program rneklerinde CLI/STI ifti kullanlmamtr. Interrupt kontrol veya zerine alma durumlarnda
bu komutlarn bata ve sonra yer almas gereklidir. Bunun sebebi eer siz interrupt vektrn
deitirirken interrupt arlrsa sistem kecektir.
Bu dkmann orjinali ingilizce olup. Adresi http://www.neutralzone.org/home/faqsys/docs/anti-d.txt
'dir. Trkeye Nurettin Arslankaya tarafndan evrilmitir.
Bu mesaj Facia tarafndan gnderilmitir.
narslankaya@writeme.com
http://members.tripod.com/~narslankaya
ICQ: 1670212

Vous aimerez peut-être aussi