Api Hook

23/02/2006

0

[b:71aa00a954]sobre a materia do clube delphi revista n=69 pag 48 , Reescrevi o codigo passado pelo Professor Michel Benford[/b:71aa00a954]

uses SysUtils, Classes, [b:71aa00a954]BmsApiHook,[/b:71aa00a954] //Biblioteca do Nildo para delphi 7.0 Windows; var CreateProcessAnext: function(IpApplicationName:PAnsiChar;IpCommandLine:PAnsiChar; IpProcessAtributes,IpThreadAttributes:PSecurityAttributes; bInhertHandles:Bool;dwCreteionFlags:Dword; IpEnvironment:Pointer;IpCurrentDirectory:PAnsiChar; Const ipStartupInfo :[b:71aa00a954]TStartupInfoA[/b:71aa00a954]; var ipProcessInformatio:TprocessInformation):Bool;stdcall;


conforme o exemplo do livro... Ai mandei compilar e me retorna o erro

[b:71aa00a954]Undeclared Indentifier : TStartupInfoA[/b:71aa00a954]

procurei no windows.pas e nada definido para esta ´Classe´ .. Se pudemos dizer assim

Alguem sabe aonde esta o erro ????


Marco Salles

Marco Salles

Responder

Posts

24/02/2006

Nildo

[quote:632e353259=´Marco Salles´]Michel , eu não sei se vai fazer parte da sua nova edição(Revista n=70), acontece que ainda não chegou aqui... Acredito que ira ter outras tecnicas interresantes e deliciosas( Minha mulher fala como eu posso achar isso numeros matemáticos e coisa e tal de delicioso , mas ela que não sabe) .. Mas gostaria de perguntar se da para dar uma rapida explicação(Para não consumir muito o seu tempo) , se ao inves de Hookar o explorer.exe , o objetivo fosse especificamente dois processos qualquer ..

Por exemplo , suponha que meu fio (Conforme o nildo introduziu assim o conceito de ApiHook em um artigo) , fica-se de ollho no dbd32.exe e
rundll32.exe por exemplo..

[b:632e353259]mudaria muita coisa [/b:632e353259] :?: :?: :?:[/quote:632e353259]

Marco, vá pela lógica.
Se você chama um comando por exemplo:

InjetaNoProcesso( ´explorer.exe´ );

Então, nesse caso, como fazer ele injetar no ´dbd32.exe´ e no ´calc.exe´??


Responder

24/02/2006

Marco Salles

Marco, vá pela lógica. Se você chama um comando por exemplo: InjetaNoProcesso( ´explorer.exe´ ); Então, nesse caso, como fazer ele injetar no ´dbd32.exe´ e no ´calc.exe´??


ta . mas a injeçao poderia continuar via explorer.exe , o que eu pergunto e se o que quero abrir for o databaseDeskto ou o relogio do windows , então façao que tem que ser feito , se não for desconsidere...

tecnamente a pergunta pode estar cheia de erros , acredito que ate esteja , afinal o conceito e novo para mim...


Responder

24/02/2006

Nildo

[quote:bc80ae0986=´Marco Salles´]
Marco, vá pela lógica. Se você chama um comando por exemplo: InjetaNoProcesso( ´explorer.exe´ ); Então, nesse caso, como fazer ele injetar no ´dbd32.exe´ e no ´calc.exe´??


ta . mas a injeçao poderia continuar via explorer.exe , o que eu pergunto e se o que quero abrir for o databaseDeskto ou o relogio do windows , então façao que tem que ser feito , se não for desconsidere...

tecnamente a pergunta pode estar cheia de erros , acredito que ate esteja , afinal o conceito e novo para mim...[/quote:bc80ae0986]

Marco, para de desenvolver o que você está fazendo e estude sobre essa tecnica senão as duvidas nunca irão acabar a não ser que você entenda o conceito da coisa. A injeção não é feita via explorer.exe. Uma injeção nada mais é do que fazer com que algum outro processo carregue uma DLL sua.


Responder

24/02/2006

Michael

[quote:ddaf9f099e=´Marco Salles´][b:ddaf9f099e]Michel [/b:ddaf9f099e](...)[/quote:ddaf9f099e]
Tsic, tsic, tsic... :?

