Fórum [Dúvida] Hooking/DLL #311810
05/02/2006
0
Estou com algumas dúvidas sobre Hooking..
Eu estou querendo fazer uma aplicação que não seje fechada..
Para isso eu precisaria de usar um hook né? No TerminateProcess ou ExitProcess?
Eu preciso criar um DLL pra fazer isso ou só pelo EXE ja dá? E se eu quiser impedir outras aplicações de serem fechadas? Preciso de ter uma DLL ou só EXE?
Gostaria de saber tb, se por exemplo eu tiver q usar DLL, num teria como eu ´acoplar´ a DLL ao EXE e ao executar o programa, ele extrai-se a DLL para uma pasta que eu quisesse e assim usá-la?
Sei que tem uns mágicos do hooking por ae(nildo, michael, etc..) :roll:
Se qlqer um ae puder ajudar eu agradeço...
Vlw!!
Mrmick
Curtir tópico
+ 0Posts
06/02/2006
Michael
Respostas:
1) Vc deve ´hookar´ a API [b:932301d7f7]TerminateProcess[/b:932301d7f7], da [b:932301d7f7]kernel32.dll[/b:932301d7f7]. Veja [url=http://help.madshi.net/HowToUseMadCodeHook.htm]neste link[/url] um exemplo usando a [b:932301d7f7]MadCodeHook[/b:932301d7f7]. Note que vc pode usar a lib do [b:932301d7f7]Nildo [/b:932301d7f7]sem problemas: basta trocar os nomes das funções;
2) O código do hook no EXE só tem efeito sobre ele mesmo. Para interceptar as chamadas à API´s em outros processos vc precisa usar uma DLL e injetá-la no sistema;
3) Vc pode incluir a DLL no executável, extraí-la e injetá-la. Mas, pq faria isso? Apenas para não precisar distribuir o arquivo?
[]´s
Gostei + 0
06/02/2006
Nildo
Falows
Gostei + 0
06/02/2006
Martins
Boa sorte!!!
Gostei + 0
06/02/2006
Mrmick
Vo dar uma lida, uma fuçada..
Dúvidas vo postar aqui, ok?
Vlw pessoal!
:wink:
Gostei + 0
06/02/2006
Mrmick
Bom, no exemplo lá do madshi, tem essa função:
function ThisIsOurProcess(processHandle: dword) : boolean; var pid : dword; arrCh : array [0..MAX_PATH] of char; begin pid := ProcessHandleToId(processHandle); result := (pid <> 0) and ProcessIdToFileName(pid, arrCh) and (PosText(´OurApplication.exe´, arrCh) > 0); end;
Só que na biblioteca BmsApiHook, não tem o [b:b56d4f8760]ProcessHandleToId[/b:b56d4f8760], [b:b56d4f8760]ProcessIdToFileName[/b:b56d4f8760] e nem o [b:b56d4f8760]PosText[/b:b56d4f8760], ae tipw como eu adaptaria para a biblioteca Bms?
Tava olhando no help e vi que tem a função [b:b56d4f8760]BmsGetProcessID[/b:b56d4f8760], ela poderia substituir a [b:b56d4f8760]ProcessHandleToId[/b:b56d4f8760] né?
Ah, otra coisa fora disso ae, se por exemplo tem uma DLL injetada no explorer.exe, teria como eu fazer um aplicativo pra ´desinjetar´ essa DLL sem fechar ou danificar o explorer.exe ?
Bom, é isso.. Malz ae eu estar incomodando, mas é pq qdo tá se aprendendo é assim mesmo. uma confusão na kbeça.. mto foda..
Vlw ae pessoal!
:wink:
Gostei + 0
06/02/2006
Nildo
Entao vc pode verificar assim:
function ThisIsOurProcess(processID: dword) : boolean; begin Result := GetCurrentProcessID = BmsGetProcessID( ´OurApplication.exe´ ); end;
Tem sim!
BmsRemoteUnloadLibrary( BmsGetProcessID( ´explorer.exe´ ), ´c:\suaDLL.dll´ );
Gostei + 0
06/02/2006
Titanius
Tem como eu usar Hook, pra proteger uma pasta? tipo, ninguem acessar ela? se alguem tentar acessar, ele pede uma senha, e se tiver certo libera o acesso?
Se sim, teria como funcionar em modo de seguranca? pois senao cara entra em modo de seguranca e acessa a pasta.. :D
[]s
Gostei + 0
06/02/2006
Martins
BmsRemoteUnloadLibrary( BmsGetProcessID( ´explorer.exe´ ), ´c:\suaDLL.dll´ );
[b:c3f0c20e36]BmsRemoteUnloadLibrary - Reove a sua DLL do processo.[/b:c3f0c20e36]
BmsRemoteUnloadLibrary( BmsGetProcessID( ´explorer.exe´ ), ´c:\suaDLL.dll´ );
Gostei + 0
06/02/2006
Mrmick
Tipw, MUITO OBRIGADO! Vlw mesmo! É bom d+ qdo as coisas vão ficando mais claras.. vlw!
Tipw, testei aqui e consigo fechar o programa normalmente.. Não dá erro nem nada pra compilar e Hookar.. mas ele não bloqueia o fechamento do processo..
DLL:
library funcoes; uses Windows, BmsAPIHook; var TerminateProcessNext : function (processHandle, exitCode: dword) : bool; stdcall; function ProcessoProtegido(processID: dword) : boolean; begin Result := GetCurrentProcessID = BmsGetProcessID(´notepad.exe´); end; function TerminateProcessCallback(processHandle, exitCode: dword) : bool; stdcall; begin if ProcessoProtegido(processHandle) then begin result := false; SetLastError(ERROR_ACCESS_DENIED); end else result := TerminateProcessNext(processHandle, exitCode); end; begin BmsHookApi(´kernel32.dll´, ´TerminateProcess´, @TerminateProcessCallback, @TerminateProcessNext); end.
MeuProg:
procedure TForm1.BloqueiaClick(Sender: TObject); begin BmsRemoteLoadLibrary(TODOS_PROCESSOS, ´funcoes.dll´); MessageBox(0, ´Bloqueado!´, ´Aviso...´, MB_ICONINFORMATION); end; procedure TForm1.DesbloqueiaClick(Sender: TObject); begin BmsRemoteUnloadLibrary(TODOS_PROCESSOS, ´funcoes.dll´); end;
Tem algo errado?
valewww!!
:D
Gostei + 0
06/02/2006
Martins
Uma ótima pergunta [b:5cf0e57f10]Titanius[/b:5cf0e57f10], acho até q já perguntei algo parecido para o [b:5cf0e57f10]Nildo[/b:5cf0e57f10].
Gostei + 0
06/02/2006
Nildo
Já sobre a função
function ProcessoProtegido(processID: dword) : boolean; begin Result := GetCurrentProcessID = BmsGetProcessID(´notepad.exe´); end;
não é usado Handle mas sim ID.. Então passar o Handle como parametro não vai ser a mesma coisa que passar um ID. Creio que você deva usar as funções da MadCodeHook para obter o Handle de um ID de um processo.
Gostei + 0
06/02/2006
Nildo
Sim, é só você saber as APIs de acesso a pasta, enumeração de arquivos, e não deixar processar a API caso se trate de sua pasta.
Até dá, porém quando você inicia o micro em modo de segurança, nenhum programa que deve inicializar junto com o Windows vai carregar. Então até que o cara não execute seu programa que vai proteger as pastas ele terá acesso.
Sabe o que alguns programas desse tipo fazem? Eles criam um tipo de extensão, exemplo: [b:8789c9a396]*.AAA[/b:8789c9a396]. Então quando você manda proteger uma pasta ele encripta todo o conteúdo da pasta e joga em um unico arquivo com a extensão [b:8789c9a396]*.AAA[/b:8789c9a396], tudo encriptado nesse único arquivo. Esse programa vai e atrela o ícone de uma pasta normal aos arquivos do tipo [b:8789c9a396]*.AAA[/b:8789c9a396]. Dai quando você acessa esse arquivo pelo Windows Explorer, vai executar o programa do cara que pede uma senha e desencripita esse arquivo e cria a pasta com todas as sub-pastas e arquivos que continha nesse arquivo [b:8789c9a396]*.AAA[/b:8789c9a396]. Mas dai fica um problema, você vai ver sua pasta com uma extensão, e isso fica esquisito. Então esse progra
Dai esse arquivo fica totalmente protegido até em modo de segurança, e se o usuário nao tiver o seu programa pra acessar essa pasta, ele nao acessa nunca. Dai se o engraçadinho desinstalar seu programa por pirraça, já era!
Espero que tenha sanado suas dúvidas!
Um abraço!
Gostei + 0
06/02/2006
Nildo
Gostei + 0
06/02/2006
Mrmick
Agora sobre o Handle e ID, eu não tinha reparado mto bem nessa função..
Infelizmente tenho que partir por concorrente (Madshi) auhhauhuahu :lol:
Vlw ae, vo ir tentando aki ;)
Gostei + 0
06/02/2006
Nildo
Hehehehe Sem problemas, sem mágoas :lol:
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)