Delphi怎么判断拖过来的程序是32位的 还是64位的?【不能让其运行!】
本帖最后由 冥界3大法王 于 2022-2-14 17:40 编辑5
运行后 看任务管理器有没有 (32位)
@贱男春 不能运行
拖过来之后得到了全路径
然后再带着参数自动化的运行32位 或64位的IDA
膜拜一下delphi大神 ytfrdfiw 发表于 2022-2-14 17:55
膜拜一下delphi大神
千万别,我是饭桶。 读PE头。_IMAGE_FILE_HEADER 结构里Machine可以判断到 有个比较简单的方法(32位,我用易语言的)用 LoadLibraryA/W能加载句柄的是32位加载返回0的 是64位 用x64dbg打开程序,如果没提示,那就64位,如果有提示(提示你用x32dbg),那就是32位程序 本帖最后由 冥界3大法王 于 2022-2-15 09:15 编辑
揰掵佲 发表于 2022-2-14 20:05
有个比较简单的方法(32位,我用易语言的)用 LoadLibraryA/W能加载句柄的是32位加载返回0的 是64位
unit Unit3;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs,
Vcl.StdCtrls;
type
TForm3 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private { Private declarations }
public { Public declarations }
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
var
H: THandle;
begin
H := LoadLibrary('X:\ConceptDraw.exe');
if H <> 0 then
begin
ShowMessage('我是32位程序!');
end
else
begin
ShowMessage('我是64位程序!');
end;
end;
end.
用LoadLibary 会运行病毒代码, 比如activex启动的和很多钩子dll会在dll入口函数上写自动运行代码
正确的判断方式是:
ImageNtHeaders.OptionalHeader.Magic = IMAGE_NT_OPTIONAL_HDR64_MAGIC
页:
[1]