文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页网页设计经验技巧 → C++编写的DLL注入源吗

C++编写的DLL注入源吗

时间:2009/11/2 14:52:00来源:本站整理作者:我要评论(0)

在学习C++中DLL部分时,常因为DLL程序难以直接运行而郁闷,但又感到DLL的确是一个强大的功能,后来自己写了一个专门用来注入DLL到其它进程的工具,大大方便了DLL的调试。你可以自己写一个DLL,然后用这个注入工具把它注入到新打开的一个记事本程序(当然你也可以注入到Explorer.exe中)中观察DLL的运行情况,观察完后只要关闭那个记事本程序即可。十分方便。

一。先用MFC创建一个对话框程序。如下图

 
 
 
 
 
 
 
 
二。首选创建全局变量:
 
 
 
 
 
 
 
CString strDll;
CListBox *lb=new CListBox;
CString str;
 
 
 
 
 
 
 
 
三。各个Button的代码如下
 
 
 
 
 
 
 
 
void CMyDlg::OnButton1()
{
 // TODO: Add your control notification handler code here
 CFileDialog cfd(TRUE,NULL,NULL,0,"动态链接库文件 (*.dll)|*.dll",NULL);
 if(cfd.DoModal()==IDOK)
 {
  strDll=cfd.GetPathName();
  SetDlgItemText(IDC_EDIT1,strDll);
 }
}
 
 
 
 
 
 
 
 
 
void CMyDlg::OnButton2()
{
 // TODO: Add your control notification handler code here
 int i=lb->GetCurSel();
 lb->GetText(i,str);
 SetDlgItemText(IDC_EDIT2,str);
}
 
 
 
 
 
 
 
 
 
 
 
void CMyDlg::OnButton3()
{
 // TODO: Add your control notification handler code here
 CString strName;
 GetDlgItemText(IDC_EDIT1,strDll);
 GetDlgItemText(IDC_EDIT2,strName);
 if(strName=="System" || strName=="[System Process]")
 {
  MessageBox("当前进程不能被注入!",NULL,MB_OK | MB_ICONERROR);
  SetDlgItemText(IDC_EDIT2,"");
  strName="";
  return ;
 }
 if(strName=="注入工具.EXE")
 {
  MessageBox("你有病哇?注入到自己?",NULL,MB_OK | MB_ICONERROR);
  SetDlgItemText(IDC_EDIT2,"");
  strName="";
  return;
 }
 if(strDll=="" || strName=="")
 {
  MessageBox("请正确输入!","错误",MB_OK | MB_ICONWARNING);
 }
 else
 {
  BOOL blIsfind=FALSE;
  HANDLE hSnapshot=NULL;
  DWORD dwProcessID;
  PROCESSENTRY32 pe;
  pe.dwSize=sizeof(PROCESSENTRY32);
  HANDLE hProcess=NULL;
  HANDLE hThread=NULL;
  hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
  Process32First(hSnapshot,&pe);
  do
  {
   if(lstrcmpi(pe.szExeFile,strName)==0)
   {
    //MessageBox(strName+"程序正在运行!");
    dwProcessID=pe.th32ProcessID;
    blIsfind=TRUE;
    break;
   }
  }while(Process32Next(hSnapshot,&pe));
  if(blIsfind==FALSE)
  {
   MessageBox("没有发现"+strName+"程序!");
   CloseHandle(hSnapshot);
   exit(0);
  }
  CloseHandle(hSnapshot);
  hProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcessID);
  LPSTR lpDllName=(LPSTR)strDll.GetBuffer(strDll.GetLength());
  DWORD dwSize,dwWritten;
  
  dwSize=lstrlenA(lpDllName)+1;
  LPVOID lpBuf=VirtualAllocEx(hProcess,NULL,dwSize,MEM_COMMIT,PAGE_READWRITE);
  if(NULL==lpBuf)
  {
   CloseHandle(hProcess);
   MessageBox("分配内存空间失败!");
   exit(0);
  }
  if(WriteProcessMemory(hProcess,lpBuf,(LPVOID)lpDllName,dwSize,&dwWritten))
  {
   if(dwWritten!=dwSize)
   {
    VirtualFreeEx(hProcess,lpBuf,dwSize,MEM_DECOMMIT);
    CloseHandle(hProcess);
    MessageBox("写入内存失败!");
    exit(0);
   }
  }
  else
  {
   CloseHandle(hProcess);
  }
  DWORD dwID;
  LPVOID pFunc=LoadLibraryA;
  hThread=CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)pFunc,lpBuf,0,&dwID);
  WaitForSingleObject(hThread,INFINITE);
  VirtualFreeEx(hProcess,lpBuf,dwSize,MEM_DECOMMIT);
  CloseHandle(hThread);
  CloseHandle(hProcess);
  MessageBox("注入成功!");
 }
}
 
 
 
 
 
 
 
 
 
 
 
 
void CMyDlg::OnButton4()
{
 // TODO: Add your control notification handler code here
 exit(0);
}
 
 
 
 
 
 
 
void CMyDlg::OnButton5()
{
 // TODO: Add your control notification handler code here
 reflash();          //reflash()过程应在调用之前,为了方便写在了后面
 
}
 
 
 
 
void reflash()
{
 int len=0;
 len=lb->GetCount();
 int i;
 
 for(i=0;i<len;i++)
 {
  lb->DeleteString(0);
 }
 HANDLE hSnapshot=NULL;
 PROCESSENTRY32 pe;
 pe.dwSize=sizeof(PROCESSENTRY32);
 hSnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
 Process32First(hSnapshot,&pe);
 do
 {
  lb->AddString(pe.szExeFile);
 }while(Process32Next(hSnapshot,&pe));
 CloseHandle(hSnapshot);
}

相关视频

    没有数据

相关阅读 c++ vector用法详解 c++ vector用法总结MicrosoftVisualC++运行库运行时错误解决方案十类C++标准库简介C++多线程系统编程技巧c++中new和delete的使用方法C++生成随机数—生成任意范围内的等概率随机数方法C++和java多态的区别VC++2008中如何调用GetOpenFileName打开文件的对话框函数?

文章评论
发表评论

热门文章 Wordpress本地安装教程dx1.5如何设置二级域名

最新文章 hbuilder有哪些快捷键Wordpress本地安装教程 Wordpress本地安装教程expression web 4文档乱码解决方法dz 2.5“收藏本版”关闭小对话框无法关闭解在制作安装软件之前,您必须先将易语言存盘,

人气排行 如何使用multipart/form-data格式上传文件Photoshop PS图层混合模式详解(非常详细)ISAPI_Rewrite3使用教程网站里添加收藏和设为首页代码桌面快捷方式图标不见了C#获取执行程序所在的当前路径的方法详解(XMLHttpRequest)进行跨域请求方法如何用远程桌面连接进行传输文件