DEMIAN_ABRAXAS

Esteganografo_basico

May 1st, 2019
210
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 6.70 KB | None | 0 0
  1. @echo off
  2.  
  3. REM Segadorfelix DEMIAN_ABRAXAS
  4. REM Recomendable para archivos pequeños, menores a 10 MB.
  5. REM Se recomienda este tamaño, porque el "archivo en hexadecimal" pesa tres veces más que el original.
  6. REM Tamaño maximo de uso 30MB, aunque tarda bastante con este tamaño-
  7.  
  8. setlocal ENABLEDELAYEDEXPANSION
  9.  
  10. REM Inicialización de variables iterativas. Número de filas.
  11. REM Número de datos, de ultima linea. MD5 de log. Lineas log.
  12. REM Datos sueltos log. Archivos validos para repartir.
  13.  
  14. set /a cuent=0
  15. set "fil_num="
  16. set "pal_num="
  17. set "md_arch="
  18. set "md_line="
  19. set "md_rate="
  20. set "part_ar="
  21. set "allone="
  22.  
  23. REM Cuerpo del archivo.
  24. :inc
  25. echo.
  26. set /p "opce=Ocultar(1), Extraer(2)?: "
  27. IF %opce%==1 (call :cult) else (
  28. IF %opce%==2 (call :Exct) else (
  29. goto:EOF
  30. )
  31. )
  32. Del /F *.hex
  33. IF %opce%==2 (del /f *.datt)
  34. goto:EOF
  35.  
  36. REM Petición de archivo a ocultar.
  37. :cult
  38. echo.
  39. set /p "stegadf=Archivo a ocultar: "
  40. echo.
  41.  
  42. REM Guardar el número de lineas del archivo (en hexadecimal) a ocultar.
  43. IF exist "%stegadf%" (
  44. call :filtro "%stegadf%"
  45. IF "!pas!"=="0" (
  46. certutil -f -encodehex !stegadf! !stegadf!.hex 8
  47. (type "%stegadf%.hex" | find /c /v "")>number.txt
  48. <"number.txt" set /p "!stegadf!_num="
  49. ) else (
  50. goto inc
  51. ))
  52.  
  53. REM Creación del archivo .log-
  54. REM Petición de archivos donde ocultar.
  55. color 1A>!stegadf!.log
  56. echo.
  57. echo Tomar en cuenta que los archivos de 0KB o mayores a 30MB son filtrados.
  58. set /p "gruparch=Archivos donde ocultar: "
  59.  
  60. REM Guardar el número de lineas de los archivos (hexadecimal) donde ocultar.
  61. REM Guardar el número de datos de la ultima linea, de los archivos (hexadecimal) donde ocultar.
  62. FOR %%h IN (%gruparch%) DO (
  63. IF exist %%h (
  64. call :filtro %%h
  65. IF "!pas!"=="0" (
  66. set "allone=!allone! %%h"
  67. set /a cuent+=1
  68. certutil -f -encodehex %%h %%h.hex 8
  69.  
  70. (type %%h.hex | find /c /v "")>number.txt
  71. <"number.txt" set /p "d_num="
  72. set /a d_num-=1
  73. set "fil_num=!fil_num! !d_num!"
  74.  
  75. set runa=0
  76. call :preci %%h.hex
  77. set "pal_num=!pal_num! !runa!"
  78.  
  79. set /a cuent+=1
  80. )))
  81.  
  82. REM Archivos validos.
  83. set "gruparch=!allone!"
  84. Del /F number.txt
  85.  
  86. REM Proporción de los "fragmentos" del archivo.
  87. set /a secta=!!stegadf!_num!/%cuent%
  88. IF %secta%==0 (
  89. echo.
  90. echo El archivo: !stegadf! es muy pequeño, así que se descartara el ultimo o los ultimos archivo.
  91. echo.
  92. set /a secta=1
  93. )
  94.  
  95. REM Añadir a los archivos las partes del archivo original.
  96. set /a n=0
  97. set /a m=1
  98. set "allone="
  99. for /f "tokens=*" %%i in (!stegadf!.hex) do (
  100. set /a n+=1
  101. call :peso
  102. echo %%i>>!recep!.hex
  103. )
  104.  
  105. REM Decodifica el hex de los archivos finales y escribe los datos para el .log-
  106. REM MD5, n° lineas, n° de datos ultima linea.
  107. set /a n=0
  108. set /a m=0
  109. FOR %%b IN (%allone%) DO (
  110. certutil -f -decodehex %%b.hex steg_%%b
  111. (certutil -hashfile steg_%%b md5 | find /v ":")>>!stegadf!.log
  112. call :fnum
  113. call :pnum
  114. )
  115.  
  116. echo.
  117. echo Archivos donde esta el archivo !stegadf!: !allone! con el prefijo steg_
  118. echo Archivos con los datos para recuperar el archivo original: !stegadf!.log
  119.  
  120. goto:EOF
  121.  
  122. REM Fltra archivos mayores a 32 MB y de 0 KB.
  123. :filtro
  124. IF %~z1 GTR 32000000 (set pas=1) else (set pas=0)
  125. IF %~z1==0 (set pas=1)
  126. goto:EOF
  127.  
  128. REM Número de datos hexadecimales de la ultima linea.
  129. :preci
  130. IF %d_num%==0 (
  131. for /F "tokens=*" %%a in (%*) do (
  132. for %%x in (%%a) do (
  133. set /a runa+=1
  134. )
  135. )) else (
  136. for /F "tokens=* skip=%d_num%" %%a in (%*) do (
  137. for %%x in (%%a) do (
  138. set /a runa+=1
  139. )
  140. ))
  141. goto:EOF
  142.  
  143. REM Indica a que archivo añadir que parte.
  144. :peso
  145. IF !m! GTR !cuent! (set m=!cuent!)
  146. IF NOT !n! LEQ !secta! (
  147. set /a m+=1
  148. set /a secta+=!secta!
  149. )
  150. FOR /F "tokens=%m%" %%$ IN ("%gruparch%") DO (
  151. set recep=%%$
  152. call :allfr %%$
  153. )
  154. goto:EOF
  155.  
  156. REM Filtro del repetición de archivo.
  157. :allfr
  158. set /a cucu=0
  159. for %%Q IN (%allone%) DO (
  160. set /a cucu+=1
  161. )
  162. IF NOT %m%==%cucu%  (set "allone=!allone! %*")
  163. goto:EOF
  164.  
  165. REM Escribe el número de lineas en el .log-
  166. :fnum
  167. set /a n+=1
  168. FOR /F "tokens=%n%" %%k IN ("%fil_num%") DO (set d_num=%%k)
  169. echo !d_num!>>!stegadf!.log
  170. goto:EOF
  171.  
  172. REM Escribe el número de datos de la ultima linea en el .log-
  173. :pnum
  174. set /a m+=1
  175. FOR /F "tokens=%m%" %%k IN ("%pal_num%") DO (set runa=%%k)
  176. echo !runa!>>!stegadf!.log
  177. goto:EOF
  178.  
  179. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  180.  
  181. REM Petición de archivo .log-
  182. REM Petición del archivo oculto.
  183. :Exct
  184. echo.
  185. echo Asegurese que los archivos donde esta el archivo oculto, se encuentran en la carpeta actual.
  186. set /p "stegadf=Archivo .log para extraer: "
  187. echo.
  188. set /p "enfi=Nombre del archivo oculto (con extension): "
  189. echo.
  190.  
  191. REM Lee el archivo .log-
  192. for /F "tokens=*" %%# IN (%stegadf%) DO (
  193. call :assig %%#
  194. )
  195.  
  196. REM Recorre los datos MD5, para procesarlos.
  197. FOR %%_ IN (%md_arch%) DO (
  198. call :check_5 %%_
  199. )
  200. DEL /F chequer.txt
  201.  
  202. REM Evita sobreescritura.
  203. IF exist !stegadf!.datt (del /F !stegadf!.datt)
  204.  
  205. REM Codifica a hexadecimal los archivos, para unir las partes.
  206. set /a cuent=0
  207. for %%v IN (%part_ar%) DO (
  208. certutil -f -encodehex %%v %%v.hex 8
  209. call :impre_st
  210. )
  211.  
  212. REM Genera el archivo oculto a partir de su archivo en datos hexadecimales.
  213. certutil -f -decodehex !stegadf!.datt !enfi!
  214. goto:EOF
  215.  
  216. REM Asigna el conjunto de datos a una pseudo-matriz de datos.
  217. REM md_arch datos MD5
  218. REM md_line datos n° lineas.
  219. REM md_arch datos n° hexa ultima linea.
  220. :assig
  221. set /a cuent+=1
  222. IF %cuent%==1 (set "md_arch=!md_arch! %*")
  223. IF %cuent%==2 (set "md_line=!md_line! %*")
  224. IF %cuent%==3 (
  225. set "md_rate=!md_rate! %*"
  226. set /a cuent=0
  227. )
  228. goto:EOF
  229.  
  230. REM Encuentra los archivos con las partes a partir de su MD5.
  231. :check_5
  232. for /F %%u IN ('dir /B') DO (
  233. (certutil -hashfile %%u md5 | find /v ":")>chequer.txt
  234. <"chequer.txt" set /p "_chekk="
  235. IF !_chekk!==%* (
  236. IF NOT %%u==chequer.txt (set "part_ar=!part_ar! %%u")
  237. )
  238. )
  239. goto:EOF
  240.  
  241. REM Busca los datos al final de los archivos y los ordena en un archivo hexadecimal.
  242. :impre_st
  243. set /a nac=0
  244. set /a cuent+=1
  245. for /F "tokens=%cuent%" %%M IN ("%part_ar%") DO (set arca=%%M.hex)
  246. for /F "tokens=%cuent%" %%M IN ("%md_line%") DO (set arci=%%M)
  247. for /F "tokens=%cuent%" %%M IN ("%md_rate%") DO (set arco=%%M)
  248.  
  249. IF NOT !arci!==0 (
  250. FOR /F "tokens=* skip=%arci%" %%j IN (%arca%) DO (
  251. IF NOT !arco!==16 (for %%k IN (%%j) DO (
  252. set /a nac+=1
  253. IF !nac! GTR !arco! (echo %%k>>!stegadf!.datt)
  254. IF !nac!==16 set /a arco=!nac!
  255. ))
  256. IF exist !stegadf!.datt (
  257. IF not !arco!==!nac!  (echo %%j>>!stegadf!.datt)
  258. set /a nac=0
  259. ) else (
  260. color 1A>!stegadf!.datt
  261. ))) else (
  262. FOR /F "tokens=*" %%j IN (%arca%) DO (
  263. IF NOT !arco!==16 (for %%k IN (%%j) DO (
  264. set /a nac+=1
  265. IF !nac! GTR !arco! (echo %%k>>!stegadf!.datt)
  266. IF !nac!==16 set /a arco=!nac!
  267. ))
  268. IF exist !stegadf!.datt (
  269. IF not !arco!==!nac!  (echo %%j>>!stegadf!.datt)
  270. set /a nac=0
  271. ) else (
  272. color 1A>!stegadf!.datt
  273. ))
  274. )
  275. goto:EOF
Advertisement
Add Comment
Please, Sign In to add comment