加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何编写Perl,Python或Ruby程序来改变Windows上另一个进程的内存

发布时间:2020-12-15 21:17:03 所属栏目:大数据 来源:网络整理
导读:我想知道是否可以使用Perl,Python或Ruby来编写程序,以便它在另一个进程的内存中查找0x12345678(可能是堆,对于数据和代码数据)然后如果找到它,则更改它到0x00000000?它类似于 Cheat Engine,可以在Windows上执行类似的操作. 解决方法 我最初认为这是不可能的,
我想知道是否可以使用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{},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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读