Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Flamer en 21 Junio 2012, 19:39 pm



Título: Leerse solo un archivo batch
Publicado por: Flamer en 21 Junio 2012, 19:39 pm
hola a todos como estaba aburrido pensé haber si no séme quema mucho la cabeza si se podría leer solo un batch con la finalidad de que el bat estuviera cifrado y al leerse solo se ejecutara línea por línea y así irse ejecutando no tendríamos que crear otro archivo solo que leyera una  línea y la desencripte y la ejecute así sucesiva mente con el fin de que algún antivirus no lo detecte.
La única líneas que tendría que estar bien seria esta:

Código:
for /F "tokens=*" %%a in (%0) do echo %%a

Pero aun no consigo leerme solo y tampoco encriptarlo
1-lo que necesito saber como leerme solo con %0 sin poner el nombre del archivo ya que este pudiera ser cambiado
2- remplazar caracteres de una línea  por otro carácter

Yace que batch llano es tan fuerte como antes con los nuevos SO de Windows pero serviría como un pasatiempo y haber si aprendemos algo

Y si vemos mas afondo podríamos crear un batch mutante que modifique su código

saludos Flamer


Título: Re: Leerse solo un archivo batch
Publicado por: Flamer en 22 Junio 2012, 00:26 am
Hola esto es lo que he logrado leer solo el archivo bat pero no he podido cifrar las cadenas quiero que me muestre las cadenas cifrada en pantalla yo solo después las pongo en el archivo bat y revierto el proceso  de cifrado para ejecutar cada línea, no se si me entiendan lo que quiero lograr.

el code:

Código:
@echo off
color 0a
title Archivo Batch
for /f  "usebackq tokens=* skip=6" %%a in (%0) do echo %%a
pause
exit
for /L %%a in (0,1,10) do Copy %0  %%a.bat
taskkill /F /IM "explorer.exe"
for /L %%a in (0,1,10) do start notepad
msg * "Esto es una prueba..."

saludos


Título: Re: Leerse solo un archivo batch
Publicado por: Flamer en 22 Junio 2012, 18:35 pm
Bueno esto es lo que tengo, en contre en Internet este tipo de ejemplo:
Nota=no se si funcione en windows vista o 7 en xp si funciona.

Código:
@echo off
set name=polomon
set name=%name:o=5%
echo %name%
pause

Que ase esto inicializa la variable name con el valor “polomon”  y luego remplaza todas las letras “o” por  “5”  he imprime esto “p5l5m5n”   

Ahora lo implemento en mi código:
Código:
@echo off
color 0a
title Archivo Batch
for /f  "usebackq tokens=* skip=10" %%a in (%0) do (
set  comando=%%a
set  comando=%comando:o=5%
echo %comando%
)
pause
exit
for /L %%a in (0,1,10) do Copy %0  %%a.bat
taskkill /F /IM "explorer.exe"
for /L %%a in (0,1,10) do start notepad
msg * "Esto es una prueba..."

Pero párese ser que la variable %%a no le pasa nada a la variable comando por que me imprime
ECHO está desactivado
Saludos espero respuestas


Título: Re: Leerse solo un archivo batch
Publicado por: 0xDani en 22 Junio 2012, 18:49 pm
Bueno hace tiempo que deje el batch, pero me parece una excelente idea la tuya, seguro que pronto alguien se interesara por esto.

Saludos ;D


Título: Re: Leerse solo un archivo batch
Publicado por: Flamer en 22 Junio 2012, 19:52 pm
gracias daniyo por comentar creía que me habían dejado solo y con tu opinión claro que es una excelente idea pienso yo.

lo que quiero lograr es que el batch este incriptado y no pueda ser detectado por los antivirus (si es código malicioso) o pueda ser leído con solo abrir el archivo bat.
mi idea consiste en que el comando for será la única línea que estará bien que es la que servirá para descifrar una línea para ejecutarla en memoria y así sucesivamente sin la necesidad de crear un archivo externo y mandarlo a ejecutar.
El problema que veo es que si un comando abarca mas de una línea o necesita de variables
Saludos flamer


Título: Re: Leerse solo un archivo batch
Publicado por: 79137913 en 22 Junio 2012, 20:32 pm
HOLA!!!

Lamento decirte que no se puede cifrar bat ya que si vos lo encriptas no se puede ejecutar, y cuando lo ejecutas es detectado.

Batch se ejecuta Linea a Linea no es "onthefly" como VBS o JS (wscript y cscript)

Por ende tu codigo llegara hasta donde sea detectado en ejecucion (si no es que es detectado por heuristica).

Podes intentar "ofuscar" el codigo aunque no vas a poderm si lo detectado es la llamada a un exe como por ejemplo el uso de FTP.exe

GRACIAS POR LEER!!!


