Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con Lectura de archivo (https://www.clubdelphi.com/foros/showthread.php?t=69742)

fleming 05-09-2010 07:17:11

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.

duilioisola 05-09-2010 11:22:43

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.

escafandra 05-09-2010 13:05:51

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. :rolleyes:


Saludos.

fleming 05-09-2010 22:10:06

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

fleming 05-09-2010 23:24:13

Cita:

Empezado por duilioisola (Mensaje 375573)
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'

escafandra 06-09-2010 00:13:12

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.

fleming 06-09-2010 00:21:48

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

fleming 06-09-2010 00:29:51

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

fleming 06-09-2010 04:22:33

Cita:

Empezado por escafandra (Mensaje 375595)
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

escafandra 06-09-2010 09:54:25

Cita:

Empezado por fleming (Mensaje 375600)
...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.

fleming 06-09-2010 16:55:00

Cita:

Empezado por escafandra (Mensaje 375611)
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

fleming 06-09-2010 17:54:52

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?

escafandra 06-09-2010 20:41:03

Cita:

Empezado por fleming (Mensaje 375640)
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 (Mensaje 375649)
...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.

fleming 06-09-2010 21:29:12

Cita:

Empezado por escafandra (Mensaje 375676)
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?

fleming 07-09-2010 10:22:56

=/ escafandra :'( ALguien??


La franja horaria es GMT +2. Ahora son las 15:38:59.

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