<ReversingEngineering>关于windows32位系统下的dll注入技术经验汇
上个学期把自己闷在图书馆一直在看关于逆向工程技术方面的书,从入门到初级,现在也敢说自己一条腿已经迈进了这片知识的大门里,因为该博客刚开通先将一些经验记录下来,也是留给自己一方面做个参照。 《逆向工程核心原理》((韩)李承远 )《Reversing:逆向工程揭密(电子工业出版社)》《黑客反汇编揭密》((俄)卡巴斯基 )
dll注入技术是一门逆向工程中非常基础非常初步的技术,也是打开大门的钥匙,逆向破解的前提条件。API勾取 ,Rootkit进程隐藏都需要dll注入为先决条件。基本方法如下(每一种方法都经过本人亲自多次试验,有不同意见欢迎评论):
(1)通过windows钩子函数来将dll注入进程之中
首先是钩子函数API的定义:
HOOK SetWindowsHookEx(
int idHook;
HOOKPROC lpfn;
HINSTANCE hMod;
DWORD dwThreadId;
)///////// 在头文件#include〈windows.h〉中的定义
SetWindowsHookEx proto :dword,dword,dword,dword
;;;;;; 在MASM32中的定义
(以全局键盘钩子为例)钩子过程是隶属于操作系统的,而非某个单独的进程或者线程,只要安装好了钩子,无论是哪个进程,就要将WM_CHAR或者WM_SYSCHAR消息就会强制将调用钩子函数的dll加载到相应的进程之中(所以钩子回调函数必须写进一个Dll之中)。这样一来钩子既可以通过dll在OS的消息循环队列之中拦截住键盘消息或者将消息“加工”后转达给下一个钩子回调函数或者应用程序(取决于是否调用了CallNextHookEx函数)。
通过在写有钩子回调函数的dll中加入一些你真正想要使用的function可以完成dll的注入。
///////////////////////////////////////////////////////////////////
(2)通过创建远程线程来将dll注入某一个进程
这种方法的核心思想在于:##不同的应用程序所装载的系统关键dll的虚拟地址一致##
////////////////////////////////////////////////////////////////////////////////////
“在Vista/7中应用了新的ASLR功能,使系统dll加载的地址每次都会改变,但在系统运行期间他都会被映射(Mapping)到每个进程相同的地址”
(《逆向工程核心原理》((韩)李承远)2014年5月第1版 P207)
/////////////////////////////////////////////////////////////////////////////////////
于是我们可以通过在自己的程序之中调用LoadLibraryA或者LoadLibraryW函数来获得函数入口,而这个函数的地址通过传递到创建在另一个进程之中的远程线程之中就可以用来加载自己想要加载的dll (所以前提是dll已经存在于被注入进程所在的主机之中)
具体步骤总结如下://///切换输入法太烦了,这段还是用英语写吧
1) OpenProcess(param...)////To get the handle of process as the parameter of CreateRomoteThread
2) VirtualAllocEx(param...) ///// To alloc a block of memory to store the path/name of DLL (WCHAR or CHAR depends)
WriteProcessMemory(param...) ////// Fill in the block alloced
3) GetModuleHandle("kernel32.dll") ///// Get the virtual address /handle of kernel32.dll which stores the entry of LoadLibraryA/W API
GetProcAddress(hKernelMod,”LoadLibray“) ///////////As stated above to get entry
4) CreateRemoteThread(param...) ////As call this API the DLL will be injected in remote thread's loadlibrary function
5) Memory Cleaning Freeing Deleting,Handles Shutting down
到此 通过创建远程线程来完成dll注入的工作就完成了。
/////////////////////////////////////////////////////////////////////////////
(3)通过静态修改PE格式文件的磁盘映像来完成dll的静态注入
熟悉整个PE格式文件的装载过程之后,我们可以通过使用一些非常简单的十六进制修改器来完成dll的安全注入过程
1)通过DOS头找到PE头,然后在PE头中的Import Directory Table中添加一个新的结构体(windows.h中的命名为IMAGE_IMPORT_DESCRIPTOR)来通过windows应用程序loader来装载dll。
这里有个问题是 原PE头中的IDT(Import Directory Table)的尾部是否有足够的空间来允许我们添加一个结构体(LOADER是通过一个全NULL的结构体来判断IDT是否结束),这里问题产生了分支,如果空间足够的话,我们直接暴力修改IDT是没有任何问题的,但是如果空间不足够我们来加入一个新的结构体单元,我们的选择就只有将整个IDT的位置转移到(一.另一个节区的空闲空间之中 二.静态创建一个新的节区来存放IDT)
方法一:我们在清空原来映像中的IDT之后,把需要添加的结构体添加好,再修改指向IDT的RVA就完成了DLL的注入。
方法二:创建新的节区我们需要扩大整个静态文件的映像大小,并且精确计算新节区的起始RVA再做修改后,重复方法一的过程就完成了dll静态注入。(这一部分内容很多,这里不再赘述。)
<ReversingEngineering>关于windows32位系统下的dll注入技术经验汇的更多相关文章
- 64位系统下注册32位dll文件
64位系统下注册32位dll文件 在64位系统里注册32位软件所需的一些dll会提示不兼容,大概因为32 位进程不能加载64位Dll,64位进程也不可以加载32的导致. 若要支持的32 位和64 位C ...
- 64位系统下注册32位dll、ax文件
64位系统下注册32位dll.ax文件. 换了64位系统遇到的新问题,目前常用的影音处理软件多数为32位. 注册这些32的滤镜会提示不兼容,大概因为32 位进程不能加载64位Dll,64位进程也不可以 ...
- PL/SQL Developer 在windows7 64位系统下连Oaracle11g64位系统的解决经验
PL/SQL Developer 在windows7 64位系统下连Oaracle11g64位系统的解决经验 一.问题现象及解决方法 现象: 1.PL/SQL 无法登录64位数据库 2.在PL/SQL ...
- 64位系统下System32文件系统重定向
前言 因为一次偶然的机会,需要访问系统目录“C:/Windows/System32“文件夹下的内容,使用的测试机器上预装了win7 64系统.在程序运行中竟然发生了该文件路径不存在的问题!!通过查看网 ...
- win7 64位系统下安装autoitlibrary库遇到问题解决
转载来自http://blog.sina.com.cn/s/blog_53f023270101skyq.html 今天需要在win7 64位系统下安装autoitlibrary库,起初安装好了robo ...
- C#在 64位系统下出现 “未能加载文件或程序集”错误
64位系统下,Build的时候,如果选择Any CPU,默认会按照64位进行编译,便无法加载某些旧的dll,这些dll可能是特定到X86 CPU的. 所以,把编译选项中改为 X86CPU,就可以运行了 ...
- windows32位系统 安装MongoDB
今天在win7 32位系统下安装 MongoDB 时,遇到了一堆坑,特此笔记. 一.下载MongoDB 打开官网下载地址:https://www.mongodb.com/download-center ...
- (转)Win7 64位系统下 Retional rose 2003 安装及破解
网上关于Retional rose 2003安装和破解的文章比较多,这里,我结合自己的亲身体验,和大家分享一下win7 旗舰版 64位系统下Retional rose 2003(下面简称rose200 ...
- Win7 64位系统下 Retional rose 2003 安装及破解
网上关于Retional rose 2003安装和破解的文章比较多,这里,我结合自己的亲身体验,和大家分享一下win7 旗舰版 64位系统下Retional rose 2003(下面简称rose200 ...
随机推荐
- nginx rewrite arg 带问号的地址转发参数处理?Nginx重定向的参数问题
Nginx重定向的参数问题 在给某网站写rewrite重定向规则时,碰到了这个关于重定向的参数处理问题.默认的情况下,Nginx在进行rewrite后都会自动添加上旧地址中的参数部分,而这对于重定向到 ...
- 2016.8.19 将div设置为隐藏使用style=“display:none”
style="display:none"表示隐藏. style="display:block"表示显示. 在代码中则使用$("#id").s ...
- Zabbix的前台SQL注射漏洞利用
今年8月份Map在wooyun上发了个Zabbix某前台SQL注射漏洞 ,11月份才公开. 漏洞详情大约是这样的: 在zabbix前端存在一个SQL注射漏洞,由于zabbix前台可以在zabbix的s ...
- css:选择器
http://blog.csdn.net/xyz121323693/article/details/8516297 交集选择器 并集选择器 后代选择器 子代选择器 http://www.cnblogs ...
- HTML字体对应word字体
42磅对应初号. 36磅对应小初. 26磅对应一号. 24磅对应小一号. 22磅对应二号. 18磅对应小二号. 16磅对应三号. 15磅对应小三号. 14磅对应四号. 12磅对应小四号. 10.5磅对 ...
- Codeforces Hello2015第一题Cursed Query
英文题面: De Prezer loves movies and series. He has watched the Troy for like 100 times and also he is a ...
- ros学习网站
ROS机器人操作系统入门-中国大学MOOC https://www.bilibili.com/video/av24585414/?p=39 http://i.youku.com/i/UNDA ...
- QTreeWidget里嵌套表格QTableView
InformationPositionSubTableView::InformationPositionSubTableView(QStringList& columnNameList,QLi ...
- Spark源码分析之七:Task运行(一)
在Task调度相关的两篇文章<Spark源码分析之五:Task调度(一)>与<Spark源码分析之六:Task调度(二)>中,我们大致了解了Task调度相关的主要逻辑,并且在T ...
- ios美颜 调研 GPUImage GPUImageBeautifyFilter BeautifyFaceDemo
最近需要给直播项目中添加美颜的功能,调研了很多SDK和开源代码(视决,涂图,七牛,金山云,videoCore等),综合成本/效果/对项目侵入性,最后决定使用一款基于GPUImage实现的 Beauti ...