我希望从32位进程写入64位进程的入口点,就像使用EnumProcessModule并使用主模块的内存地址一样。 我的最终目标是从我的64位进程中读取一个字节,从偏移到它(entry + Offset)。
但是我的NtWow64ReadVirtualMemory64函数仍然失败。 我认为这与我的入门记忆添加器有关。
while (strtotime($startDate) <= strtotime($newEnddate)) {
$newStartDate = date ("Y-m-d", strtotime("+1 day", strtotime($startDate)));
$dates = array(
'startdate' => $newStartDate,
'enddate' => $newStartDate
);
//$this->ddc_get_res($dates);
$startDate = $newStartDate;
}
我想知道我做错了什么。
编辑: 经过进一步检查,我注意到NtWow64ReadVirtualMemory没有在变量&#34; ret&#34;中存储值。用作缓冲区。
答案 0 :(得分:1)
我运行了一个简单的测试,并发现我的缓冲区的价值 - &#34; ret&#34;插入函数&#34; NtWow64ReadVirtualMemory64&#34; 时未更改。
代码确实编译并运行没有错误(编译和运行时),除了NtReadMemory64返回一个奇怪的数字(没有可用于ntdll NtWow64函数的文档,所以goolgling它没有产生任何有用的东西)。
所以我想我要么提供一个错误的缓冲区,要么就是没有从有效的内存地址读取。
因为我确实在函数之外显式初始化了缓冲区,我想 我的问题是后者(没有提供有效的内存地址)。
我在调用NtReadVirtualMemory时使用了以下内容
NTSTATUS result = NtReadVirtualMemory64(PROC_HANDLE, (void*)address64, &ret, 8, NULL);
显然,在调用NtWow64ReadVirtualMemory64时,我将addr转换为32位无效指针(void*)address64
,并且由于address64是UINT64类型,所以转换截断了地址,我试图读取内存细分我无法阅读
我通过将演员表更改为(PVOID64)address64
来解决此问题
它将它转换为原生的64位指针。
比我想象的要简单,但经过几天的谷歌搜索和审查代码后发现它是地狱。
修改强>
因为我的地址错了,所以没有削减它。
我需要得到&#34; .exe&#34; s&#39;进入点通过过程的位置&#39;内存中的主模块。
看着现在怎么样。
任何帮助表示赞赏!