冥界3大法王 发表于 2022-1-13 16:33

求教delphi如何写汇编到*.exe文件?

本帖最后由 冥界3大法王 于 2022-1-13 17:03 编辑

假如,我要把 汇编指令JMP xxxxXXXXFOA这个文件偏移【假设是52A】写入到*.exe
该如何去实现呢?
网上找到了这类的
https://www.cnblogs.com/onroad/archive/2009/07/13/1522705.html嵌入汇编代码
http://blog.sina.com.cn/s/blog_722bc92e0100q8x3.html 2进制写入
不明白,如何合在一起?

null119 发表于 2022-1-13 16:50

这是从以前写的修改指定程序内存数据的代码里摘的,你看是不是你要的

var
      Base:Pointer;
      GameH:HWND;
      GamePid:DWORD;
      mNum: LONG64;
      val:integer;
      wds:NativeUInt;
begin
      GameH := FindWindow('xxx','xxx');
      if GameH <=0 then Exit;
      GetWindowThreadProcessId(GameH ,@GamePid);
      pHandle:= OpenProcess(PROCESS_ALL_ACCESS,false,GamePid);
      Base:=GetModuleBaseAddress(GamePid,'xxx.exe'); //取基址
      if ReadProcessMemory(pHandle, Pointer(long64(Base) +$xxx), @mNum, 8,lBuf) then begin//偏移
                nAddr:=Pointer(long64(mNum) + $xxx);//偏移
                val:=xxx;
                WriteProcessMemory(pHandle, nAddr, Pointer(@val), 8, wds); //写
      end;
end

苏紫方璇 发表于 2022-1-13 16:51

jmp这种比较麻烦,你需要先计算写入文件位置对应指令的内存加载地址,然后根据写入位置的指令地址和跳转目标地址计算jmp的机器码数值,然后再写入

kenxy 发表于 2022-1-13 16:53

就是汇编代码按格式嵌入delphi代码中,然后在delphi的编译器中编译,当然你可以要了解一下汇编的代码是怎么写?什么叫汇编语言

冥界3大法王 发表于 2022-1-13 17:17

@null119 这种是动态写入到内存? 不是文件吧?
@苏紫方璇 懂了,几年前您说过: 要跳往的地址-当前的地址= 得到偏移长度(2个16进制数的减法)

kenxy 发表于 2022-1-13 17:19

感觉现在都不是delphi的时代了,你怎么还在研究delphi呢?想将delphi发扬光大

苏紫方璇 发表于 2022-1-13 17:25

冥界3大法王 发表于 2022-1-13 17:17
@null119 这种是动态写入到内存? 不是文件吧?
@苏紫方璇 懂了,几年前您说过: 要跳往的地址-当前的地 ...

32位一般是目标地址-指令地址-5(jmp指令长度)

冥界3大法王 发表于 2022-1-13 17:26

kenxy 发表于 2022-1-13 17:19
感觉现在都不是delphi的时代了,你怎么还在研究delphi呢?想将delphi发扬光大

@kenxy
照你这么说人家公司该破产了?这种工具开发的软件多如牛毛。从共享软件,到病毒木马黑客程序。
我又不参加工作去,再说了用工具得找自己喜欢的称手的工具用,你给我易语言也用不习惯啊。
国外的论坛,台湾,QQ群用的人还大有人在呢。难道人家脑袋都有水?再说工具皆在人用。
过时了,并不意味着人家的工具真的不给力,关键皆在于用精用熟啊~~

hansxia 发表于 2022-1-13 18:38

kenxy 发表于 2022-1-13 17:19
感觉现在都不是delphi的时代了,你怎么还在研究delphi呢?想将delphi发扬光大

时代在变化,但是Delphi也在变化,只是它不像以前那么深入校园,所以面比以前窄,但是你如果去了解它你才能明白它,我一直用,但不是唯一的开发工具,除非Delphi解决不了或者不好解决的应用

only998 发表于 2022-1-14 08:49

冥界3大法王 发表于 2022-1-13 17:17
@null119 这种是动态写入到内存? 不是文件吧?
@苏紫方璇 懂了,几年前您说过: 要跳往的地址-当前的地 ...

64位也是目标地址 - 指令地址 - 5,所以64位能跳转到的内存距离是有限的,需要借一个跳板来远跳
页: [1] 2
查看完整版本: 求教delphi如何写汇编到*.exe文件?