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

Michael

Agora que o [b:c657e310b4]Nildo [/b:c657e310b4]entrou no debate eu não preciso mais falar nada... ;-)

[]s


Responder

24/02/2006

Marco Salles

Coloca um MessageBox na sua DLL pra ver se o BmsComunicaIPC está sendo chamado corretamente, e se você executou o BmsCriaSessaoIPC do seu executável antes da DLL chamar a BmsComunicaIPC

o BmsCriaSessaoIPC estou criando no FormCrete do form conforme sugerido

Mas o BmsComunicaIPC este eu nun to vendo na revista :cry: :cry:


Responder

24/02/2006

Nildo

[quote:4ef8a0b8f1=´Marco Salles´]Coloca um MessageBox na sua DLL pra ver se o BmsComunicaIPC está sendo chamado corretamente, e se você executou o BmsCriaSessaoIPC do seu executável antes da DLL chamar a BmsComunicaIPC

o BmsCriaSessaoIPC estou criando no FormCrete do form conforme sugerido

Mas o BmsComunicaIPC este eu nun to vendo na revista :cry: :cry:[/quote:4ef8a0b8f1]

Mas como você quer enviar uma mensagem pro seu executavel sem dar o comando de enviar mensagem (no caso, BmsComunicaIPC)?

Ps.: Na edição 69, página 47, nosso professor Michael nos mostra o comando BmsComunicaIPC.


Responder

24/02/2006

Marco Salles

Desculpa , esta na dll


Responder

24/02/2006

Michael

A propósito, colega [b:0034a9ca85]Marcos Salles[/b:0034a9ca85], como contornou o problema da versão da biblioteca de hooking para o Delphi 5? Está usando a MadCodeHook, ou o Bruno arrumou um DCU compilado na versão 5 para vc?

[quote:0034a9ca85=´Marcos Salles´]Mas o BmsComunicaIPC este eu nun to vendo na revista[/quote:0034a9ca85]

Esse função é chamada de dentro da DLL, mais especificamente pela rotina [b:0034a9ca85]ExecutarIPC[/b:0034a9ca85]:

function ExecutarIPC(const Mensagem : TMensagem) : BOOL;
var
  Resposta: BOOL;
begin
  BmsComunicaIpc(ID_SECAO_IPC, @Mensagem, SizeOf(TMensagem), @Resposta, SizeOf(BOOL));

  Result := Resposta;
end;


[quote:0034a9ca85=´Nildo, meu amigão´]Ps.: Na edição 69, página 47, nosso professor Michael nos mostra o comando BmsComunicaIPC.[/quote:0034a9ca85]

Muito obrigado [b:0034a9ca85]Bruno[/b:0034a9ca85]! Estou sem a revista aqui, mas lembrava de onde sua rotina era chamada.

[]´s


Responder

24/02/2006

Marco Salles

A propósito, colega Marcos Salles, como contornou o problema da versão da biblioteca de hooking para o Delphi 5? Está usando a MadCodeHook, ou o Bruno arrumou um DCU compilado na versão 5 para vc?


estou usando o computador de um amigo que tem o delphi 7.0

Marcos Salles escreveu: Mas o BmsComunicaIPC este eu nun to vendo na revista Esse função é chamada de dentro da DLL, mais especificamente pela rotina ExecutarIPC:


Sim , ja achei..

Sobre a definição TStartUpInfoA e TStartUpInfoW, eu não tenho certeza se no Delphi 2005 elas estariam erradas, pois foi nessa versão que compilei os exemplos.


[b:8b2fc498fd]No delphi 7.0 elas não compilam ....[/b:8b2fc498fd]


Responder

24/02/2006

Michael

[quote:088252bfa1=´Marco Salles´]No delphi 7.0 elas não compilam....[/quote:088252bfa1]

Sim, constatei isso aqui. Minha dúvida é em relação ao Delphi 2005. Aqui na empresa não tenho uma cópia dele para testar. Verei em casa à noite.

[]´s


Responder

24/02/2006

Marco Salles

[b:91a4e0ddb5]o amigo cabelo diz uma coisa muito interresante : Mia sou menos assim :[/b:91a4e0ddb5]

´Não deu , porque ainda não chegou a hora´


[color=darkred:91a4e0ddb5]Acho que essa expressão , se aplica de corpo e alma no nosso na Informatica[/color:91a4e0ddb5]

:!: :!: :!: :!:
Qauntas vezes ja aconteceu com voce , comigo e com todos algo do tipo :
[b:91a4e0ddb5]Isto eu ja tinha tentado , mas estava dando erro , agora esta funcionando[/b:91a4e0ddb5] :evil: :evil: :evil: :evil:

:idea: :idea:
[b:91a4e0ddb5]Pois bem , aqui nesse tópico , vasculhei o seu código e o comparei com o seu... [/b:91a4e0ddb5]

De fato quando voce disse :

O problema com a variável Mensagem que vc mencionou, que não estava sendo referenciada no escopo, eu tenho certeza que escrevi corretamente. Vou apurar isso melhor para ver se meus textos estão sendo modificados antes de serem publicados, e posto aqui depois.


