【问题标题】:Delphi - Access violation when try to overwrite an instruction with DLL InjectionDelphi - 尝试使用 DLL 注入覆盖指令时访问冲突
【发布时间】:2016-10-26 13:00:32
【问题描述】:

早上好。 我正在尝试了解 DLL 注入,所以我编写了一个小软件,它只获取一个字符串,与 StrCmp() 进行比较,如果输入等于“Winner”,该软件会给出一个 Good boy 消息,其中学习 DLL 注入的 porpouse。 所以我写了一个DLL,在注入时加载一个Form,porpouse使用DLL注入,修改比较指令(JNZ(74)到JMP(EB)),并使软件接受任何字符串。我的 DLL 代码是:

library Project2;
uses
  SysUtils,
  Windows,
  Classes,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}
var
Hproccess:THandle;
Hid:Cardinal;
b:Boolean=false;

       Procedure Chamar;
       begin
        Form1:=TForm1.Create(nil);
       Form1.ShowModal;
       end;
begin
Hproccess:=OpenProcess(PROCESS_ALL_ACCESS,false,GetCurrentProcessID);
CreateRemoteThread(Hproccess,nil,0,@Chamar,@Chamar,0,Hid);
end.

你怎么看,DLL只是创建一个新线程来加载Form(Form1)。问题是,当我写入内存地址以覆盖 JNZ 指令时,Windows 不让我这样做,并在地址 005B55A9 处返回访问冲突消息。我的表单代码也很简单。

    unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button2: TButton;
    procedure Button2Click(Sender: TObject);

  private

  public

  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
var
Memory:Dword;
begin
Memory:=$005B55A9;
PDWORD(Memory)^:=225; {EB=225}
Free();
end;
end.

我做错了什么?如何在没有访问冲突错误的情况下将 JNZ(74) 的指令覆盖到 JMP(EB)?抱歉我的错误,我昨天开始阅读它,这是我的第一个例子。我已经有了注射器(Extreme Injector)。我的怀疑只是关于 DLL 编码。你能帮帮我吗?

我忘了说,我用的是 Windows 10...

【问题讨论】:

  • 我从 2009 年开始使用 Delphi,我喜欢它。

标签: delphi memory dll access-violation dll-injection


【解决方案1】:

假设如您所说,该地址是您进程中的有效地址,则访问冲突将表明该地址的保护标志不允许写入。您的流程中的代码通常就是这种情况。

有几种处理方法:

  1. 使用VirtualProtect 更改对该地址的保护。通常,您需要在进行修改后将保护恢复到其原始值。
  2. 使用 [WriteProcessMemory][3] 执行内存写入。这将更改保护以允许写入、进行修改并恢复原始保护。如果地址实际上指的是不同的进程,那么你必须使用WriteProcessMemory来修改内存。

VirtualProtect 用于此类目的的示例比比皆是。例如,this post 显示如何修补一些代码,并使用VirtualProtect 安排内存可以写入。该帖子中写入的实际数据与您的不同,但重点是演示如何使用VirtualProtect

在继续之前,请务必仔细阅读documentation

【讨论】:

  • 如何使用它?是的,地址有效!
  • 我认为答案包含您需要的一切,包括参考资料。请不要忽视我的最后一句话。我相信你不会,但有时我们会遇到拒绝阅读文档的 SO 用户。
  • 我真的很想阅读文档,但我也不懂英语。我的第一语言是葡萄牙语,翻译能力很弱。
  • 我觉得你的英语很好。请不要忽略文档。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 2010-11-19
  • 2011-05-28
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
相关资源
最近更新 更多