c++ 进程注入代码
2015-08-29 16:55
363 查看
unicoce c语言 变量声明要放在前面
使用多字节字符集 c++
BOOL WINAPI InjectIt(LPCTSTR DllPath, const DWORD dwRemoteProcessld)//注入主函数 { HANDLE hrp = NULL; LPTSTR psLibFileRemote = NULL; //计算LoadLibraryA的入口地址 PTHREAD_START_ROUTINE pfnStartAddr=(PTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandle(TEXT("Kernel32")),"LoadLibraryW"); HANDLE hrt = NULL; printf("%p\n",pfnStartAddr); if((hrp=OpenProcess(PROCESS_CREATE_THREAD|//允许远程创建线程 PROCESS_VM_OPERATION|//允许远程VM操作 PROCESS_VM_WRITE,//允许远程VM写 FALSE,dwRemoteProcessld)) == NULL) { // OpenProcess Error printf("打开目标进程失败"); return FALSE; } printf("%0x\n",hrp); //使用VirtualAllocEx函数在远程进程的内存地址空间分配DLL文件名缓冲 psLibFileRemote=(LPTSTR)VirtualAllocEx(hrp, NULL, (lstrlen(DllPath)+1)* sizeof(WCHAR), MEM_COMMIT, PAGE_READWRITE); if(psLibFileRemote == NULL) { // VirtualAllocEx Error printf("VirtualAllocEx Error"); return FALSE; } printf("%p\n",psLibFileRemote); //使用WriteProcessMemory函数将DLL的路径名复制到远程的内存空间 if(WriteProcessMemory(hrp, psLibFileRemote, (void *)DllPath, (lstrlen(DllPath)+1)* sizeof(WCHAR), NULL) == 0) { // WriteProcessMemory Error printf("WriteProcessMemory Error"); return FALSE; } if(pfnStartAddr == NULL) { // GetProcAddress Error! return FALSE; } printf("%p\n",pfnStartAddr); //pfnStartAddr地址就是LoadLibraryA的入口地址 if((hrt = CreateRemoteThread(hrp, NULL, 0, pfnStartAddr, psLibFileRemote, 0, NULL)) == NULL) { // CreateRemote Error printf("创建远程线程失败"); return FALSE; } printf("创建远程线程成功"); return TRUE; }
使用多字节字符集 c++
BOOL WINAPI InjectIt(LPCTSTR DllPath, const DWORD dwRemoteProcessld)//注入主函数 { HANDLE hrp = NULL; if((hrp=OpenProcess(PROCESS_CREATE_THREAD|//允许远程创建线程 PROCESS_VM_OPERATION|//允许远程VM操作 PROCESS_VM_WRITE,//允许远程VM写 FALSE,dwRemoteProcessld)) == NULL) { // OpenProcess Error return FALSE; } LPTSTR psLibFileRemote = NULL; //使用VirtualAllocEx函数在远程进程的内存地址空间分配DLL文件名缓冲 psLibFileRemote=(LPTSTR)VirtualAllocEx(hrp, NULL, lstrlen(DllPath)+1, MEM_COMMIT, PAGE_READWRITE); if(psLibFileRemote == NULL) { // VirtualAllocEx Error return FALSE; } //使用WriteProcessMemory函数将DLL的路径名复制到远程的内存空间 if(WriteProcessMemory(hrp, psLibFileRemote, (void *)DllPath, lstrlen(DllPath)+1, NULL) == 0) { // WriteProcessMemory Error return FALSE; } //计算LoadLibraryA的入口地址 PTHREAD_START_ROUTINE pfnStartAddr=(PTHREAD_START_ROUTINE) GetProcAddress(GetModuleHandle(TEXT("Kernel32")),"LoadLibraryA"); if(pfnStartAddr == NULL) { // GetProcAddress Error! return FALSE; } //pfnStartAddr地址就是LoadLibraryA的入口地址 HANDLE hrt = NULL; if((hrt = CreateRemoteThread(hrp, NULL, 0, pfnStartAddr, psLibFileRemote, 0, NULL)) == NULL) { // CreateRemote Error return FALSE; } return TRUE; }
相关文章推荐
- C++中map、hash_map、unordered_map、unordered_set通俗辨析
- 比较C++中的4种类型转换方式
- C++_如何得到类内字符串内容
- const在c中和c++中
- C++ 单例模式详解
- C++ 基本知识
- [leetcode]Isomorphic Strings C语言
- C/C++编译和链接过程详解 (重定向表,导出符号表,未解决符号表)
- C/C++ 中的0长数组(柔性数组)
- 转:TinyXM--优秀的C++ XML解析器
- 找工作C++面试资料之问答题整理(1)
- c++-面向对象类
- c++ stdafx.h、targetver.h文件
- C++深拷贝与浅拷贝
- 文件重命名小程序(适用于unix系c++)
- C语言qsort函数用法
- 《IOS_C语言》结构体、结构体数组
- Kth Largest Element in an Array
- VS中C++对象的内存布局
- [leetcode]Valid Anagram C语言