[b:91a4e0ddb5]Não sei porque , mas agora compila sem usar a palavra Mensagem.. Então segue certo o conteudo da revista[/b:91a4e0ddb5]

:P :P :P :P :P :P :P
[b:91a4e0ddb5][color=darkblue:91a4e0ddb5]Finalmente cheguei a Solução do Problema , comparando o seu código (Passado pelo Link) Com o meu código[/color:91a4e0ddb5][/b:91a4e0ddb5]
O erro foi em :

[b:91a4e0ddb5]ERRADO[/b:91a4e0ddb5]
bmsRemoteLoadLibrary(bmsGetProcessId(´explorer.exe´),
               ExtractFilePath(ParamStr(0)+´CPHook.dll´));

[b:91a4e0ddb5]CERTO[/b:91a4e0ddb5]
BmsRemoteLoadLibrary(BmsGetProcessID(´explorer.exe´), ExtractFilePath(ParamStr(0)) + ´CPHook.dll´);


[b:91a4e0ddb5]como voce mesmo disse na edição anterior sobre a importancia desse caminho...[/b:91a4e0ddb5]
:cry: :cry: :cry:
De fato , ja tinha verificado sobre esse erro , criando um botão e chamando um showmessage com a função ExtractFilePatc.. So que tinha dado certo então deixei esta linha de raciocineo e partir para outras... :evil:

O fato é que o Duplo parenteses na minha instrução , foi um descuido mortal e fez uma atomicidade de um coisa tão pequena

[b:91a4e0ddb5]Peço muito obrigado pela atenção , da sua parte e do nildo a do martins , e vou continuar a amolar voces sobre esse tema, que como devem ter percebido sou extremamente leigo no assunto[/b:91a4e0ddb5]

Para finalizar quero deixar registrado que :

citação de marco salles
mas vem ca e voltamos la ... Vamos convir que a revista tem as letras muito pequenas .. Poderia ser um pouco maiores... (...)


citação de michel
Isso é uma questão pessoal. De qualquer forma, mande um email para a redação da revista sugerindo sua idéia.


Foge dos meus principios , a qualidade de um produto deve ser sempre de quem o faz.. Se eles acham que o tamanho esta bom e é o suficiente , então que sigam nesse caminho.. O futuro é o juiz em todas as situaçoes

Abração , to esperando a edição 70 ....


Responder

24/02/2006

Martins

[quote:df986a88a5=´Marco Salles´]No delphi 7.0 elas não compilam....


Sim, constatei isso aqui. Minha dúvida é em relação ao Delphi 2005. Aqui na empresa não tenho uma cópia dele para testar. Verei em casa à noite.

[]´s[/quote:df986a88a5]

vou ver aqui, quem dos meus contatos tá rodando o D2005, e pedir para testarem.


Responder

24/02/2006

Michael

[quote:e81831b81e=´Marcos Salles´]Não sei porque , mas agora compila sem usar a palavra Mensagem.. Então segue certo o conteudo da revista[/quote:e81831b81e]
Poste seu código aqui para vermos pq funcionou agora e não antes.

[quote:e81831b81e=´Marcos Salles´]Peço muito obrigado pela atenção , da sua parte e do nildo a do martins , e vou continuar a amolar voces sobre esse tema, que como devem ter percebido sou extremamente leigo no assunto[/quote:e81831b81e]
Sem problemas. Amole o quanto quiser... ;-)

[quote:e81831b81e=´Marco Salles´]Foge dos meus principios , a qualidade de um produto deve ser sempre de quem o faz.. Se eles acham que o tamanho esta bom e é o suficiente , então que sigam nesse caminho.. O futuro é o juiz em todas as situaçoes[/quote:e81831b81e]
Qualquer revista depende do feedback dos seus leitores para evoluir. A ClubeDelphi não foge a esta regra.

Sempre é bom ouvir as sugestões e críticas dos leitores. ;-)

[quote:e81831b81e=´Marcos Salles´]Abração , to esperando a edição 70....[/quote:e81831b81e]
A edição 70 já está nas bancas há quase um mês. Aliás a 71 está estourando aí.

[]´s

P.S: Diga 10 vezes em voz alta: [b:e81831b81e]Michael[/b:e81831b81e], não Michel. [b:e81831b81e]Michael[/b:e81831b81e], não Michel. Diga tbm outras 10 vezes ´[b:e81831b81e]Maicou[/b:e81831b81e]´, ´[b:e81831b81e]Maicou[/b:e81831b81e]´, ´[b:e81831b81e]Maicou[/b:e81831b81e]´... ;-)


Responder

24/02/2006

Michael

vou ver aqui, quem dos meus contatos tá rodando o D2005, e pedir para testarem.


Peça para abrirem a unit [b:a8589c140e]Windows[/b:a8589c140e], e pesquisar por [b:a8589c140e]TStartUpInfoA [/b:a8589c140e]e [b:a8589c140e]TStartUpInfoW[/b:a8589c140e]. Se não acharem nada, diga para tentarem então [b:a8589c140e]TStartUpInfo [/b:a8589c140e]apenas.

