Salut à toi visiteur !
Inscris toi en moins de 10 secondes pour profitez pleinement du site et partager avec la communauté ! S'inscrire


#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 dit Merci à xddj pour ce message


Messages dans ce sujet
PEB hack - par xddj - 19-02-2019, 19:26
RE: PEB hack - par xddj - 18-04-2019, 12:52
RE: PEB hack - par PixelHeart - 05-08-2019, 17:54
RE: PEB hack - par xddj - 06-08-2019, 12:56

Atteindre :