Académique Documents
Professionnel Documents
Culture Documents
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
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
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