首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

readprocessmemory函数分析_in the process

函数功能:该函数从指定的进程中读入内存信息,被读取的区域必须具有访问权限。...函数原型:BOOL ReadProcessMemory(HANDLE hProcess,LPCVOID lpBaseAddress,LPVOID lpBuffer,DWORD nSize,LPDWORD...lpNumberOfBytesRead); 参数: hProcess:进程句柄 lpBaseAddress:读出数据的地址 lpBuffer:存放读取数据的地址 nSize:读出的数据大小...lpNumberOfBytesRead:数据的实际大小 C#使用函数首先导入命名空间: using System.Runtime.InteropServices; 然后写API引用部分的代码...;第二个参数是要读出数据的地址使用CE等辅助工具可取得;第三个参数是用于存放读取数据的地址;第四个参数是 要读出的数据大小;第五个参数是读出数据的实际大小。

33220

Readprocessmemory用法

函数功能:该函数从指定的进程中读入内存信息,被读取的区域必须具有访问权限。...lpNumberOfBytesRead); 参数: hProcess:进程句柄 lpBaseAddress:读出数据的地址 lpBuffer:存放读取数据的地址 nSize:读出的数据大小 lpNumberOfBytesRead...:数据的实际大小 C#使用函数首先导入命名空间: using System.Runtime.InteropServices; 然后写API引用部分的代码,放入 class 内部 [DllImport...lpBuffer, int nSize, out int lpNumberOfBytesRead); 这个函数有五个参数,第一个参数是 进程句柄,由OpenProcess函数获取;第二个参数是要读出数据的地址...,使用CE等辅助工具可取得;第三个参数是用于存放读取数据的地址;第四个参数是 要读出的数据大小;第五个参数是读出数据的实际大小。

31720
您找到你想要的搜索结果了吗?
是的
没有找到

error at hooking api ntprotect_read,match and write

编译环境:delphi 2010+windows 7 u ,用途读取其他程序中readprocessmemory和writeprocessmemory的参数,但不知读取偏移即a+($b),b是怎么读的...,应该是线程不断读写内存函数READPROCESSMEMORY,但钩子正在卸载没有改回正确的地址就被目标程序读取,导致目标程序处理错误的API地址出错,如果不是不停读写 卸载不会出现错误?...不知是不是 问题2:使用INLINE HOOK目标程序多线程读取内存,程序在卸载钩子时有时会出错,可能跟问题一 一样。使用CreateRemoteThread远程注入是否会有此问题,应该没有吧!...问题3:自己的替代函数使用记录日志可能不响应,为什么? 问题4:使用临界区后没出现EXPLORER的问题,也可能是逻辑代码问题,有待研究。...似乎是说多线程下同时写入读写东西,还没修复回IAI就被其他线程调用,程序会出错。 2009-10-0515:14:29 源码在此 !

58830

C#_对内存的操作

最近一直不务正,老打算用C#写个外挂出来。 这方面对C#来说是个弱项,但并不表示无法做到。 下面写个简单的例子,和大家交流一下。 以windows中的扫雷为例,比如说读取雷的数量。...[] buffer,int size,int[] nor); readrpocessmemory可以用来读取某个进程地址的值。...第一个参数就是上面API返回的值;第二个是要读取进程的地址;第三个参数为读取出的内容,要求为指针,它相当于一个out类型的参数,读出的内容并不是以函数返回值的方式得到;第四个为读取值的字节大小,int为...不过由于winio的名气太大,使用太大众化,所以最近可能也不能用了。 现在流行的方法是使用CALL,CALL就是调用游戏本身内部的函数,比如攻击怪物,调用相应的攻击函数,而不是发送按键。...流行的工具是OD,本菜鸟还没研究透,另外CE这个工具也是必不可少的,例如上面的地址0x1005194就是用CE找出来的,CE怎么使用呢,再说就扯的太远了,网上有不少的教程,有兴趣的可以查一下。

73420

ReadProcessMemoryC++的探索

