PDA

Ver la Versión Completa : Sobre una dll, me la borra el antivirus.


Tonio
01-09-2008, 18:18:57
Tengo una dll, hecha por mi, bueno más bien copiada del foro y arreglada, lo que hace es evitar que cuando estoy escribiendo en un editor, se salga de él al presionar alguna tecla, como alt, o ésta en combinación con otras. Pués bien, en cuanto entro en el directorio donde se encuentra, el antivirus me la borra. El antivirus es ESET NOD32.
Saludos y gracias.
Tonio.

JXJ
01-09-2008, 19:29:54
seguro la borra por que cree que es un hook, para un keyloger

tal vez si usas el codigo de la dll dentro de tu programa . sin usar la dll
te de el mismo resultado de evitar que se salga del editor al presionar la tecla alt.

Al González
01-09-2008, 20:00:26
seguro la borra por que cree que es un hook, para un keyloger

tal vez si usas el codigo de la dll dentro de tu programa . sin usar la dll
te de el mismo resultado de evitar que se salga del editor al presionar la tecla alt.
No recuerdo con precisión, pero sé que algunas funciones de gancho (hook) requieren forzosamente ser instaladas mediante DLLs. Sería cosa de ver si es el caso de nuestro amigo Tonio.

Esperemos sus comentarios acerca de qué tipo de gancho está usando y qué eventos en particular desea interceptar.

Saludos.

Al González. :)

JXJ
02-09-2008, 00:01:56
otra forma seria hacer esa dll. casi distinta a lo que el antivirus por heuristica.
detecta como peligroso..

me refiero a la construccion binaria de la dll.

agrega funciones y otros procedimientos.
antes de las llamadas a los hooks.
para que el binario resultante.
sea un binario distinto a lo que el antivirus cosidera peligroso

cHackAll
02-09-2008, 00:20:37
otra forma seria hacer esa dll. casi distinta a lo que el antivirus por heuristica.
detecta como peligroso..

me refiero a la construccion binaria de la dll.

agrega funciones y otros procedimientos.
antes de las llamadas a los hooks.
para que el binario resultante.
sea un binario distinto a lo que el antivirus cosidera peligroso

No funcionará pues un buen AV haría un WH_DEBUG al hook previamente instalado, mayor su fiabilidad si hace un hook directamente a la API SetWindowsHookEx.

Lo que yo haría en este caso es incluir la DLL a la lista de exclusiones del AV.

Saludos

Tonio
04-09-2008, 18:41:31
Lo primero muchas gracias, como siempre rapidísimos.

Este es el código:



library HookTeclado;

{
Demo de Hook de teclado a nivel de sistema, Radikal.
Como lo que queremos es capturar las teclas pulsadas en cualquier parte
de Windows, necesitamos instalar la funcion CallBack a la que llamará
el Hook en una DLL, que es ésta misma.
}



uses
Windows,
Messages;

const
CM_MANDA_TECLA = WM_USER + $1000;

var
HookDeTeclado : HHook;
FicheroM : THandle;
PReceptor : ^Integer;

function CallBackDelHook( Code : Integer;
wParam : WPARAM;
lParam : LPARAM
) : LRESULT; stdcall;

{Esta es la funcion CallBack a la cual llamará el hook.}
{This is the CallBack function called by he Hook}
begin
{Si una tecla fue pulsada o liberada}
{if a key was pressed/released}
if code=HC_ACTION then
begin
{Miramos si existe el fichero}
{if the mapfile exists}
FicheroM:=OpenFileMapping(FILE_MAP_READ,False,'ElReceptor');
{Si no existe, no enviamos nada a la aplicacion receptora}
{If dont, send nothing to receiver application}
if FicheroM<>0 then
begin
PReceptor:=MapViewOfFile(FicheroM,FILE_MAP_READ,0,0,0);
PostMessage(PReceptor^,CM_MANDA_TECLA,wParam,lParam);
UnmapViewOfFile(PReceptor);
CloseHandle(FicheroM);
end;
end;
{Llamamos al siguiente hook de teclado de la cadena}
{call to next hook of the chain}
Result := CallNextHookEx(HookDeTeclado, Code, wParam, lParam)
end;

procedure HookOn; stdcall;
{Procedure que instala el hook}
{procedure for install the hook}
begin
HookDeTeclado:=SetWindowsHookEx(WH_KEYBOARD, @CallBackDelHook, HInstance , 0);
end;

procedure HookOff; stdcall;
begin
{procedure para desinstalar el hook}
{procedure to uninstall the hook}
UnhookWindowsHookEx(HookDeTeclado);
end;

exports
{Exportamos las procedures...}
{Export the procedures}
HookOn,
HookOff;

begin
end.




Ésta la unit Hook, a ponr en el uses de la aplicación:


unit Hooks;

interface

type
{ Teclas que podemos inhabilitar }
TLockableKey = (lkAltTab, lkAltEsc, lkCtrlEsc, lkAltF4, lkWin, lkApps, lkAlt);

procedure SetHook;
procedure ReleaseHook;

procedure LockKey(Key: TLockableKey; Lock: Boolean);

implementation

uses
Windows, Dialogs;

const
{
Tipo de 'gancho'

Obsérvese que la documentación de Windows que viene
con Delphi no incluye este 'gancho' sino únicamente
WH_KEYBOARD que no intercepta estas teclas.
}
WH_KEYBOARD_LL = 13;

{ Banderas para detectar las teclas ALT y CTRL }
LLKHF_ALTDOWN = $20;
LLKHF_CTRLDOWN = $8000;

