冥界3大法王 发表于 2022-2-14 17:35

Delphi怎么判断拖过来的程序是32位的 还是64位的?【不能让其运行!】

本帖最后由 冥界3大法王 于 2022-2-14 17:40 编辑

5

运行后 看任务管理器有没有 (32位)
@贱男春 不能运行
拖过来之后得到了全路径
然后再带着参数自动化的运行32位 或64位的IDA

ytfrdfiw 发表于 2022-2-14 17:55

膜拜一下delphi大神

冥界3大法王 发表于 2022-2-14 18:04

ytfrdfiw 发表于 2022-2-14 17:55
膜拜一下delphi大神

千万别,我是饭桶。

Pierce 发表于 2022-2-14 18:40

读PE头。_IMAGE_FILE_HEADER 结构里Machine可以判断到

揰掵佲 发表于 2022-2-14 20:05

有个比较简单的方法(32位,我用易语言的)用 LoadLibraryA/W能加载句柄的是32位加载返回0的 是64位

xiaomm250 发表于 2022-2-15 08:54

用x64dbg打开程序,如果没提示,那就64位,如果有提示(提示你用x32dbg),那就是32位程序

冥界3大法王 发表于 2022-2-15 09:13

本帖最后由 冥界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.

amonsonic 发表于 2022-4-2 12:45

用LoadLibary 会运行病毒代码, 比如activex启动的和很多钩子dll会在dll入口函数上写自动运行代码

正确的判断方式是:
ImageNtHeaders.OptionalHeader.Magic = IMAGE_NT_OPTIONAL_HDR64_MAGIC
页: [1]
查看完整版本: Delphi怎么判断拖过来的程序是32位的 还是64位的?【不能让其运行!】