有人说过把一个EXE文件伪装成一个BMP图片文件
这样的程序用delphi应该怎样做呢

解决方案 »

  1.   

    将bmp文件内容插入到exe文件的最前边应该可以吧,用delphi来做先定义两个文件流类TFileStream,用他们分别打开两个文件,再将bmp文件内容插入到exe文件的最前边,记着最后将bmp文件的长度写到文件尾,以便分解时之用。
      

  2.   

    不是我写的。但要给分,第一次发贴的哦。
    program exe2bmp; uses 
    Windows, 
    SysUtils; var len,row,col,fs: DWORD; 
    buffer: array[0..255]of char; 
    fd: WIN32_FIND_DATA; 
    h,hw: THandle; begin 
    if (ParamStr(1)<>'') and(ParamStr(2)<>'') then begin //如果运行后没有两个参数则退出 
    if FileExists(ParamStr(1)) then begin 
    FindFirstFile(Pchar(ParamStr(1)),fd); 
    fs:=fd.nFileSizeLow; 
    col := 4; 
    while true do begin 
    if (fs mod 12)=0 then begin 
    len:=fs; 
    end else len:=fs+12-(fs mod 12); 
    row := len div col div 3; 
    if row>col then begin 
    col:=col+4; 
    end else Break; 
    end; 
    FillChar(buffer,256,0); 
    {一下为BMP文件头数据} 
    Buffer[0]:='B';Buffer[1]:='M'; 
    PDWORD(@buffer[18])^:=col; 
    PDWORD(@buffer[22])^:=row; 
    PDWORD(@buffer[34])^:=len; 
    PDWORD(@buffer[2])^:=len+54; 
    PDWORD(@buffer[10])^:=54; 
    PDWORD(@buffer[14])^:=40; 
    PWORD(@buffer[26])^:=1; 
    PWORD(@buffer[28])^:=24; 
    {写入文件} 
    hw:=CreateFile(Pchar(ParamStr(2)),GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE,nil,CREATE_ALWAYS,0,0); 
    h:=CreateFile(Pchar(ParamStr(1)),GENERIC_READ,FILE_SHARE_READ or FILE_SHARE_WRITE,nil,OPEN_EXISTING,0,0); 
    WriteFile(hw,buffer,54,col,0); 
    repeat 
    ReadFile(h,buffer,256,col,0); 
    WriteFile(hw,buffer,col,col,0); 
    untilcol<>256; 
    WriteFile(hw,buffer,len-fs,col,0); 
    CloseHandle(h); 
    CloseHandle(hw); 
    end; 
    end; 
    end.