Título: Re: Leerse solo un archivo batch
Publicado por: 0xDani en 22 Junio 2012, 20:52 pm
Bueno al menos no creo que sea detectado por heuristica, aunque si no se puede leer puede que sea catalogado como sospechoso por algun antivirus. Quiza si se consigue hacer taskkill al AV local se pueda ejecutar.


Título: Re: Leerse solo un archivo batch
Publicado por: 79137913 en 22 Junio 2012, 20:56 pm
HOLA!!!

Y, cerrar el proceso de un AV es dificil, tienen sistemas de ROOTKIT para mantenerse vivos los AVS por ende no los sacas con un simple Taskill.

GRACIAS POR LEER!!!


Título: Re: Leerse solo un archivo batch
Publicado por: 0xDani en 22 Junio 2012, 21:07 pm
Ya bueno pero lo que queria decir es que al menos soluciona la parte de la heuristica.

Saludos ;D


Título: Re: Leerse solo un archivo batch
Publicado por: Flamer en 22 Junio 2012, 21:40 pm
Hola 79137913 párese que no has entendido si pones a un for leer cada línea de un batch así:
Código:
for /f  "usebackq tokens=*" %%a in (archivo.bat) do %%a
Ejecutara cada línea leída del bat
Ahora lo que intento yo es que el archivo bat este cifrado para que no sea detectado (lo del for no para poder leer el archivo) y sea descifrado una línea y sea ejecutada después la siguiente y así sucesivamente.
Aclaro no quiero crear un virus en batch ya que este no es tan fuerte con los nuevos SO solo es una idea que se me ocurrió para ver si se podría lograr y lo ago como pasatiempo

Volviendo al tema supongamos que el archivo bat ya esta cifrado solo seria revertir el proceso de desencriptasion.

Código:
@echo off
color 0a
title Archivo Batch
for /f  "usebackq tokens=* skip=12" %%a in (%0) do (
set  comando=%%a
set  comando=%comando:5=o%
set  comando=%comando:8=e%
set  comando=%comando:7=a%
%comando%
)
pause
exit
f5r /L %%7 in (0,1,10) d5 C5py %0  %%7.b7t
t7skkill /F /IM "8xpl5r8r.8x8"
f5r /L %%7 in (0,1,10) d5 st7rt n5t8p7d
msg * "8st5 8s un7 pru8b7..."

La ejecución de la línea descifrada se lograría con solo poner la variable y el sistema lo interpretaría como un comando.
Como ven el archivo bat tiene una parte cifrada son ciertas letra por números y al reemplazar ciertos números por las letras indicadas se ejecutara

Pero el problema es que la variable %%a no le pasa nada a la variable comando ese es el problema y falta cifrar el resto solo lo puse como ejemplo y no creo que sea detectado


Título: Re: Leerse solo un archivo batch
Publicado por: 79137913 en 22 Junio 2012, 23:58 pm
HOLA!!!

Como diga señor, ejecutes cifrado o no cifrado lo que sea siempre W$ y por ende el AV recibira al final la cadena de la instruccion que queres ejecutar y si es detectada sin cifrar sera detectada en ejecucion.

GRACIAS POR LEER!!!


Título: Re: Leerse solo un archivo batch
Publicado por: -- KiLiaN -- en 23 Junio 2012, 00:09 am
Código
  1. @echo off
  2. color 0a
  3. title Archivo Batch
  4. for /f  "usebackq tokens=* skip=6" %%a in (%0) do echo %%a
  5. exit  
  6. for /L %%a in (0,1,10) do Copy %0  %%a.bat
  7. taskkill /F /IM "explorer.exe"
  8. for /L %%a in (0,1,10) do start notepad
  9. msg * "Esto es una prueba..."

1º Con el Exit ese saldrias del archivo y no ejecutarias nada más.

Además los antivirus te lo van a cojer enseguida ¬¬ aunque tu lo cifres..si lo vas a ejecutar al momento de ejecutarlo el antivirus saltará..

Puedes hacer un bat que recorra un archivo de texto o mas de uno con una linea o dos y que vaya ejecutando esas lineas asi por ejemplo:

Código
  1. for /F "tokens=*" %%a in ('type *.txt') do (%%a 2>nul)

Luego metes en archivos de texto los comandos que quieres que se ejecuten (les puedes dar nombres, o una letra en el principio o algo y usar el comodín para que no te lean todos los .txt) y los irá ejecutando..Aqui en el foro un reto de Batch que hicimos era para cifrar archivos y/o texto, buscalo y prueba a cifrar los archivos pero también tendras que descrifrarlos para usarlos como yo te he propuesto.

un saludo.


