问题一:
修改EXE文件. 查找字节 修改字节 
问题二:
把一个二进制的文件,分为平均的段来读和写.没有方法有参考教程 推荐点也好...本人水平有限.哥哥们给的资料越详细越好......小弟这先谢谢了..

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      hMap: THandle;
      hFile:integer;
      MapFp: Pointer ;
      fs:DWORD;
      i:integer;
    begin  hFile:=FileOpen('c:\temp\1.rm',fmOpenReadWrite);
      if  hFile<0 then
      begin
          ShowMessage('file open fail!');
          exit;
      end;
      fs:=GetFileSize(hfile,Nil);
      hMap:=CreateFileMapping(hFile,nil, page_ReadWrite, 0,0,nil);
      if hMap=0 then
      begin
        FileClose(hFile);
        ShowMessage('map file open fail!');
        exit;
      end;
      MapFp:=MapViewOfFile(hMap,File_Map_All_Access,0, 0, 0);
      if MapFp = nil then
      begin
          CloseHandle(hMap);
          FileClose(hFile);
          ShowMessage ('MapFile data pointer failed');
          exit;
      end;
      for i:=0 to fs-1 do
         Byte(PChar(Mapfp)[i]):=Byte(PChar(mapfp)[i]) xor $11;
       UnmapViewOfFile(MapFp);
       CloseHandle(hMap);
       FileClose(hFile);
    end;
      

  2.   

    ZIQYB 哥哥能不能写的详细一些.我比较菜啊....我要做一个EXE修改器..谢谢了..
      

  3.   

    用内存映射文件就像在数组中修改Mapfp就是一个字节数组从0到文件长度-1
    修改它就相当于修改文件本身
      

  4.   

    您帮我看看这个贴子.
    例如我要修改的EXE文件的 
    偏移地址 57H 58H 59H 5aH 5bH
    16进制数  30  2E  32  34  30 (这个就是0.240)要修改他的16进制数为
              31  2E  31  33  31 (也就是1.131)这个值最好是能用Edit控制.Edit读出 0.240 
    然后用户来修改这值1.131或1.3231 不只是数值,也有可能是字符.
      

  5.   

    Byte(PChar(Mapfp)[$57]):=$31;
    Byte(PChar(Mapfp)[$58]):=$2e;
    Byte(PChar(Mapfp)[$59]):=$31;
    Byte(PChar(Mapfp)[$5a]):=$33;
    Byte(PChar(Mapfp)[$5b]):=$31;
      

  6.   

    var s:String;  s:=Trim(Edit1.text);  move(s[1],PChar(Mapfp)[$57],length(s))
    //达到你的效果
      

  7.   

    真的是谢谢你了.这个贴子我还有一个朋友会来看.(学习) 
    结贴了我怕地址会变他找不到.
    我还有一个问题是关于一个程序生成另一个程序的.不过不是木马什么.情况是这样的.
    我做的是一个http定时下载的程序,给一大批用户,而每个用户的下载地址都不一样,每次都要重复的到源码里去修改下载地址. 最近我发现有一种这样的技术.在一个程序上修改完,一点生成就可以了.不用DELPHI来生成了.
      

  8.   

    我是一名DELPHI的初学者,请问如何用DELPHI编写补丁? 把EDIT1.TEXT的内容(如:06112233)转为16进制,然后写进ABC.EXE中,
    其偏移量为1234H,望解答,谢谢!    针对你的情况,可以使用二进制方式打开文件,如。 
        var f:file; 
        ...... 
         AssignFile(f, 'ABC.EXE'); 
         Reset(f, 1); 
         Seek(f, $1234); 
        这里需要注意:Delphi的Seek语句认为第一个字节的位置号为0,所以如果你的偏移量定义与此不同,注意调整一下。 
        你所说的把EDIT1.TEXT的内容(如:06112233)转为16进制,实际上是把字符串转换为数字,这可以使用StrToInt函数。如: 
         n := StrToInt('$' + Edit1.Text); 
         BlockWrite(f, n, SizeOf(n)); 
        这里假设Edit中输入的是十六进制的。
    ---------------------------------------
    这是我在一个网站里找到的例子.他是假设Edit中输入的是16进制的
    如果是字符,或整数该如果操作呢?
    用Trim(Edit1.text); 就可以了吗?
      

  9.   


     // 若是字符
      var s:String;
      s:=Trim(Edit1.text);
      move(s[1],PChar(Mapfp)[$1234],length(s)) // 若是整数
      var s:integer;
      s:=StrToInt(Edit1.text);16进制同上(StrToInt('$'+Edit1.text);
      move(s,PChar(Mapfp)[$1234],sizeof(s))