线程注入失败!内存不能为written!
为什么?哪错了?
#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的解决方案
从注入到Shellcode:二进制漏洞利用实战指南
在软件安全领域,注入是一种常见攻击手法,其核心原理是通过输入恶意数据或代码,改变程序的正常执行流程。从Web应用的SQL注入到底层系统的代码注入,其技术价值在于揭示了程序对输入验证不足的安全缺陷。在二进制安全与漏洞利用(BinExp)场景中,这一原理演变为更直接的Shellcode注入。Shellcode是一段位置无关的机器码,通过系统调用与操作系统内核交互,实现进程控制、权限提升等操作。其高效编写需遵循避免空字节、缩短长度等黄金法则,并常通过编码变形来规避检测。应用场景广泛,包括渗透测试、CTF竞赛及理解
0X000000该内存不能为READ WRITTEN的解决方法.DOC
运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。 “0x????????”指令引用的“0x????????”内存。该内存不能为“read”。 “0x????????”指令引用的“0x????????”内存,该内存不能为“written”。 以上的情况相信大家都应该见到过,甚至说一些网友因为不爽于这个经常出现的错误提示而屡次重装系统。相信普通用户应该不会理解那些复杂的十六进制代码。 出现这个现象有方面的,一是硬件,即内存方面有问题,二是软件,这就有多方面的问题了。
内存不能为read或written修复工具
当出现内存不能为read或written的提示时可以参考资源方法
内存不能为Read、Written修复工具.rar
内存不能为read或written的修复工具,很好的一个修复软件


进程/线程/DLL