ReadProcessMemory 函数msdn说明: BOOL WINAPI ReadProcessMemory( _In_ HANDLE hProcess, _In_ LPCVOID...读出内容后输出的缓冲区的头地址 nSize [in] The number of bytes to be read from the specified process....关于探索旅程的废话说一点: 开始按实验报告上的要求基址填了0x,其它查了下msdn函数原型简单写出了程序,运行一下,结果就悲剧的读取失败。...,然后我看到可以用GetLastError(菜鸟一枚,勿喷)获取错误代码,我用了后发现代码是5,然后用IDE工具中的错误查看器查出错误是: 仅完成部分的 ReadProcessMemory 或 WriteProcessMemory...后来由于基址在程序运行前会变化,所有用了while语句,直到成功才跳出循环,苦逼,,,这么简单的东西搞了半天,主要基础没打好,,,, 下面是正确的代码: STARTUPINFO si; PROCESS_INFORMATION

39030

read digest_view the readme file

一、本文大纲 系统调用的两种方式:中断门和快速调用 _KUSER_SHARED_DATA 结构 使用 cpuid 指令判断当前CPU是否支持快速调用 3环进0环需要更改的4个寄存器 以 ReadProcessMemory...3环通过地址 0x7ffe0000 可以访问到这个结构体,3环PTE属性是只读; 0环通过地址 0xffdf0000 可以访问到这个结构体,0环PTE属性是可读写。...这两个线性地址映射的是同一个物理页。...现在,我们知道了进0环需要更改的4个寄存器,接下来分析 KiFastSystemCall 和 KiIntSystemCall ,只要明白一点,这两个函数做的事情就是更改这4个寄存器。...我的代码是在vs2010编译的,实测vc6编译 push NtWriteVirtualMemoryReturn 这条指令时会出错,你可以看一下vc6生成的是什么代码,挺坑的。

43330

刑】(一)使用c#+Win32Api实现进程注入到wechat

c#代码获取数据以及远程注入          在上面我们讲了,如何使用CE,去获取我们微信的一些静态数据,接下来,我们就需要使用c#代码,去实现我们获取静态数据,以及最后写的一个远程注入,来调用我们写的一个库...首先我们需要用到的有几个Api函数,     WaitForSingleObject,等待某个句柄多长时间,在我们创建远程线程的时候需要使用这个函数来等待线程执行结束。...GetModuleHandle,这个函数是用来获取kernel32.dll,结合上面的GetProdAddress来使用。     ...ReadProcessMemory,读指定进程的内存,第一个参数进程句柄,OpenProcess返回值,第二个参数是这个进程某个内存的地址,第三个是数据缓冲区,读取之后的内容就在这个缓冲区,我们读取这个缓冲区就可以拿到数据...然后我们调用了ReadProcessMemory函数读取内存,获取我们需要的静态数据。然后使用Utf8转为字符串,显示到界面上。

48420

x86平台inline hook原理和实现

5字节的call形如: (2)inline hook代码实现 在x86汇编中,同样有很多类型的jmp,本文构造inline hook使用的是近距离地址跳转的jmp指令,它的机器码为E9,这种类型的jmp...假设需要hook的call的指令的内存地址为:0x1000,我们想要它执行后跳转到我们的函数(假设函数在内存中的地址:0x5000),那么,构造jmp指令,指令应为: jmp (0x5000-(0x1000...调用ReadProcessMemory读取当前进程hookAddr处的指令,写入backCode数组。调用WriteProcessMemory将构造好的jmp指令写入当前进程hookAddr处。...在裸函数里,先备份所有的寄存器,然后编写我们的hook代码,编写hook代码可以通过esp寄存器读取或者修改原call的参数,或者通过修改eax寄存器以修改原call的返回值,再或者调用其他函数等等。...这样就不会导致程序逻辑出错而崩溃。 但是,上面内联汇编代码的写法看起来似乎不太简洁,有更好的写法吗,答案是有的。

71410

ReadProcessMemory与WriteProcessMemory用例分析

首先介绍一个函数VirtualProtectEx,它用来改变一个进程的虚拟地址中特定页里的某一区域的保护属性,这句话有些咬嘴,直接从MSDN中翻译过来的,简单来说就是改变某一进程中虚拟地址的保护属性,如果以前是只读的...如果想得到线程的句柄,同样可以采用这两种方式,利用结构体PROCESS_INFORMATION重的hThread成员或使用函数OpenThread()。...,当然你事先要了解你要读取内容的基地址。...第三个参数lpBuffer为接收所读取内容的基地址。第四个参数为要读取内容的大小,以字节为单位。最后一个参数lpNumberOfBytesRead为接收读取内容的buffer中收到的字节数。...使用ReadProcessMemory()函数,可以获得该进程内存空间中的信息,或是用于监测进程的执行情况,或是将进程内的数据备份,然后调用writeProcessMemory()进行修改,必要再还原该进程的数据

53520

createprocess error=2_CreateProcess

函数声明如下,成功true失败返回false BOOL ReadProcessMemory ( HANDLE process,//要读取的句柄 LPCVOID baseAddress,//要读取地址(...我个人觉得就是相对于HANDLE的偏移地址) LPVOID buffer,//要把读到的数据放到buffer,这是个指针 SIZE_T size,//要读取的数据字节大小 SIZE_T *readSize...//接受到的数据大小,可为NULL ) 示例代码,配合OpenProcess使用 #include #include int main() { int...函数声明如下,成功true失败返回false BOOL ReadProcessMemory ( HANDLE process,//要写入的句柄 LPVOID baseAddress,//要写入的地址,注意不是...LPCVOID buffer,//要写入的数据指针 SIZE_T size,//要写入的数据字节大小 SIZE_T *readSize//实际写入的数据大小,可为NULL ) 示例代码,配合OpenProcess使用

43610

10.1 调试事件读取寄存器

lpStartAddress属性获取到当前程序的入口地址,并通过SuspendThread暂停程序的运行,当被暂停后则我没就可以通过ReadProcessMemory读取当前位置的一个字节机器码,目的是保存以便于后期的恢复...; // 暂停线程 SuspendThread(de.u.CreateProcessInfo.hThread); // 读取入口地址处的字节码 ReadProcessMemory...break直接跳过,因为此断点通常为系统断点,而第二次断点则是我们自己设置的int3断点,此时需要将该请求发送至OnException异常处理函数对其进行处理,在传递需要给与&de调试事件,以及&bCode...,在本函数内我们首先通过使用OpenProcess/OpenThread两个函数得到当前进程的句柄信息,接着使用SuspendThread(hThread)暂时暂停进程内线程的执行,通过调用ReadProcessMemory...,为了让程序正常执行当读取结束后,通过WriteProcessMemory我们将原始机器码写回到内存中,并SetThreadContext设置当前上下文,最后使用ResumeThread运行该线程;void

16620

readprocessmemory函数分析_max函数用法

函数功能描述:该函数用来读取指定进程的空间的数据,此空间必须是可以访问的,否则读取操作会失败!...// 读取数据的起始地址 LPVOID lpBuffer, // 存放数据的缓存区地址 DWORD nSize, // 要读取的字节数 LPDWORD lpNumberOfBytesRead...lpBaseAddress 从目标进程中读取数据的起始地址。 在读取数据前,系统将先检验该地址的数据是否可读,如果不可读,函数将调用失败。...lpNumberOfBytesRead 实际被读取数据大小的存放地址。如果被指定为NULL,那么将忽略此参数。 返回值 如果函数执行成功,返回值非零。...备注 ReadProcessMemory 函数从目标进程复制指定大小的数据到自己进程的缓存区,任何拥有PROCESS_VM_READ 权限句柄的进程都可以调用该函数,目标进程的地址空间很显然要是可读的

40310

7.7 实现进程内存读写

接着我们讲解一下内存读写的实现方法,此处的读写分为32位与64位实现,在32位进程读写可以使用微软提供的ReadProcessMemory读及WriteProcessMemory写入,这两个函数在参数传递上并没有太大的差异...ReadProcessMemory 函数用于从指定进程中读取指定内存地址的数据,写入一个缓冲区中。函数接受的参数包括要读取的进程句柄,要读取的内存地址,要读取的数据大小等。...ReadProcessMemory() 和 WriteProcessMemory() 函数,需要以管理员身份运行程序。...上述这两个函数都位于ntdll.dll库中,在使用时需要通过LoadLibrary函数获取到该动态链接库的模块句柄,并在该内存中使用GetProcAddress函数动态得到上述两个函数的基地址,有了基址就可以使用函数指针的方式动态的引用内存读写功能...,我们以读取浮点数为例,在调用ReadMemory函数传入则代表参数传递采用浮点数模式,同理读取整数同样可以使用模板,如下代码则是实现读写整数与浮点数的案例演示。

25330

7.7 实现进程内存读写

图片接着我们讲解一下内存读写的实现方法,此处的读写分为32位与64位实现,在32位进程读写可以使用微软提供的ReadProcessMemory读及WriteProcessMemory写入,这两个函数在参数传递上并没有太大的差异...ReadProcessMemory 函数用于从指定进程中读取指定内存地址的数据,写入一个缓冲区中。函数接受的参数包括要读取的进程句柄,要读取的内存地址,要读取的数据大小等。...ReadProcessMemory() 和 WriteProcessMemory() 函数,需要以管理员身份运行程序。...上述这两个函数都位于ntdll.dll库中,在使用时需要通过LoadLibrary函数获取到该动态链接库的模块句柄,并在该内存中使用GetProcAddress函数动态得到上述两个函数的基地址,有了基址就可以使用函数指针的方式动态的引用内存读写功能...,我们以读取浮点数为例,在调用ReadMemory函数传入则代表参数传递采用浮点数模式,同理读取整数同样可以使用模板,如下代码则是实现读写整数与浮点数的案例演示。

38950

7.7 实现进程内存读写

接着我们讲解一下内存读写的实现方法,此处的读写分为32位与64位实现,在32位进程读写可以使用微软提供的ReadProcessMemory读及WriteProcessMemory写入,这两个函数在参数传递上并没有太大的差异...ReadProcessMemory 函数用于从指定进程中读取指定内存地址的数据,写入一个缓冲区中。函数接受的参数包括要读取的进程句柄,要读取的内存地址,要读取的数据大小等。...ReadProcessMemory() 和 WriteProcessMemory() 函数,需要以管理员身份运行程序。...上述这两个函数都位于ntdll.dll库中,在使用时需要通过LoadLibrary函数获取到该动态链接库的模块句柄,并在该内存中使用GetProcAddress函数动态得到上述两个函数的基地址,有了基址就可以使用函数指针的方式动态的引用内存读写功能...,我们以读取浮点数为例,在调用ReadMemory函数传入则代表参数传递采用浮点数模式,同理读取整数同样可以使用模板,如下代码则是实现读写整数与浮点数的案例演示。

31120

10.1 调试事件读取寄存器

lpStartAddress属性获取到当前程序的入口地址,并通过SuspendThread暂停程序的运行,当被暂停后则我没就可以通过ReadProcessMemory读取当前位置的一个字节机器码,目的是保存以便于后期的恢复...; // 暂停线程 SuspendThread(de.u.CreateProcessInfo.hThread); // 读取入口地址处的字节码 ReadProcessMemory...break直接跳过,因为此断点通常为系统断点,而第二次断点则是我们自己设置的int3断点,此时需要将该请求发送至OnException异常处理函数对其进行处理,在传递需要给与&de调试事件,以及&bCode...,在本函数内我们首先通过使用OpenProcess/OpenThread两个函数得到当前进程的句柄信息,接着使用SuspendThread(hThread)暂时暂停进程内线程的执行,通过调用ReadProcessMemory...,为了让程序正常执行当读取结束后,通过WriteProcessMemory我们将原始机器码写回到内存中,并SetThreadContext设置当前上下文,最后使用ResumeThread运行该线程; void

16820

10.3 调试事件转存进程内存

在实现进程转储功能,主要使用调试API和内存读写函数。...具体实现方法包括:以调试方式启动目标进程,将其暂停在运行前的位置;让目标进程进入运行状态;使用ReadProcessMemory函数读取目标进程内存,并将结果保存到缓冲区;将缓冲区中的数据写入文件;关闭目标进程的调试状态...首先老样子先来看OnException回调事件,当进程被断下首先通过线程函数恢复该线程的状态,在进程被正确解码并运行起来时直接将该进程的EIP入口地址传递给MemDump();内存转存函数,实现转存功能...,并使用ReadProcessMemory读取文件的数据,此处读取的实在内存中的镜像数据,当读取后手动修正,文件的入口地址,及文件的对齐方式,接着定位PE节区数据,找到节区首地址,并循环将当前节区数据赋值到新文件缓存中...,此处读取的实在内存中的镜像数据 bRet = ReadProcessMemory(hProcess, me32.modBaseAddr, pBase, me32.modBaseSize, NULL

15210
领券