Yo continuo, al final este hilo esta siendo un monologo
Bueno, imaginaros esta situación, estas en un ordenador que no es el tuyo y quieres ocultar un archivo a la vista de los curiosos, una foto comprometida, un documento confidencial, etc. Como no es tu ordenador, no te vas a poner a instalar nada, ni andar ejecutando ningún programa extraño, pero lo que si podemos hacer es abrir la consola de comandos y teclear esto:
Código:
copy /b foto.jpg+secreto.doc oculto.jpg
Donde "foto.jpg" es una foto jpg cualquiera, que tenga una apariencia lo mas inocente posible, "secreto.doc" es el archivo a ocultar (puede ser cualquier tipo de archivo) y "oculto.jpg" es el nombre del archivo ya empaquetado.
Te preguntaras que hacemos con esto, pues básicamente "ponerle un sombrero" a nuestro archivo. A todos los efectos el archivo resultante parecerá una foto, y tanto la vista previa de windows, como la mayoría de los programas lo abrirán como si de una foto se tratara.
Ahora el problema es "quitarle el sombreo" a nuestro archivo. Para esto no queda mas remedio que usar un programa (al menos no se de ningún comando que realice esta labor). Y aquí es donde, por fin

, entra en acción el siguiente código:
Es una aplicación de consola
Código Delphi
[-]
program unpack;
{$APPTYPE CONSOLE}
uses
SysUtils, Classes;
procedure QuitarSombrero(Stream: TStream);
var
Buffer: array[0..3] of Byte;
Size: Integer;
begin
while TRUE do
begin
FillChar(Buffer,Sizeof(Buffer),#0);
Stream.Read(Buffer,4);
Size:= ((Buffer[2] shl 8) + Buffer[3]) - 2;
case Buffer[1] of
$01,$D0..$D8: Stream.Seek(-2,soFromCurrent);
$D9: begin
Stream.Seek(-2,soFromCurrent);
Exit;
end;
$DA: begin
Stream.Seek(-2,soFromCurrent);
while TRUE do
begin
Stream.ReadBuffer(Buffer,1);
if Buffer[0] = $FF then
begin
Stream.ReadBuffer(Buffer,1);
if (Buffer[0] <> 0) and not (Buffer[0] in [$D0..$D7]) then
begin
Stream.Seek(-2,soFromCurrent);
break;
end;
end;
end;
end;
else
Stream.Seek(Size,soFromCurrent);
end;
end;
end;
var
Entrada, Salida: TFileStream;
begin
try
Entrada:= TFileStream.Create(ParamStr(1),fmOpenRead or fmShareDenyWrite);
try
Salida:= TFileStream.Create(ParamStr(2),fmCreate);
try
QuitarSombrero(Entrada);
Salida.CopyFrom(Entrada,Entrada.Size - Entrada.Position);
finally
Salida.Free;
end;
finally
Entrada.Free;
end;
except
On E: Exception do
Writeln('Error: ' + E.Message);
end;
end.
Por ejemplo, para extraer "secreto.doc" de "oculto.jpg":
Código:
unpack oculto.jpg secreto.doc