Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-08-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 25
seoane Va por buen camino
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;

// Esta funcion posiciona el puntero al principio del archivo oculto
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
Responder Con Cita
  #2  
Antiguo 12-08-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 23
ArdiIIa Va por buen camino
Pues yo también me quito el sombrero ante esta "inutilidad"..

¿Que ocurre si no hay ningún archivo jpg en ese ordenador ?
Y... si la hubiera...
¿Que pasaría si la foto fuera mas comprometida que el propio documento a ocultar.?
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #3  
Antiguo 12-08-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 25
seoane Va por buen camino
Cita:
Empezado por ArdiIIa
¿Que ocurre si no hay ningún archivo jpg en ese ordenador ?
Entonces el proceso a seguir seria el siguiente, vamos a "Inicio > Programas > Accesorios > Paint", abrimos un documento nuevo, dibujamos un bonito paisaje con un arbolito y un sol bien grande, y para terminar lo guardamos como jpg


Cita:
Pues yo también me quito el sombrero ante esta "inutilidad"..
Pues colabora y pon tu algo, no me creo que no tengas alguna idea de bombero por ahí guardada
Responder Con Cita
  #4  
Antiguo 12-08-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 23
ArdiIIa Va por buen camino
Cita:
Empezado por seoane
Pues colabora y pon tu algo, no me creo que no tengas alguna idea de bombero por ahí guardada
Lo son casi todas, pero no están patentadas.
Además, imagina que se me echa encima el cuerpo de bomberos por exponer aquí sus ideas.
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #5  
Antiguo 12-08-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 25
seoane Va por buen camino
Cita:
Empezado por ArdiIIa
Además, imagina que se me echa encima el cuerpo de bomberos ...
Mientras no se te eche encima el cuerpo de un bombero ...

Por dios, cuanto reparo hay en mostrar código, os veo muy tímidos
Responder Con Cita
  #6  
Antiguo 12-08-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 23
ArdiIIa Va por buen camino
Oyes, no te voy a dejar con las ganas...
Espero que ahora no se me echen encima los de RENFE

Código Delphi [-]
unit loquequieras;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
    procedure FormPaint(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  const
  ShapeSize = 40;


var
  Form1: TForm1;
  rShape : TRect;
  Step,XCli, Ycli,XCent, YCent : Integer;
  Ps : PaintStruct;

implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
rShape := GetClientRect;
rShape.Right   := XCent + ShapeSize;
rShape.Bottom  := YCent + ShapeSize;
rShape.Top     := yCent;
rShape.Left    := xCent;
xCent := xCent +Step;
If (xCent + ShapeSize >= xCli) or (xCent <=0) then
Step := -Step;
InvalidateRect(Handle,@rShape,True);
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
Ellipse(Canvas.Handle,5+xCent,29+yCent,15+xCent,39+yCent);
Ellipse(Canvas.Handle,25+xCent,29+yCent,35+xCent,39+yCent);
Rectangle(Canvas.Handle,2+xCent,19+yCent,37+xCent,29+yCent);
Rectangle(Canvas.Handle,17+xCent,0+yCent,23+xCent,19+yCent);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
Step := 2 ;
xCli := ClientRect.Right ;//div 2;
yCLi := ClientRect.Bottom div 2;
Invalidate;
end;

end.




Código:
object Form1: TForm1
  Left = 119
  Top = 268
  Width = 256
  Height = 85
  Caption = 'Form1'
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  OldCreateOrder = False
  OnPaint = FormPaint
  OnResize = FormResize
  PixelsPerInch = 96
  TextHeight = 13
  object Timer1: TTimer
    Interval = 5
    OnTimer = Timer1Timer
    Left = 32
    Top = 16
  end
end
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #7  
Antiguo 12-08-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 25
seoane Va por buen camino
Excelente Ardilla, esto ya parecía un monologo.
Responder Con Cita
  #8  
Antiguo 13-08-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.005
Poder: 26
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Seoane, me has decepcionado: ¡Ese código es útil!
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
  #9  
Antiguo 13-08-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 25
seoane Va por buen camino
Cita:
Empezado por Ñuño Martínez
Seoane, me has decepcionado: ¡Ese código es útil!
No tanto, no pasa de ser un truco para emergencias

Y aprovechando que se encuentra usted por aquí maestro Ñuño, no tiene ningún código que dejarnos ...
Responder Con Cita
  #10  
Antiguo 13-08-2007
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.005
Poder: 26
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Cita:
Empezado por seoane
Y aprovechando que se encuentra usted por aquí maestro Ñuño, no tiene ningún código que dejarnos ...
Pues tenía uno, pero ahora no lo encuentro. Tendré que reescribirlo. A ver si esta tarde saco tiempo antes de cenar y lo pongo por aquí.
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Utilidad para comparar dos bases de datos. avmm2004 Varios 1 16-11-2006 20:47:22
Utilidad para contar lineas de código Alexander Varios 10 18-10-2006 00:14:55
Utilidad para manejo de lista TODO ANG4L Varios 3 02-08-2006 09:36:39
Cual es la utilidad de la paleta Server Gelmin Servers 1 05-03-2004 22:20:36
utilidad del application.tag Giniromero OOP 8 17-10-2003 12:21:53


La franja horaria es GMT +2. Ahora son las 13:58:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi