wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了将DLL注入的代码从Delphi 7转换为Delphi XE2大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我有一个旧的注射器,由我在Delphi 7中制造,我试图以这种方式改变它,它仍然可以在XE2中工作,但我失败了.-新的测试dll适用于我的旧注射器没有任何问题所以即时确定我的注射器有虫子. 这是我制作的代码: procedure TForm1.InjectDLL(const ADLLName: String; targetproc: Cardinal); var dllname: String
我有一个旧的注射器,由我在Delphi 7中制造,我试图以这种方式改变它,它仍然可以在XE2中工作,但我失败了.-新的测试dll适用于我的旧注射器没有任何问题所以即时确定我的注射器有虫子.

这是我制作的代码

procedure TForm1.InjectDLL(const ADLLName: String; targetproc: Cardinal);
var
  dllname: String;
  pDLLname,pStartAddr: Pointer;
  bw: NativeUInt;
  hProcess,hRemoteThread: THandle;
  TID: Cardinal;
begin
  hProcess := OpenProcess(PROCESS_@R_696_10636@ACCESS,false,targetproc);
  pDLLname := VirtualAllocEx(hProcess,length(dllName) + 1,MEM_COMMIT or MEM_RESERVE,PAGE_EXECUTE_READWRITE);

  WriteProcessMemory(hProcess,pDLLname,Pointer(dllName),bw);

  pStartAddr := GetProcAddress(GetModuleHandle('kernel32.dll'),'LoadLibraryA');
  hRemoteThread := CreateRemoteThread(hProcess,nil,pStartAddr,TID);
  WaitForSingLeobject(hRemoteThread,INFINITE);
  showmessage('Fehler ' + IntToStr(GetLastError) + ': ' +
    SysErrormessage(GetLastError));
  CloseHandle(hProcess);
end;

我只需要将hProcess和hRemoteThread更改为THandle并将bw更改为NativeUInt. showmessage告诉我一切正常.由于String类型从d7更改为XE2,因此必须存在细微差别.我也尝试将dll名称转换为PAnsiChar,但它对我没有任何改变.

希望我能为您发布足够的信息.

解决方法

在Unicode Delphi下,代码的最终结果是将UTF-16文本传递给LoadLibraryA.当然,这需要8位ANSI文本.您有两种方法可以解决此问题:

>坚持使用ANSI文本,只需在代码片段中用AnsiString替换字符串即可.>切换到Unicode文本.使用LoadLibraryW并应用Arnaud建议的更改以正确处理16位文本的长度.

大佬总结

以上是大佬教程为你收集整理的将DLL注入的代码从Delphi 7转换为Delphi XE2全部内容,希望文章能够帮你解决将DLL注入的代码从Delphi 7转换为Delphi XE2所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。