Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @echo off
- REM Segadorfelix DEMIAN_ABRAXAS
- 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-
- setlocal ENABLEDELAYEDEXPANSION
- 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.
- set /a cuent=0
- set "fil_num="
- set "pal_num="
- set "md_arch="
- set "md_line="
- set "md_rate="
- set "part_ar="
- set "allone="
- REM Cuerpo del archivo.
- :inc
- echo.
- set /p "opce=Ocultar(1), Extraer(2)?: "
- 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
- echo.
- set /p "stegadf=Archivo a ocultar: "
- echo.
- 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
- (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
- echo.
- echo Tomar en cuenta que los archivos de 0KB o mayores a 30MB son filtrados.
- set /p "gruparch=Archivos donde ocultar: "
- 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
- (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: !stegadf! 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
- (certutil -hashfile steg_%%b md5 | find /v ":")>>!stegadf!.log
- call :fnum
- call :pnum
- )
- echo.
- echo Archivos donde esta el archivo !stegadf!: !allone! con el prefijo steg_
- echo Archivos con los datos para recuperar el archivo original: !stegadf!.log
- 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
- echo.
- echo Asegurese que los archivos donde esta el archivo oculto, se encuentran en la carpeta actual.
- set /p "stegadf=Archivo .log para extraer: "
- echo.
- set /p "enfi=Nombre del archivo oculto (con extension): "
- echo.
- 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
- call :impre_st
- )
- REM Genera el archivo oculto a partir de su archivo en datos hexadecimales.
- certutil -f -decodehex !stegadf!.datt !enfi!
- 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