gpt4 book ai didi

delphi - 使用 ReadProcessMemory 扫描整个进程内存

转载 作者:行者123 更新时间:2023-12-03 15:45:23 27 4
gpt4 key购买 nike

我正在尝试扫描整个进程内存,但没有成功...我正在做的是:对于我使用记事本的测试,所以我在那里写 %B 和这个值十六进制为:25(%) 和 42(B)。所以代码是:

  while (VirtualQueryEx(PIDHandle, Pointer(MemStart), MemInfo, SizeOf(MemInfo)) <> 0) do
begin
if ((MemInfo.State = MEM_COMMIT) and (not (MemInfo.Protect = PAGE_GUARD)
or (MemInfo.Protect = PAGE_NOACCESS)) and (MemInfo.Protect = PAGE_READWRITE)) then
begin
SetLength(Buff, MemInfo.RegionSize);
if (ReadProcessMemory(PIDHandle, MemInfo.BaseAddress, Buff,
MemInfo.RegionSize, ReceivedBytes)) then
begin
for I := 0 to SizeOf(Buff) do
begin
if (IntToHex(Buff[i], 1) = '25') and (IntToHex(Buff[i+2], 1) = '42') then
Form1.Memo1.Lines.Append(IntToHex(Buff[i], 1));
end;

end;
end;
MemStart:= MemStart + MemInfo.RegionSize;
end;
CloseHandle(PIDHandle);
end;

var 'Buff' 是 TBytes(我读到了 TBytes 并认为它与字节数组相同)。因此,我将字节转换为十六进制,并分别搜索值:25 和 42。代码如下:

if (IntToHex(Buff[i], 1) = '25') and (IntToHex(Buff[i+2], 1) = '42') then

因为十六进制值之间有 00。所以我需要添加“+2”。我怎样才能扫描整个内存来查找这个值?

最佳答案

记事本使用 Unicode,因此您需要查找 UTF-16 编码数据:$0025$0042

我不明白为什么您觉得需要在比较之前转换为十六进制字符串。十六进制没有什么特别之处需要使用字符串。十六进制只是以 16 为基数的数字系统。因此,十进制 32 与十六进制 20 相同,即 32=$20。直接与整数值进行比较:

if (Buff[i]=$25) and (Buff[i+2]=$42) then

也就是说,考虑到 $00 字节,您的测试实际上应该是这样的:

var
Target: string;
....
Target := '%B';
if CompareMem(@Buff[i], @Target[1], Length(Target)*SizeOf(Char)) then
....

我不想太深入了解代码的其余部分,但是这一行

for I := 0 to SizeOf(Buff) do

在许多不同层面上都是错误的。

  1. SizeOf(Buff) 返回指针的大小,因为动态数组变量本质上只是一个指针。需要记住的一件有用的事情是 SizeOf 是在编译时评估的。
  2. 如果您使用 Length 而不是 SizeOf,那么您将遍历列表的末尾。要循环动态数组,请从 0 循环到 Length(...)-1
  3. 但在本例中,您正在循环内访问索引 i+2,因此您应该从 0 循环到 Length(...)-3

但实际上您需要比较 4 个连续字节才能找到匹配项。也许像这样:

TargetByteLength = Length(Target)*SizeOf(Char);
for i := 0 to Length(Buff)-TargetByteLength do
if CompareMem(@Buff[i], @Target[1], TargetByteLength) then
....

关于delphi - 使用 ReadProcessMemory 扫描整个进程内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10567754/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com