Advertisement
DEMIAN_ABRAXAS

STEGANOF

May 1st, 2019
718
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Batch 13.46 KB | None | 0 0
  1. @echo off
  2.  
  3. setlocal ENABLEDELAYEDEXPANSION
  4.  
  5. REM Segadorfelix DEMIAN_ABRAXAS
  6. REM Recuerde usar archivos sin espacios en sus nombres.
  7. REM STEG, se refiere al nombre de este script.
  8. REM Puede reemplazarse por cualquier otro nombre en su uso
  9. REM .ext hace referencia a cualquier extensión de archivo .jpg .txt .mp4
  10. REM Se recomienda este tamaño, porque el "archivo en hexadecimal" pesa tres veces más que el original.
  11. REM Y la velocidad media de encriptado es de 1 KB cada 1,5 segundos.
  12. REM Tamaño maximo de uso 30MB, aunque tarda bastante con este tamaño-
  13. REM Recomendable para archivos pequeños, menores a 10 MB.
  14. REM Se recomienda este tamaño, porque el "archivo en hexadecimal" pesa tres veces más que el original.
  15. REM Tamaño maximo de uso 30MB, aunque tarda bastante con este tamaño-
  16.  
  17. REM Argumentos del Script.
  18. IF "%1"=="-e" (goto pimienta)
  19. IF "%1"=="-d" (goto laurel)
  20. IF "%1"=="-t" (goto testing)
  21. call :ayudados
  22. goto:EOF
  23.  
  24. REM "Ayuda" con los comandos y su uso.
  25. :ayudados
  26. chcp 65001 >NUL
  27. echo.
  28. echo STEGANOF: Script esteganografico. Ejecutese dentro de la carpeta con los archivos.
  29. echo Sintaxis:
  30. echo.
  31. echo '-e' Permite encriptar y ocultar el archivo en otros archivos, con una contraseña.
  32. echo Genera un archivo .log con el cual se puede recuperar el archivo oculto.
  33. echo.
  34. echo    STEG -e ARCHIVO_A_OCULTAR.ext CONTRASEÑA ARCHIVO2.ext ARCHIVO3.ext ARCHIVO4.ext
  35. echo.
  36. echo '-d' Permite extraer y desencriptar el archivo.
  37. echo.
  38. echo    STEG -d ARCHIVO.log CONTRASEÑA NOMBRE_DE_ARCHIVO_OCULTO.ext
  39. echo.
  40. echo '-t' Testea los archivos, para ver si el script puede funcionar en ellos.
  41. echo En caso de hallar algun archivo no compatible lo notifica. Si todos los
  42. echo archivos son compatibles el mensaje es nulo.
  43. echo.
  44. echo    STEG -t ARCHIVO_A_OCULTAR.ext ARCHIVO2.ext ARCHIVO3.ext ARCHIVO4.ext
  45. echo.
  46. echo El limite del Script esta cerca de los 30 MB.
  47. echo La velocidad varía alrededor de los 1 KB por cada 1,5 segundos. Por ello:
  48. echo Se advierte y recomienda el uso en archivos menores a 10 MB.
  49. echo.
  50. goto:EOF
  51.  
  52. REM Testeo de la viabilidad de los archivos.
  53. :testing
  54. IF "%2"=="" (
  55. echo Falta especificar el archivo a "ocultar."
  56. goto:EOF
  57. )
  58. IF NOT exist "%~2" (
  59. echo El archivo a ocultar no existe.
  60. goto:EOF
  61. )
  62. IF "%3"=="" (
  63. echo Falta especificar el archivo donde se oculta %2.
  64. goto:EOF
  65. )
  66. set  /a tula=0
  67. set "bandada="
  68. For %%G IN (%*) DO (
  69. call :tracta %%G
  70. )
  71. set "bandada=!contralit! !bandada!"
  72.  
  73. echo.
  74.  
  75. call :filtro %2
  76. IF !pas!==1 (
  77. echo %2 No es un archivo valido.
  78. goto:EOF
  79. )
  80.  
  81. set /A "secta=%~z2/(%tula%-2)"
  82. for %%X IN (%bandada%) DO (
  83.  
  84. IF exist %%X (
  85. call :filtro %%X
  86. IF !pas!==1 (
  87. echo %%X No es un archivo valido. Por defecto, pasa los 30 MB.
  88. )
  89.  
  90. call :rating %%X
  91. ) else (echo %%X No existe en la carpeta.)
  92. )
  93. goto:EOF
  94.  
  95. REM Filtro de (peso de archivo donde ocultar)+(peso de fragmento de archivo a ocultar)
  96. :rating
  97. set /A tula=%~z1+!secta!
  98. IF !tula! GTR 32000000 (Echo %* No es un archivo valido, porque la suma de su peso, con el fragmento oculto supera 30 MB.)
  99. goto:EOF
  100.  
  101. REM Gestiona: Oculta y encripta.
  102. :pimienta
  103. IF "%2"=="" (
  104. echo Falta especificar el archivo a ocultar.
  105. goto:EOF
  106. )
  107. IF NOT exist "%~2" (
  108. echo El archivo a ocultar no existe.
  109. goto:EOF
  110. )
  111. IF "%3"=="" (
  112. echo Falta especificar la contraseña.
  113. goto:EOF
  114. )
  115. IF "%4"=="" (
  116. echo Faltan archivos adicionales.
  117. goto:EOF
  118. )
  119.  
  120. set  /a tula=0
  121. set "bandada="
  122. For %%G IN (%*) DO (
  123. call :tracta %%G
  124. )
  125.  
  126. set opicx=1
  127. set "arcrip=!oculit!"
  128. set "contrat=!contralit!"
  129. call :princ
  130.  
  131. set opce=1
  132. set "stegadf=!arcrip!_crip.dll"
  133. set "gruparch=!bandada!"
  134. call :inc
  135.  
  136. DEL /F !arcrip!_crip.dll
  137.  
  138. set "arcrip=!stegadf!.log"
  139. call :princ
  140.  
  141. DEL /F !arcrip!
  142.  
  143. ren !arcrip!_crip.dll !oculit!.log
  144.  
  145. echo.
  146. echo Archivos donde esta el archivo !oculit!: !allone! con el prefijo steg_
  147. echo Archivos con los datos para recuperar el archivo original: !oculit!.log
  148. echo Recuerde que su contraseña es importante al desencriptar.
  149.  
  150. set "oculit="
  151. set "contralit="
  152. set "bandada="
  153.  
  154. goto:EOF
  155.  
  156. REM Gestiona: Extrae y desencripta.
  157. :laurel
  158. IF "%2"=="" (
  159. echo Falta especificar el archivo .log-
  160. goto:EOF
  161. )
  162. IF NOT exist "%~2" (
  163. echo El archivo .log no existe.
  164. goto:EOF
  165. )
  166. IF "%3"=="" (
  167. echo Falta especificar la contraseña.
  168. goto:EOF
  169. )
  170. IF "%4"=="" (
  171. echo Falta especificar el nombre del archivo a extraer.
  172. goto:EOF
  173. )
  174. IF NOT "%5"=="" (
  175. echo.
  176. echo Deja de escribir pendejadas. Vale!?
  177. echo.
  178. goto:EOF
  179. )
  180.  
  181. set  /a tula=0
  182. set "bandada="
  183. For %%G IN (%*) DO (
  184. call :tracta %%G
  185. )
  186.  
  187.  
  188. set opicx=2
  189. set "arcrip=!oculit!"
  190. set "contrat=!contralit!"
  191. call :princ
  192.  
  193. set opce=2
  194. set "stegadf=!arcrip!_decrip.dll"
  195. set "enfi=!bandada!"
  196. call :inc
  197.  
  198. DEL /F "!stegadf!"
  199.  
  200. set "arcrip=!enfi!"
  201. call :princ
  202.  
  203. DEL /F !arcrip!
  204. ren !arcrip!_decrip.dll !enfi!
  205.  
  206. echo.
  207. echo El archivo: !enfi! esta listo.
  208. echo.
  209.  
  210. set "oculit="
  211. set "contralit="
  212. set "bandada="
  213.  
  214. goto:EOF
  215.  
  216. REM Reparte los argumentos en variables.
  217. :tracta
  218. set /a tula+=1
  219. IF "%tula%"=="2" (set "oculit=%*")
  220. IF "%tula%"=="3" (set "contralit=%*")
  221. IF %tula% GTR 3 (
  222. IF "!bandada!"=="" (set "bandada=%*") else (set "bandada=!bandada! %*")
  223. )
  224. goto:EOF
  225.  
  226. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  227. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  228.  
  229. REM Inicializando variables iterativas.
  230.  
  231. REM Cuerpo del archivo.
  232. :princ
  233. set /a niu=0
  234. set /a coun=0
  235. set "dfg="
  236. call :clasea
  237. IF exist %arcrip% ((certutil -f -encodehex "%arcrip%" "%arcrip%.hex" 8)>NUL) else (
  238. goto princ
  239. )
  240. color 1A>"%arcrip%_crip.hex"
  241. IF %opicx%==1 (
  242. call :criper
  243. (certutil -f -decodehex "%arcrip%_crip.hex" "%arcrip%_crip.dll")>NUL
  244. )
  245. IF %opicx%==2 (
  246. call :decriper
  247. (certutil -f -decodehex "%arcrip%_crip.hex" "%arcrip%_decrip.dll")>NUL
  248. )
  249. del /F "%arcrip%.hex"
  250. del /F "%arcrip%_crip.hex"
  251. goto:EOF
  252.  
  253. REM Recorre linea a linea y ofusca el archivo en hexadecimal.
  254. :criper
  255. FOR /F "usebackq tokens=*" %%_ IN ("%arcrip%.hex") DO (
  256. call :oscu %%_
  257. )
  258. goto:EOF
  259.  
  260. REM Recorre linea a linea y desofusca el archivo en hexadecimal.
  261. :decriper
  262. FOR /F "usebackq tokens=*" %%_ IN ("%arcrip%.hex") DO (
  263. call :aclar %%_
  264. )
  265. goto:EOF
  266.  
  267. REM Petición de contraseña y conversión a hexadecimal.
  268. :clasea
  269. echo %contrat%>sea.dat
  270. (certutil -f -encodehex sea.dat sea_hex.dat 8)>NUL
  271. del /F sea.dat
  272. FOR /F "tokens=*" %%w IN  (sea_hex.dat) DO (set "dfg=!dfg! %%w")
  273. del sea_hex.dat
  274. for %%z IN (!dfg!) DO (
  275. set /a coun+=1
  276. )
  277. set /a coun+=1
  278. goto:EOF
  279.  
  280. REM Variación del Cifrado César. Cifrado de Vigenère
  281. REM Suma.
  282. :oscu
  283. IF "%*"=="" goto:EOF
  284. set /a niu+=1
  285. set "cof="
  286. FOR /F "tokens=%niu%" %%$ IN ("%dfg%") DO (set moder=%%$)
  287. set /a niu%%=!coun!
  288. for %%k IN (%*) DO (
  289. set /a jkl=0x%%k+0x!moder!
  290. set /a jkl%%=256
  291. call :hexx !jkl!
  292. set "cof=!cof! !jkl!"
  293. )
  294. echo %cof%>>"%arcrip%_crip.hex"
  295. goto:EOF
  296.  
  297. REM Variación del Cifrado César. Cifrado de Vigenère
  298. REM Resta.
  299. :aclar
  300. IF "%*"=="" goto:EOF
  301. set /a niu+=1
  302. set "cof="
  303. FOR /F "tokens=%niu%" %%$ IN ("%dfg%") DO (set moder=%%$)
  304. set /a niu%%=!coun!
  305. for %%k IN (%*) DO (
  306. set /a jkl=0x%%k-0x!moder!
  307. set /a jkl%%=256
  308. IF !jkl! LSS 0 set /a jkl=256+!jkl!
  309. call :hexx !jkl!
  310. set "cof=!cof! !jkl!"
  311. )
  312. echo %cof%>>"%arcrip%_crip.hex"
  313. goto:EOF
  314.  
  315. REM Conversor de decimal a hexadecimal.
  316. :hexx
  317. set /a ab=%1/16
  318. set /a zj=%1%%16
  319. IF %ab% GEQ 10 (
  320. IF %ab%==10 set ab=a
  321. IF %ab%==11 set ab=b
  322. IF %ab%==12 set ab=c
  323. IF %ab%==13 set ab=d
  324. IF %ab%==14 set ab=e
  325. IF %ab%==15 set ab=f
  326. )
  327. IF %zj% GEQ 10 (
  328. IF %zj%==10 set zj=a
  329. IF %zj%==11 set zj=b
  330. IF %zj%==12 set zj=c
  331. IF %zj%==13 set zj=d
  332. IF %zj%==14 set zj=e
  333. IF %zj%==15 set zj=f
  334. )
  335. set jkl=!ab!!zj!
  336. goto:EOF
  337.  
  338. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  339. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  340.  
  341. REM Inicialización de variables iterativas. Número de filas.
  342. REM Número de datos, de ultima linea. MD5 de log. Lineas log.
  343. REM Datos sueltos log. Archivos validos para repartir.
  344.  
  345. REM Cuerpo del archivo.
  346. :inc
  347. set /a cuent=0
  348. set "fil_num="
  349. set "pal_num="
  350. set "md_arch="
  351. set "md_line="
  352. set "md_rate="
  353. set "part_ar="
  354. set "allone="
  355. IF %opce%==1 (call :cult) else (
  356. IF %opce%==2 (call :Exct) else (
  357. goto:EOF
  358. )
  359. )
  360. Del /F *.hex
  361. IF %opce%==2 (del /f *.datt)
  362. goto:EOF
  363.  
  364. REM Petición de archivo a ocultar.
  365. :cult
  366.  
  367. REM Guardar el número de lineas del archivo (en hexadecimal) a ocultar.
  368. IF exist %stegadf% (
  369. call :filtro "%stegadf%"
  370. IF "!pas!"=="0" (
  371. (certutil -f -encodehex !stegadf! !stegadf!.hex 8)>NUL
  372. (type "%stegadf%.hex" | find /c /v "")>number.txt
  373. <"number.txt" set /p "!stegadf!_num="
  374. ) else (
  375. goto inc
  376. ))
  377.  
  378. REM Creación del archivo .log-
  379. REM Petición de archivos donde ocultar.
  380. color 1A>!stegadf!.log
  381.  
  382. REM Guardar el número de lineas de los archivos (hexadecimal) donde ocultar.
  383. REM Guardar el número de datos de la ultima linea, de los archivos (hexadecimal) donde ocultar.
  384. FOR %%h IN (%gruparch%) DO (
  385. IF exist %%h (
  386. call :filtro %%h
  387. IF "!pas!"=="0" (
  388. set "allone=!allone! %%h"
  389. set /a cuent+=1
  390. (certutil -f -encodehex %%h %%h.hex 8)>NUL
  391.  
  392. (type %%h.hex | find /c /v "")>number.txt
  393. <"number.txt" set /p "d_num="
  394. set /a d_num-=1
  395. set "fil_num=!fil_num! !d_num!"
  396.  
  397. set runa=0
  398. call :preci %%h.hex
  399. set "pal_num=!pal_num! !runa!"
  400.  
  401. set /a cuent+=1
  402. )))
  403.  
  404. REM Archivos validos.
  405. set "gruparch=!allone!"
  406. Del /F number.txt
  407.  
  408. REM Proporción de los "fragmentos" del archivo.
  409. set /a secta=!!stegadf!_num!/%cuent%
  410. IF %secta%==0 (
  411. echo.
  412. echo El archivo: !oculit! es muy pequeño, así que se descartara el ultimo o los ultimos archivo.
  413. echo.
  414. set /a secta=1
  415. )
  416.  
  417. REM Añadir a los archivos las partes del archivo original.
  418. set /a n=0
  419. set /a m=1
  420. set "allone="
  421. for /f "tokens=*" %%i in (!stegadf!.hex) do (
  422. set /a n+=1
  423. call :peso
  424. echo %%i>>!recep!.hex
  425. )
  426.  
  427. REM Decodifica el hex de los archivos finales y escribe los datos para el .log-
  428. REM MD5, n° lineas, n° de datos ultima linea.
  429. set /a n=0
  430. set /a m=0
  431. FOR %%b IN (%allone%) DO (
  432. (certutil -f -decodehex %%b.hex steg_%%b)>NUL
  433. (certutil -hashfile steg_%%b md5 | find /v ":")>>!stegadf!.log
  434. call :fnum
  435. call :pnum
  436. )
  437.  
  438. goto:EOF
  439.  
  440. REM Fltra archivos mayores a 32 MB y de 0 KB.
  441. :filtro
  442. IF %~z1 GTR 32000000 (set pas=1) else (set pas=0)
  443. IF %~z1==0 (set pas=1)
  444. goto:EOF
  445.  
  446. REM Número de datos hexadecimales de la ultima linea.
  447. :preci
  448. IF %d_num%==0 (
  449. for /F "tokens=*" %%a in (%*) do (
  450. for %%x in (%%a) do (
  451. set /a runa+=1
  452. )
  453. )) else (
  454. for /F "tokens=* skip=%d_num%" %%a in (%*) do (
  455. for %%x in (%%a) do (
  456. set /a runa+=1
  457. )
  458. ))
  459. goto:EOF
  460.  
  461. REM Indica a que archivo añadir que parte.
  462. :peso
  463. IF !m! GTR !cuent! (set m=!cuent!)
  464. IF NOT !n! LEQ !secta! (
  465. set /a m+=1
  466. set /a secta+=!secta!
  467. )
  468. FOR /F "tokens=%m%" %%$ IN ("%gruparch%") DO (
  469. set recep=%%$
  470. call :allfr %%$
  471. )
  472. goto:EOF
  473.  
  474. REM Filtro del repetición de archivo.
  475. :allfr
  476. set /a cucu=0
  477. for %%Q IN (%allone%) DO (
  478. set /a cucu+=1
  479. )
  480. IF NOT %m%==%cucu%  (set "allone=!allone! %*")
  481. goto:EOF
  482.  
  483. REM Escribe el número de lineas en el .log-
  484. :fnum
  485. set /a n+=1
  486. FOR /F "tokens=%n%" %%k IN ("%fil_num%") DO (set d_num=%%k)
  487. echo !d_num!>>!stegadf!.log
  488. goto:EOF
  489.  
  490. REM Escribe el número de datos de la ultima linea en el .log-
  491. :pnum
  492. set /a m+=1
  493. FOR /F "tokens=%m%" %%k IN ("%pal_num%") DO (set runa=%%k)
  494. echo !runa!>>!stegadf!.log
  495. goto:EOF
  496.  
  497. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  498.  
  499. REM Petición de archivo .log-
  500. REM Petición del archivo oculto.
  501. :Exct
  502.  
  503. REM Lee el archivo .log-
  504. for /F "tokens=*" %%# IN (%stegadf%) DO (
  505. call :assig %%#
  506. )
  507.  
  508. REM Recorre los datos MD5, para procesarlos.
  509. FOR %%_ IN (%md_arch%) DO (
  510. call :check_5 %%_
  511. )
  512. DEL /F chequer.txt
  513.  
  514. REM Evita sobreescritura.
  515. IF exist !stegadf!.datt (del /F !stegadf!.datt)
  516.  
  517. REM Codifica a hexadecimal los archivos, para unir las partes.
  518. set /a cuent=0
  519. for %%v IN (%part_ar%) DO (
  520. (certutil -f -encodehex %%v %%v.hex 8)>NUL
  521. call :impre_st
  522. )
  523.  
  524. REM Genera el archivo oculto a partir de su archivo en datos hexadecimales.
  525. (certutil -f -decodehex !stegadf!.datt !enfi!)>NUL
  526. goto:EOF
  527.  
  528. REM Asigna el conjunto de datos a una pseudo-matriz de datos.
  529. REM md_arch datos MD5
  530. REM md_line datos n° lineas.
  531. REM md_arch datos n° hexa ultima linea.
  532. :assig
  533. set /a cuent+=1
  534. IF %cuent%==1 (set "md_arch=!md_arch! %*")
  535. IF %cuent%==2 (set "md_line=!md_line! %*")
  536. IF %cuent%==3 (
  537. set "md_rate=!md_rate! %*"
  538. set /a cuent=0
  539. )
  540. goto:EOF
  541.  
  542. REM Encuentra los archivos con las partes a partir de su MD5.
  543. :check_5
  544. for /F %%u IN ('dir /B') DO (
  545. (certutil -hashfile %%u md5 | find /v ":")>chequer.txt
  546. <"chequer.txt" set /p "_chekk="
  547. IF !_chekk!==%* (
  548. IF NOT %%u==chequer.txt (set "part_ar=!part_ar! %%u")
  549. )
  550. )
  551. goto:EOF
  552.  
  553. REM Busca los datos al final de los archivos y los ordena en un archivo hexadecimal.
  554. :impre_st
  555. set /a nac=0
  556. set /a cuent+=1
  557. for /F "tokens=%cuent%" %%M IN ("%part_ar%") DO (set arca=%%M.hex)
  558. for /F "tokens=%cuent%" %%M IN ("%md_line%") DO (set arci=%%M)
  559. for /F "tokens=%cuent%" %%M IN ("%md_rate%") DO (set arco=%%M)
  560.  
  561. IF NOT !arci!==0 (
  562. FOR /F "tokens=* skip=%arci%" %%j IN (%arca%) DO (
  563. IF NOT !arco!==16 (for %%k IN (%%j) DO (
  564. set /a nac+=1
  565. IF !nac! GTR !arco! (echo %%k>>!stegadf!.datt)
  566. IF !nac!==16 set /a arco=!nac!
  567. ))
  568. IF exist !stegadf!.datt (
  569. IF not !arco!==!nac!  (echo %%j>>!stegadf!.datt)
  570. set /a nac=0
  571. ) else (
  572. color 1A>!stegadf!.datt
  573. ))) else (
  574. FOR /F "tokens=*" %%j IN (%arca%) DO (
  575. IF NOT !arco!==16 (for %%k IN (%%j) DO (
  576. set /a nac+=1
  577. IF !nac! GTR !arco! (echo %%k>>!stegadf!.datt)
  578. IF !nac!==16 set /a arco=!nac!
  579. ))
  580. IF exist !stegadf!.datt (
  581. IF not !arco!==!nac!  (echo %%j>>!stegadf!.datt)
  582. set /a nac=0
  583. ) else (
  584. color 1A>!stegadf!.datt
  585. ))
  586. )
  587. goto:EOF
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement