Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-09-2010
fleming fleming is offline
Miembro
 
Registrado: sep 2010
Posts: 15
Poder: 0
fleming Va por buen camino
Exclamation Ayuda con Lectura de archivo

Buenas este es mi primer tema soy nuevo en esto de programacion con Delphi estoy haciendo una dll, la cual no quiero repertir muchas linas para poder hacer lo que necesito entonces lo que necesito saber es como puedo hacer para leer un archivo .txt o . lo que sea para poder hacer un array del contenido y colocarlo en la funcion que estoy haciendo?.. la lineas que estoy usando son estas:


h := FindWindow(nil, 'Keylogger v2');
if h <> 0 then PostMessage(h, WM_CLOSE, 0, 0);

Donde Keylogger V2 es el programa que deseo cerrar pero que manera hay de que Keylogger v2 sea el contenido del archivo de texto me explico? en el archivo de texto poner por linea..

Keylogger v2
Keylogger v4
KeyPress X1

y cada uno me lo vaya cerrando ya que esta escrito en el .txt donde estara la lista

Adicional tambien estoy usando esta funcion:

winhandle := findwindow('ConsoleWindowClass',nil);
sendmessage(winhandle,WM_CLOSE,0,0);

donde ConsoleWindowClass tambien seria algun item de la lista del archivo de texto espero me puedan ayudar ya que soy muy novato en la materia.
Responder Con Cita
  #2  
Antiguo 05-09-2010
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Puedes utilizar TStringList, por ejemplo. Creo que es lo más sencillo:

Código Delphi [-]
var
   ts : TStrings;
   h : word; //creo
begin
   ts := TStringList.Create;
   try
      ts.LoadFromFile('c:\ruta\archivo.loquesea');
      for i=0 to ts.Count -1 do
      begin
         h := FindWindow(nil, ts[i]);
         if h <> 0 then PostMessage(h, WM_CLOSE, 0, 0);
      end;
   finally
      ts.Free;
   end;
end;

También puedes utilizar AssignFile y ReadLn:

Código Delphi [-]
var
   f : TextFile;
   s : string;
   h : word; //creo
begin
   AssignFile (f,'c:\ruta\archivo.logesea');
   try
      Reset(f);
      while (not f.Eof) do // Mientras no llegue al final
      begin
         ReadLn(f,s);
         h := FindWindow(nil, ts[i]);
         if h <> 0 then PostMessage(h, WM_CLOSE, 0, 0);
      end;
   finally
      CloseFile(f);
   end;
end;

Nota: El código puede contener errores, pues lo hice sin un Delphi en frente.
Responder Con Cita
  #3  
Antiguo 05-09-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Hola fleming.

Independientemente de la buena respuesta que te ha dado duilioisola, me gustaría comentarte algo.

¿Realmente quieres matar un keylogger? ¿Esos que quieres matar tienen esos nombres tan sugerentes, Keylogger v2, Keylogger v4, KeyPress X1?.

Un programa malicioso suele estar autoprotegido y no suele aceptar el mensaje WM_CLOSE. En ese caso deberás intentar el uso de la API TerminateProcess. Si corren con privilegios mayores a los de tu programa, deberás elevar los tuyos a SeDebugPrivilege.

No se si tu objetivo es matar un keylogger o esos nombres son un mero ejemplo de la tarea que tienes que realizar, siendo meramente la de leer un archivo de texto.


Saludos.
Responder Con Cita
  #4  
Antiguo 05-09-2010
fleming fleming is offline
Miembro
 
Registrado: sep 2010
Posts: 15
Poder: 0
fleming Va por buen camino
Gracias!

Bueno eso fue un ejemplo ese nombre mi idea es bloquear por ventanas y por clases voy a probar el codigo que me adjunto duilioisola se parece mucho a lo que necesito cualquier cosa aviso un millon de gracias por ayudarme esto me da más interes al mundo de la programacion con delphi
Responder Con Cita
  #5  
Antiguo 06-09-2010
fleming fleming is offline
Miembro
 
Registrado: sep 2010
Posts: 15
Poder: 0
fleming Va por buen camino
Cita:
Empezado por duilioisola Ver Mensaje
Puedes utilizar TStringList, por ejemplo. Creo que es lo más sencillo:

Código Delphi [-]var ts : TStrings; h : word; //creo begin ts := TStringList.Create; try ts.LoadFromFile('c:\ruta\archivo.loquesea'); for i=0 to ts.Count -1 do begin h := FindWindow(nil, ts[i]); if h <> 0 then PostMessage(h, WM_CLOSE, 0, 0); end; finally ts.Free; end; end;


También puedes utilizar AssignFile y ReadLn:

