python - 如何编写 Perl、Python 或 Ruby 程序来更改 Windows 上另一个进程的内存?

标签 python ruby perl winapi readprocessmemory

我想知道是否可以使用Perl、Python或Ruby来编写一个程序,让它在另一个进程的内存(可能是堆,数据和代码数据)中寻找0x12345678,然后如果找到,将其更改为 0x00000000?它类似于 Cheat Engine ,可以在 Windows 上执行类似的操作。

最佳答案

我最初认为这是不可能的,但在看到 Brian 的评论后,我搜索了 CPAN,你瞧,有 Win32::Process::Memory :

C:\> ppm install Win32::Process::Info
C:\> ppm install Win32::Process::Memory

该模块显然使用了 ReadProcessMemory功能:这是我的尝试之一:

#!/usr/bin/perl
use strict; use warnings;

use Win32;
use Win32::Process;
use Win32::Process::Memory;

my $process;

Win32::Process::Create(
    $process,
    'C:/opt/vim/vim72/gvim.exe',
    q{},
    0,
    NORMAL_PRIORITY_CLASS,
    q{.}
) or die ErrorReport();

my $mem = Win32::Process::Memory->new({
    pid => $process->GetProcessID(),
    access => 'read/query',
});

$mem->search_sub( 'VIM', sub {
    print $mem->hexdump($_[0], 0x20), "\n";
});

sub ErrorReport{
    Win32::FormatMessage( Win32::GetLastError() );
}

END { $process->Kill(0) if $process }

输出:

C:\Temp> proc
0052A580 : 56 49 4D 20 2D 20 56 69 20 49 4D 70 72 6F 76 65 : VIM - Vi IMprove
0052A590 : 64 20 37 2E 32 20 28 32 30 30 38 20 41 75 67 20 : d 7.2 (2008 Aug

0052A5F0 :       56 49 4D 52 55 4E 54 49 4D 45 3A 20 22 00 :   VIMRUNTIME: ".
0052A600 : 20 20 66 61 6C 6C 2D 62 61 63 6B 20 66 6F 72 20 :   fall-back for
0052A610 : 24 56                                           : $V

关于python - 如何编写 Perl、Python 或 Ruby 程序来更改 Windows 上另一个进程的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1013828/

相关文章:

python - 计算过滤器中的多对多值

python - 使用 asyncio(Python 3.4+)异步接收长时间运行的 shell 命令的输出?

ruby-on-rails - 如何将虚拟属性添加到 Rails 4 中的属性哈希

perl - 如何在perl one liner中查看n或p开关生成的代码块

python - 如何在文件中列出的文件中查找来自文件的单词?

python - 检查两个项目是否在列表中但不在固定顺序中?

javascript - 如何在 Rails 中正确管理用户的时区?

ruby-on-rails - RSpec/Shoulda : "should be_valid" fails, "contact.should be_valid"通过

perl5140delta 本地化绑定(bind)变量

python - 如何在函数之间传递变量?