Chamando Funçoes DLL
Url :Tem muita gente que nao consegue chamar Funçoes de uma DLL
Entao Fiz Um Pequeno Exemplo
http://www.megaupload.com/?d=P5NKVSPP
Flw , CoderSc .
Chamando Funçoes DLL
Url :Tem muita gente que nao consegue chamar Funçoes de uma DLL
Entao Fiz Um Pequeno Exemplo
http://www.megaupload.com/?d=P5NKVSPP
Flw , CoderSc .
Acho que esse tutorial , era meu , e estava no megaupload.
Chamando Funcoes
Fiz um exemplo , para chamar funcoes via um DLL injetada , chamando uma messageBox de uma outra apliaccao.tipo
var call : dword;
begin
Call := dword($009DF3D);
asm
Call call
end;
Se nao for isso , desculpe
Irei tentar reupar , e posta link.
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.
Haters Gonna Hate
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
A ultima instrução chamaria a primeira do código abaixoCó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
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.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
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#
)
Acho que é isso mesmo,tambem da pra fazer sem usar Inline Asm e usando Ponteiros tipo :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.
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.
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.
Haters Gonna Hate
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.
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.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.