Dll注入技术之ComRes注入
ComRes注入的原理是利用Windows 系统中C:\WINDOWS\system32目录下的ComRes.dll这个文件,当待注入EXE如果使用CoCreateInstance()这个API时,COM服务器会加载ComRes.dll到EXE中,我们利用这个加载过程,移花接木的把ComRes.dll替换掉,并在伪造的ComRes.dll,然后利用LoadLibrary()将事先准备好的DLL加载到目标的EXE中。
1.编写测试文件
为了向大家完整的演示ComRes注入的过程,我们需要先建立一个使用CoCreateInstance()函数的示例程序。
新建atl的DLL工程,这个工程中只提供了一个简单的com接口方法TestMsgBox,主要代码如下:
- STDMETHODIMP CCMyCom::TestMsgBox(void)
- {
- // TODO: 在此添加实现代码
- MessageBox(0,0,0,0);
- return S_OK;
- }
这时编译后会产生一个tlb文件,他是调用com接口方法工程中所要使用的导入文件。新建mfc对话框工程,在stdafx.h文件中加入#import "tlb文件路径\xxxx.tlb " no_namespace。添加一个BUTTON控件,双击后在单击事件中写入调用atl中com接口方法。主要代码如下:
- void CReplaceRescomInjectDlg::OnBnClickedCallcom()
- {
- // TODO: 在此添加控件通知处理程序代码
- CoInitialize(NULL);
- CLSID clsid;
- HRESULT hr = CLSIDFromProgID(OLESTR("CallComDll.CMyCom"),&clsid);
- ICMyCom *ptr;
- hr = CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,
- __uuidof(ICMyCom),(LPVOID*)&ptr);
- ptr->TestMsgBox();
- CoUninitialize();
- }
2.伪造comres.dll文件
使用DEPENDS.EXE文件查看一下,发现只有一个导出函数COMResModuleInstance()
新建一个DLL工程,加入def文件,添加导出函数
- EXPORTS
- COMResModuleInstance
在主工程cpp文件中,加入如下代码
- HANDLE ghInst = 0;
- BOOL isLoad = FALSE;
- BOOL APIENTRY DllMain( HMODULE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved
- )
- {
- switch (ul_reason_for_call)
- {
- case DLL_PROCESS_ATTACH:
- ghInst = hModule;
- if (!isLoad)
- {
- LoadLibrary(_T("D:\\MyDll\\ReplaceRescomInject\\Debug\\LoadLibraryDll.dll"));
- isLoad = TRUE;
- }
- break;
- case DLL_THREAD_ATTACH:
- break;
- case DLL_THREAD_DETACH:
- break;
- case DLL_PROCESS_DETACH:
- break;
- }
- return TRUE;
- }
- int COMResModuleInstance()
- {
- return (int)ghInst;
- }
编译后得到的文件改名为comres.dll,然后将其剪切到其他文件夹下备用,这时读者会问,为什么是剪切尓不是拷贝呢?原因在于当在exe同级目录下有和C:\WINDOWS\system32一样的文件,exe会首先加载同级目录下的文件,而不会加载C:\WINDOWS\system32中的文件。
3.替换comres.dll文件
由于直接拷贝comres.dll文件到C:\WINDOWS\system32目录下会引起winows的文件系统保护机制,所以首先需要将C:\WINDOWS\system32\dllcache下的文件替换掉,然后再将其C:\WINDOWS\system32文件替换为我们伪造的文件。
ComRes注入只需伪造与替换就可以完成,编程要求不高,方便使用,但是由于加载了ComRes.dll后,再想替换ComRes.dll文件就不可能了,因此想反复测试ComRes.dll文件就比较麻烦。
Dll注入技术之ComRes注入的更多相关文章
- Dll注入技术之输入法注入
DLL注入技术之输入法注入 输入法注入原理是利用Windows系统中在切换输入法需要输入字符时,系统就会把这个输入法需要的ime文件装载到当前进程中,而由于这个Ime文件本质上只是个存放在C:\WIN ...
- Dll注入技术之APC注入
APC注入的原理是利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,其具体流程如下: 1)当EXE里某个线程执行到SleepEx( ...
- DLL注入技术(输入法注入)
输入法注入原理 IME输入法实际就是一个dll文件(后缀为ime),此dll文件需要导出必要的接口供系统加载输入法时调用.我们可以在此ime文件的DllMain函数的入口通过调用LoadLibrary ...
- 注入技术--LSP劫持注入
1.原理 简单来说,LSP就是一个dll程序. 应用程序通过winsock2进行网络通信时,会调用ws2_32.dll的导出函数,如connect,accept等. 而后端通过LSP实现这些函数的底层 ...
- Dll注入技术之注册表注入
DLL注入技术之REG注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EX ...
- HOOK -- DLL的远程注入技术详解(1)
DLL的远程注入技术是目前Win32病毒广泛使用的一种技术.使用这种技术的病毒体通常位于一个DLL中,在系统启动的时候,一个EXE程序会将这个DLL加载至某些系统进程(如Explorer.exe)中运 ...
- <ReversingEngineering>关于windows32位系统下的dll注入技术经验汇
上个学期把自己闷在图书馆一直在看关于逆向工程技术方面的书,从入门到初级,现在也敢说自己一条腿已经迈进了这片知识的大门里,因为该博客刚开通先将一些经验记录下来,也是留给自己一方面做个参照. <逆向 ...
- DLL的远程注入技术
DLL的远程注入技术是目前Win32病毒广泛使用的一种技术.使用这种技术的病毒体通常位于一个DLL中,在系统启动的时候,一个EXE程序会将这个DLL加载至某些系统进程(如Explorer.exe)中运 ...
- Dll注入技术之消息钩子
转自:黑客反病毒 DLL注入技术之消息钩子注入 消息钩子注入原理是利用Windows 系统中SetWindowsHookEx()这个API,他可以拦截目标进程的消息到指定的DLL中导出的函数,利用这个 ...
随机推荐
- 【JZOJ6431】【luoguP5658】【CSP-S2019】括号树
description analysis 用栈维护一下树上路径未匹配的左括号,然后在树上找右括号匹配,设\(f[i]\)为\(i\)节点的贡献,\(g[i]\)是答案 为左括号可以直接继承父节点的信息 ...
- 基于mybatis-plus的代码生成
基于mybatis-plus的代码生成 前言 随着敏捷开发模式的推广,伴着日益增长的需求,日常工作中我们越来越注重效率和便捷性.今天我们就来探讨下如何自动生成代码,准确地说是如何依赖数据库生成我们的e ...
- elementUI拿到当前表格行的数据的另一种写法
背景: 这里是通过点击“修改”按钮后才拿到当前行的数据,不是点击当前行任意位置拿到数据,所以不能用 @row-click 方法 改用点击的时候直接拿到这个表里面的这一条数据 1.绑定事件 <te ...
- node 创建静态web服务器(上)
声明:本文仅用来做学习记录. 本文将使用node创建一个简单的静态web服务器. 准备工作: 首先,准备好一个类似图片中这样的页面 第一步: 创建 http 服务: const http = requ ...
- centOs7 java启动jar 并部署到nginx
简单启动命令 启动命令: nohup java –jar 项目名 & 注意1.加&表示一直后台运行,不加表示临时运行,关闭窗口项目即停止运行2.nohup:即项目在运行前新建一个noh ...
- centos7简单安装配置mariadb
CentOS 7下yum安装MariaDB yum install mariadb mariadb-server systemctl start mariadb #启动mariadb systemct ...
- Redis数据结构之字典-dict
dict是Redis服务器中出现最为频繁的复合型数据结构,除hash使用dict之外,整个Redis数据库中所有的key和value也会组成一个全局字典,还有带过期时间的key集合也是一个字典. zs ...
- hdu6341 /// 模拟 DFS+剪枝
题目大意: 将16行16列的矩阵分成四行四列共16块 矩阵的初始状态每行及每列都不会出现重复的元素 给定一个已旋转过某些块的矩阵 判断其是由初始状态最少经过几次旋转得到的 DFS枚举16个块的旋转方式 ...
- react-swiper 如何实现滑动小卡片的移动?
1.引入插件 import ReactSwipes from 'react-swipes'; import './swiperCard.css'; 2.代码构成 export default clas ...
- 上线出现[x86_64, i386]
echo "Target architectures: $ARCHS" APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}&quo ...