[quote:ddaf9f099e=´Marcos Salles´]eu não sei se vai fazer parte da sua nova edição(Revista n=70) (...)[/quote:ddaf9f099e]
Na edição 70 eu sintetizei o que foi ensinado nas duas anteriores através de uma aplicação que protege arquivos executáveis que o usuário selecionar de uma série de operações, como cópia, exclusão, renomeação, etc. Tbm falo de como usar meu add-in para o IDE do Delphi para API Hooking.

Marco, vá pela lógica. Se você chama um comando por exemplo: InjetaNoProcesso( ´explorer.exe´ ); Então, nesse caso, como fazer ele injetar no ´dbd32.exe´ e no ´calc.exe´??

É isso aí...

[quote:ddaf9f099e=´Marcos Salles´]ta . mas a injeçao poderia continuar via explorer.exe ...[/quote:ddaf9f099e]

O que o [b:ddaf9f099e]Nildo [/b:ddaf9f099e]quer dizer é que vc pode injetar em vários processos, bastando chamar para cada um a função de ´injeção´.

InjetaNoProcess(´explorer.exe´);
InjetaNoProcesso(´notepad.exe´);
InjetaNoProcess(´mspaint.exe´);


[]´s


Responder

24/02/2006

Martins

Marco, para de desenvolver o que você está fazendo e estude sobre essa tecnica senão as duvidas nunca irão acabar a não ser que você entenda o conceito da coisa. A injeção não é feita via explorer.exe. Uma injeção nada mais é do que fazer com que algum outro processo carregue uma DLL sua.


Isso vale para todos e para qualquer inovação na maneira de se desenvolver aplicações, eu levei uns dois puxões de orelha do [color=green:d9af08a58f][b:d9af08a58f]Nildo[/b:d9af08a58f][/color:d9af08a58f] hehehe! Mas valeu!!!

Boa sorte Marco, e lembre-se q o nome do Colega é [b:d9af08a58f]Michael[/b:d9af08a58f] ou então coloca logo só Benford.


Responder

24/02/2006

Marco Salles

Enviada: Sex Fev 24, 2006 8:04 pm Assunto:

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

Marco Salles escreveu:
Michel (...)

Tsic, tsic, tsic...

Marcos Salles escreveu:
eu não sei se vai fazer parte da sua nova edição(Revista n=70) (...)

Na edição 70 eu sintetizei o que foi ensinado nas duas anteriores através de uma aplicação que protege arquivos executáveis que o usuário selecionar de uma série de operações, como cópia, exclusão, renomeação, etc. Tbm falo de como usar meu add-in para o IDE do Delphi para API Hooking.

Nildo escreveu:
Marco, vá pela lógica.
Se você chama um comando por exemplo:

InjetaNoProcesso( ´explorer.exe´ );

Então, nesse caso, como fazer ele injetar no ´dbd32.exe´ e no ´calc.exe´??

É isso aí...

Marcos Salles escreveu: ta . mas a injeçao poderia continuar via explorer.exe ... O que o Nildo quer dizer é que vc pode injetar em vários processos, bastando chamar para cada um a função de ´injeção´. Código: InjetaNoProcess(´explorer.exe´); InjetaNoProcesso(´notepad.exe´); InjetaNoProcess(´mspaint.exe´);


engraçado , foi a primeira coisa que eu fiz.. mas não deu certo Michael

pesei que fosse receber a mensagem fazendo simplesmente assim assim

BmsRemoteLoadLibrary(BmsGetProcessID(´notpad.exe´), ExtractFilePath(ParamStr(0)) + ´CPHook.dll´);


mas não acontece nada :cry: :cry: :cry:


Responder

24/02/2006

Nildo

Não é notpad.exe, é NOTEPAD


Responder

24/02/2006

Michael

[quote:0c2e8c334a=´Marco Salles´]engraçado , foi a primeira coisa que eu fiz.. mas não deu certo [b:0c2e8c334a]Michael[/b:0c2e8c334a][/quote:0c2e8c334a]

Wohoo! :D

[quote:0c2e8c334a=´Marcos Salles´]pesei que fosse receber a mensagem fazendo simplesmente assim assim