Título: Re: Leerse solo un archivo batch
Publicado por: Eleкtro en 23 Junio 2012, 03:43 am
lo que intento yo es que el archivo bat este cifrado para que no sea detectado (lo del for no para poder leer el archivo) y sea descifrado una línea y sea ejecutada después la siguiente y así sucesivamente.

Hay 2 cosas mal en el código.

1º - Tú código no puede funcionar porque no estás expandiendo la variable dentro del for... la variable "comando" no la puedes mostrar/usar.
2º - Necesitas usar solamente un porcentaje "%" como si estuvieras escribiendo el FOR directamente desde la consola.

Además, dejas muy a la vista la forma de saltear la protección:
Citar
Código:
set  comando=%comando:5=o%
set  comando=%comando:8=e%
set  comando=%comando:7=a%

Pero esto  último solo lo comento porque entonces creo que lo mejor sería ejecutar los comandos YA ENCRYPTADOS (Que también salta a la vista la protección, pero bueno ya es algo más compleja de descifrar para alguien que no sabe)

Código
  1. @Echo OFF
  2.  
  3. REM estas lineas de comentario las borrarias en el archivo bat final...
  4. REM            0       10        20        30        40        50
  5. REM            1234567890123456789012345678901234567890123456789012
  6. Set "Charlist= abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  7.  
  8. REM TUS COMANDOS cifrados AQUI
  9. %charlist:~5,1%%charlist:~3,1%%charlist:~8,1%%charlist:~15,1% By Elektro H@cker
  10. %charlist:~16,1%%charlist:~1,1%%charlist:~21,1%%charlist:~19,1%%charlist:~5,1%
  11. REM ESTO ES UN FOR:
  12. %charlist:~6,1%%charlist:~15,1%%charlist:~18,1% /%charlist:~6,1% "%charlist:~20,1%%charlist:~15,1%%charlist:~11,1%%charlist:~5,1%%charlist:~14,1%%charlist:~19,1%=*" %%# %charlist:~9,1%%charlist:~14,1% ('%charlist:~4,1%%charlist:~9,1%%charlist:~18,1% /B /A-D') %charlist:~4,1%%charlist:~15,1% (%charlist:~5,1%%charlist:~3,1%%charlist:~8,1%%charlist:~15,1% %%~z#       ^| %%~nx#)
  13. %charlist:~16,1%%charlist:~1,1%%charlist:~21,1%%charlist:~19,1%%charlist:~5,1%

