|
Les Anti Soft-Ice |
||||
|
By PuLsar |
Suite au petit essai sur softice que j'avais écrit; j'ai pensé que certains d'entres vous pourrez être interressés par la méthode qui etait utilisée pour passer en ring0 dans mes routines S_DRx et S_DRxP; bien que ma routine RingZero soit assez transparente pour l'utilisateur :)
|
On va commencer par parler un peu de l'IDT. Lowword de la routine de l'int (n+1)___________
| ____________ high word de la routine (n+1)
_|__ __|_
XXXXXXXX XXXXXXXX XXXXXXXX XXXXXXXX
---- ----
Lowword de la routine___| |_____high word
qui gere l'int n
En sachant que la premiere int est l'int0, on en deduit que les bytes concernants
l'interrupt 03h sont les suivants: RingZero proc Fct_Address:DWORD
sidt fword ptr IDT ;on obtient l'IDT
mov ebx, dword ptr [IDT+2] ;ebx=IDT base
add ebx, 8*ExceptionUsed ;ebx=selector pour l'int recherchee
cli ;clear interupts
;On sauvegarde l'ancienne routine
mov dx, word ptr [ebx+6] ;le highword
shl edx, 16d
mov dx, word ptr [ebx] ;le lowword
mov [OldGate], edx
mov eax, Fct_Address ;on installe notre routine
mov word ptr [ebx], ax ;le lowword
shr eax, 16d
mov word ptr [ebx+6], ax ;le highword
int ExceptionUsed ;on passe en ring 0 :)))
mov ebx, dword ptr [IDT+2] ;on restore la vielle routine
add ebx, 8*ExceptionUsed
mov edx, [OldGate]
mov word ptr [ebx], dx
shr edx, 16d
mov word ptr [ebx+6], dx
ret
RingZero ENDP
On a donc une fonction parfaitement operationnelle prenant comme parametre
d'entrée l'offset de la routine que nous voulons utiliser en ring0. Ring0Proc: mov eax,dr7 ;par exemple :) iretd ;ne pas oublier le iretd tres important sinon vous allez tout planter :) |
Greetz to:
Christal,Alsindor,Frog's Print,Spath,Acid_Burn,Stone,G-ROM,Elraizer,DXP,Fravia,ShroOm
Iczelion,ArseniK,Lucifer48,DXP,Nody,TeeJi,TaiefOon...and the others i've forgotten :)
Vous pouvez me joindre si vous avez des questions (ou si vous avez des sources asm a faire partager :))
pulsar_c@geocities.com UIN:13411849
Pulsar Decembre 1999