- 浏览: 2035724 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (651)
- ACE (35)
- BAT (9)
- C/C++ (116)
- fast-cgi (14)
- COM (27)
- python (59)
- CGI (4)
- C# (2)
- VC (84)
- DataBase (29)
- Linux (96)
- P2P (6)
- PHP (15)
- Web (6)
- Memcached (7)
- IME输入法 (11)
- 设计模式 (2)
- 搜索引擎 (1)
- 个人情感 (4)
- 笔试/面试 (3)
- 一亩三分地 (33)
- 历史 (2)
- 地理 (1)
- 人物 (3)
- 经济 (0)
- 不仅仅是笑哦 (43)
- 小故事大道理 (2)
- http://www.bjdsmyysjk120.com/ (0)
- http://www.bjdsmyy120.com/ (0)
- 它山之石可以攻玉 (15)
- 大学生你关注些什么 (28)
- 数据恢复 (1)
最新评论
-
luokaichuang:
这个规范里还是没有让我明白当浏览器上传文件时,STDIN的消息 ...
FastCGI规范 -
effort_fan:
好文章!学习了,谢谢分享!
com技术简介 -
vcell:
有错误os.walk(strPath)返回的已经是全部的文件和 ...
通过python获取目录的大小 -
feifeigd:
feifeigd 写道注意:文章中的CPP示例第二行 #inc ...
ATL入门:利用ATL编写简单的COM组件 -
feifeigd:
注意:文章中的CPP示例第二行 #include " ...
ATL入门:利用ATL编写简单的COM组件
#include "stdafx.h" #include <windows.h> #include <iostream> using namespace std; // 保存数据的结构体 typedef struct tagRpcData { char m_szData[MAX_PATH]; void* m_pfunCall; }stRpcData, *LPRPCDATA; int const MAX_REMOTE_DATA = 1024 * 4; typedef int(__stdcall* PFUNMESSAGE)(HWND, LPCTSTR, LPCTSTR, UINT); int RemoteThread(HWND hwnd, LPCTSTR lpszContent); DWORD __stdcall RpcFunc(LPRPCDATA pData); int main() { HWND hwnd = FindWindow("notepad", NULL); RemoteThread(hwnd, "Hello, andylin!"); return 0; }; //远程线程的函数 DWORD __stdcall RpcFunc(LPRPCDATA pData) { PFUNMESSAGE pfunMsg = (PFUNMESSAGE)pData->m_pfunCall; pfunMsg(NULL, pData->m_szData, NULL, MB_OK); return 0; } int RemoteThread(HWND hwnd, LPCTSTR lpszContent) { DWORD dwThreadId = 0; HANDLE hProcess = NULL; HINSTANCE hInst = NULL; //如果显示内容为NULL,直接返回失败! if ( (NULL == lpszContent) || (NULL == hwnd) ) { cout << "err param!" << endl; return -1; } //打开进程 ::GetWindowThreadProcessId(hwnd, &dwThreadId); hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwThreadId); if (NULL == hProcess) { cout << "Open Processs failed!" << endl; return -2; } //初始化调用结构 stRpcData stData = {0}; strncpy(stData.m_szData, lpszContent, sizeof(stData.m_szData)); hInst = ::LoadLibrary("user32.dll"); if (!hInst) { cout << "can't load user32.dll" << endl; return -3; } stData.m_pfunCall = GetProcAddress(hInst, "MessageBoxA"); FreeLibrary(hInst); if (NULL == stData.m_pfunCall) { cout << "get function address failed!" << endl; return -4; } //分配空间 LPVOID pRmtFunc = VirtualAllocEx(hProcess, NULL, MAX_REMOTE_DATA, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE); if (NULL == pRmtFunc) { cout << "Virtual Alloc Memory failed!" << endl; return -5; } if (!WriteProcessMemory(hProcess, pRmtFunc, RpcFunc, MAX_REMOTE_DATA, NULL)) { cout << "write remote data failed!"; return -6; } LPRPCDATA pstRmtData = (LPRPCDATA)VirtualAllocEx(hProcess, NULL, MAX_REMOTE_DATA, MEM_COMMIT, PAGE_READWRITE); if (NULL == pstRmtData) { cout << "Virtual Alloc Memory failed!" << endl; return -5; } if (!WriteProcessMemory(hProcess, pstRmtData, &stData, sizeof(stData), 0)) { cout << "write remote data failed!"; return -6; } //创建远程线程 HANDLE hRmtThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pRmtFunc, pstRmtData, 0, 0); if (NULL == hRmtThread) { cout << "create remote thread failed!" << endl; return -7; } //清除工作 if (NULL != hRmtThread) { CloseHandle(hRmtThread); hRmtThread = NULL; } if (NULL != hProcess) { VirtualFreeEx(hProcess, pRmtFunc, MAX_REMOTE_DATA, MEM_RELEASE); VirtualFreeEx(hProcess, pstRmtData, MAX_REMOTE_DATA, MEM_RELEASE); CloseHandle(hProcess); hProcess = NULL; } cout << "create remote thread succ!" << endl; return 0; }
发表评论
-
__declspec(novtable) 的用法
2010-11-27 14:37 1589__declspec(novtable) 的用法 __d ... -
解决URLDownloadToFile缓存问题的两种方法
2010-09-09 15:18 2925解决URLDownloadToFile缓存问题的两种方法 ... -
修改richedit背景
2010-07-19 22:52 1652RichEditCtrl::SetBackgroundCo ... -
使用ADO封装类的数据库程序开发实例(下)
2010-07-12 15:30 1480使用ADO封装类的数据库 ... -
使用ADO封装类的数据库程序开发实例(上)
2010-07-12 15:28 1218使用ADO封装类的数据库 ... -
VC防止窗口和控件闪烁的方法
2010-07-09 21:16 20281、将Invalidate()替换为Invalidate ... -
防止窗口闪烁地办法
2010-07-09 21:13 1518防止窗口闪烁地办法 也许我们都碰到过这种情况,当你 ... -
使用ADO _ConnectionPtr
2010-07-06 16:04 5271// GetUser.cpp : Defines the ... -
VC用ADO访问数据库全攻略
2010-07-06 15:29 1801VC用ADO访问数据库全 ... -
深入GetMessage和PeekMessage (引自-MSDN技术组)
2010-06-10 16:59 3731深入GetMessage和PeekMessage (引自 ... -
界面编程总结(1)
2010-06-02 13:32 4016原文地址:http://blog.csdn.net/byx ... -
获取信息的有关Windows API
2010-05-27 10:01 3151获取信息的有关Windows API 1.窗口信息 ... -
VC中如何实现窗口的隐藏
2010-05-13 10:08 7874VC中如何实现窗口的隐藏 用MFC做的Dialog ... -
SetConsoleCtrlHandler 处理控制台消息
2010-05-07 17:32 18160SetConsoleCtrlHandler 处理控制台消 ... -
解决决错误: error C2850: 'PCH header file'
2010-04-27 19:45 1957解决决错误: error C2850: 'PCH hea ... -
VC++ GDI+编程的字体和文本绘制
2010-04-13 13:12 7986字体是文字显示和打印的外观形式,它包括了文字的字样、风格和尺寸 ... -
VC利用GDI+显示透明的PNG图片
2010-04-12 16:59 115521.在你将要使用GDI+的工程中,完成初始化 ... -
GDI+编程基础(一)GDI+ Vs GDI
2010-04-12 15:59 2340下载源代码一、GDI GDI是位于应用程序与不同硬件之间 ... -
VC画图
2010-04-12 15:50 1546BOOL DrawPic(HDC hdc, TCHAR* ... -
对话框的数据交换--MFC深入浅出
2010-04-12 10:43 2467对话框数据交换指以下两种动作,或者是把内存数据写入对应的控 ...
相关推荐
在易语言中进行进程注入,主要涉及以下几个步骤: 1. **打开进程**:使用`OpenProcess` API函数获取目标进程的句柄,这需要进程的PID(进程标识符)和适当的访问权限。 2. **分配内存**:使用`VirtualAllocEx` API...
`EXE注入.e`和`my.e`这两个文件可能是电子书(.e格式)或某种编程文档,详细解释了如何进行进程注入,即如何将DLL文件加载到另一个正在运行的执行程序(EXE)中。进程注入是输入法注入的关键步骤,它使得自定义的...
3. **API调用**:在Windows环境下,进程注入通常通过API函数如`CreateRemoteThread`、`VirtualAllocEx`和`WriteProcessMemory`等实现。这些函数允许程序在目标进程中分配内存、写入数据并执行新线程。 4. **易语言*...
描述中提到的"关联目的进程源码例程",意味着在进行机器码注入时,可能需要理解目标进程的内部工作原理,例如它的函数调用流程、数据结构等。这样可以确保注入的机器码能在正确的位置执行,并达到预期效果。"程序...
标题 "InjectExe4.zip_matlab例程_Visual_C++_" 暗示这是一个关于在Windows系统中使用MATLAB编程和Visual C++进行进程注入技术的实例。在这个项目中,开发者可能通过MATLAB生成shellcode,然后利用C++编写程序来注入...
易语言是一种基于中文编程的计算机程序设计语言,其设计目标是让编程更加简单、直观,尤其适合初学者。本压缩包“易语言内存运行exe模块及例程.rar”提供了在易语言环境中实现程序在内存中运行的方法,这有助于避免...
6. **创建远程线程**:使用`CreateRemoteThread`在目标进程中创建一个新的线程,该线程会调用`LoadLibrary`或`GetProcAddress`等函数,使得目标进程加载并执行DLL中的代码。 7. **等待执行**:新线程执行完毕后,...
4. 创建远程线程:调用`CreateRemoteThread` API函数,使得目标进程加载并执行DLL中的导出函数。 5. 修改输入表:一旦DLL被成功注入,它可以通过内部的代码找到输入表的内存地址,然后使用API函数如`...
1. **动态链接库(DLL Injection)**:通过注入DLL到目标进程,可以实现API钩子和挂机中断。这通常涉及使用CreateRemoteThread创建远程线程,将DLL的地址加载到目标进程的地址空间。 2. **原生API**:使用如...
描述提到的“注入库”是实现这个技术的关键,它通过手动映射DLL、处理导入并调用启动例程来完成。 DLL(动态链接库)是Windows操作系统中一种共享代码的方式,它允许多个应用程序同时使用同一段代码,节省内存资源...
这通常涉及到进程注入和反注入技术,需要对系统底层有较深的理解。在易语言中,这可能涉及到调用如`CreateRemoteThread`和`WriteProcessMemory`等API函数,来实现对目标进程的控制。 总的来说,易语言提供的这些...
接下来,"注入DLL"(Dynamic Link Library Injection)是一种更深入的技术,它涉及将自定义的DLL文件加载到目标进程的地址空间中。通过这种方式,我们可以向目标程序注入代码,使其执行我们提供的函数,从而截获和...
3. **注入DLL**:使用`CreateRemoteThread` API或其他注入技术,将我们的DLL注入到目标进程中。这样,DLL中的Hook函数就可以在目标进程中执行了。 4. **Hook API**:在DLL中,我们需要找到窗口枚举API的地址,然后...
注入成功返回 true, 注入失败则返回 false,CreateRemoteThread法 .参数 进程ID, 整数型, , 进程PID .参数 DLL文件名, 文本型, , 欲注入的DLL名称 .子程序 InjectDLL1, 逻辑型, 公开, SuspendThread,shellcode,...
注入DLL到其他进程可以实现跨进程通信,或者在不修改目标程序的情况下扩展其功能。 在易语言中,实现DLL注入通常需要以下几个步骤: 1. **创建DLL**:首先,你需要编写一个DLL,包含需要在目标进程中执行的函数。...