Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Sobre una dll, me la borra el antivirus. (https://www.clubdelphi.com/foros/showthread.php?t=59576)

Tonio 01-09-2008 18:18:57

Sobre una dll, me la borra el antivirus.
 
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

Cita:

Empezado por JXJ (Mensaje 310797)
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

Cita:

Empezado por JXJ (Mensaje 310956)
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

Borrado de una dll por antivirus
 
Lo primero muchas gracias, como siempre rapidísimos.

Este es el código:

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:

Código Delphi [-]
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

Cita:

Empezado por Tonio (Mensaje 311847)
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, y el segundo es mío.

// 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

Sobre una dll, me la borra el antivirus.
 
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

Cita:

Empezado por Tonio (Mensaje 312165)
...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

Sobre una dll, me la borra el antivirus.
 
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

Cita:

Empezado por Tonio (Mensaje 312293)
...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 :)


La franja horaria es GMT +2. Ahora son las 17:51:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi