开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1292|回复: 12
收起左侧

[闲聊] HOOK函数ReadProcessMemory后,如何读取数据?

[复制链接]
结帖率:100% (1/1)
发表于 2023-11-14 03:45:46 | 显示全部楼层 |阅读模式   广东省珠海市
如题,HOOK函数ReadProcessMemory的函数头后,如何读取他读取了什么内容?
结帖率:100% (1/1)

签到天数: 24 天

 楼主| 发表于 2023-11-15 02:32:21 | 显示全部楼层   广东省珠海市
dnxl 发表于 2023-11-14 19:28
ReadProcessMemory最终调用ntdll.NtReadVirtualMemory,一样的参数,都不需要还原,直接用NtReadVirtualMemo ...

您的意思,直接HOOK函数NtReadVirtualMemory,然后直接读取就可以了?
回复 支持 反对

使用道具 举报

结帖率:60% (3/5)

签到天数: 26 天

发表于 2023-11-14 19:28:25 | 显示全部楼层   广西壮族自治区柳州市
ReadProcessMemory最终调用ntdll.NtReadVirtualMemory,一样的参数,都不需要还原,直接用NtReadVirtualMemory不就行了
回复 支持 反对

使用道具 举报

结帖率:0% (0/8)

签到天数: 8 天

发表于 2023-11-14 13:52:48 | 显示全部楼层   江西省九江市
HOOK后跳转函数里面弄5个参数,那参数就是你的HOOK后想要的,当然前提是需要注入进去
回复 支持 反对

使用道具 举报

结帖率:100% (21/21)

签到天数: 2 天

发表于 2023-11-14 12:19:22 高大上手机用户 | 显示全部楼层   安徽省合肥市
#include <iostream>
#include <windows.h>
#include <detours.h>

BYTE OriginalReadProcessMemory[1024]; // 保存原始ReadProcessMemory函数的代码
BYTE NewReadProcessMemory[1024]; // 保存自定义的ReadProcessMemory函数代码

BOOL DetourReadProcessMemory(HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesRead) {
    // 在这里实现自定义逻辑,例如修改参数、读取内存、调用原始函数等

    // 调用原始ReadProcessMemory函数
    BOOL result = OriginalReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead);

    // 在这里实现自定义逻辑,例如修改返回值、修改数据等

    return result;
}

int main() {
    // 初始化Detours
    DetourRestoreAfterWith();

    // 保存原始ReadProcessMemory函数的代码
    DWORD oldProtect;
    VirtualProtect(NewReadProcessMemory, sizeof(NewReadProcessMemory), PAGE_EXECUTE_READWRITE, &oldProtect);
    memcpy(NewReadProcessMemory, (void*)ReadProcessMemory, sizeof(OriginalReadProcessMemory));
    VirtualProtect(NewReadProcessMemory, sizeof(NewReadProcessMemory), oldProtect, &oldProtect);

    // Hook ReadProcessMemory函数
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourAttach(&(PVOID&)ReadProcessMemory, DetourReadProcessMemory);
    DetourTransactionCommit();

    // 在这里测试Hook,例如调用ReadProcessMemory函数

    // 恢复原始ReadProcessMemory函数
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourDetach(&(PVOID&)ReadProcessMemory, DetourReadProcessMemory);
    DetourTransactionCommit();

    return 0;
}

这是C++例子
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 11 天

发表于 2023-11-14 10:51:51 | 显示全部楼层   山东省济南市
dzscuz 发表于 2023-11-14 10:07
好像不行呢,读的时候好像会出错,您这边有示例吗?

自己准备一个一模一样的函数,然后替换函数地址,不可能出错,保证返回值正确
回复 支持 反对

使用道具 举报

签到天数: 24 天

发表于 2023-11-14 10:46:33 | 显示全部楼层   河北省邯郸市
dzscuz 发表于 2023-11-14 10:06
好像不行呢,您这边有示例吗?

我有例子
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 24 天

 楼主| 发表于 2023-11-14 10:07:55 | 显示全部楼层   广东省珠海市
不苦小和尚 发表于 2023-11-14 06:49
hook以后就能获取到地址和长度

直接读的时候好像会出错,您这边有示例吗?
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 24 天

 楼主| 发表于 2023-11-14 10:07:42 | 显示全部楼层   广东省珠海市
Catch腾大仙 发表于 2023-11-14 09:21
API HOOK,替换你地址后,直接根据参数读就行了

好像不行呢,读的时候好像会出错,您这边有示例吗?
回复 支持 反对

使用道具 举报

结帖率:100% (1/1)

签到天数: 24 天

 楼主| 发表于 2023-11-14 10:06:58 | 显示全部楼层   广东省珠海市
BeaFeng 发表于 2023-11-14 03:54
通过RDX拿到地址,想读多少就看自己

好像不行呢,您这边有示例吗?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表