首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏全栈程序员必看

    C ReadProcessMemory

    ReadProcessMemory函数用于读取其他进程的数据。 BOOL STDCALL ReadProcessMemory ( HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer, DWORD nSize

    32110编辑于 2022-11-09
  • 来自专栏全栈程序员必看

    readprocessmemory error 299

    VirtualQueryEx failed"),TEXT(""),MB_OK); } if (mbi.State == MEM_COMMIT) { SIZE_T numByteWritten = 0; if(ReadProcessMemory As I interpret the docs, it is by design that you cannot read these pages with ReadProcessMemory. if( ReadProcessMemory(hProc, baseOffs,buf,si.dwPageSize,&numByteWritten) == FALSE) { assert(mbi.Protect

    52720编辑于 2022-11-09
  • 来自专栏全栈程序员必看

    Readprocessmemory用法

    函数原型:BOOL ReadProcessMemory(HANDLE hProcess,LPCVOID lpBaseAddress,LPVOID lpBuffer,DWORD nSize,LPDWORD System.Runtime.InteropServices; 然后写API引用部分的代码,放入 class 内部 [DllImport(“kernel32.dll “)]
    static extern bool ReadProcessMemory OpenProcess(PROCESS_VM_READ | PROCESS_VM_WRITE, false, calcID);
    //假设地址0X0047C9D4存在信息
    ReadProcessMemory />} 如果我们读取的一段内存中的数据,我们引入部分可修改成如下: //二维数组
    [DllImport(“kernel32.dll “)]
    static extern bool ReadProcessMemory out int lpNumberOfBytesRead);
    //一维数组
    [DllImport(“kernel32.dll “)]
    static extern bool ReadProcessMemory

    56720编辑于 2022-11-09
  • 来自专栏全栈程序员必看

    readprocessmemory函数分析_in the process

    函数原型:BOOL ReadProcessMemory(HANDLE hProcess,LPCVOID lpBaseAddress,LPVOID lpBuffer,DWORD nSize,LPDWORD System.Runtime.InteropServices; 然后写API引用部分的代码,放入 class 内部 [DllImport(“kernel32.dll “)] static extern bool ReadProcessMemory calcProcess = OpenProcess(PROCESS_VM_READ | PROCESS_VM_WRITE, false, calcID); //假设地址0X0047C9D4存在信息 ReadProcessMemory 没有找到窗口”); } 如果我们读取的一段内存中的数据,我们引入部分可修改成如下: //二维数组 [DllImport(“kernel32.dll “)] static extern bool ReadProcessMemory int nSize, out int lpNumberOfBytesRead); //一维数组 [DllImport(“kernel32.dll “)] static extern bool ReadProcessMemory

    59720编辑于 2022-11-09
  • 来自专栏全栈程序员必看

    ReadProcessMemory与WriteProcessMemory用例分析

    接下来看ReadProcessMemory()函数 BOOL WINAPI ReadProcessMemory( __in HANDLE hProcess, __in LPCVOID 使用ReadProcessMemory()函数,可以获得该进程内存空间中的信息,或是用于监测进程的执行情况,或是将进程内的数据备份,然后调用writeProcessMemory()进行修改,必要时再还原该进程的数据 __in LPCVOID lpBuffer, __in SIZE_T nSize, __out SIZE_T *lpNumberOfBytesWritten ); 该函数与readProcessMemory ; VirtualProtectEx(hProcess, lpAddr, 1, PAGE_EXECUTE_READWRITE, &dwOldProt); BOOL bOK = ReadProcessMemory ; VirtualProtectEx(hProcess, lpAddr, 1, PAGE_EXECUTE_READWRITE, &dwOldProt); BOOL bOK = ReadProcessMemory

    1.1K20编辑于 2022-11-09
  • 来自专栏全栈程序员必看

    readprocessmemory函数分析_max函数用法

    函数原型 BOOL ReadProcessMemory( HANDLE hProcess, // 目标进程句柄 LPCVOID lpBaseAddress, 备注 ReadProcessMemory 函数从目标进程复制指定大小的数据到自己进程的缓存区,任何拥有PROCESS_VM_READ 权限句柄的进程都可以调用该函数,目标进程的地址空间很显然要是可读的 =NULL) { if(ReadProcessMemory(hProcess,(LPCVOID)0x00401000,&tmp,4,&dwNumberOfBytesRead

    75410编辑于 2022-11-10
  • 来自专栏全栈程序员必看

    通过ReadProcessMemory读取进程内存「建议收藏」

    修改一个程序的过程如下:1、获得进程的句柄 2、以一定的权限打开进程 3、调用ReadProcessMemory读取内存,WriteProcessMemory修改内存,这也是内存补丁的实现过程。 下面贴出的是调用ReadProcessMemory的例程 #include <windows.h> #include <tlhelp32.h> BOOL CALLBACK EnumChildWindowProc ::ReadProcessMemory(hProcess,(LPCVOID)0x00400000,&tmp,4,&dwNumberOfBytesRead)) { 下面要进行的就是调用WriteProcessMemory修改内存的内容了,具体程序放在下篇文章中 通过WriteProcessMemory改写进程的内存 以PROCESS_ALL_ACCESS权限打开进程以后既可以使用ReadProcessMemory

    1.9K50编辑于 2022-11-09
  • WinAPI: ReadProcessMemory 读取指定进程内存数据

    在 Windows 操作系统中,ReadProcessMemory 是一个非常常用的 API 函数,它允许你从其他进程的内存中读取数据。 ReadProcessMemory 函数简介ReadProcessMemory 函数允许一个进程读取另一个进程的内存内容。它通常用于 进程注入 或 外部调试。 完整代码示例以下是一个使用 ReadProcessMemory 读取目标进程内存数据的完整示例代码。假设你要读取目标进程的一个特定内存地址内容。 错误处理:如果 ReadProcessMemory 调用失败,可以使用 GetLastError() 来获取具体的错误信息。 总结ReadProcessMemory 是一种强大的工具,允许你从其他进程的内存中读取数据。它常用于调试、逆向工程和其他低级系统操作。

    88610编辑于 2025-07-17
  • 来自专栏逆向技术

    一丶ReadProcessMemory 和WriteProcessMemory 的小知识.

    一丶ReadProcessMemory 和WriteProcessMemory 的小知识. 我们都知道 Ring3读写别人进程的内存.都是用这两个API进行操作的.  BOOL ReadProcessMemory( HANDLE hProcess, // handle to the process LPCVOID lpBaseAddress 通过上面几张表.我们最终找到了PDE的位置.那么最后我们修改PDE.然后对其读取内存.则可以自己实现ReadProcessMemory 但是现在微软对我们隐藏了.也就是说我们的 _KTHREA 和 _KPROCESS 0x255 WorkingSetAcquiredUnsafe : 0 '' +0x258 Cookie : 0 至此.我们的表项就写完了.下面可以通过这些表项.来写我们自己的ReadProcessMemory

    2.5K11编辑于 2022-05-10
  • 来自专栏全栈程序员必看

    ReadProcessMemory会被检测到吗?_仅完成部分readprocess如何解决

    ReadProcessMemory 从特定进程的内存里读取数据。被读取的整个位置应该是可读的否则操作会失败。 BOOL WINAPI ReadProcessMemory( __in HANDLE hProcess , __in LPCVOID lpBaseAddress , __out LPVOID

    1.2K30编辑于 2022-11-09
  • C/C++ 内存读写Lib库简单封装

    (proce,pbase,rbuffer,4,&byread); pbase = (LPCVOID)(Value + One); ::ReadProcessMemory(proce,pbase, ,4,&byread); pbase = (LPCVOID)(Value + One); ::ReadProcessMemory(proce,pbase,rbuffer,4,&byread); (proce,pbase,rbuffer,4,&byread); pbase = (LPCVOID)(Value + Three); ::ReadProcessMemory(proce,pbase ); ::ReadProcessMemory(proce,pbase,rbuffer,4,&byread); pbase = (LPCVOID)(Value + One); ::ReadProcessMemory ); ::ReadProcessMemory(proce,pbase,rbuffer,4,&byread); pbase = (LPCVOID)(Value + One); ::ReadProcessMemory

    1.1K30编辑于 2022-12-28
  • 来自专栏码农UP2U

    植物大战僵尸辅助

    修改阳光 阳光可以通过 CE 逐步的查找基址,首先通过 ReadProcessMemory 函数将 CE 获取到的阳光地址找到,然后通过 WriteProcessMemory 函数将修改的阳光值写入即可 dwSunValue = 0; DWORD dwAddr = 0; DWORD dwReadWriteByte = 0; // 计算阳光地址 // [[[0x007794f8]+0x868]+0x5578] ReadProcessMemory hProcess, (LPCVOID)SUN_VALUE_ADDRESS, &dwAddr, sizeof(DWORD), &dwReadWriteByte); dwAddr = dwAddr + 0x868; ReadProcessMemory hProcess, (LPCVOID)dwAddr, &dwAddr, sizeof(DWORD), &dwReadWriteByte); dwAddr = dwAddr + 0x5578; // 读取当前阳光 ReadProcessMemory OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPid); DWORD dwOldByte = 0; DWORD dwReadWriteByte = 0; // 读取免冷却代码 ReadProcessMemory

    1.1K30发布于 2020-08-26
  • 来自专栏红队蓝军

    用户层下API的逆向分析及重构

    现在我们使用ollydbg对ReadProcessMemory进行跟踪分析,查看其在R3的实现。 测试 od 我们首先在od里面跟一下在ring3层ReadProcessMemory的调用过程 首先在 exe 中 调用 kernel32.ReadProcessMemory函数,我们可以看到这一部分主要是 call dword ptr ds:[<&KERNEL32.ReadProcessMemory>]; kernel32.ReadProcessMemory这一行代码比较关键,调用了kernel32.ReadProcessMemory >]; kernel32.ReadProcessMemory 01314E58 3BF4 cmp esi,esp 在 ReadProcessMemory函数 中调用 jmp jmp dword ptr ds:[<&API-MS-Win-Core-Memory-L1-1-0.ReadProcessMemory>; KernelBase.ReadProcessMemory

    95410编辑于 2022-05-17
  • 来自专栏红队蓝军

    用户层下API的逆向分析及重构

    现在我们使用ollydbg对ReadProcessMemory进行跟踪分析,查看其在R3的实现。 测试 od 我们首先在od里面跟一下在ring3层ReadProcessMemory的调用过程 首先在 exe 中 调用 kernel32.ReadProcessMemory函数,我们可以看到这一部分主要是 call dword ptr ds:[<&KERNEL32.ReadProcessMemory>]; kernel32.ReadProcessMemory这一行代码比较关键,调用了kernel32.ReadProcessMemory >]; kernel32.ReadProcessMemory   01314E58 3BF4 cmp esi,esp 在 ReadProcessMemory函数 中调用 jmp. jmp dword ptr ds:[<&API-MS-Win-Core-Memory-L1-1-0.ReadProcessMemory>; KernelBase.ReadProcessMemory 在KernelBase.ReadProcessMemory

    1.1K81编辑于 2022-03-08
  • 来自专栏全栈程序员必看

    ReadProcessMemory/C++的探索

    ReadProcessMemory 函数msdn说明: BOOL WINAPI ReadProcessMemory( _In_ HANDLE hProcess, _In_ LPCVOID Remarks ReadProcessMemory copies the data in the specified address range from the address space of the ReadProcessMemory(hProcess,(LPCVOID)i,readtemp,0x10,&dwNumberOfBytesRead)){ i++; } printf("readsuccess 讲得大同小异,有的说权限不对,有的说地址不对,然后我看到可以用GetLastError(菜鸟一枚,勿喷)获取错误代码,我用了后发现代码是5,然后用IDE工具中的错误查看器查出错误是: 仅完成部分的 ReadProcessMemory ReadProcessMemory(hProcess,(LPCVOID)i,readtemp,0x10,&dwNumberOfBytesRead)){ i++; } printf("readsuccess

    68131编辑于 2022-11-09
  • 来自专栏全栈程序员必看

    read digest_view the readme file

    一、本文大纲 系统调用的两种方式:中断门和快速调用 _KUSER_SHARED_DATA 结构 使用 cpuid 指令判断当前CPU是否支持快速调用 3环进0环需要更改的4个寄存器 以 ReadProcessMemory 为例说明系统调用全过程 重写 ReadProcessMemory 和 WriteProcessMemory int 0x2e 和 sysenter 都做了什么工作? ---- 六、以 ReadProcessMemory 为例说明系统调用全过程 大家可以看 kernel32.dll 里 ReadProcessMemory 的反汇编,我这里抠出最关键的一条指令: call ds:__imp__NtReadVirtualMemory@20 ; NtReadVirtualMemory(x,x,x,x,x) ReadProcessMemory 啥也没干,只是调用了 ntdll.dll ---- 七、重写 ReadProcessMemory 和 WriteProcessMemory 通过上面的分析,我们已经了解了系统调用3环部分的过程,下面我重写了 ReadProcessMemory

    71030编辑于 2022-09-30
  • 来自专栏全栈程序员必看

    createprocess error=2_CreateProcess

    std::cout << "获取句柄成功" << std::endl; } else { std::cout << "获取句柄失败" << std::endl; } } ReadProcessMemory 函数声明如下,成功true失败返回false BOOL ReadProcessMemory ( HANDLE process,//要读取的句柄 LPCVOID baseAddress,//要读取的地址( PROCESS_ALL_ACCESS,FALSE,pid); if (handler) { std::cout << "获取句柄成功" << std::endl; int a = 0; BOOL result = ReadProcessMemory } } else { std::cout << "获取句柄失败" << std::endl; } } WriteProcessMemory函数声明如下,成功true失败返回false BOOL ReadProcessMemory

    74810编辑于 2022-10-01
  • C/C++ 遍历任务栏托盘图标

    HANDLE hProcess = OpenProcess( PROCESS_VM_OPERATION | // 需要在进程的地址空间上执行操作 PROCESS_VM_READ | // 需要使用 ReadProcessMemory ReadProcessMemory(hProcess, (LPVOID)((DWORD)p_tbbutton + i_data_offset), &dw_addr_dwData, 4, 0)) { cout << "ReadProcessMemory failed:" << GetLastError() << endl; return FALSE; } // 读文本 if (dw_addr_dwData ReadProcessMemory(hProcess, (LPCVOID)dw_addr_dwData, buff, 1024, 0)) { cout << "ReadProcessMemory

    1.4K10编辑于 2022-12-28
  • 来自专栏全栈程序员必看

    读取与修改其他程序的数据Read/WriteProcessMemory[通俗易懂]

    修改后程序正确执行,但是在读取一些不可用内存地址时会有229错误(会有很多,是正常的) ——仅完成部分的 ReadProcessMemory 或WriteProcessMemory 请求。 } BOOL CompareAPage(DWORD dwBaseAddr,DWORD dwValue) { // 读取一页的内存 BYTE arByte[4096]; if(::ReadProcessMemory (g_hProcess,(LPCVOID)dwBaseAddr,arByte,4096,NULL)) { printf(” ReadProcessMemory成功/n”); int* //添加到全局变量中 g_arList[g_nListCnt++] = dwBaseAddr+i; } } } else { printf(” ReadProcessMemory (dwSecondRead==dwValue) g_arList[g_nListCnt++] = g_arList[m]; } else { printf(” ReadProcessMemory

    2.4K20编辑于 2022-09-30
  • 来自专栏FreeBuf

    对windows密码抓取神器mimikatz的逆向分析

    12)); // 获取lsasrv.dll的数据区 nSize = ((*(DataSECTION + 8) >> 12) + 1) << 12; // 数据区大小 status = ReadProcessMemory 3仪E鑌b", 0xCu); //根据特征码查找存放DES_KEY的地址 g_pDESXKey = v10; g_pDESXKey = *(v10 - 1); v11 = ReadProcessMemory &v15 == &v15, v13, &v27); lpBuffer = &lpBaseAddress; lpBaseAddress = &unk_42BFB8; v14 = ReadProcessMemory status3 = ReadProcessMemory(Lsass, l_LogSessList, List, 0x100u, &NumberOfBytesRead); // 这里读取之前获取的那个不明地址内容到 = l_LogSessList ) { status4 = ReadProcessMemory(Lsass, List[0], List, 0x100u, &NumberOfBytesRead

    2.7K80发布于 2018-02-05
领券