URing.DLL v1.00 - Dynamic Link Library contenant les principales procédures utilisées pour passer en Ring0, Hooker des interruptions, poser des BreakPoints et convertir des nombres.

Index

    Ring0
    Ring0Ret
    HookInt
    PageAllocate
    PageFree
    MovIntSys
    SetBPM
    SetBPX
    DWord2Str
    Str2DWord




La procédure Ring0 passe le programme en Ring0 en modifiant les registres CS et SS (CS:030h SS:028h) et redonne la main au programme à l'adresse passée en paramètre.

Ring0(
    DWORD Addresse
);

Paramètre

  Addresse

    Addresse de retour de la procédure. La modification des registres se faisant à l'aide de l'ExceptionHandler, les premières instructions se trouvant en CS:Addresse devront donc restaurer le SEH ( MACRO RemoveSEH )

Remarques

  Pour repasser en Ring3, il suffit d'appeler la PROC Ring0Ret avec comme paramètre l'addresse de retour.

Example

      RemoveSEH MACRO
       pop  fs:[0]
       add  esp,4h
      ENDM

 ...
 invoke RingZero2, offset Ring0Proc

Ring0Proc:
 RemoveSEH
 ...
 invoke Ring0Ret, offset EndRing0Proc

EndRing0Proc:
 ...

Index


La fonction HookInt hook une interruption en modifiant l'IDT (Interrupt Descriptor Table).

DWORD HookInt(
    DWORD IntNum,
    DWORD IntProc
);

Paramètres

  IntNum

    Numéro de l'interruption à hooker.

  IntProc

    Adresse de la procédure exécutée lors de l'appel à l'interruption hookée.

Valeur de retour

    Renvois dans EAX l'adresse original de la procédure de l'interruption.

Index



La fonction PageAllocate alloue de l'espace en zone système.

DWORD PageAllocate(
);

Valeur de retour

    Renvois dans EAX l'adresse de la page allouée.

Remarque

    Cette procédure doit absolument s'exécuter en Ring0.

Index


La procédure PageFree libère une page allouée en zone système.

PageFree(
    DWORD pPage
);

Paramètre

  pPage

    Adresse de la page ( allouée précédemment par PageAllocate ) à libérer.

Remarque

    Cette procédure doit absolument s'exécuter en Ring0.

Index



La procédure MovIntSys transfère le code des procédures d'interruption en zone système précédemment allouée par PageAllocate.

MovIntSys(
    DWORD StartAddr,
    DWORD EndAddr,
    DWORD pPage
);

Paramètres

  StartAddr

    Adresse pointant vers le début des procédures d'interruption.

  EndAddr

    Adresse pointant vers la fin des procédure d'int.

  pPage

    Adresse en zone système où transférer le code des procédure d'int.

Remarque

    Cette procédure peut être utilisée pour transférer le bloc située entre l'adresse StartAddr et EndAddr en pPage.

Index



La procédure SetBPM pose un BreakPoint on Memory en modifiant les DebugRegisters.

SetBPM(
    DWORD DrNumber,
    DWORD Address,
    DWORD BpmType
);

Paramètres

  DrNumber

    Spécifie le numéro du DebugRegister ( 0=Dr0, 1=Dr1, 2=Dr2 ou 3=Dr3 ) à utiliser pour poser le BPM.

  Address

    Address du BPM

  BpmType

    Type de BreakPoint on Memory

            00000000 ( BreakPoint on Memory Execution ), il y aura donc un Break si l'instruction située en CS:Address est exécutée.

            00000001 ( BreakPoint on Memory Write Access ), Break lors d'un accès en écriture à l'adresse CS:Address.

           00000003 ( BreakPoint on Memory Read/Write Access ), Break lors d'un accès mémoire en CS:Address.

Remarque

    Cette procédure doit être exécutée en Ring3 !

Index



La fonction SetBPX pose un BreakPoint on eXecution ( int 03 ) en modifiant la mémoire du process concerné.

DWORD SetBPX(
    DWORD ProcessID,
    DWORD Address
);

Paramètres

  ProcessID

    Spécifie l'ID du Process où poser le BPX.

  Address

    Adresse où poser le BPX.

Valeur de retour

    Renvoit dans AL ( EAX = 000000xx ) la valeur de l'octet original du process concerné à l'adresse CS:Address.

Remarque

    Cette procédure doit être exécutée en Ring3 !
 

Index



La procédure DWord2Str convertit un DWord en chaine ASCII représentant la valeur hexadécimale du DWord.

DWord2Str(
    DWORD Num,
    DWORD Buff
);

Paramètres

  Num

    DWord à convertir.

  Buff

    Adresse du buffer recevant la chaine ASCII.

Index



La fonction Str2DWord convertit une chaine ASCII représentant un nombre hexa en un DWord.

DWORD Str2DWord(
    DWORD Buff
);

Paramètre

  Buff

    Adresse du buffer contenant la chaine à convertir.

Valeur de retour

    Renvoit dans EAX la correspondance hexa de la chaine ASCII.

Remarque

    La Chaine ASCII doit être composée de 8 charactère. Par exemple, '004' donnera une erreur, pour corriger, il faudrait mettre '00000004' !

Index



La procédure Ring0Ret doit être appelée après l'appel à la PROC Ring0 afin de repasser en Ring3.

Ring0Ret(
    DWORD Addresse
);

Paramètre

  Addresse

    Addresse de retour de la procédure.

Index