Código Delphi [-]var f : TextFile; s : string; h : word; //creo begin AssignFile (f,'c:\ruta\archivo.logesea'); try Reset(f); while (not f.Eof) do // Mientras no llegue al final begin ReadLn(f,s); h := FindWindow(nil, ts[i]); if h <> 0 then PostMessage(h, WM_CLOSE, 0, 0); end; finally CloseFile(f); end; end;


Nota: El código puede contener errores, pues lo hice sin un Delphi en frente.
me arroja los siguientes errores el primero:

Build
[Error] Unit1.pas(44): Undeclared identifier: 'i'
[Error] Unit1.pas(44): Incompatible types: 'Boolean' and 'Integer'
[Error] Unit1.pas(45): Expression expected but 'BEGIN' found
[Error] Unit1.pas(46): Incompatible types: 'String' and 'PAnsiChar'
[Fatal Error] AD.dpr(9): Could not compile used unit 'Unit1.pas'
Responder Con Cita
  #6  
Antiguo 06-09-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Prueba asi:

Código Delphi [-]
var
   ts : TStrings;
   h : word; //creo
   i: integer;
begin
   ts := TStringList.Create;
   try
      ts.LoadFromFile('prueba.txt');
      for i:=0 to ts.Count -1 do
      begin
         h := FindWindow(nil, PCHAR(ts[i]));
         if h <> 0 then PostMessage(h, WM_CLOSE, 0, 0);
      end;
   finally
      ts.Free;
   end;
end;
o así:

Código Delphi [-]
var
   f : TextFile;
   s : string;
   h : word; //creo
begin
   AssignFile (f,'prueba.txt');
   try
      Reset(f);
      while (not Eof(f)) do // Mientras no llegue al final
      begin
         ReadLn(f,s);
         h := FindWindow(nil, PCHAR(s));
         if h <> 0 then PostMessage(h, WM_CLOSE, 0, 0);
      end;
   finally
      CloseFile(f);
   end;
end;

Saludos.
Responder Con Cita
  #7  
Antiguo 06-09-2010
fleming fleming is offline
Miembro
 
Registrado: sep 2010
Posts: 15
Poder: 0
fleming Va por buen camino
Adjunto

Adjunto el proyecto tal cual lo tengo creo que es mejor ya que por ser novato no entiendo de donde provienen los errores.

Última edición por fleming fecha: 06-09-2010 a las 05:13:59.
Responder Con Cita
  #8  
Antiguo 06-09-2010
fleming fleming is offline
Miembro
 
Registrado: sep 2010
Posts: 15
Poder: 0
fleming Va por buen camino
probe con esas escafandra intente con Sin título - Bloc de notas y aun asi me dejo abierto esa ventana al parecer no esta haciendo la funcion
Responder Con Cita
  #9  
Antiguo 06-09-2010
fleming fleming is offline
Miembro
 
Registrado: sep 2010
Posts: 15
Poder: 0
fleming Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Prueba asi:

Código Delphi [-]
var
   ts : TStrings;
   h : word; //creo
   i: integer;
begin
   ts := TStringList.Create;
   try
      ts.LoadFromFile('prueba.txt');
      for i:=0 to ts.Count -1 do
      begin
         h := FindWindow(nil, PCHAR(ts[i]));
         if h <> 0 then PostMessage(h, WM_CLOSE, 0, 0);
      end;
   finally
      ts.Free;
   end;
end;
o así:

Código Delphi [-]
var
   f : TextFile;
   s : string;
   h : word; //creo
begin
   AssignFile (f,'prueba.txt');
   try
      Reset(f);
      while (not Eof(f)) do // Mientras no llegue al final
      begin
         ReadLn(f,s);
         h := FindWindow(nil, PCHAR(s));
         if h <> 0 then PostMessage(h, WM_CLOSE, 0, 0);
      end;
   finally
      CloseFile(f);
   end;
end;

Saludos.
Me funciono de maravilla no se que estaria haciendo mal pero a la final lo hice desde 0 y me funciono ahora.. como hago para poner una alerta, antes de cerrar el proceso con:

MessageBox(0, 'Programa Prohibido Detectado!', 'Alerta', +MB_OK +mb_ICONWARNING); PostMessage(h, WM_CLOSE, 0, 0);



PostMessage me funciona pero la alerta la hace infinitamente..! como hago para que me salga una sola ves al precionarle aceptar procede a WM_close
Responder Con Cita
  #10  
Antiguo 06-09-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por fleming Ver Mensaje
...como hago para poner una alerta, antes de cerrar el proceso con:

