Pergunta

Não é uma pergunta terrivelmente boa, desculpe.

Eu tenho um programa que precisa ser alertado quando um arquivo é aberto do Explorer (ou seja, Shellexecute (A/W) é chamado).

Infelizmente, a Microsoft removeu a interface COM (ishellexecutehook) que permite conectar esses eventos no Vista e, supostamente, porque o código mais antigo pode causar uma falha devido a alterações. Havia uma renúncia a reativar esse recurso, mas ele não funciona mais.

Eu fiz algumas pesquisas e parece que a única maneira de atender chamadas para Shellexecute é redirecionar a chamada para Shell32.dll. No momento, estou olhando para injetar minha própria DLL no processo do Explorer, depois copiar a entrada do IAT para Shellexecute para alguma alocação de endereços na minha DLL e, finalmente, modificando a entrada do IAT para Shellexecute para apontar para minha função, que notificará O programa em que um arquivo foi aberto e saltar para a função original Shellexecute, cujo endereço armazenamos anteriormente.

Minha maior preocupação aqui são os antivírus. Eles vão se importar que eu estou injetando no Explorer? Eles vão se importar com o fato de eu estar modificando o IAT?

Outra preocupação é se isso é seguro; É possível (ou melhor, provável) para os privilégios de segurança do Explorer não permitirem injeção via CreateremoteThread? Se sim, existe uma maneira melhor de fazer essa injeção?

Existe uma maneira melhor de fazer isso em geral?

EDIT: Para quem se depara com isso no futuro, o explorer.exe não tem IAT para Shell32.dll; Ele tem um cabeçalho, mas o Thunk está cheio de valores de lixo eletrônico, então não há como dizer) para recuperar a entrada para quaisquer funções importadas.
Parece que o Tunneling de código é a única maneira de conectar isso.

Foi útil?

Solução

A maioria das boas heurísticas de antivírus deve entender o patch de mesa de importação como uma bandeira vermelha para um Trojan.

A documentação on -line para Madcodehook possui alguns artigos estendidos sobre várias técnicas de injeção de código, seus benefícios/desvantagens, e a API oferece algumas opções para especificar uma enganche "segura":http://www.madshi.net/madcodehookdescription.htm

Outras dicas

A Biblioteca de Detours:

http://research.microsoft.com/en-us/projects/detours/

Da Microsoft Research, permite a engrenagem arbitrária de funções. Você pode dar uma chance.

Mais alguns recursos na gota de API:

Gancho fácil: http://www.codeplex.com/easyhook

Deviere: http://www.nektra.com/products/deviare-api-ook-windows/

Um post interessante: http://www.codeproject.com/kb/system/hooksys.aspx

Ao fazer a adesão da API, é muito importante as bundas em quais ambientes você precisa executar. Nem todas as bibliotecas suportam x86/x64, por exemplo.

Os desvios suportam apenas x64 na versão licenciada (pagada). O gancho fácil suporta x86 e x64.

O Windows Explorer no Windows Vista e o Windows 7 nem chama ShellexEctechea ou Shellexectew.

Sem ponto que se preocupa. Lol :-)

E, se posso acrescentar, testei conectando -se a ambas as funções com ganchos embutidos de 32 e 64 bits.

Desculpe. Lol :-)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top