双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

线程注入失败!内存不能为written!

clhposs clhposs 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
编译以下代码当远程启动线程时就会出错!
为什么?哪错了?

#include <windows.h>
#include <TLHELP32.H>

DWORD start(LPVOID parent);

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd )
{
//提升进程权限
HANDLE handle;
if(OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,&handle))
{
TOKEN_PRIVILEGES tkp;
LookupPrivilegeValue(NULL,"SE_DEBUG_NAME",&tkp.Privileges[0].Luid);
tkp.PrivilegeCount = 1;
tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

AdjustTokenPrivileges(handle,false,&tkp,sizeof(tkp),NULL,NULL);
CloseHandle(handle);
}

//找到记事本进程的PID
handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
PROCESSENTRY32 pe32;
DWORD dwID;
Process32First(handle,&pe32);
do
{
if(!strcmp(pe32.szExeFile,"NOTEPAD.EXE"))
{
dwID = pe32.th32ProcessID;
break;
}
} while (Process32Next(handle,&pe32));

CloseHandle(handle);

//打开记事本进程
handle = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,false,dwID);
DWORD dwSize = 1024;

//申请内存空间
LPVOID lpBuf = VirtualAllocEx(handle,NULL,dwSize,MEM_COMMIT,PAGE_EXECUTE_READWRITE);
if(lpBuf == NULL)
{
CloseHandle(handle);
MessageBox(NULL,"分配内存空间失败!","提示",0);
}

//写内存
DWORD dwWrite;
if(WriteProcessMemory(handle,lpBuf,(LPVOID)start,dwSize,&dwWrite))
{
if(dwSize != dwWrite)
{
VirtualFreeEx(handle,lpBuf,dwSize,MEM_DECOMMIT);
CloseHandle(lpBuf);
MessageBox(NULL,"写内存失败!","提示",0);
}
}
else
{

VirtualFreeEx(handle,lpBuf,dwSize,MEM_DECOMMIT);
CloseHandle(lpBuf);
MessageBox(NULL,"写内存失败!","提示",0);
}

//创建一个远程线程来执行!
HANDLE hThread = CreateRemoteThread(handle,NULL,NULL,(LPTHREAD_START_ROUTINE)start,NULL,0,NULL);
WaitForSingleObject(hThread,INFINITE);
VirtualFreeEx(handle,lpBuf,dwSize,MEM_DECOMMIT);
return 0;
}

DWORD start(LPVOID parent)
{
MessageBox(NULL,"注入成功","提示",0);
return 0;
}

...全文

相关推荐

该内存不能为read或written的解决方案

转自"20CN网络安全小组"关于该内存不能为read或written的解决方案

法名OPQ

从注入到Shellcode:二进制漏洞利用实战指南

在软件安全领域,注入是一种常见攻击手法,其核心原理是通过输入恶意数据或代码,改变程序的正常执行流程。从Web应用的SQL注入到底层系统的代码注入,其技术价值在于揭示了程序对输入验证不足的安全缺陷。在二进制安全与漏洞利用(BinExp)场景中,这一原理演变为更直接的Shellcode注入。Shellcode是一段位置无关的机器码,通过系统调用与操作系统内核交互,实现进程控制、权限提升等操作。其高效编写需遵循避免空字节、缩短长度等黄金法则,并常通过编码变形来规避检测。应用场景广泛,包括渗透测试、CTF竞赛及理解

congtaixiao7151

0X000000该内存不能为READ WRITTEN的解决方法.DOC

运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。 “0x????????”指令引用的“0x????????”内存。该内存不能为“read”。 “0x????????”指令引用的“0x????????”内存,该内存不能为“written”。 以上的情况相信大家都应该见到过,甚至说一些网友因为不爽于这个经常出现的错误提示而屡次重装系统。相信普通用户应该不会理解那些复杂的十六进制代码。 出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。

yangyudian

内存不能为read或written修复工具

当出现内存不能为read或written的提示时可以参考资源方法

lwvj999

内存不能为Read、Written修复工具.rar

内存不能为read或written的修复工具,很好的一个修复软件

cocoa1199
评论 17
收藏 已收藏
分享
返回顶部
clhposs
进程/线程/DLL 15,466 成员 49,169 内容