| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付赛孚耐:软件保护加密专家
身份认证令牌USB KEY   
共有 1465 人关注过本帖
标题:[原创]远程进程注入dll工具
收藏  订阅  推荐  打印 
Arcticanimal
Rank: 3Rank: 3
等级:中级会员
威望:7
帖子:335
积分:3618
注册:2007-3-17
[原创]远程进程注入dll工具

采用比较容易实现的远程线程注入dll方法, 简单起见实例用MFC完成. 封装了一个CDllInjector类, 可以直接使用
下面的代码就可以实现dll的注入
CDllInjector m_diDllInjector;
m_diDllInjector.OpenProcess(dwProcessId, FALSE) ; // or m_diDllInjector.OpenProcess(szExecName, FALSE)
m_diDllInjector.RemoteVirtualAlloc();
m_diDllInjector.SetInjectDll(strDllName);
m_diDllInjector.SyncInject();
m_diDllInjector.RemoteVirtualFree();
感兴趣的可以看一看

由于现在论坛的附件大小限制的实在太厉害20.48k!!??, 没办法传截图了, 为了减小附件大小传上来, 项目里面也少了一个资源文件DllInjector.ico.自己添加一个就可以编译了.
附件: 只有本站会员才能下载或查看附件,请您 登录注册
搜索更多相关主题的帖子: dll  进程  工具  
2007-11-26 14:01
Janlex
Rank: 3Rank: 3
等级:中级会员
威望:6
帖子:303
积分:3198
注册:2006-9-12

#include “stdafx.h”
#include “tlhelp32.h”
#define PROCESSNAME “NOTEPAD.EXE”
#define DLLPATH “D:\\dustbin.dll”

LPVOID pathAddress;

//根据进程名查找进程ID
DWORD FindProcess(LPCTSTR str)
{
DWORD id = 0;
PROCESSENTRY32 processEntry;
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

processEntry.dwSize = sizeof(PROCESSENTRY32);

BOOL bRet = Process32First(hProcessSnap, &processEntry);

while (bRet)
{
  if ( !strcmp(processEntry.szExeFile, str) )
  {
   id = processEntry.th32ProcessID;
   break;
  }
  bRet = Process32Next(hProcessSnap, &processEntry);
}

return id;
}
//向远程线程写数据
HANDLE WriteStringToProcess(LPCTSTR pathStr, DWORD id, DWORD size)
{
size = strlen(pathStr) + 1;

HANDLE hProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, id);
if (NULL == hProcess)
{
  CloseHandle(hProcess);
  return NULL;
}

pathAddress = VirtualAllocEx(hProcess, NULL, size, MEM_COMMIT, PAGE_READWRITE);
if (NULL == pathAddress)
{
  CloseHandle(hProcess);
  return NULL;
}

DWORD dwJudge = NULL;
BOOL iYON = WriteProcessMemory(hProcess, pathAddress, (LPVOID)pathStr, size, &dwJudge);
if (0 == iYON || 0 == dwJudge)
{
  CloseHandle(hProcess);
  return NULL;
}

return hProcess;
}

//主函数
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{

  DWORD dwProcessID = FindProcess(PROCESSNAME);
if (!dwProcessID)
{
  MessageBox(0, “error with find process!”, “fail”, MB_OK);
  return 1;
}
DWORD dwSize = 0;
HANDLE hProcess = WriteStringToProcess(DLLPATH, dwProcessID, dwSize);
if (!hProcess)
{
  MessageBox(0, “error with writing!”, “fail”, MB_OK);
  return 1;
}

HANDLE tRemoteThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, pathAddress, 0, 0);

WaitForSingleObject(tRemoteThread, INFINITE);

VirtualFreeEx(hProcess, pathAddress, dwSize, MEM_DECOMMIT);
CloseHandle(tRemoteThread);
CloseHandle(hProcess);
return 0;
}

★★★★★欢迎光临我的博客 ★★★★★
http://www.ozd.cn
2007-11-26 15:35
vfdff
Rank: 6Rank: 6
等级:金牌会员
威望:6
帖子:1343
积分:14908
注册:2005-7-15

// CDllInjectorApp

BEGIN_MESSAGE_MAP(CDllInjectorApp, CWinApp)
    ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
这里有问题,我没有编译成功
提示:
error C2059: syntax error : '&&'
error C2143: syntax error : missing ';' before '}'
2007-11-27 17:03
vfdff
Rank: 6Rank: 6
等级:金牌会员
威望:6
帖子:1343
积分:14908
注册:2005-7-15
回复 2# 的帖子

fatal error C1083: Cannot open include file: 'StdAfx.h': No such file or directory
奇怪,我把这个
StdAfx.h和StdAfx.cpp文件加到工程中了,还是出来上面的错误
2007-11-27 17:11
Arcticanimal
Rank: 3Rank: 3
等级:中级会员
威望:7
帖子:335
积分:3618
注册:2007-3-17
回复 3# 的帖子

添加一个资源文件DllInjector.ico后这是vista下的编译结果
------ Build started: Project: DllInjector, Configuration: Debug Win32 ------
1>Compiling resources...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>Compiling manifest to resources...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>Linking...
1>Embedding manifest...
1>Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
1>Copyright (C) Microsoft Corporation.  All rights reserved.
1>Build log was saved at "file://d:\Users\Noran\Desktop\DllInjector\DllInjector\Debug\BuildLog.htm"
1>DllInjector - 0 error(s), 0 warning(s)
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========

生活是自己的,但是活着并不只为自己
2007-11-28 11:21
StarWing83
Rank: 12Rank: 12Rank: 12
来自:湖北工业大学
等级:贵宾
威望:12
帖子:2520
积分:26677
注册:2007-11-16

if((bool)bEnable == (bool)m_bHighPriv)
        return TRUE;

这句有警告
1>.\DllInjectorMgmt.cpp(131) : warning C4800: “BOOL”: 将值强制为布尔值“true”或“false”(性能警告)
1>.\DllInjectorMgmt.cpp(131) : warning C4800: “BOOL”: 将值强制为布尔值“true”或“false”(性能警告)
建议改成
    if(!!bEnable == !!m_bHighPriv)
        return TRUE;

还有,这个工程是用VC++2005写的,用VC6编译难免出问题……LS的换换编译器就OK了

专心编程………
飞燕算法初级群:3996098
我的Blog
2007-11-29 14:56
yangzs
Rank: 1
等级:新手上路
帖子:3
积分:130
注册:2005-3-5

看看
2008-2-24 21:07
tandoudou
Rank: 1
等级:新手上路
帖子:1
积分:110
注册:2008-9-20

学习学习
2008-9-20 17:41
vfdff
Rank: 6Rank: 6
等级:金牌会员
威望:6
帖子:1343
积分:14908
注册:2005-7-15
回复 6# StarWing83 的帖子

怎么弄了个双重否定 ??
2008-9-20 22:25
vfdff
Rank: 6Rank: 6
等级:金牌会员
威望:6
帖子:1343
积分:14908
注册:2005-7-15
回复 2# Janlex 的帖子

这个程序干什么,运行了一点反应也没有!!
2008-9-20 22:49
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.298557 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved