ESTEGANOGRAFÍA: Ocultar un archivo dentro de otro [ECHO]
Publicado: 02 Dic 2014, 16:10
Un buen día a todos, aunque la esteganografía ya va desde hace muchos años atrás, tal conocimiento lo obtuve hace unos tres años, pero lo aplicaba mediante la consola de windows CMD. Ahora he realizado una aplicación para ello.
La denominé Private File, y sirve para esconder solo archivos comprimidos dentro de una imagen. alcambiar de extensiones se visualiza el archivo que se encuentra dentro de la imagen y si se cambia la extensión por el de la imagen vuelve a visualizar la imagen.
CAPTURA DE INTERFAZ

Recomiedo ver el video de explicación.
http://www.youtube.com/watch?v=Jio93Nu5NjA
Si a alguien le sirve de algo dejo el código adjunto con los recursos utilizados, si tienen sugerencias agradecería su apoyo.
CODIGO
Saludos 
La denominé Private File, y sirve para esconder solo archivos comprimidos dentro de una imagen. alcambiar de extensiones se visualiza el archivo que se encuentra dentro de la imagen y si se cambia la extensión por el de la imagen vuelve a visualizar la imagen.
CAPTURA DE INTERFAZ

Recomiedo ver el video de explicación.
http://www.youtube.com/watch?v=Jio93Nu5NjA
Si a alguien le sirve de algo dejo el código adjunto con los recursos utilizados, si tienen sugerencias agradecería su apoyo.
CODIGO
Código: Seleccionar todo
#NoTrayIcon
#RequireAdmin
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=iconoPrivateFile.ico
#AutoIt3Wrapper_Outfile=PrivateFile.exe
#AutoIt3Wrapper_Res_Comment=Software [email protected]
#AutoIt3Wrapper_Res_Description= Oculta archivos dentro de una imagen
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_LegalCopyright=Yasmany Curimilma
#AutoIt3Wrapper_Res_Language=1034
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Misc.au3>
#include <WinAPI.au3>
Opt("GUICloseOnESC", 0)
Opt("GUIOnEventMode", 1)
_Singleton("PrivateFyas1991")
DirCreate(@AppDataDir & "\PrivateFileYasmany")
FileInstall(".\imagenCabeceraPrivateFile-Compresed.jpg", @AppDataDir & "\PrivateFileYasmany\", 1)
Global $guiPrincipal, $imgPresentacion, $editDescripcion, $inpFile, $inpImage, $btnFile, $btnImage, $btnAplicar, $inpNuevoNombre
Global $barraProgreso, $lblEstado, $lblmostrarExtensiones, $lblAyudaRapida
$guiPrincipal = GUICreate("Private File", 563, 287, -1, -1)
GUISetIcon("iconoPrivateFile.ico")
GUISetBkColor(0xFFFFFF)
$lblmostrarExtensiones = GUICtrlCreateLabel("", 5, 5, 110, 17)
GUICtrlSetCursor($lblmostrarExtensiones, 0)
GUICtrlSetColor($lblmostrarExtensiones, 0x1A4ED7)
GUICtrlCreateLabel("|", 124, 5, 2, 17)
GUICtrlSetColor(-1, 0x1A4ED7)
$lblAyudaRapida = GUICtrlCreateLabel("Ayuda Rápida", 135, 5, 110, 17)
GUICtrlSetCursor($lblAyudaRapida, 0)
GUICtrlSetColor($lblAyudaRapida, 0x1A4ED7)
$imgPresentacion = GUICtrlCreatePic(@AppDataDir & "\PrivateFileYasmany\imagenCabeceraPrivateFile-Compresed.jpg", 30, 25, 159, 147)
GUICtrlCreateGroup("Para que sirve?", 224, 8, 329, 171)
$editDescripcion = GUICtrlCreateEdit("", 232, 24, 313, 150, $WS_VSCROLL + $ES_WANTRETURN + $ES_READONLY + $ES_AUTOVSCROLL, 0) ;BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$WS_VSCROLL), 0)
GUICtrlSetBkColor($editDescripcion, 0xFFFFFF)
GUICtrlSetColor($editDescripcion, 0x3d3d3d)
GUICtrlSetData(-1, @CRLF & 'Private File desarrollado por Yasmany Curimilma, cual su nombre en español se refiere a ' & _
'Archivo Privado sirve para proteger nuestros archivos sean estos, fotos, documentos, videos y más, ' & _
'que deseemos que no estén a simple vista de todos.' & @CRLF & 'Private File copia el archivo a proteger dentro de la ' & _
'imagen que seleccionemos.' & @CRLF & @CRLF & _
'¿CÒMO FUNCIONA?' & @CRLF & _
'Antes de todo debe tener visible las extensiones de los archivos del sistema ya que será mas fácil que Ud. interactue con el ' & _
'presente software y sus archivos.' & @CRLF & _
'Private File copia el archivo comprimido elegido dentro de la imagen seleccionada, creando una copia de la imagen con el nombre ' & _
'que haya ubicado, permitiendole visualizar la imagen, PERO si cambia la extensión de la imagen por la extension del archivo comprimido ' & _
'y lo ejecuta, se abrirá el archivo comprimido que ud. copió dentro de la imagen.' & @CRLF & @CRLF & _
'¿QUE SON LAS EXTENSIONES DE ARCHIVOS?' & @CRLF & _
'Generalmente son los tres ultimos caracteres del nombre de un archivo por ejemplo.: ".docx" ".txt" ".rar" ".jpg" ".zip" entre otros. ' & @CRLF & @CRLF & _
'¿COMO VISUALIZAR LAS EXTENSIONES?' & @CRLF & _
'Si aun no tiene visualizado las extensiones, diríjase al texto color azul ubicado en la parte superior izquierda de este programa y haga ' & _
'un clic izquierdo sobre el, luego de clic derecho sobre la carpeta o escritorio y seleccione actualizar.' & @CRLF & _
'Al Mostrar u Ocultar las extenciones, el texto color azul cambiará su estado.' & @CRLF & @CRLF & _
'¿COMO UTILIZAR PRIVATE FILE.?' & @CRLF & _
'Si Ud. posee fotos, imagenes, documentos y desea que otras personas no los vean, comprimalos en zip o rar y siga los siguientes pasos' & @CRLF & _
'1.- Seleccione el archivo comprimido [Clic botón Archivo]' & @CRLF & _
'2.- Seleccione una imagen [Clic botón Imagen]' & @CRLF & _
'3.- Escriba un nuevo nombre.' & @CRLF & _
'4.- Clic en el botón Aplicar' & @CRLF & @CRLF & _
'ADVERTENCIA.' & @CRLF & _
'*- NO COPIE mas de un archivo comprimido dentro de la imagen' & @CRLF & _
'*- Algunas imagenes no suelen permitir ejecutar los archivos copiados dentro de ellas' & @CRLF & _
'*- Aseguresé que la copia fue correcta, cambiando las extensiones de forma manual y ejecutando los archivos' & @CRLF & _
'*- NO vuelva a reutilizar la imagen en la que se encuentra copiado el archivo, me refiero a la nueva imagen creada.' & @CRLF & _
'*- Evite copiar archivos de tamaño exagerado (por lo menos 150mb)' & @CRLF & @CRLF & _
'SUGERENCIAS.' & @CRLF & _
'*- Identifique la imagen final con un nombre que pueda recordar.')
GUICtrlCreateGroup("", -99, -99, 1, 1)
$inpFile = GUICtrlCreateInput("", 8, 190, 417, 21, $ES_READONLY)
$btnFile = GUICtrlCreateButton("Archivo", 428, 188, 50, 25)
$inpImage = GUICtrlCreateInput("", 8, 215, 417, 21, $ES_READONLY)
$btnImage = GUICtrlCreateButton("Imagen", 428, 214, 50, 25)
$btnAplicar = GUICtrlCreateButton("Aplicar", 478, 188, 75, 49)
$inpNuevoNombre = GUICtrlCreateInput("", 8, 250, 117, 25, $SS_CENTERIMAGE)
GUICtrlCreateLabel('Escriba un nuevo nombre para el archivo. " & "No está permitido los siguientes caracteres: : / \ . " ? | * < > ', 130, 250, 328, 30)
GUICtrlSetState(-1, $GUI_DISABLE)
$lblEstado = GUICtrlCreateLabel("Estado...", 478, 248, 75, 15)
$barraProgreso = GUICtrlCreateProgress(478, 265, 75, 15)
_setTipsControles()
_cargarEventos()
_lecturaRegistroDeExtension()
GUISetState(@SW_SHOW, $guiPrincipal)
GUICtrlSetState($btnFile, $GUI_FOCUS)
While 1
Sleep(100)
WEnd
Func _cargarEventos()
GUICtrlSetOnEvent($lblmostrarExtensiones, "_mostrarExtencionesDeArchivos")
GUISetOnEvent($GUI_EVENT_CLOSE, "_cerrarInterfaz")
GUICtrlSetOnEvent($btnFile, "_seleccionArchivo")
GUICtrlSetOnEvent($btnImage, "_seleccionImagen")
GUICtrlSetOnEvent($btnAplicar, "_aplicar")
GUICtrlSetOnEvent($lblAyudaRapida, "_ayudaRapida")
EndFunc ;==>_cargarEventos
Func _mostrarExtencionesDeArchivos()
If GUICtrlRead($lblmostrarExtensiones) = "Mostrar extensiones" Then RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "HideFileExt", "REG_DWORD", "0")
If GUICtrlRead($lblmostrarExtensiones) = "No mostrar extensiones" Then RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "HideFileExt", "REG_DWORD", "1")
ControlSend('Program Manager', '', '', '{F5}')
EnvUpdate()
_lecturaRegistroDeExtension()
EndFunc ;==>_mostrarExtencionesDeArchivos
Func _lecturaRegistroDeExtension()
Local $value = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced", "HideFileExt")
If $value = "1" Then GUICtrlSetData($lblmostrarExtensiones, "Mostrar extensiones")
If $value <> "1" Then GUICtrlSetData($lblmostrarExtensiones, "No mostrar extensiones")
EndFunc ;==>_lecturaRegistroDeExtension
Func _seleccionArchivo()
Local $filtro = "Comprimido (*.rar;*.zip)"
GUICtrlSetData($inpFile, FileOpenDialog("Seleccione el archivo a proteger", @DesktopDir & "", $filtro, 1, "", $guiPrincipal))
If GUICtrlRead($inpFile) <> "" Then GUICtrlSetState($btnImage, $GUI_FOCUS)
EndFunc ;==>_seleccionArchivo
Func _seleccionImagen()
GUICtrlSetData($inpImage, FileOpenDialog("Seleccione la imagen", @DesktopDir & "", "Imagen (*.jpg;*.jpeg;*.bmp;*.png)", 1, "", $guiPrincipal))
If GUICtrlRead($inpImage) <> "" Then GUICtrlSetState($inpNuevoNombre, $GUI_FOCUS)
EndFunc ;==>_seleccionImagen
Func _aplicar()
Local $File = GUICtrlRead($inpFile), $Imagen = GUICtrlRead($inpImage), $nuevoNombre = GUICtrlRead($inpNuevoNombre)
If _comprobacioControles($btnFile, $File, "Archivo") Then
If _comprobacioControles($btnImage, $Imagen, "Imagen") Then
If Not StringIsSpace($nuevoNombre) Then
If _busquedaDeCaracteresNoPermitidos($nuevoNombre, "el recuadro para nuevo nombre de archivo protegido.") Then
Local $direccionCopia = StringTrimRight($File, StringInStr(StringReverse($File), "\")) & "\"
Local $extencion = StringRight($Imagen, StringInStr(StringReverse($Imagen), "."))
If FileExists($direccionCopia & $nuevoNombre & $extencion) = 1 Then
MsgBox(48, "Private File", "Escriba otro nombre para el archivo protegido", -1, $guiPrincipal)
GUICtrlSetState($inpNuevoNombre, $GUI_FOCUS)
Else
_estadoControles($GUI_DISABLE)
GUICtrlSetData($lblEstado, "Iniciando...")
For $i = 0 To 50
GUICtrlSetData($barraProgreso, $i)
Sleep(15)
Next
GUICtrlSetData($lblEstado, "Copiando...")
Run(@ComSpec & " /c " & 'COPY /B ' & '"' & $Imagen & '"' & ' + ' & '"' & $File & '"' & ' "' & $direccionCopia & $nuevoNombre & $extencion & '"', "", @SW_HIDE)
GUICtrlSetData($barraProgreso, 100)
GUICtrlSetData($lblEstado, "Finalizado")
Sleep(1500)
GUICtrlSetData($inpFile, "")
GUICtrlSetData($inpImage, "")
GUICtrlSetData($inpNuevoNombre, "")
ShellExecute($direccionCopia, "", "", "OPEN")
GUICtrlSetData($barraProgreso, 0)
GUICtrlSetData($lblEstado, "Estado...")
_estadoControles($GUI_ENABLE)
EndIf
EndIf
Else
MsgBox(48, "Private File", "Escriba un nombre para el archivo protegido.", -1, $guiPrincipal)
GUICtrlSetState($inpNuevoNombre, $GUI_FOCUS)
EndIf
EndIf
EndIf
EndFunc ;==>_aplicar
Func _estadoControles($estado)
GUICtrlSetState($btnAplicar, $estado)
GUICtrlSetState($btnFile, $estado)
GUICtrlSetState($btnImage, $estado)
GUICtrlSetState($inpNuevoNombre, $estado)
EndFunc ;==>_estadoControles
Func _busquedaDeCaracteresNoPermitidos($cadena, $texto)
If StringInStr($cadena, ":") Or StringInStr($cadena, "/") Or StringInStr($cadena, "\") Or StringInStr($cadena, ".") Or StringInStr($cadena, '"') _
Or StringInStr($cadena, " ?") Or StringInStr($cadena, "|") Or StringInStr($cadena, "*") Or StringInStr($cadena, "<") Or StringInStr($cadena, ">") Then
MsgBox(48, "Private File", "Caracteres no permitidos en " & $texto, -1, $guiPrincipal)
Else
Return True
EndIf
EndFunc ;==>_busquedaDeCaracteresNoPermitidos
Func _comprobacioControles($FocoControl, $lecturaControl, $texto)
If Not StringIsSpace($lecturaControl) Then; si esta lleno
If FileExists($lecturaControl) = 1 Then Return True
EndIf
MsgBox(48, "Private File", "Dirección incorrecta de " & $texto, -1, $guiPrincipal)
GUICtrlSetState($FocoControl, $GUI_FOCUS)
EndFunc ;==>_comprobacioControles
Func _setTipsControles()
GUICtrlSetTip($lblmostrarExtensiones, "Activa o desactiva la visualización " & @CRLF & " de extensiones de archivos")
GUICtrlSetTip($btnFile, "Seleccione el archivo a proteger")
GUICtrlSetTip($btnImage, "Seleccione la imagen en la que va a esconder el archivo.")
GUICtrlSetTip($btnAplicar, "Copia el archivo dentro de la imagen.")
GUICtrlSetTip($lblAyudaRapida, "Indica como utilizar Private File")
GUICtrlSetTip($inpNuevoNombre, "Escriba un nombre nuevo para el archivo")
EndFunc ;==>_setTipsControles
Func _ayudaRapida()
Local $dimVentana = WinGetPos('Private File')
Local $size = WinGetClientSize("Private File")
_WinAPI_MoveWindow($guiPrincipal, $size[0] - 46, $size[1]-13, $dimVentana[2], $dimVentana[3], True)
MsgBox(64, "Private File", "Ayuda Rápida" & @CRLF & @CRLF & " A continuación se moverá el mouse en el orden que debe seguir los pasos." & _
@CRLF & "Por favor no mueva el mouse.", 7, $guiPrincipal)
Sleep(1000)
GUICtrlSetState($lblAyudaRapida, $GUI_DISABLE)
_direccionamientoMouse("Private File", $btnFile, 35)
_direccionamientoMouse("Private File", $btnImage, 35)
_direccionamientoMouse("Private File", $inpNuevoNombre, 35)
_direccionamientoMouse("Private File", $btnAplicar, 35)
GUICtrlSetState($lblAyudaRapida, $GUI_ENABLE)
MsgBox(64, "Private File", "Ayuda rápida finalizada.!" & @CRLF & "Haga clic en Aceptar.", -1, $guiPrincipal)
EndFunc ;==>_ayudaRapida
Func _direccionamientoMouse($tituloVentana, $boton_id, $altura)
GUICtrlSetState($boton_id, $GUI_FOCUS)
Local $posButton = ControlGetPos($tituloVentana, "", $boton_id)
Local $dimVentana = WinGetPos($tituloVentana)
MouseMove($posButton[0] + $dimVentana[0] + $posButton[3], $posButton[1] + $dimVentana[1] + $altura)
Sleep(2000)
EndFunc ;==>_direccionamientoMouse
Func _cerrarInterfaz()
Exit
EndFunc ;==>_cerrarInterfaz
;~ Run(@ComSpec & " /c " & 'COPY /B ' &'"'& GUICtrlRead($inpImage) &'"'& ' + ' & '"'&GUICtrlRead($inpFile)&'"' & ' "D:\images_nuevESITA.jpg"', "",@SW_HIDE)
;ejmplo01: Run(@ComSpec & " /c " & "dir c:\ ", "", @SW_HIDE, $STDOUT_CHILD)
;ejemplo: Run(@ComSpec & " /c " & "COPY /B D:\imagen.jpg + D:\archivo.rar D:\imagen_nuevESITA.jpg", "",@SW_HIDE)
;~ ConsoleWrite($posButton[0] & " oooo " & $posButton[1] &@CRLF & "Posición ventana."& @CRLF & $dimVentana[0] &" oooo "&$dimVentana[1])
