Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @echo off
- setlocal ENABLEDELAYEDEXPANSION
- REM Segadorfelix DEMIAN_ABRAXAS
- REM Recuerde usar archivos sin espacios en sus nombres.
- REM STEG, se refiere al nombre de este script.
- REM Puede reemplazarse por cualquier otro nombre en su uso
- REM .ext hace referencia a cualquier extensión de archivo .jpg .txt .mp4
- REM Se recomienda este tamaño, porque el "archivo en hexadecimal" pesa tres veces más que el original.
- REM Y la velocidad media de encriptado es de 1 KB cada 1,5 segundos.
- REM Tamaño maximo de uso 30MB, aunque tarda bastante con este tamaño-
- REM Recomendable para archivos pequeños, menores a 10 MB.
- REM Se recomienda este tamaño, porque el "archivo en hexadecimal" pesa tres veces más que el original.
- REM Tamaño maximo de uso 30MB, aunque tarda bastante con este tamaño-
- REM Argumentos del Script.
- IF "%1"=="-e" (goto pimienta)
- IF "%1"=="-d" (goto laurel)
- IF "%1"=="-t" (goto testing)
- call :ayudados
- goto:EOF
- REM "Ayuda" con los comandos y su uso.
- :ayudados
- chcp 65001 >NUL
- echo.
- echo STEGANOF: Script esteganografico. Ejecutese dentro de la carpeta con los archivos.
- echo Sintaxis:
- echo.
- echo '-e' Permite encriptar y ocultar el archivo en otros archivos, con una contraseña.
- echo Genera un archivo .log con el cual se puede recuperar el archivo oculto.
- echo.
- echo STEG -e ARCHIVO_A_OCULTAR.ext CONTRASEÑA ARCHIVO2.ext ARCHIVO3.ext ARCHIVO4.ext
- echo.
- echo '-d' Permite extraer y desencriptar el archivo.
- echo.
- echo STEG -d ARCHIVO.log CONTRASEÑA NOMBRE_DE_ARCHIVO_OCULTO.ext
- echo.
- echo '-t' Testea los archivos, para ver si el script puede funcionar en ellos.
- echo En caso de hallar algun archivo no compatible lo notifica. Si todos los
- echo archivos son compatibles el mensaje es nulo.
- echo.
- echo STEG -t ARCHIVO_A_OCULTAR.ext ARCHIVO2.ext ARCHIVO3.ext ARCHIVO4.ext
- echo.
- echo El limite del Script esta cerca de los 30 MB.
- echo La velocidad varía alrededor de los 1 KB por cada 1,5 segundos. Por ello:
- echo Se advierte y recomienda el uso en archivos menores a 10 MB.
- echo.
- goto:EOF
- REM Testeo de la viabilidad de los archivos.
- :testing
- IF "%2"=="" (
- echo Falta especificar el archivo a "ocultar."
- goto:EOF
- )
- IF NOT exist "%~2" (
- echo El archivo a ocultar no existe.
- goto:EOF
- )
- IF "%3"=="" (
- echo Falta especificar el archivo donde se oculta %2.
- goto:EOF
- )
- set /a tula=0
- set "bandada="
- For %%G IN (%*) DO (
- call :tracta %%G
- )
- set "bandada=!contralit! !bandada!"
- echo.
- call :filtro %2
- IF !pas!==1 (
- echo %2 No es un archivo valido.
- goto:EOF
- )
- set /A "secta=%~z2/(%tula%-2)"
- for %%X IN (%bandada%) DO (
- IF exist %%X (
- call :filtro %%X
- IF !pas!==1 (
- echo %%X No es un archivo valido. Por defecto, pasa los 30 MB.
- )
- call :rating %%X
- ) else (echo %%X No existe en la carpeta.)
- )
- goto:EOF
- REM Filtro de (peso de archivo donde ocultar)+(peso de fragmento de archivo a ocultar)
- :rating
- set /A tula=%~z1+!secta!
- IF !tula! GTR 32000000 (Echo %* No es un archivo valido, porque la suma de su peso, con el fragmento oculto supera 30 MB.)
- goto:EOF
- REM Gestiona: Oculta y encripta.
- :pimienta
- IF "%2"=="" (
- echo Falta especificar el archivo a ocultar.
- goto:EOF
- )
- IF NOT exist "%~2" (
- echo El archivo a ocultar no existe.
- goto:EOF
- )
- IF "%3"=="" (
- echo Falta especificar la contraseña.
- goto:EOF
- )
- IF "%4"=="" (
- echo Faltan archivos adicionales.
- goto:EOF
- )
- set /a tula=0
- set "bandada="
- For %%G IN (%*) DO (
- call :tracta %%G
- )
- set opicx=1
- set "arcrip=!oculit!"
- set "contrat=!contralit!"
- call :princ
- set opce=1
- set "stegadf=!arcrip!_crip.dll"
- set "gruparch=!bandada!"
- call :inc
- DEL /F !arcrip!_crip.dll
- set "arcrip=!stegadf!.log"
- call :princ
- DEL /F !arcrip!
- ren !arcrip!_crip.dll !oculit!.log
- echo.
- echo Archivos donde esta el archivo !oculit!: !allone! con el prefijo steg_
- echo Archivos con los datos para recuperar el archivo original: !oculit!.log
- echo Recuerde que su contraseña es importante al desencriptar.
- set "oculit="
- set "contralit="
- set "bandada="
- goto:EOF
- REM Gestiona: Extrae y desencripta.
- :laurel
- IF "%2"=="" (
- echo Falta especificar el archivo .log-
- goto:EOF
- )
- IF NOT exist "%~2" (
- echo El archivo .log no existe.
- goto:EOF
- )
- IF "%3"=="" (
- echo Falta especificar la contraseña.
- goto:EOF
- )
- IF "%4"=="" (
- echo Falta especificar el nombre del archivo a extraer.
- goto:EOF
- )
- IF NOT "%5"=="" (
- echo.
- echo Deja de escribir pendejadas. Vale!?
- echo.
- goto:EOF
- )
- set /a tula=0
- set "bandada="
- For %%G IN (%*) DO (
- call :tracta %%G
- )
- set opicx=2
- set "arcrip=!oculit!"
- set "contrat=!contralit!"
- call :princ
- set opce=2
- set "stegadf=!arcrip!_decrip.dll"
- set "enfi=!bandada!"
- call :inc
- DEL /F "!stegadf!"
- set "arcrip=!enfi!"
- call :princ
- DEL /F !arcrip!
- ren !arcrip!_decrip.dll !enfi!
- echo.
- echo El archivo: !enfi! esta listo.
- echo.
- set "oculit="
- set "contralit="
- set "bandada="
- goto:EOF
- REM Reparte los argumentos en variables.
- :tracta
- set /a tula+=1
- IF "%tula%"=="2" (set "oculit=%*")
- IF "%tula%"=="3" (set "contralit=%*")
- IF %tula% GTR 3 (
- IF "!bandada!"=="" (set "bandada=%*") else (set "bandada=!bandada! %*")
- )
- goto:EOF
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- REM Inicializando variables iterativas.
- REM Cuerpo del archivo.
- :princ
- set /a niu=0
- set /a coun=0
- set "dfg="
- call :clasea
- IF exist %arcrip% ((certutil -f -encodehex "%arcrip%" "%arcrip%.hex" 8)>NUL) else (
- goto princ
- )
- color 1A>"%arcrip%_crip.hex"
- IF %opicx%==1 (
- call :criper
- (certutil -f -decodehex "%arcrip%_crip.hex" "%arcrip%_crip.dll")>NUL
- )
- IF %opicx%==2 (
- call :decriper
- (certutil -f -decodehex "%arcrip%_crip.hex" "%arcrip%_decrip.dll")>NUL
- )
- del /F "%arcrip%.hex"
- del /F "%arcrip%_crip.hex"
- goto:EOF
- REM Recorre linea a linea y ofusca el archivo en hexadecimal.
- :criper
- FOR /F "usebackq tokens=*" %%_ IN ("%arcrip%.hex") DO (
- call :oscu %%_
- )
- goto:EOF
- REM Recorre linea a linea y desofusca el archivo en hexadecimal.
- :decriper
- FOR /F "usebackq tokens=*" %%_ IN ("%arcrip%.hex") DO (
- call :aclar %%_
- )
- goto:EOF
- REM Petición de contraseña y conversión a hexadecimal.
- :clasea
- echo %contrat%>sea.dat
- (certutil -f -encodehex sea.dat sea_hex.dat 8)>NUL
- del /F sea.dat
- FOR /F "tokens=*" %%w IN (sea_hex.dat) DO (set "dfg=!dfg! %%w")
- del sea_hex.dat
- for %%z IN (!dfg!) DO (
- set /a coun+=1
- )
- set /a coun+=1
- goto:EOF
- REM Variación del Cifrado César. Cifrado de Vigenère
- REM Suma.
- :oscu
- IF "%*"=="" goto:EOF
- set /a niu+=1
- set "cof="
- FOR /F "tokens=%niu%" %%$ IN ("%dfg%") DO (set moder=%%$)
- set /a niu%%=!coun!
- for %%k IN (%*) DO (
- set /a jkl=0x%%k+0x!moder!
- set /a jkl%%=256
- call :hexx !jkl!
- set "cof=!cof! !jkl!"
- )
- echo %cof%>>"%arcrip%_crip.hex"
- goto:EOF
- REM Variación del Cifrado César. Cifrado de Vigenère
- REM Resta.
- :aclar
- IF "%*"=="" goto:EOF
- set /a niu+=1
- set "cof="
- FOR /F "tokens=%niu%" %%$ IN ("%dfg%") DO (set moder=%%$)
- set /a niu%%=!coun!
- for %%k IN (%*) DO (
- set /a jkl=0x%%k-0x!moder!
- set /a jkl%%=256
- IF !jkl! LSS 0 set /a jkl=256+!jkl!
- call :hexx !jkl!
- set "cof=!cof! !jkl!"
- )
- echo %cof%>>"%arcrip%_crip.hex"
- goto:EOF
- REM Conversor de decimal a hexadecimal.
- :hexx
- set /a ab=%1/16
- set /a zj=%1%%16
- IF %ab% GEQ 10 (
- IF %ab%==10 set ab=a
- IF %ab%==11 set ab=b
- IF %ab%==12 set ab=c
- IF %ab%==13 set ab=d
- IF %ab%==14 set ab=e
- IF %ab%==15 set ab=f
- )
- IF %zj% GEQ 10 (
- IF %zj%==10 set zj=a
- IF %zj%==11 set zj=b
- IF %zj%==12 set zj=c
- IF %zj%==13 set zj=d
- IF %zj%==14 set zj=e
- IF %zj%==15 set zj=f
- )
- set jkl=!ab!!zj!
- goto:EOF
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- REM Inicialización de variables iterativas. Número de filas.
- REM Número de datos, de ultima linea. MD5 de log. Lineas log.
- REM Datos sueltos log. Archivos validos para repartir.
- REM Cuerpo del archivo.
- :inc
- set /a cuent=0
- set "fil_num="
- set "pal_num="
- set "md_arch="
- set "md_line="
- set "md_rate="
- set "part_ar="
- set "allone="
- IF %opce%==1 (call :cult) else (
- IF %opce%==2 (call :Exct) else (
- goto:EOF
- )
- )
- Del /F *.hex
- IF %opce%==2 (del /f *.datt)
- goto:EOF
- REM Petición de archivo a ocultar.
- :cult
- REM Guardar el número de lineas del archivo (en hexadecimal) a ocultar.
- IF exist %stegadf% (
- call :filtro "%stegadf%"
- IF "!pas!"=="0" (
- (certutil -f -encodehex !stegadf! !stegadf!.hex 8)>NUL
- (type "%stegadf%.hex" | find /c /v "")>number.txt
- <"number.txt" set /p "!stegadf!_num="
- ) else (
- goto inc
- ))
- REM Creación del archivo .log-
- REM Petición de archivos donde ocultar.
- color 1A>!stegadf!.log
- REM Guardar el número de lineas de los archivos (hexadecimal) donde ocultar.
- REM Guardar el número de datos de la ultima linea, de los archivos (hexadecimal) donde ocultar.
- FOR %%h IN (%gruparch%) DO (
- IF exist %%h (
- call :filtro %%h
- IF "!pas!"=="0" (
- set "allone=!allone! %%h"
- set /a cuent+=1
- (certutil -f -encodehex %%h %%h.hex 8)>NUL
- (type %%h.hex | find /c /v "")>number.txt
- <"number.txt" set /p "d_num="
- set /a d_num-=1
- set "fil_num=!fil_num! !d_num!"
- set runa=0
- call :preci %%h.hex
- set "pal_num=!pal_num! !runa!"
- set /a cuent+=1
- )))
- REM Archivos validos.
- set "gruparch=!allone!"
- Del /F number.txt
- REM Proporción de los "fragmentos" del archivo.
- set /a secta=!!stegadf!_num!/%cuent%
- IF %secta%==0 (
- echo.
- echo El archivo: !oculit! es muy pequeño, así que se descartara el ultimo o los ultimos archivo.
- echo.
- set /a secta=1
- )
- REM Añadir a los archivos las partes del archivo original.
- set /a n=0
- set /a m=1
- set "allone="
- for /f "tokens=*" %%i in (!stegadf!.hex) do (
- set /a n+=1
- call :peso
- echo %%i>>!recep!.hex
- )
- REM Decodifica el hex de los archivos finales y escribe los datos para el .log-
- REM MD5, n° lineas, n° de datos ultima linea.
- set /a n=0
- set /a m=0
- FOR %%b IN (%allone%) DO (
- (certutil -f -decodehex %%b.hex steg_%%b)>NUL
- (certutil -hashfile steg_%%b md5 | find /v ":")>>!stegadf!.log
- call :fnum
- call :pnum
- )
- goto:EOF
- REM Fltra archivos mayores a 32 MB y de 0 KB.
- :filtro
- IF %~z1 GTR 32000000 (set pas=1) else (set pas=0)
- IF %~z1==0 (set pas=1)
- goto:EOF
- REM Número de datos hexadecimales de la ultima linea.
- :preci
- IF %d_num%==0 (
- for /F "tokens=*" %%a in (%*) do (
- for %%x in (%%a) do (
- set /a runa+=1
- )
- )) else (
- for /F "tokens=* skip=%d_num%" %%a in (%*) do (
- for %%x in (%%a) do (
- set /a runa+=1
- )
- ))
- goto:EOF
- REM Indica a que archivo añadir que parte.
- :peso
- IF !m! GTR !cuent! (set m=!cuent!)
- IF NOT !n! LEQ !secta! (
- set /a m+=1
- set /a secta+=!secta!
- )
- FOR /F "tokens=%m%" %%$ IN ("%gruparch%") DO (
- set recep=%%$
- call :allfr %%$
- )
- goto:EOF
- REM Filtro del repetición de archivo.
- :allfr
- set /a cucu=0
- for %%Q IN (%allone%) DO (
- set /a cucu+=1
- )
- IF NOT %m%==%cucu% (set "allone=!allone! %*")
- goto:EOF
- REM Escribe el número de lineas en el .log-
- :fnum
- set /a n+=1
- FOR /F "tokens=%n%" %%k IN ("%fil_num%") DO (set d_num=%%k)
- echo !d_num!>>!stegadf!.log
- goto:EOF
- REM Escribe el número de datos de la ultima linea en el .log-
- :pnum
- set /a m+=1
- FOR /F "tokens=%m%" %%k IN ("%pal_num%") DO (set runa=%%k)
- echo !runa!>>!stegadf!.log
- goto:EOF
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- REM Petición de archivo .log-
- REM Petición del archivo oculto.
- :Exct
- REM Lee el archivo .log-
- for /F "tokens=*" %%# IN (%stegadf%) DO (
- call :assig %%#
- )
- REM Recorre los datos MD5, para procesarlos.
- FOR %%_ IN (%md_arch%) DO (
- call :check_5 %%_
- )
- DEL /F chequer.txt
- REM Evita sobreescritura.
- IF exist !stegadf!.datt (del /F !stegadf!.datt)
- REM Codifica a hexadecimal los archivos, para unir las partes.
- set /a cuent=0
- for %%v IN (%part_ar%) DO (
- (certutil -f -encodehex %%v %%v.hex 8)>NUL
- call :impre_st
- )
- REM Genera el archivo oculto a partir de su archivo en datos hexadecimales.
- (certutil -f -decodehex !stegadf!.datt !enfi!)>NUL
- goto:EOF
- REM Asigna el conjunto de datos a una pseudo-matriz de datos.
- REM md_arch datos MD5
- REM md_line datos n° lineas.
- REM md_arch datos n° hexa ultima linea.
- :assig
- set /a cuent+=1
- IF %cuent%==1 (set "md_arch=!md_arch! %*")
- IF %cuent%==2 (set "md_line=!md_line! %*")
- IF %cuent%==3 (
- set "md_rate=!md_rate! %*"
- set /a cuent=0
- )
- goto:EOF
- REM Encuentra los archivos con las partes a partir de su MD5.
- :check_5
- for /F %%u IN ('dir /B') DO (
- (certutil -hashfile %%u md5 | find /v ":")>chequer.txt
- <"chequer.txt" set /p "_chekk="
- IF !_chekk!==%* (
- IF NOT %%u==chequer.txt (set "part_ar=!part_ar! %%u")
- )
- )
- goto:EOF
- REM Busca los datos al final de los archivos y los ordena en un archivo hexadecimal.
- :impre_st
- set /a nac=0
- set /a cuent+=1
- for /F "tokens=%cuent%" %%M IN ("%part_ar%") DO (set arca=%%M.hex)
- for /F "tokens=%cuent%" %%M IN ("%md_line%") DO (set arci=%%M)
- for /F "tokens=%cuent%" %%M IN ("%md_rate%") DO (set arco=%%M)
- IF NOT !arci!==0 (
- FOR /F "tokens=* skip=%arci%" %%j IN (%arca%) DO (
- IF NOT !arco!==16 (for %%k IN (%%j) DO (
- set /a nac+=1
- IF !nac! GTR !arco! (echo %%k>>!stegadf!.datt)
- IF !nac!==16 set /a arco=!nac!
- ))
- IF exist !stegadf!.datt (
- IF not !arco!==!nac! (echo %%j>>!stegadf!.datt)
- set /a nac=0
- ) else (
- color 1A>!stegadf!.datt
- ))) else (
- FOR /F "tokens=*" %%j IN (%arca%) DO (
- IF NOT !arco!==16 (for %%k IN (%%j) DO (
- set /a nac+=1
- IF !nac! GTR !arco! (echo %%k>>!stegadf!.datt)
- IF !nac!==16 set /a arco=!nac!
- ))
- IF exist !stegadf!.datt (
- IF not !arco!==!nac! (echo %%j>>!stegadf!.datt)
- set /a nac=0
- ) else (
- color 1A>!stegadf!.datt
- ))
- )
- goto:EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement