例如。mov eax,2 我想把上面的汇编码用delphi7通过writeprocessmemory函数写入008D5478那么我应该怎么写?

解决方案 »

  1.   

    const
      Instruction: Array [0..4] of Byte = ($B8,$02,00,00,00);WriteProcessMemory(hProcess,$008D5478,Poiner(@Instruction[0]),5,lpNumberOfBytesWriten);
      

  2.   

    代码注入,可用远程线程,把你要执行的代码写成线程函数,再用CreateRemoteThread在目标进程里创建该线程.
    可参考<Windows核心编程>讲"注入"的那部分.
      

  3.   

    可以不可以用
    asm
    ..
    end;
    的格式?
    因为这个代码只是个例子
      

  4.   

    当然可以,只是需要计算偏移量是一个比较麻烦的事情,不如你写了之后编译成二进制码,然后再放入Byte Array当中去。
      

  5.   

    哦。 那能否给我这个例子用
    asm
    ..
    end;
    写一下?
      

  6.   

    var
      dwStart: PByte;
      dwEnd: LongWord;
      str: AnsiString;
    begin
      asm
        mov eax,offset @@a1
        jmp @@a2
      @@a1:
        //从这里开始写你所需要的代码
         //注:这里不能下断点,否则就可能变为int 3($cc)指令
        mov eax,2
        //这里结束
      @@a2:
        mov edx,offset @@a2
        mov dwStart,eax
        mov dwEnd,edx
      end;
      SetLength(str,(dwEnd-LongWord(dwStart))*2);
      BinToHex(PAnsiChar(dwStart),PAnsiChar(Str),dwEnd-LongWord(dwStart));
      ShowMessage(str);
    end;
      

  7.   

    var
      dwStart: PByte;
      dwEnd: LongWord;
    begin
      asm
        mov eax,offset @@a1
        jmp @@a2
      @@a1:
        //从这里开始写你所需要的代码
         //注:这里不能下断点,否则就可能变为int 3($cc)指令
        mov eax,2
        //这里结束
      @@a2:
        mov edx,offset @@a2
        mov dwStart,eax
        mov dwEnd,edx
      end;
      WriteProcessMemory(hProcessHandle(*进程句柄,请注意需要相应的权限*),lpAddress(*远程植入的地址*),Pointer(dwStart)(*指令首地址*),dwEnd - LongWord(dwStart)(*指令占用的字节数*));
    end;