很多朋友对于深入解析:针对特定进程的内存读写操作和不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
int baseaddress;//开始读取的基地址
char bytes[14];//保存内存数据
char putbytes[14]={"你好"};
此操作不需要提升权限
开放进程
objhandle=OpenProcess(PROCESS_ALL_ACCESS, FALSE, 12012);
读取内存
基地址=0x403072;
ReadProcessMemory(objhandle, (LPCVOID)基地址, (LPVOID)字节, sizeof(字节), NULL);
将结果保存到字节数组
修改内存页属性,否则无法写入
DWORD 保护编号=0;
VirtualProtectEx(objhandle,(LPVOID)基地址,sizeof(putbytes),PAGE_EXECUTE_READWRITE,(PDWORD)protectmunber);
写内存
WriteProcessMemory(objhandle, (LPVOID)基地址, putbytes, sizeof(putbytes), NULL);
恢复内存页面属性
VirtualProtectEx(objhandle,(LPVOID)基地址,sizeof(putbytes),protectmunber,(PDWORD)protectmunber);
效果如图:
整个代码如下。 myputerror函数是封装的getlasterror函数。
#定义_WIN32_WINNT0x0501
包括
包括
HANDLE 对象句柄; //目标句柄
int baseaddress;//开始读取的基地址
char bytes[14];//保存内存数据
char putbytes[14]={"你好"};
无效myputerror(无效);
int main(int argc, char* argv[]){
//获取进程的访问令牌,如果OpenProcess无法打开进程
//修改访问权限的进程句柄,指定要执行的操作类型,并返回访问令牌指针
//获取本进程的token
处理hToken;
if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, hToken)){
myputerror();
}别的{
printf("成功获取令牌句柄n");
}
//查看系统权限的特权值
TOKEN_PRIVILEGES tp;//新增权限结构
液体液体;
if (LookupPrivilegeValue(NULL, SE_DEBUG_NAME, Luid)==0){
printf("获取LUID失败");
myputerror();
}别的{
printf("成功获取LUID %dn", Luid.LowPart);
}
//给TP和TP中的LUID结构体赋值
tp.PrivilegeCount=1;
tp.Privileges[0].Attributes=SE_PRIVILEGE_ENABLED;
tp.Privileges[0].Luid=Luid;
//启用指定访问令牌的权限
if (AdjustTokenPrivileges(hToken, FALSE, tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL) !=0){
如果(GetLastError()==ERROR_SUCCESS){
printf("指定权限修改成功!n");//其实就是打开原用户拥有的权限
}
别的{
printf("权限修改不完整或失败!n");
myputerror();
}
}别的{
printf("修改失败!n");
myputerror();
}
objhandle=OpenProcess(PROCESS_ALL_ACCESS, FALSE, 12012);
if (对象句柄==0){
myputerror();
}
基地址=0x403072;
if (ReadProcessMemory(objhandle, (LPCVOID)基地址, (LPVOID)字节, sizeof(字节), NULL)!=0){
printf("结果:%sn ", 字节);
}
别的{
myputerror();
}
//设置页面属性
DWORD 保护编号=0;
//修改内存页属性为可写
if (VirtualProtectEx(objhandle, (LPVOID)baseaddress, sizeof(putbytes), PAGE_EXECUTE_READWRITE, (PDWORD)protectmunber)==FALSE){
myputerror();
}
if (WriteProcessMemory(objhandle, (LPVOID)baseaddress, putbytes, sizeof(putbytes), NULL)==0){
myputerror();
}
别的{
printf("内存写入成功n");
if (ReadProcessMemory(objhandle, (LPCVOID)基地址, (LPVOID)字节, sizeof(字节), NULL) !=0){
printf("结果:%sn ", 字节);
myputerror();
}
别的{
myputerror();
}
}
//恢复
if (VirtualProtectEx(objhandle, (LPVOID)baseaddress, sizeof(putbytes), protectedmunber, (PDWORD)protectmunber)==FALSE){
myputerror();
}
//终止进程(objhandle, 0);
getchar();
【深入解析:针对特定进程的内存读写操作】相关文章:
用户评论
这个功能听起来很专业啊,是用来做什么领域的?
有17位网友表示赞同!
不会太危险吧,随意读写进程内存会不会导致系统崩溃?
有16位网友表示赞同!
有没有相应的安全机制来防止滥用呢?
有8位网友表示赞同!
这种技术在软件调试和恶意程序分析方面会派上大用场吧。
有7位网友表示赞同!
学习一下这个功能,说不定以后可以用来做一些有趣的实验。
有17位网友表示赞同!
请问需要掌握哪些技能才能实现对进程内存的操作?
有14位网友表示赞同!
这听起来像是一项高级技术,难度应该比较高吧?
有19位网友表示赞同!
想了解一下操作过程具体是怎么样的,有没有相关的例子可以参考?
有13位网友表示赞同!
对指定进程读写内存的需求在哪些场景下最常见?
有7位网友表示赞同!
这方面有什么学习资源推荐吗?我想深入了解一下。
有14位网友表示赞同!
会不会有其他工具或者方法能够替代这种直接操作内存的方式呢?
有12位网友表示赞同!
如果想保护自己的内存不被读写,应该怎么做?
有12位网友表示赞同!
这种技术在安全防护领域扮演着怎样的角色?
有18位网友表示赞同!
这个功能对用户来说有什么好处或弊端?
有14位网友表示赞同!
在实际应用中,该功能需要遵循哪些准则或规范?
有8位网友表示赞同!
有没有想过将这种功能整合到现有软件平台中使用?
有12位网友表示赞同!
会不会出现因内存数据冲突而导致系统不稳定的情况?
有16位网友表示赞同!
这个功能对不同操作系统来说是否适用?
有9位网友表示赞同!
请问使用此功能需要获得哪些权限或者特殊许可?
有15位网友表示赞同!
我想了解更多关于进程管理技术方面的知识,有什么建议吗?
有17位网友表示赞同!