[]´s


Responder

24/02/2006

Marco Salles

Marcos Salles escreveu: Não sei porque , mas agora compila sem usar a palavra Mensagem.. Então segue certo o conteudo da revista Poste seu código aqui para vermos pq funcionou agora e não antes


a primeira vez que tentei compilar , não estva dando certo.. Eu não tenho mais o código antigo ja que agora esta funcionando.. Verifiquei pelo seu código que não tinha o Message.. Pra mim tinha que ser assim:

[b:e9a29f019d]MemoProcesso.tetx:=ExtractFileName(Mensagem.Executor);[/b:e9a29f019d]

e não como esta escrito

[b:e9a29f019d]MemoProcesso.tetx:=ExtractFileName(Executor);[/b:e9a29f019d]


Mas esta compilando e funcionando da segunda maneira , o que não estava acontecendo antes.. Vai entender..


Qualquer revista depende do feedback dos seus leitores para evoluir. A ClubeDelphi não foge a esta regra.


Mas existem muitas ...Nao com relação ao conteudo.. Mas sim com relaçao ao acabamento .. Existem muitas comparaçoes com relaçao a qualidade da outra Revista do mesmo editor.... Em ves de conta tem alguem aqui no site botando a boca no trombone

A edição 70 já está nas bancas há quase um mês. Aliás a 71 está estourando aí.


Mas eu sou assinante.. diga-se passagem duas coisa:

1)a minha edição vem pelo correio

2)assinei por causa especificamente desse artigo.. e com estava esgotada a edição 69 eles conseguiram arruma-la para mim


P.S: Diga 10 vezes em voz alta: Michael, não Michel. Michael, não Michel. Diga tbm outras 10 vezes ´Maicou´, ´Maicou´, ´Maicou´...

Michael ,
Michael ,
Michael ,
Michael ,
Michael ,
Michael ,
Michael ,
Michael ,
Michael ,

hi , faltou uma : Michael ... Pronto ,agora e so copiar daqui e colar nos proximos post...


Responder

24/02/2006

Michael

[quote:42caf57633=´Marco Salles´]a primeira vez que tentei compilar , não estva dando certo.. Eu não tenho mais o código antigo ja que agora esta funcionando.. Verifiquei pelo seu código que não tinha o Message.. Pra mim tinha que ser assim:

[b:42caf57633]MemoProcesso.tetx:=ExtractFileName(Mensagem.Executor);[/b:42caf57633]

e não como esta escrito

[b:42caf57633]MemoProcesso.tetx:=ExtractFileName(Executor);[/b:42caf57633]

Mas esta compilando e funcionando da segunda maneira , o que não estava acontecendo antes.. Vai entender..[/quote:42caf57633]
Não existe um [b:42caf57633]with Mensagem[/b:42caf57633] algumas linhas antes de [b:42caf57633]MemoProcesso.Text := ExtractFileName(Executor)[/b:42caf57633];?

[quote:42caf57633=´Marcos Salles´]Mas existem muitas ...Nao com relação ao conteudo.. Mas sim com relaçao ao acabamento .. Existem muitas comparaçoes com relaçao a qualidade da outra Revista do mesmo editor.... Em ves de conta tem alguem aqui no site botando a boca no trombone[/quote:42caf57633]
Está questão não é tão simples como muitos pensam. Infelizmente não basta querer que a ClubeDelphi seja colorida, etc. Existem vários fatores que influenciam isso. Como este segmento está fora do meu escopo na revista, não posso comentar melhor.

[quote:42caf57633=´Marcos Salles´]Mas eu sou assinante.. diga-se passagem duas coisa:
1)a minha edição vem pelo correio[/quote:42caf57633]
Sua edição 70 ainda não chegou? Se não, entre em contado com o departamento de atendimento da DevMedia.

[quote:42caf57633=´Marcos Salles´]
2)assinei por causa especificamente desse artigo..[/quote:42caf57633]
Legal! :-D

[quote:42caf57633=´Marcos Salles´]Michael ,
Michael ,
Michael ,
Michael ,
Michael ,
Michael ,
Michael ,
Michael ,
Michael ,

hi , faltou uma : Michael ... Pronto ,agora e so copiar daqui e colar nos proximos post...[/quote:42caf57633]
:lol:

[]´s


Responder

24/02/2006

Marco Salles

a primeira vez que tentei compilar , não estva dando certo.. Eu não tenho mais o código antigo ja que agora esta funcionando.. Verifiquei pelo seu código que não tinha o Message.. Pra mim tinha que ser assim


acho com 99,999999¬ de certeza , que não compilou porque omite o With

Voce fez assim

With mensagem do
begin
end;

e eu não o fiz ... Por isso que tive que declarar message em todas as demais linhas.. etaaaaaaaaaaaaaaaa


Responder

24/02/2006

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:f73a93a8f4]mudaria muita coisa [/b:f73a93a8f4] :?: :?: :?:


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