type
PKbdHookInfo = ^TKbdHookInfo;
TKbdHookInfo = record
VkCode: DWORD;
ScanCode: DWORD;
Flags: DWORD;
Time: DWORD;
ExtraInfo: DWORD;
end;

var
Hook: HHook;
Keys: set of TLockableKey;

function KbdHook(Code: Integer; WParam, LParam: DWORD): HHook; stdcall;
var
VkCode: DWORD;
AltDown: Boolean;
CtrlDown: Boolean;

begin
if Code = HC_ACTION then
begin
VkCode := PKbdHookInfo(LParam).VkCode;
AltDown := PKbdHookInfo(LParam).Flags and LLKHF_ALTDOWN <> 0;
CtrlDown := GetAsyncKeyState(VK_CONTROL) and LLKHF_CTRLDOWN <> 0;

{ if (VkCode = VK_TAB) and AltDown and (lkAltTab in Keys) then
begin
Result := 1;
exit;
end;

if (VkCode = VK_ESCAPE) then
begin
if AltDown and (lkAltEsc in Keys) then
begin
Result := 1;
exit;
end;

if CtrlDown and (lkCtrlEsc in Keys) then
begin
Result := 1;
exit;
end;
end;

if (VkCode = VK_F4) and AltDown and (lkAltF4 in Keys) then
begin
Result := 1;
exit;
end;

if ((VkCode = VK_LWIN) or (VkCode = VK_RWIN)) and (lkWin in Keys) then
begin
Result := 1;
exit;
end;

if (VkCode = VK_APPS) and (lkApps in Keys) then
begin
Result := 1;
exit;
end; }

if (lkAlt in Keys) then
begin
Result := 1;
exit;
end;

end;

Result := CallNextHookEx(Hook, Code, WParam, LParam);
end;

procedure SetHook;
begin
Hook := SetWindowsHookEx(WH_KEYBOARD_LL, @KbdHook, HInstance, 0);
end;

procedure ReleaseHook;
begin
if Hook <> 0 then UnhookWindowsHookEx(Hook);
end;

procedure LockKey(Key: TLockableKey; Lock: Boolean);
begin
if Lock then Include(Keys, Key) else Exclude(Keys, Key);
end;

initialization
Hook := 0;
Keys := [];

finalization
ReleaseHook;
end.



En su día, casi sabía el cómo funcionaba, vosotros lo veréis mejor y me diréis, si como dice JXJ, lo puedo poner en un procedure, aunque no se como.

Os diré para que es, me he hecho un editor de texto, poniendo cosas de un sitio y de otro, pues bien, ágil, que se diga, no soy con el teclado, así que de vez en cuando, poco antes de salvar lo escrito, 'tocaba alguna tecla', no se cual, 'alt' 'ctrl' o las dos a la vez, el caso es que me salía del editor y perdía todo lo escrito, que muchas veces escribía lo que salía de mi mente, cómo una carta, no era copiar, total, un cabreo y a pensar otra vez y a escribir.

Con ésta dll, cada vez que daba a alguna tecla 'rara', me salía un mensaje: 'tecla inválida' le daba a ok y listo, a continuar.

Si hay otra forma más sencilla, agradecería la información.

Supongo que la dll es de Club delphi.

Espero, que como explicación, sirvan los códigos.

Nuevamente gracias.
Un saludo.
Tonio

roman
04-09-2008, 19:01:14
Supongo que la dll es de Club delphi.


No sé bien a que te refieres. Para empezar pones dos códigos distintos. El primero claramente dice que es de Radikal, el dueño de trucomanía (http://www.q3.nu/trucomania/), y el segundo es mío (http://romansg.net/index.php?pg=hooks).

// Saludos

JXJ
05-09-2008, 04:16:10
Tonio

¿no podrias poner un zip con las fuentes de tu proyecto completo?

Tonio
05-09-2008, 20:16:45
No hay duda que los códigos son de Roman y Radikal, supongo que el de Roman fue a través del Club Delphi.
Tengo una empanada tremenda, me parece que estoy utilizando los dos códigos a la vez, o así parece,voy a ver si me aclaro primero, por lo menos he puesto en el 'uses' uno y el otro en la dll 'Hook' que también la llamo, vamos, como digo, una empanada.
Os pido disculpas por la molestia causada.
De todas formas gracias por vuestro interés, creo que he encontrado la forma de que el anivirus 'olvide' la dll, lo dicho, muchas gracias.
Un saludo.
Tonio

cHackAll
05-09-2008, 20:58:36
...creo que he encontrado la forma de que el anivirus 'olvide' la dll...

Y el modo que encontraste es secreto o lo podrías compartir en el foro?
bueno... pregunto apoyándome en el concepto de "reciprocidad" :rolleyes: y "curiosidad" :D

Saludos

Tonio
07-09-2008, 14:53:38
Javier, no es estrictamente un secreto, creo que alguien me apuntó que desactivara el antivirus o algo así, entonces empecé a buscar en él y encontre, con mucho trabajo, está en inglés, una opción que se llama: 'Exclude', que da la opción de excluir un fichero o un directorio completo del scan del antivirus, así que la activé y ahora no me lo borra. Supongo que todos los antivirus la tendrán, este es ESET NOD32, no se si es bueno o malo, es gratuito o por lo menos eso creo.
Pido disculpas si he fallado en algo respecto al foro, pués yo solamente tengo motivos de agradecimiento hacia él.
Gracias por todo y saludos.
Tonio.

cHackAll
07-09-2008, 19:59:38
...Pido disculpas si he fallado en algo respecto al foro, pués yo solamente tengo motivos de agradecimiento hacia él.

No son necesarias las discupas Tonio... solo me dio un poco de curiosidad (sana)...

Un Saludo :)