Resultados 1 a 9 de 9
  1. #1
    Gray Hat Avatar de CoderSc
    Data de Ingresso
    Jan 2011
    Localização
    #!/bin/bash
    Posts
    1.736

    Chamando Funçoes DLL

    Chamando Funçoes DLL

    Tem muita gente que nao consegue chamar Funçoes de uma DLL
    Entao Fiz Um Pequeno Exemplo
    Url :

    http://www.megaupload.com/?d=P5NKVSPP

    Flw , CoderSc .

  2. #2
    Newbie
    Data de Ingresso
    Aug 2011
    Posts
    116
    Acho que esse tutorial , era meu , e estava no megaupload.
    Chamando Funcoes
    tipo
    var call : dword;
    begin
    Call := dword($009DF3D);
    asm
    Call call
    end;
    Fiz um exemplo , para chamar funcoes via um DLL injetada , chamando uma messageBox de uma outra apliaccao.
    Se nao for isso , desculpe

    Irei tentar reupar , e posta link.

  3. #3
    Gray Hat Avatar de CoderSc
    Data de Ingresso
    Jan 2011
    Localização
    #!/bin/bash
    Posts
    1.736
    Era teu ?
    Como conseguiu baixar o exemplo ?
    Olha a data do tópico ?
    O que tem haver esse exemplo ai seu que parece fazer um tipo de "dump" no programa mesmo com um exemplo que fiz utilizando funções externas de uma dll em um executável ?
    Når du føler flove over at se på tras eller bange for at se fremad, se venstre eller højre I be altid ved din side.

    H
    aters Gonna Hate

  4. #4
    O Exemplo no nKl acima nada mais é que uma chamada para um endereço de memória.
    Por exemplo,disassemblando um executavel em C temos um trecho assim
    Código:
    00401370  |> FF149D B018400>/CALL DWORD PTR DS:[EBX*4+4018B0]
    00401377  |. 4B                     |DEC EBX
    00401378  |.^75 F6                \JNZ SHORT Untitled.00401370
    0040137A  |> C70424 1013400>MOV DWORD PTR SS:[ESP],Untitled.00401310
    00401381  |. E8 DAFEFFFF    CALL Untitled.00401260
    A ultima instrução chamaria a primeira do código abaixo
    Código:
    00401260   $ 55             PUSH EBP
    00401261   . 8B0D E0504000  MOV ECX,DWORD PTR DS:[<&msvcrt.atexit>]  ;  msvcrt.atexit
    00401267   . 89E5           MOV EBP,ESP
    00401269   . 5D             POP EBP
    0040126A   . FFE1           JMP ECX
    Então o pedaço de código que ele colocou usando inline asm,ele atribui um endereço a uma variavel do tipo dword e usando o inline asm do delphi ele manda um call (assim como nos exemplos acima),pois se uma DLL foi injetada na memória do processo ela com certeza está em algum endereço de memória do processo então por isso o call com o endereço.
    Corrijam-me se eu estiver errado ou cometi algum equivoco.
    MP Com dúvidas e pedidos de ajudas serão IGNORADAS
    "Mentes fracas não pensam,corpos fracos não lutam."

    Microsoft Technology Associate: Software Development Fundamentals (C#
    )

  5. #5
    O Exemplo no nKl acima nada mais é que uma chamada para um endereço de memória.
    Por exemplo,disassemblando um executavel em C temos um trecho assim
    Código:


    00401370 |> FF149D B018400>/CALL DWORD PTR DS:[EBX*4+4018B0] 00401377 |. 4B |DEC EBX 00401378 |.^75 F6 \JNZ SHORT Untitled.00401370 0040137A |> C70424 1013400>MOV DWORD PTR SS:[ESP],Untitled.00401310 00401381 |. E8 DAFEFFFF CALL Untitled.00401260
    A ultima instrução chamaria a primeira do código abaixo
    Código:

    00401260 $ 55 PUSH EBP 00401261 . 8B0D E0504000 MOV ECX,DWORD PTR DS:[<&msvcrt.atexit>] ; msvcrt.atexit 00401267 . 89E5 MOV EBP,ESP 00401269 . 5D POP EBP 0040126A . FFE1 JMP ECX
    Então o pedaço de código que ele colocou usando inline asm,ele atribui um endereço a uma variavel do tipo dword e usando o inline asm do delphi ele manda um call (assim como nos exemplos acima),pois se uma DLL foi injetada na memória do processo ela com certeza está em algum endereço de memória do processo então por isso o call com o endereço.
    Corrijam-me se eu estiver errado ou cometi algum equivoco.
    Acho que é isso mesmo,tambem da pra fazer sem usar Inline Asm e usando Ponteiros tipo :

    Código:
    Var
    MainMessageBoxA: Function(hWnd: HWND; lpText, lpCaption: PAnsiChar; uType: UINT): Integer; StdCall;
    Begin
    @MainMessageBoxA:= Pointer($77D6050B);
    MainMessageBoxA(Application.Handle,'xD','xD',64);
    End;
    Última edição por R0Dr1g0.; 09 Feb 2012 às 10:40.

  6. #6
    Newbie
    Data de Ingresso
    Aug 2011
    Posts
    116
    Aplicando um Hook na API MessageBoxA , amm , nunca tinha pensado nisso , ate mesmo , digamos , bem legal e simples.
    Isso mostra o quanto os Ponteiros e o Hook , pode ser usado.

    Porem acho que meu exemplo e mais simples.

    CoderSc , irei tentar achar o video , para voce dar uma olhada.

  7. #7
    Gray Hat Avatar de CoderSc
    Data de Ingresso
    Jan 2011
    Localização
    #!/bin/bash
    Posts
    1.736
    Citação Postado originalmente por nKl Ver Post
    Aplicando um Hook na API MessageBoxA , amm , nunca tinha pensado nisso , ate mesmo , digamos , bem legal e simples.
    Isso mostra o quanto os Ponteiros e o Hook , pode ser usado.

    Porem acho que meu exemplo e mais simples.

    CoderSc , irei tentar achar o video , para voce dar uma olhada.
    Você não entendeu, esse código que postei no megaupload era +- parecido com esse Usando Dlls e não tem nada haver com isso que vocês estão falando
    Når du føler flove over at se på tras eller bange for at se fremad, se venstre eller højre I be altid ved din side.

    H
    aters Gonna Hate

  8. #8
    Moderador Avatar de _Guga_
    Data de Ingresso
    Apr 2006
    Localização
    Salvador - BA
    Posts
    2.118
    R0Dr1g0,

    toda função exportada por uma DLL é identificada por um numeral ordinal e, opcionalmente, um nome. De forma similar, as funções podem ser importadas da DLL tanto pelo numeral quanto pelo nome. Esse numeral representa a posição do ponteiro de endereçamento das funções, ou seja, que guarda o offset da mesma, na Tabela de Endereços de Exportação da DLL. É comum que as funções internas sejam exportadas apenas pelo numeral. Para a maioria das funções da API do Windows, apenas os nomes são preservados entre diferentes versões do sistema. Os numerais são sujeitos a mudanças, portanto não são uma maneira confiável de se importar as funções da API. Por isso eu não recomendo essa forma utilizando inline asm.

    abraços
    Última edição por _Guga_; 14 Feb 2012 às 07:27.


    I must not fear. Fear is the mind killer.

  9. #9
    Aplicando um Hook na API MessageBoxA , amm , nunca tinha pensado nisso , ate mesmo , digamos , bem legal e simples.
    Isso mostra o quanto os Ponteiros e o Hook , pode ser usado.

    Porem acho que meu exemplo e mais simples.

    CoderSc , irei tentar achar o video , para voce dar uma olhada.
    Não há Hook na minha função,pelo menos não em MessageBoxA,simplesmente mudamos o ponteiro da função e redimericionamos para MessageBoxA,assim quando MainMessageBoxA é chamado automaticamente é chamado MessageBoxA.

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •