PEB hack
#1
Bonjour,

A l'époque je n'avais pas pu poster ce code sur le site Developpez car c'est du hack et ils suppriment tout topique contenant du hack. Alors je le post ici.

Il s'agit d'un peb hack en asm, que j'avais bien commenté donc ça vous aidera à comprendre pour ceux qui sont intéressé par l'asm je vous conseille le compilo Fasm (https://flatassembler.net/), mis à jour régulièrement et contenant pleins d'exemples pour les débutants.

Voilà le code:

Code :
format PE GUI 4.0
include 'include/windows/win32a.inc'

;--------------------------------------------------
section '.flat' code readable writeable executable
;--------------------------------------------------

    ;TEB
    virtual at 0
     Tib               rd 7
     EnvironmentPointer       dd 0
     Cid               rd 2
     ActiveRpcInfo           dd 0
     ThreadLocalStoragePointer dd 0
     PEB               dd 0
    end virtual

    ;PEB
    virtual at 0
     InheritedAddressSpace      db 0
     ReadImageFileExecOptions db 0
     BeingDebugged          db 0
     Spare              db 0
     Mutant              dd 0
     ImageBaseAddress      dd 0
     PPEB_LDR_DATA          dd 0
    end virtual

    ;PEB_LDR_DATA
    virtual at 0
     Length                 dd 0
     Initialized             dd 0
     SsHandle             dd 0
     InLoadOrderModuleList         rd 2
     InMemoryOrderModuleList     rd 2
     InInitializationOrderModuleList rd 2
    end virtual

    ;LIST_ENTRY
    virtual at 0
     Flink dd 0
     Blink dd 0
    end virtual

    ;LDR_MODULE
    virtual at 0
;     _InLoadOrderModuleList          rd 2
     _InMemoryOrderModuleList      rd 2
     _InInitializationOrderModuleList rd 2
     BaseAddress              dd 0
     EntryPoint              dd 0
     SizeOfImage              dd 0
     FullDllName:
      .Length              dw 0
      .MaximumLength          dw 0
      .Buffer              dd 0
     BaseDllName:
      .Length              dw 0
      .MaximumLength          dw 0
      .Buffer              dd 0
     Flags                  dd 0
     LoadCount              dw 0
     TlsIndex              dw 0
     HashTableEntry              rd 2    
     TimeDateStamp              dd 0
    end virtual


entry $

    mov    eax,[fs:PEB]
    mov    eax,[eax+PPEB_LDR_DATA]
    mov    eax,[eax+InMemoryOrderModuleList]

    mov    eax,[eax+Flink]
    mov    eax,[eax+Flink]

    mov    eax,[eax+BaseAddress]        ;Get Module Base
    mov    [ModuleBase],eax

    cmp    word [eax],0x5A4D        ;Check MZ signature
    jnz    exit

    add    eax,[eax+0x3c]            ;PE addr (DosHeader.e_lfanew)
    cmp    dword [eax],0x4550        ;Check PE signature
    jnz    exit

    mov    eax,[eax+0x78]            ;PE.ExportTable RVA addr
    add    eax,[ModuleBase]        ;Export Directory table VA

    mov    ecx,[eax+0x18]            ;Number Of Names RVA
    mov    [NumberOfNames],ecx

    mov    ecx,[eax+0x1c]            ;Address Table RVA
    mov    [AddressTable],ecx

    mov    ecx,[eax+0x24]            ;Ordinal Table RVA
    mov    [OrdinalTable],ecx

    mov    esi,[eax+0x20]            ;Name Table RVA
    add    esi,[ModuleBase]        ;Name Table VA
    xor    ecx,ecx
     re:
    lodsd                    ;Get First Name RVA addr
    add    eax,[ModuleBase]        ;Convert it to VA
    push    esi                ;Save Name Table
    mov    esi,eax                ;Prepare For lodsb
     @@:
    lodsb                    ;Hash the name
    add    dl,al
    xor    dh,dl
    rol    edx,8
    cmp    byte [esi],0
    jnz    @b

    cmp    edx,HashGetProcAddress        ;cmp Hash with function
    jz    @f
    xor    edx,edx
    pop    esi                ;Restore Name Table
    inc    ecx                ;Name counter
    cmp    ecx,[NumberOfNames]        ;Compare tested function with
    jnz    re                ;total number of name
     @@:
    mov    eax,[OrdinalTable]
    add    eax,[ModuleBase]
    xor    edx,edx
    mov    dx,word [eax+ecx*2]        ;Get function ordinal VA

    mov    eax,[AddressTable]
    add    eax,[ModuleBase]        ;Address Table VA

    mov    eax,[eax+edx*4]            ;EAT+EOT*4
    add    eax,[ModuleBase]        ;Function VA
    mov    [GetProcAddress],eax

    push    FunctionName1
    push    [ModuleBase]
    call    [GetProcAddress]

    push    DllName
    call    eax

    push    FunctionName2
    push    eax
    call    [GetProcAddress]

    push    0
    push    Titre
    push    Message
    push    0
    call    eax

   exit:
    leave
    ret



AddressTable dd 0
OrdinalTable dd 0
ModuleBase dd 0
NumberOfNames dd 0
HashGetProcAddress = 0x6414d1d5
GetProcAddress dd 0

FunctionName1 db 'LoadLibraryA',0
FunctionName2 db 'MessageBoxA',0
DllName db 'user32.dll',0

Titre db 'titre',0
Message db 'Message',0
[-] 1 utilisateur remercie xddj pour ce message:
  • Akram_pw
#2
Désolé mais comme pour le keylogger je viens de m'apercevoir que j'ai posté une version de test qui contient le format "PE console" qui sert à afficher la console msdos à des fins de tests. J'ai donc édité mon 1er post pour le remplacer par le format "PE GUI".

Et voilà le Virus Total: https://www.virustotal.com/#/file/4c4b6d.../detection
Comme vous pouvez le voir, c'est un hack encore très peu connu des anti-virus les plus connus. Et en regardant ici: https://www.virustotal.com/#/file/4c4b6d...44/details
Vous verrez que les call de fonctions sont bien cachés. Virus Total ne les voit pas.
Répondre
#3
(18-04-2019, 11:52)xddj a écrit : Désolé mais comme pour le keylogger je viens de m'apercevoir que j'ai posté une version de test qui contient le format "PE console" qui sert à afficher la console msdos à des fins de tests. J'ai donc édité mon 1er post pour le remplacer par le format "PE GUI".

Et voilà le Virus Total: https://www.virustotal.com/#/file/4c4b6d.../detection
Comme vous pouvez le voir, c'est un hack encore très peu connu des anti-virus les plus connus. Et en regardant ici: https://www.virustotal.com/#/file/4c4b6d...44/details
Vous verrez que les call de fonctions sont bien cachés. Virus Total ne les voit pas.

Alors je vais te faire un up c'est vrais mais je trouve l'asm indigéste vraiment je crois que ce thread m'a calmer sur le fait de vouloir y passer ahah
Learn C, C++
Windows Internals 7th Edition Part 1
Practical Malware Analysis
Reverse Engineering Tutorials with IDA
Learn Windows Driver Development - Read Windows Docs / Undocumented Docs
Live Driver Debugging with IDA



[-] 1 utilisateur remercie PixelHeart pour ce message:
  • xddj
Répondre
#4
Merci, non t'inquiète c'est loin d'être indigeste, enfin, l'asm avec le compilo Fasm ne l'est pas, par contre Nasm c'est déjà plus indigeste.
Tout le monde crois que c'est compliqué mais pas tout en réalité. J'ai fait mon premier code en moins d'un mois, d'ailleurs je l'ai posté sur ce forum c'est le base64.
Le PEB hack je l'ai fait bien plus tard, et j'ai eu notamment besoin de la doc de Microsoft sur le PEB pour y piger quelque chose.
Répondre


Atteindre :

A propos
    Cs-Hackers est une communauté française de partage de connaissances et de logiciels en rapport avec counter strike et steam, créer en 2010 par Superman² le forum s'est dévellopé sous l'administration de UzGz et prend le nom de Cs-Hackers en 2012.