【发布时间】: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