您的位置:首页 > 其它

实现HOOK其他进程的Messagebox(2) DLL注入工具

2014-02-20 10:51 429 查看
DLL注入工具(远程线程技术简单的MFC CListCtrl控件知识)
DLL文件已经编写好、测试程序也很简单、现在就是解决将DLL注入到目标进程中、、这里采用远程线程注入技术、、本来WIN32控制台就可以、、为了学习下MFC就做了一个简单的MFC框架去实现注入、、DLL注入工具大概是这样:1 枚举出所有进程(没做到实时不过添加了一个刷新按钮)、、2 实现对所选中进程注入DLL、、工具截图如下:



下面结合代码记录、、首先运行此工具、得到当前所有进程、、、使用CreateToolhelp32Snapshot函数、、先在初始化的函数中将列表框的风格初始化好、、 DWORD ListStyle; ListStyle=::GetWindowLong(m_List.m_hWnd,GWL_STYLE); //获得窗口风格 ListStyle|=LVS_REPORT | LVS_SHOWSELALWAYS | LVS_EDITLABELS; SetWindowLong(m_List.m_hWnd,GWL_STYLE,ListStyle); ListStyle=m_List.GetExtendedStyle(); // CListCtrl m_List ; ListStyle|=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES; //高亮网格 m_List.SetExtendedStyle (ListStyle); m_List.SetTextColor (RGB(0,0,0)); //字体颜色 m_List.SetTextBkColor (RGB(128,252,0)); //字体背景颜色初始化列表框后开始获取进程填充到列表中、、、先添加好 列 名称、、 CRect RectList; m_List.GetWindowRect (&RectList); //得List窗口的尺寸放于RectList中、、 m_List.InsertColumn(0,"序号",LVCFMT_CENTER,100);// RectList.Width() m_List.InsertColumn(1,"进程名称",LVCFMT_LEFT,180); m_List.InsertColumn(2,"进程ID",LVCFMT_LEFT,RectList.Width()-299); SetWindowText("Windows当前所有进程");//程序主窗口的名称、、 获取所有进程的代码、、 char itoc[5]; CString s; int i=0; HANDLE Hsnap = CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS, 0); for (BOOL bNext = Process32First(Hsnap,&PE32); bNext; bNext = Process32Next(Hsnap,&PE32)) { sprintf(itoc,"%d",i); //将int转成char[]; 序号1、2、3、、、 m_List.InsertItem(i,itoc); //向第i行写入itoc、、 s.Format("%s",PE32.szExeFile); //将char[]转换为Cstring 进程名字、、 m_List.SetItemText(i,1,s);//向第i行第1列写入s、、 sprintf(itoc,"%d",PE32.th32ProcessID);//将DWORD 转成char[]; 进程ID m_List.SetItemText(i,2,itoc);// 向第i行第2列写入itoc、、 i++; } CString total; total.Format("%d",m_List.GetItemCount());//获取行数代表进程数、、格式化到total中、 SetDlgItemText(IDC_Total2,total); // 给文本框赋值Cstring类型数据、、SetDlgItemText 即界面 左下角的框框、、 CloseHandle(Hsnap); //关闭句柄、现在所有进程已经得到、、接下来就是对其中选中的某一进程进行注入工作、、首先给列表框添加消息、、双击即可、、而在此消息中我们要得到被选中的那一行所在的进程的ID、也就是那一行第二列的数据、void CMyDllInjectDlg::OnClickList(NMHDR* pNMHDR, LRESULT* pResult){ bMouseDown = true; //这个变量是用来判断用户是否选中没选中则不可进行操作、还可以用函数GetItemState判断是否选中 NM_LISTVIEW* pNMListView = (NM_LISTVIEW*) pNMHDR; // NM_LISTVIEW这个结构有以下成员(NMHDRhdr; int iItem; int iSubItem; UINT uNewState; //UINT uOldState; UINT uChanged; POINT ptAction; LPARAM lParam;); //转换为NM_LISTVIEW*类型、、获取选中的行号列号(这里我们不需要列号肯定是获取第二列) CString csID = m_List.GetItemText (pNMListView->iItem,2); //得到被选中的行的对应的进程ID iID = atoi(csID); //CString到int 将ID转成int类型的全局变量、、 ProcessName = m_List.GetItemText (pNMListView->iItem,1); //得到进程名字、用于本进程不结束自己、(为HOOK OpenProcess 酝酿一下) *pResult = 0; //将指针pResult所指位置的内容置0 函数自动生成的以免指针没有初始化、、}好了 进程ID 得到了 接下来 就可以实现对此进程 进行注入了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息