efenim oldskool copy protection rutinleri ile ilgili konu$alim diyorum netekim bazıları platform yüzünden obsolote olsada bu tarz şeyler yaklaşım açısından oldukça vizyon açıcı olaylardır diye düşünmekteyim.
hep beraber birkac tanesini yazalim
disasembler $a$irtmaca (bogus instruction)instructionlar arasinda bogus data basip onlarin uzerinden atlamak suretiyle yapilir , disasembler in instruction u yanli$ dekode etmesiyle sonuclanir.
normal kod:
mov ah,09h
mov dx,120h
int 21
ret
modifiye kod:
mov ah,09h
db 0ebh,02 ; jmp +2
db 0f0h,0a0h
mov dx,105h
db 0ebh,02 ; jmp +2
db 0f0h,?
int 21
ret
disasembler sonucu :
-u 100
16A9:0100 B409 MOV AH,09
16A9:0102 EB02 JMP 0106
16A9:0104 F0 LOCK
16A9:0105 00BA0501 ADD [BP+SI+0105],BH
16A9:0109 EB02 JMP 010D
16A9:010B F0 LOCK
16A9:010C A0CD21 MOV AL,[21CD]
16A9:010F C3 RET
int u 3 (debuggerin hook ettigi breakpoint interruptu) kullanarak runtime kod dekode etme normal ko$ullarda int 3 debugger tarafindan hook edilir . ancak biz bu interrupt i decoder rutini olarak kullanirsak o interrupt debug amacli hook edildiginde kod cali$maz hale gelir.
ornek (bogus instruction kombosuyla)
db 0ebh,02h
db 0f0h,0a0h?
int 3
db 0c8h,0bh ; xor ax,ax
disasembler sonucu :
16A9:0100 EB02 JMP 0104
16A9:0102 F0 LOCK
16A9:0103 A0CCC8 MOV AL,[C8CC]
16A9:0106 0B05 OR AX,[DI]
**basit bir int 3 handler i
Int_3_Handler:
db 0ebh,02h
db 0fh,0FFh
push ax
push bx
push dx
add sp,6
pop bx
pop ax
push ax
push bx
sub sp,6
push ds
mov ds,ax
db 0ebh,02h
db 0fh,0FFh
mov dx,word ptr ds:[bx+2]
xor [bx],dx
POP DS
pop dx
pop bx
pop ax
iret