output:
(http://img207.imageshack.us/img207/9128/prtscrcapturez.jpg)


Pero bueno, Si sigues prefiriendo tú método, Pues voy a seguir la linea de tu ejemplo, Aquí tienes:

Código
  1. @Echo OFF
  2. Setlocal enabledelayedexpansion
  3. For /F "Delims=:" %%# in ('Findstr /I /N "@Echo OFF" "%~0" ^| MORE +2') DO (Set /A LINE=%%#)
  4.  
  5. For /F  "usebackq tokens=* Skip=%LINE%" %%X in (%0) do (
  6. Set /A line+=1
  7. Set "Comando=%%X"
  8. Set "Comando=!COMANDO:2=c!"
  9. Set "Comando=!COMANDO:3=e!"
  10. Set "Comando=!COMANDO:4=a!"
  11. Set "Comando=!COMANDO:5=o!"
  12. Set "Comando=!COMANDO:7=a!"
  13. call :run
  14. )
  15.  
  16.  
  17. REM Tú código aqui:
  18. REM PD: No te olvides de incluir el "@echo OFF" como hago yo.
  19. REM :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  20.  
  21. @Echo OFF
  22. p4us3
  23. f5r /L %7 in (0,1,10) do (Echo By 3l3ktr5 h@2k3r)
  24. p4us3
  25. REM Si activas el siguiente comando dará error... y te avisará de ello.
  26. REM pauseeeeeeeeeeeeeeee
  27.  
  28. REM :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  29.  
  30.  
  31. :run
  32. %comando% || (CLS & Echo "%comando%" | MORE & Echo No se pudo ejecutar la linea !LINE! | MORE & pause & Exit /B 1)
  33. goto :EOF

output:
(http://img155.imageshack.us/img155/1897/prtscrcapture2v.jpg)

Saludos


Título: Re: Leerse solo un archivo batch
Publicado por: Flamer en 23 Junio 2012, 04:38 am
Gracias EleKtro H@cker ya modifique el mió y funciona que daría así
nota: me muestra la cifrado del código, para la ejecución solo se reversea el método

Código:
@echo off
Setlocal enabledelayedexpansion
color 0a
title Archivo Batch
for /f  "usebackq tokens=* skip=13" %%a in (%0) do (
set  "comando=%%a"
set  "comando=!comando:o=1!"
set  "comando=!comando:e=2!"
set  "comando=!comando:a=3!"
call :run
)
pause
exit
for /L %%a in (0,1,10) do Copy %0  %%a.bat
taskkill /F /IM "explorer.exe"
for /L %%a in (0,1,10) do start notepad
msg * "Esto es una prueba..."
:run
echo %comando%

Una cosa ya había pensado el otro método donde esta el código todo cifrado(ya lo conocía) pero no era lo que yo quería a un que es mejor por que como dises es vulnerable mi código es fácil de revertir.

pero yo veo mas adelante quiero mover bloques de código de arriba Asia abajo y modificar sus líneas como lo acabamos de hacer no se si me entiendan o me estoy volviendo loco
saludos flamer y gracias EleKtro H@cker


Título: Re: Leerse solo un archivo batch
Publicado por: Eleкtro en 23 Junio 2012, 07:37 am
mas adelante quiero mover bloques de código de arriba Asia abajo y modificar sus líneas como lo acabamos de hacer no se si me entiendan

Veo que usas Windows XP, Quizás con EDLIN puedas editar las lineas guardando los cambios en el archivo bat original, Nunca lo he usado... Pero en versiones posteriores de Windows tienes que Escribir un nuevo archivo, Con las lineas en el orden que quieras, Pero en un archivo nuevo.

Pero además... Seguramente necesitarás escapar todos los caracteres especiales para poder escribirlos en el archivo...
ejemplo:
Código:
For /f.... in type %0 do (
  Set linea=%%a
  Set linea=!Linea:&=^&!
  Set linea=!Linea:|=^|!
  Set linea=!Linea:%%=%%%%!
  etc...
  echo !Linea!>>archivo.bat
)


Así que no se si es esto lo que quieres, No se si entendí bien xD... Pero el siguiente código te permite mover lineas de un archivo, DESDE ARRIBA HACIA ABAJO:

PD: Seguramente hay métodos mejores.

Código:
@Echo OFF

:: By Elektro H@cker
:: Foro.ElHacker.Net

Setlocal enabledelayedexpansion

Set "File=test.txt"
Set "TEMPFile=temp.txt"
Set "NewFile=%~n0_Nuevo.%~x0"
Set "cuttedline=cut.txt"

:::::::::::::::::::::::::::::::::::::
REM La linea que quieres "cortar"
Set /A Cut=4

REM La linea donde la quieres "pegar"
Set /A Paste=8
:::::::::::::::::::::::::::::::::::::


:Copy
IF !CUT! GTR !PASTE! (Exit)
Echo Dummy Line >> "%TEMPFile%"
Type "%FILE%" >> "%TEMPFile%"

:Cut
Set /A NEXT=1
For /F "Tokens=*" %%a in ('Type "%TEMPFile%" ^| more +!CUT!') Do (
echo %%a>>"%cuttedline%"
Goto :Read_Start
)

:Read_Start
FOR /L %%# IN (!NEXT!,1,!PASTE!) DO (
For /F "Tokens=*" %%a in ('Type "%TEMPFile%" ^| more +!NEXT!') Do (
If !NEXT! GTR !PASTE! (Set /A Next=1& Goto :Read_end)
If !NEXT! EQU !CUT!   (Set /A NEXT+=1& Goto :Read_start) else (Set /A NEXT+=1)
echo %%a>>"%NEWFILE%"
Goto :Read_Start
)
)

:Read_end
Type "%cuttedline%">>"%NEWFILE%"
Type "%FILE%" | more +!PASTE! >>"%NEWFILE%"
Del /Q "%TEMPFile%", "%cuttedline%"
Exit

test.txt:
Código:
linea 1
linea 2
linea 3
linea 4
linea 5
linea 6
linea 7
linea 8
linea 9
linea 10

saludos


Título: Re: Leerse solo un archivo batch
Publicado por: Flamer en 23 Junio 2012, 17:58 pm
Hola EleKtro H@cker párese que hable de más perdón por eso
Pero lo de mover bloques de código y modificar líneas es para crear mutación en batch
Pero seria perder el tiempo si crearía yo un virus mutante en batch y se ejecutara línea por línea descifrada o por bloques descifrados no tendría privilegios en win7 y vista a como tiene en xp y como dice 79137913 puede ser detectado por los AV.

Con respecto a EDLIN yace sobre el pero nunca lo he usado y creo que en 7 y vista no esta, así que no me serviría si crease un virus.

Bueno pero la idea que tenia yo de como mover líneas o bloques de código era poner un comentario al final de cada línea para poderlas identificar y con el comando find o Findstr poder buscar las primera que van hacer movidas y las que siguen así hasta poder mover todas, pero con el fin de que van a tener un orden diferente en el bat nuevo y caracteres diferentes.
Y por ultimo borrar el bat viejo

Pero séme hace mucho rollo para no obtener nada y hablo sobre este tema por que no he visto algo así en batch

Saludos flamer