资源描述:
《Hook CreateProcess,改写程序入口方式注入dll》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、HookCreateProcess,改写程序入口方式注入dll学习各种外挂制作技术,马上去百度搜索"魔鬼作坊"点击第一个站进入、快速成为做挂达人。原理很简单,就是hookCreateProcess,然后以CREATE_SUSPENDED方式创建进程,接着根据程序入口,改写入口代码,ResumeThread恢复运行,然后先执行的是自己写入的代码。可现在一执行就出错,以记事本为例,大牛们帮忙看下:代码://前面hookCreateProcess的代码已经省去。//如果是感兴趣的进程(这里以记事本为例)被创建,将通过EPO技术挂关键函数,这
2、里只是修改进程的EP入口,对目标进程实现dll注入if(0==strncmp(lpExeName,"notepad.exe",strlen("notepad.exe"))){//如果是记事本被创建,先以CREATE_SUSPENDED方式创建进程dwCreationFlags
3、=CREATE_SUSPENDED;boolbRes=((LPCREATEPROCESS)dwOrigCreateProcessAddr)(lpApplicationName,lpCommandLine,lpProcessAttributes,lpThreadA
4、ttributes,bInheritHandles,dwCreationFlags,lpEnvironment,lpCurrentDirectory,lpStartupInfo,lpProcessInformation);//再次将记事本的可执行文件映射到内存,获取程序的入口地址HANDLEhFile=CreateFile(lpExePath,GENERIC_READ,FILE_SHARE_READ
5、FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);if(hFile==NULL){OutLog("
6、打开目标文件失败");if(bRes)ResumeThread(lpProcessInformation->hThread);returnbRes;}HANDLEhMapping=CreateFileMapping(hFile,NULL,PAGE_READONLY,0,0,NULL);CloseHandle(hFile);if(hMapping==NULL){OutLog("打开目标文件映射失败");if(bRes)ResumeThread(lpProcessInformation->hThread);returnbRes;}LPVO
7、IDlpMapFile=MapViewOfFile(hMapping,FILE_MAP_READ,0,0,0);if(lpMapFile==NULL){OutLog("映射目标文件失败");if(bRes)ResumeThread(lpProcessInformation->hThread);CloseHandle(hMapping);returnbRes;}CloseHandle(hMapping);//已经完成文件映射PIMAGE_DOS_HEADERlpstDosHeader=(PIMAGE_DOS_HEADER)lpMapFi
8、le;PIMAGE_NT_HEADERSlpstNtHeaders=(PIMAGE_NT_HEADERS)((ULONG)lpMapFile+lpstDosHeader->e_lfanew);DWORDdwPeEntry=lpstNtHeaders->OptionalHeader.AddressOfEntryPoint+lpstNtHeaders->OptionalHeader.ImageBase;DWORDdwSizeOfImage=lpstNtHeaders->OptionalHeader.SizeOfImage;charlpEn
9、try[50]={0};sprintf(lpEntry,"EntryAddr:%x",dwPeEntry);OutLog(lpEntry);//从程序的入口点,寻找第一个call,然后替换这个call地址,从而转到我们的shellcode中,执行完shellcode//再继续走原来的函数流程//1.查找第一个call地址BYTEbCode=0;DWORDdwReadAddr=dwPeEntry;while(bCode!=0xe8){boolbOk=ReadProcessMemory(lpProcessInformation->hPro
10、cess,(LPVOID)dwReadAddr,&bCode,1,NULL);if(!bOk){OutLog("查找第一个call地址出错");if(bRes)ResumeThread(lpProcessInformat