首页 > 编程知识 正文

杀手0xc0000142,0xc0000142是什么意思

时间:2023-05-04 08:25:36 阅读:173538 作者:1693

创建了CREATE_SUSPENDED的傀儡进程。 用幕后进程替换傀儡进程后,报告说0xc0000005。 我好几天不知道了。 我碎了。 有人来帮我了

WIN7 x64系统、vs2017 x86编译器,两个进程都是32位进程。 typedefntsysapintstatus (_ _ stdcall * zwunmapviewofsection ) (HANDLE,PVOID );

int main () )

{

加载ZwUnmapViewOfSection函数

hmodule hmodule=getmodulehandle (l ' ntdll.dll ';

if(hmodule==null ) ) )。

返回假;

zunmapviewofsectionunmapviewofsection=(zwunmapviewofsection ) getprocaddress(hmodule,' zwunmapviewofsection ' );

//将后台进程读入缓存

file * pfile=空;

_wfopen_s(pfile,filePath1,L'rb ' );

if(pfile==null )。

{

messagebox(0,L'fopen_s fail ),0,MB_OK );

返回(int _ ptr ) TRUE;

}

fseek(pfile,0,SEEK_END );

dwordSZfile=ftell(pfile;

fseek(pfile,0,SEEK_SET );

byte*pfilebuffer=(byte* ) malloc ) SZfile );

前端(pfile buffer,szFile,1,pfile );

close(pfile;

//后台进程的标头信息

pimage _ dos _ headerpdosh=(pimage _ dos _ header ) pFileBuffer;

pimage _ file _ headerpfileh=(pimage _ file _ header ) (BYTE* ) pDosH pDosH-e_lfanew 4);

pimage _ optional _ headerpopth=(pimage _ optional _ header ) ((BYTE* ) pFileH IMAGE_SIZEOF_FILE_HEADER );

pimage _ section _ headerpsectionh=(pimage _ section _ header ) ) (BYTE* ) popthpfileh-sizeofoptionalheader;

PROCESS_INFORMATION pi={ 0 };

STARTUPINFO si={ 0 };

si.CB=sizeof(startupinfo );

bool created=createprocess (file path 3,NULL,NULL,NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,si,pi );

int err;

if (! 创建) {

err=GetLastError (;

返回0;

}

上下文上下文={0};

context.context flags=context _ full;

gtthreadcontext(pi.hthread,context;

//从线程上下获取基地址

SIZE_T read;

DWORD oldBase;

boolhasread=readprocessmemory (pi.hprocess,) PDWORD ) context.Ebx 0X8)、oldBase,sizeof ) PDWORD )、read;

if (! hasread({

返回0;

}

//断开傀儡进程的镜像

ntstatus flag=unmapviewofsection (pi.hprocess,) BYTE* ) oldBase );

if(flag0) {

返回0;

}

//申请虚拟空间的存储器

lpvoidaddrexe=virtualalloc ex (pi.hprocess,) lpvoid ) pOptH-ImageBase,

pOptH-SizeOfImage,MEM_COMMIT | MEM_RESERVE,PAGE_EXECUTE_READWRITE;

if (addrexe==空值) {

返回0;

}

//交换傀儡进程

SIZE_T written;

bool isOk=FALSE;

//头部

isok=writeprocessmemory (pi.hprocess,) LPVOID ) addrExe,pFileBuffer,pOptH-SizeOfHeaders,written;

//节部分

for(intI=0; i pFileH-NumberOfSections; I ) {

isok=writeprocessmemory (pi.hprocess,

(LPVOID ) ) (BYTE* ) addrexepsectionh [ I ].virtual address,

pfilebufferpsectionh [ I ].pointertorawdata,

pSectionH[i].SizeOfRawData,

written;

}

//修改线程上下文

DWORD imageBase=(DWORD ) addrExe;

context.eax=imagebasepopth-address of entry point;

writeprocessmemory(pi.hprocess,) PDWORD ) context.Ebx 0X8),imageBase,sizeof ) PDWORD,written );

setthreadcontext(pi.hprocess,context;

resumethread(pi.hthread;

返回0;

}

如果通过调用Nt/ZwUnmapViewOfSection ()卸载镜像,则会发生错误

2 .不卸载镜像,在可用内存中插入另一个进程,修改重新定位符表并停止工作

最后是2020-1-23 13:58

被吸引去编辑语言

、理由:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。