Unconfigured Ad Widget

Collapse

Anúncio

Collapse
No announcement yet.

Tutorial API Hook

Collapse
X
 
  • Filter
  • Tempo
  • Show
Clear All
new posts

  • Font Size
    #1

    C / C++ Tutorial API Hook

    ##### Tutorial API Hook #####

    [!] Sofredor: #M0rph
    [!] Fb: fb.com/rodrigo.correia.3194
    [!] WhiteCollarGroup
    [!] Forum: Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...

    [!] Sumario:
    [!] 0x1 - O que é hook¿
    [!] 0x2 - Exemplo de um hook


    [+] 0x1 - O que é hook¿

    Então meus amores, grosseiramente falando, é uma técnica de fazer desvio em certa chamada API, o próprio
    nome já fala, hook(gancho). Imagine, quando você usa uma API do Win, tá lá seu código em C todo lindinho(mentira,
    tá cheio de comentarios inuteis e palavrões =s ) bem assim:
    ...
    MessageBox(0, "msg", "title", MB_OK);
    ...
    Tu roda, e aparece a msg lá(obvio), mas se por acaso você queira que não apareça essa msg, que faça outra
    coisa, o que usaria(tenha em mente a seguinte situação, seu app <- processo(irá interceptitar a API MessageBoxA
    da user32.dll))¿ Um hook seria util nessa situação ;-p

    Então, você agora já sabe o que é um hook, mas não sabe como usar(tenha calma, pq quem tem presa come cru
    rsrs). Vamos lá, para hookamos uma API do Windows, devemos interceptar a tal API ser hookada, e substituir
    por um salto para sua função, este salto será feito com a instrução JMP(salto incondicional em Assembly) +
    endereço da sua função, assim, quando for chamada a API hookada, saltará para nossa função =D


    [+] 0x2 - Exemplo de um hook

    Nosso exemplo será criado em C++ no Visual Studio. Primeiramente, irei citar como será feito. Nós vamos
    fazer um exmeplo simples, será assim-> Nossa APP hookará a API MessageBox de sua própria tabela de
    importação(IAT). Não irei explicar mais nada, pois no código fonte está todo comentado.

    Bye bye, bjs! :-p

    Source de exemplo:

    Código PHP:
    /*
    * Sofredor: #M0rph
    * Fb: fb.com/rodrigo.correia.3194
    * WhiteCollarGroup
    * Forum: www.darkhat.com.br/
    */

    #include <windows.h>
    #include <stdio.h>

    DWORD My_Hook(LPCSTR Module_nameLPCSTR Func_NameLPVOID Your_Function);
    int lol();

    void main()
    {
        
    printf("[!] Starting app...\n");
        
    printf("[!] Activating hook on MessageBoxA...\n");
        
        
    My_Hook("user32.dll""MessageBoxA"lol);

        
    printf("[+] Hook Active!\n\n");
        
        
    printf("[!] Press any key to test...\n\n");
        
    system("pause>null");

        
    MessageBoxA(0"msg""title"MB_OK);
        
    ExitProcess(0);

    }

    int lol(){
        
    printf("Engracadinho.... Tentando usar a MessageBoxA neh? hsuahsu");
        
    system("pause>null");
        return 
    0;
    }

    // Esta funcao é responsavel por hook a api indica, ele recebe 3 parametros,
    // nome do modulo onde está a API, ou seja, a dll * nome da API * nome da funcao para onde sera redirecionada...
    DWORD My_Hook(LPCSTR Module_nameLPCSTR Func_NameLPVOID Your_Function)
    // com a GetProcAddress iremos pegar o endereco da API
        
    DWORD addr = (DWORD)GetProcAddress(GetModuleHandleA(Module_name), Func_Name);

        
    printf("[+] Found addr MessageBoxA(0x%X)\n"addr);

        
    BYTE jmp[6] = { 0xe9,    //jmp = um salto incodicional
            
    0x000x000x000x00,    // endereco
            
    0xc3 //retn - é igual ao return de uma funcao
        
    };    

        
    DWORD calc = ((DWORD)Your_Function addr 5);    //((para)-(de)-5)

        
    memcpy(&jmp[1], &calc4);    //agora vamos constriur nosso shellcode... ;p
        
        // e por fim, escrever na memoria do processo, nosso shellcode
        
    WriteProcessMemory(GetCurrentProcess(), (LPVOID)addrjmp60);
        
    printf("[+] Bytes written...\n");

        return 
    addr;

    "Nunca desista de seus sonhos. Desisti de seus sonhos é abrir mão da felicidade."
    (Augusto Cury)



    Meu Blog... http://www.lab-infor.blogspot.com
    Meu canal do Youtube... http://www.youtube.com/user/rodrigo32323232

  • Font Size
    #2
    Bom, tem skype ou outro meio de comunicação?
    sigpic

    Comment


    • Font Size
      #3
      Muito bom isso, não ficou 100% a explicação mas consegui entender bem...
      #M0ph não sei se você conhece mas usamos muito isso para passar por servidores de games On-line D3D, como exemplo Combat Arms, só me explica uma coisa a respeito do 0xE9, o que ele tem de tão importante pelo fato dele ser padrão pelo que eu percebi, em bases do Combat Arms para criar um Hook também usamos ele...

      Comment


      • Font Size
        #4
        Postado Originalmente por J.Kssio™ Ver Post
        Muito bom isso, não ficou 100% a explicação mas consegui entender bem...
        #M0ph não sei se você conhece mas usamos muito isso para passar por servidores de games On-line D3D, como exemplo Combat Arms, só me explica uma coisa a respeito do 0xE9, o que ele tem de tão importante pelo fato dele ser padrão pelo que eu percebi, em bases do Combat Arms para criar um Hook também usamos ele...
        Em hexadecimal o JMP fica E9 e para realizar o hook usa o JMP

        Comment


        • Font Size
          #5
          Vlw por compartilhar !

          ----------------------------------------------------------------------------------------------------------------------------------------

          Programar é arte, ficar louco faz parte
          Dacrusil // GHS

          Comment

          X
          Working...
          X