MessageBox(0, 'Programa Prohibido Detectado!', 'Alerta', +MB_OK +mb_ICONWARNING); PostMessage(h, WM_CLOSE, 0, 0);

PostMessage me funciona pero la alerta la hace infinitamente..! como hago para que me salga una sola ves al precionarle aceptar procede a WM_close
Código Delphi [-]
h := FindWindow(nil, PCHAR(s)); 
if (h <> 0) and (MessageBox(0, 'Programa Prohibido Detectado!'+#13+'¿Cerrarlo?', 'Alerta', +MB_YESNO + mb_ICONWARNING) = IDYES) then
   PostMessage(h, WM_CLOSE, 0, 0);

Saludos.
Responder Con Cita
  #11  
Antiguo 06-09-2010
fleming fleming is offline
Miembro
 
Registrado: sep 2010
Posts: 15
Poder: 0
fleming Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Código Delphi [-]
h := FindWindow(nil, PCHAR(s)); 
if (h <> 0) and (MessageBox(0, 'Programa Prohibido Detectado!'+#13+'¿Cerrarlo?', 'Alerta', +MB_YESNO + mb_ICONWARNING) = IDYES) then
   PostMessage(h, WM_CLOSE, 0, 0);

Saludos.
me salen un millon de ventanas alertas

Última edición por fleming fecha: 06-09-2010 a las 18:17:36.
Responder Con Cita
  #12  
Antiguo 06-09-2010
fleming fleming is offline
Miembro
 
Registrado: sep 2010
Posts: 15
Poder: 0
fleming Va por buen camino
Bueno asi como esta esta bien.. no hay que darse mala vida avisando xD, hay manera de "verificar el archivo .txt" para que no pueda ser cambiado?.. ejemplo una verificacion md5 o crc o algo asi que a lo que sea modificado no ejecute el ejecutable donde esta encrustada la dll? algun ejemplo?
Responder Con Cita
  #13  
Antiguo 06-09-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.195
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por fleming Ver Mensaje
me salen un millon de ventanas alertas
Si no quieres que se te alerte de cada programa prohibido, pon una bandera que se active sólo al primer aviso y evite los demás.


Cita:
Empezado por fleming Ver Mensaje
...hay manera de "verificar el archivo .txt" para que no pueda ser cambiado?.. ejemplo una verificacion md5 o crc o algo asi que a lo que sea modificado no ejecute el ejecutable donde esta encrustada la dll? algun ejemplo?
Si bloqueas el acceso al archivo de texto, tendrás que tener un sistema de cambio autorizado, es decir cuando tu lo quieras actualizar...

Revisa esto.



Saludos.

Última edición por escafandra fecha: 06-09-2010 a las 21:44:38.
Responder Con Cita
  #14  
Antiguo 06-09-2010
fleming fleming is offline
Miembro
 
Registrado: sep 2010
Posts: 15
Poder: 0
fleming Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Si no quieres que se te alerte de cada programa prohibido, pon una bandera que se active sólo al primer aviso y evite los demás.




Si bloqueas el acceso al archivo de texto, tendrás que tener un sistema de cambio autorizado, es decir cuando tu lo quieras actualizar...

Revisa esto.



Saludos.
Ok vi la pagina que me indicas, mi idea era que si modificaban alguna letra del archivo de texto al ser esta verificada por md5 al cambiar una letra cambia el md5 del archivo entonces antes de ejecutar el programa este verifica si "md5" definido del archivo de texto es igual al actual del archivo de texto en caso de ser asi, ejecuta, en caso que haya sido modificado pues da error, "archivo corrupto" o modificado bla bla y no deja ejecutar el programa hasta volver a colocar el archivo de texto original, la funcion que me muestras creo que cae anillo al dedo pero como la modifico para qu lea el archivo y haga el "en caso de" if y else.? adjunto lo que llevo de proyecto?
Responder Con Cita
  #15  
Antiguo 07-09-2010
fleming fleming is offline
Miembro
 
Registrado: sep 2010
Posts: 15
Poder: 0
fleming Va por buen camino
=/ escafandra :'( ALguien??
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
lectura y escritura en un archivo de texto torito Varios 4 18-01-2010 11:10:11
Lectura de un archivo plano josem Varios 2 14-09-2006 00:06:39
Lectura continua de Archivo friendspark API de Windows 2 02-02-2006 17:27:52
Como convertir un archivo a solo lectura JuanErasmo C++ Builder 10 14-09-2005 22:47:42
lectura lenta de un archivo .DAT, ¿por que? URBANO Varios 3 09-12-2003 22:07:16


La franja horaria es GMT +2. Ahora son las 02:08:56.


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
Copyright 1996-2007 Club Delphi