最近在看一个原代码时看到了这个。ClinetLoaderSize=27136;  ClinetLoaderBuf:Array [0..27135] of Byte =
  (
    $4D,$5A,$50,$00,$02,$00,$00,$00,$04,$00,$0F,$00,$FF,$FF,$00,$00,
    $B8,$00,$00,$00,$00,$00,$00,$00,$40,$00,$1A,$00,$00,$00,$00,$00,
    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$01,$00,$00,
    $BA,$10,$00,$0E,$1F,$B4,$09,$CD,$21,$B8,$01,$4C,$CD,$21,$90,$90,
    $54,$68,$69,$73,$20,$70,$72,$6F,$67,$72,$61,$6D,$20,$6D,$75,$73,
    $74,$20,$62,$65,$20,$72,$75,$6E,$20,$75,$6E,$64,$65,$72,$20,$57,
    $69,$6E,$33,$32,$0D,$0A,$24,$37,$00,$00,$00,$00,$00,$00,$00,$00,
    $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,
仔细看了下十六进制,原来和其中的一个EXE一样。
想问下各位大大。怎么将一个EXE的十六进制弄成这种带$符号和,符号的文本呢?
本来打算一个个的敲的,后来想,一定有什么别的办法。
希望大家教教我////

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      m_Stream  : TFileStream;
      m_OpenDlg : TOpenDialog;
      m_FileName: string;
      m_Buffer  : Byte;
      m_sTmp: string;
      m_iTmp: DWORD;
    begin
      m_OpenDlg:= TOpenDialog.Create(nil);
      try
        if m_OpenDlg.Execute then
          m_FileName:= m_OpenDlg.FileName
        else
          exit;
      finally
        FreeAndNil(m_OpenDlg);
      end;  m_Stream:= TFileStream.Create(m_FileName, fmOpenRead);
      try
        m_sTmp:= '';
        for m_iTmp:= 0 to m_Stream.Size - 1 do   //如果文件很大的话,可能会死掉,可以分成几个部分读取
        begin
          m_Stream.ReadBuffer(m_Buffer, 1);
          m_sTmp:= m_sTmp + Format('$%.2u,', [m_Buffer]);
        end;    Memo1.Lines.Text:= m_sTmp;
      finally
        FreeAndNil(m_Stream);
      end;
    end;
      

  2.   

    Statement expected but 'VAR' found
      

  3.   

    哪一行编译不了?
    我是从D7 中copy过来的,怎么可能编译不了?你新建一个工程,然后放一个按钮,放个TMemo控件,命名Memo1,双击按钮,在里面把我的函数体里面的内容(也就是下面的内容)copy进去再编译看看!var 
        m_Stream     :   TFileStream; 
        m_OpenDlg   :   TOpenDialog; 
        m_FileName:   string; 
        m_Buffer     :   Byte; 
        m_sTmp:   string; 
        m_iTmp:   DWORD; 
    begin 
        m_OpenDlg:=   TOpenDialog.Create(nil); 
        try 
            if   m_OpenDlg.Execute   then 
                m_FileName:=   m_OpenDlg.FileName 
            else 
                exit; 
        finally 
            FreeAndNil(m_OpenDlg); 
        end;     m_Stream:=   TFileStream.Create(m_FileName,   fmOpenRead); 
        try 
            m_sTmp:=   ''; 
            for   m_iTmp:=   0   to   m_Stream.Size   -   1   do       //如果文件很大的话,可能会死掉,可以分成几个部分读取 
            begin 
                m_Stream.ReadBuffer(m_Buffer,   1); 
                m_sTmp:=   m_sTmp   +   Format('$%.2u,',   [m_Buffer]); 
            end;         Memo1.Lines.Text:=   m_sTmp; 
        finally 
            FreeAndNil(m_Stream); 
        end; 
      

  4.   

    我是这样写的,代码如下。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, WinSkinData, OleCtrls, SHDocVw, StdCtrls;type
      TForm1 = class(TForm)
        Edit1: TEdit;
        Button1: TButton;
        Button2: TButton;
        WebBrowser1: TWebBrowser;
        SkinData1: TSkinData;
        OpenDialog1: TOpenDialog;
        SaveDialog1: TSaveDialog;
        zf: TEdit;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure botnet(var data; count: Cardinal; filename: string);
    const
      HexChar: PChar = '0123456789ABCDEF';
    var
      i: integer;
        f: TextFile;
      p: pchar;
      line: string;
    begin
      p := @data;
      line := '';
      AssignFile(f, filename);
      Rewrite(f);
      for i := 0 to count - 1 do
      begin
        if (i mod 16 = 0) and (line <> '') then
        begin
          Writeln(f, line);
          line := '';
         end;
        line := line + 'o' + HexChar[(Ord(p[i]) shr 4) and $F] +
          HexChar[(Ord(p[i]) and $F)] + ',';
      end;
      if line <> '' then
        Writeln(f, line);
      CloseFile(f);
    end;
     procedure TForm1.Button1Click(Sender: TObject);
    begin
      if OpenDialog1.Execute then
        edit1.Text := OpenDialog1.FileName;
    end;Procedure TForm1.Button2Click(Sender: TObject);
    var
     FHOST: TMemoryStream;
    begin
       if (Edit1.Text = '') or (not FileExists(edit1.Text)) then
      begin
        ShowMessage('指定文件先!');
        exit;
      end;
      if SaveDialog1.Execute then
      begin
        FHOST := TMemoryStream.Create;
        try
          FHOST.LoadFromFile(edit1.Text);
          botnet(FHOST.memory^, FHOST.Size, SaveDialog1.FileName);
        finally
          FHOST.Free;
        end;
        end;
        end;
    procedure TForm1.FormCreate(Sender: TObject);
    begin
       Form1.Caption := 'EXE to TXT by BOTNET[FHost]';
       WebBrowser1.Navigate('sxqiche.com');
    end;end.
    但是我想实现那个 begin
        if (i mod 16 = 0) and (line <> '') then
        begin
          Writeln(f, line);
          line := '';
         end;
        line := line + 'o' + HexChar[(Ord(p[i]) shr 4) and $F] +
          HexChar[(Ord(p[i]) and $F)] + ',';
      end;
    那个line := line + 'o'这里的o自定义。想请教。怎么把edit2.text里输入的字符放到这个O这里。