摘要:本文主要向大家介绍了C/C++知识点之通过进程挂靠实现改其它进程的数据,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点之通过进程挂靠实现改其它进程的数据,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
3环
#include<stdio.h>int main() { char *ch = ""allenboy""; printf(""%c,%x"", ch, ch); getchar(); printf(""%c,%x"", ch, ch); getchar(); }
0环
#include <ntifs.h>VOID DriverUnload(PDRIVER_OBJECT pDriver);// 根据PID返回进程EPROCESS,失败返回NULLPEPROCESS LookupProcess(HANDLE hPid){ PEPROCESS pEProcess = NULL; if (NT_SUCCESS(PsLookupProcessByProcessId( hPid, &pEProcess))) return pEProcess; return NULL; }VOID ChangeData(ULONG uId){ KAPC_STATE ks; //1 根据ID获得进程内核对象 PEPROCESS pEprocess = LookupProcess((HANDLE)uId); //2 挂靠到此进程上去 //需要注意:不能挂靠之后,将内存中的数据往用户层地址存储,是不对的。 //因为当挂靠到目标进程之后,用户层地址就是目标进程的了,也就存储到 //目标进程中,而且目标进程的那个地址不一定有效,可能造成崩溃。 KeStackAttachProcess( pEprocess, &ks ); //3 修改内存 char * p = (char *)0x1dfaf0; p[5] = 'h'; p[6] = 'a'; p[7] = 'h'; p[8] = 'a'; p[9] = '\0'; //4 解除挂靠 KeUnstackDetachProcess(&ks); }NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING pPath){ UNREFERENCED_PARAMETER(pPath); DbgBreakPoint(); ChangeData(1716); pDriver->DriverUnload = DriverUnload; return STATUS_SUCCESS; }VOID DriverUnload(PDRIVER_OBJECT pDriver){ UNREFERENCED_PARAMETER(pDriver); }
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号