path_exe = "C:\\windows\\system32\\calc.exe"
dbg.load(path_exe, "-u amir")
dbg.debug_event_loop()
parameter_addr = dbg.context.Esp #(+ 0x8)
print 'ESP (address) ',parameter_addr
#attach not working under Win7 for me
#pid = raw_input("Enter PID:")
#print 'PID entered %i'%int(pid)
#dbg.attach(int(pid)) #attaching to running process not working
我无法使用attach()来工作和使用负载。 Pydbg具有许多功能,例如read_proccess_memory,write_process_memory等。
请注意,您无法随机更改内存,因为操作系统会保护您的进程中的其他进程的内存(保护模式)。在x86处理器之前,有一些允许所有处理器以实模式运行,即每个程序完全访问内存。非恶意软件通常(总是?)不会读/写其他进程的内存。
安装pydbgfrom pydbg import *from pydbg.defines import *import structdbg = pydbg()path_exe = "C:\\windows\\system32\\calc.exe"dbg.load(path_exe, "-u amir")dbg.debug_event_loop()parameter_addr = dbg.conte...
因为昨天研究FPS游戏时候,发现有个动态地址每次重启电脑都会不同,然后因为有过用C和易语言编写指定模块名
获取
基址
的经验,所以打算用
Python
来试试
在网上搜索了一点资料,发现有吾爱有一篇是使用
Python
32位,通过Ntdll库进行模块遍历。
将代码复制粘贴,因为我使用的是
Python
64位的,改了改代码,但是发现失败了,搜不出来,因为代码涉及到PE头,目前还没碰到这块区域,代码作者也说他只是复制粘贴的,所以也不甚清楚为什么,就只能另寻出路了。
def _ReadMemeryInt(hGameHand.
Python
获取
指定模块
基址
在这篇文章里,我有一个问题,就是当我使用
Python
2时候,使用Module32First这个函数API就没报错,当使用
Python
3时候,就会出现参数错误,当时卡了很久。
直到后面研究才发现,是
Python
64位和32位的问题,所以不是代码问题,是版本问题,那就没办法了。 卸载64位,安装32位。
Python
3
获取
指定模块
基址
代码
#
-
*
-
coding:utf
-
8
-
*
-
@author:
@file: GetBaseAddr.py
@time: 2020.
在VB.NET中,可以通过使用Process类的帮助方法和属性来
获取
进程
句柄,并进而
获取
模块
基址
。
首先,我们需要引入System.Diagnostics命名空间,以便能够使用Process类。然后,可以使用Process.GetProcessesByName方法通过
进程
名或
进程
ID
获取
进程
对象。接下来,我们可以通过Process.MainModule属性
获取
主模块,并使用Module.BaseAddress属性
获取
模块的
基址
。
以下是一个简单的示例代码:
Imports System.Diagnostics
Public Class MainForm
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim processName As String = "YourProcessName" ' 替换为你要
获取
基址
的
进程
名
Dim processes() As Process = Process.GetProcessesByName(processName)
If processes.Length > 0 Then
Dim process As Process = processes(0) ' 假设只有一个该
进程
的实例
Dim moduleBaseAddress As IntPtr = process.MainModule.BaseAddress
MessageBox.Show("
进程
的模块
基址
为: " & moduleBaseAddress.ToString())
MessageBox.Show("未找到指定的
进程
")
End If
End Sub
End Class
在上述代码中,我们先通过Process.GetProcessesByName方法
获取
进程
对象的数组,然后再
获取
第一个
进程
的主模块的
基址
,并将其显示在一个消息框中。请注意,如果指定的
进程
名不存在,代码会显示一个相应的消息。
需要注意的是,为了能够执行这个操作,程序需要有足够的特权或权限,以便
获取
目标
进程
的句柄和模块
基址
。