BmsRemoteLoadLibrary(BmsGetProcessID(´notpad.exe´), ExtractFilePath(ParamStr(0)) + ´CPHook.dll´);


mas não acontece nada :cry: :cry: :cry:[/quote:0c2e8c334a]

Se não me engano, a CPHook.dll contém os callbacks e funções de ´hookagem´ para as API´s CreateProcessA/W, certo? Se não aconteceu nada é pq os processos hookados não chamaram estas rotinas. Acredito que a calculadora (calc.exe), por exemplo, não invoque essa API.

O que exatamente vc quer fazer ao ´injetar´ a DLL em mais de um processo?

[]´s


Responder

24/02/2006

Marco Salles

o que eu quero por exemplo , e proteger um executavel...

Quando ele for acionado que apareça o formulario Aviso

em vez de ser qualquer programa via explorer , quero que este processo so aconteça com alguns

por exemplo , toda vez que o calc.exe for acionado que apareça o formulario aviso


Responder

24/02/2006

Michael

[quote:6da149f510=´Marco Salles´]o que eu quero por exemplo , e proteger um executavel...

Quando ele for acionado que apareça o formulario Aviso

em vez de ser qualquer programa via explorer , quero que este processo so aconteça com alguns

por exemplo , toda vez que o calc.exe for acionado que apareça o formulario aviso[/quote:6da149f510]
Bom, a primeira coisa que vou te dizer é o que o [b:6da149f510]Nildo [/b:6da149f510]falou: aprofunde mais seus conhecimentos sobre API Hooking. Leia novamente os artigos que estão aí com vc, e aguarde a edição 70 da revista. Nela vc vai ver como fazer o que vc quer.

Agora, vc não deve injetar a DLL nos processos que quer impedir de executar. Quem inicia o Notepad, por exemplo, não é ele mesmo, e sim o Windows. É por isso que injetamos no [b:6da149f510]explorer.exe[/b:6da149f510] - que é sinônimo de shell do Windows.

Se quiser quem um arquivo específico seja bloqueado, então dentro dos callback´s da sua DLL vc vai ter que checar se o nome do executável passado para a API é o que vc quer impedir de bloquear. Se for, então faça [b:6da149f510]Result [/b:6da149f510]retornar [b:6da149f510]False[/b:6da149f510], e de preferência gere algum erro para o sistema operacional (usando [b:6da149f510]SetLastError[/b:6da149f510]).

Veja o primeiro artigo, onde foi mostrado como impedir que arquivos com a string ´ClubeDelphi´ no nome fossem impedidos de serem excluídos. É a mesma coisa.

Na edição 70 vc vai entender melhor isso.

[]´s


Responder

24/02/2006

Marco Salles

show de bola .. Vou esperar a edição 70 e tentyar aqui fazer uma analogia com o exemplo da edição 68

quero agradecer e dizer que todo o conhecimento por mim adquirido mediante voces serão imediatamente repassados para todos da comunidade , como tento sempre , dar o maximo de mim durante esses longos anos que estamos juntos

Muito obrigado


Responder

16/04/2006

Ricardo_engsoft

Amigos, estou desenvolvendo uma aplicação q fará a transferência de arquvios com base no monitoramento de um determinado diretório.

Para a transferência estou usando sockets (TServerSocket / TClientSocket), mas estou encontrando problemas no momento de transferir os arquivos, que dizer, na hora de monitorar o diretório.

Tentei alguns componentes, mas não tive sucesso. O mais próximo que cheguei foi usando o componente TDirWatch, mas quando eu vou monitorar o diretório sei lá por que uma Thread é iniciada (a thread de controle que eu mesmo disparo), mas para minha surpresa, imediatamente ela é finalizada.

Então revirando minha coleção de revistas Clube Delphi eu vi que é possível usar API Hook para fazer essa monitoração.

Porém os exemplo que eu achei não foram fáceis de se entender. E nisso surge a minha pergunta: como fazer para monitorar um diretório qualquer (que seria selecionado na minha aplicação) e usar API Hooking para fazer o monitoramento desse diretório (e outros subdiretórios dentro desse) de modo a criar um log de operações efetuadas, como por exemplo horário em que um arquivo foi criado, excluido, alterado, etc.

Grato,
Ricardo


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar