DLL注入技术

访客4年前黑客文章933

概述

DLL是windows平台提供的一种模块共享和重用机制,它本身不能直接独立运行,但可以被加载到其他进程中间接执行。

DLL注入,是将代码插入/注入到正在运行的进程中的过程。本来是软件用于向其他程序添加/扩展功能、调试或逆向工程的一种合法技术。不过,后来恶意软件也常用这种方式来干坏事。是一种广泛应用于恶意软件和无文件攻击中的逃避技术

DLL注入 ***

通常情况下,程序加载DLL的时机主要有3个,因此,在进行DLL注入时,也是通过这3种手段进行:

  1. 在进程创建阶段加载输入表中的DLL,即俗称的“静态输入”

  2. 通过调用LoadLibrary(Ex)主动加载,俗称“动态加载”

  3. 由于系统机制的要求,必须加载系统预设的一些基础服务模块,例如Shell扩展模块, *** 服务接口模块或输入法模块等。

通过干预输入表处理过程加载目标DLL(静态输入)

在进程创建阶段,处理并加载输入表中的DLL模块是一项非常重要的工作。当一个进程被创建后,不会直接到EXE本身的入口处执行,首先被执行的是ntdll.dll中的LdrInitializeThunk函数(ntdll是windows操作系统中一个非常重要的基础模块,它在进程创建阶段就已经被映射到新进程中了。)LdrInitializeThunk会调用LdrInitializeProcess对进程的一些必要内容进行初始化,LdrInitializeProcess会继续调用LdrpWalkImportDescriptor对输入表进行处理,即加载输入表中的模块,并填充应用程序的IAT(指针,指向的是结构体数组,结构体名字叫IMAGE_THUNK_DATA,是个4选1的union,4个对象是ForwarderString/Function/Ordinal/AddressOfData,IAT选择其中的Function(地址))。所以,只要在输入表被处理之前进行干预,为输入表增加一个项目,使其指向要加载的目标DLL,或者替换元输入表中的DLL并对调用进行转发,那么新进程的主线程在输入表初始化阶段就会主动加载目标DLL。常见手法:

  1. 静态修改PE输入表法

  2. 进程创建期修改PE输入表法

  3. 输入表项DLL替换法

改变程序运行流程使其主动加载目标DLL(动态加载)

程序运行的容器是进程,真正活动的是其中的线程。程序并不能单独执行,只有将程序加载到内存中,系统为他分配资源后才能够执行,这种执行的程序称为进程,也就是说进程是系统进行资源分配和调度的一个独立单元,每个进程都有自己单独的地址空间。

因此,改变程序流程的通常做法是改变线程EIP,创建新线程或修改目标进程内的某些代码,使其执行LoadLibrary(Ex)来加载目标DLL。常见手法:

  1. CreateRemoteThread法

  2. RtlCreateUserThread法

  3. QueueUserApc/NtQueueAPCThread APC注入法

  4. SetThreadContext法

  5. 内核中通过Hook/Notify干预执行流程法

  6. 内核KeUserModeCallback法

  7. 纯WriteProcessMemory法

利用系统机制加载DLL

操作系统提供的某些系统机制是依赖一些基础服务模块(可能是操作系统本身提供的,也可能是第三方提供的)实现的,当进程主动或被动触发了这些系统机制时,就会在适当的时候主动加载这些模块。因此,可以定制一个符合该规范的DLL,将其注册为系统服务模块,这样就可以“合法”地进入目标进程了。相关 *** 如下:

  1. SetwindowHookEx 消息钩子注入

  2. AppInit_DLLs 注册表项注入

  3. 输入法注入

  4. SPI *** 过滤器注入

  5. ShimEngine注入

  6. Explorer Shell扩展注入

DLL注入的防范

针对总体的3种注入 *** ,对前者静态修改文件进行注入的防范,主要采取文件校验等方式进行防范,有条件的可以给程序加上数字签名,一旦发现程序被修改就拒绝执行。针对动态注入主要分为驱动层防范和应用层防范两大类。

驱动层防范

  1. KeUserModeCallback防全局消息钩子注入

  2. NtMapViewOfSection/LoadImageNotify对模块进行验证

  3. 拦截进程打开,读,写,以及创建远线程,发送APC等操作

  4. Call Stack检测非法模块

应用层防范

  1. 通过Hook LoadLibraryEx函数防范全局钩子,输入法注入等

  2. 在DLLMain中防御远程线程

  3. 枚举并查找当前进程中的非法模块和可疑内存

  4. Hook ntdll中的底层函数进行Call Stack检测

以上是个人踏恶意软件分析之路,所需积累的知识。纯学习分享,不喜勿喷

参考资料:《加密与解密4.0》,google.com

标签: DLL注入技术

相关文章

自己做什么买卖赚钱,这个方式赚钱很快!

自己做什么买卖赚钱,这个方式赚钱很快!

其实吸粉的过程就是你打造个人品牌的过程,当你形成了一个品牌,你的影响力就越大,那么就会有更多的人知道你,这个时候你卖产品或者卖服务,就会很容易的推销出去,因为影响力就是就是客户对你的信任。这就是互联网...

找黑客组队-如何成为一名计算机黑客(如何让自己成为一名黑客)

找黑客组队-如何成为一名计算机黑客(如何让自己成为一名黑客)

找黑客组队相关问题 网络安全和信息安全哪个属于黑客相关问题 qq号怎么防黑客盗 黑客常用的linux系统(黑客用的linux系统)...

逃离“为做而做”的竞品分析,获取真正的产品价值

逃离“为做而做”的竞品分析,获取真正的产品价值

竞品分析是互联网产品经理们的日常工作内容,不论初级产品、高级产品还是产品总监,都会根据不同目的去对竞品进行对比分析总结,力图找到适合自己的产品规划策略。针对这一块的工作方法,业内已形成一定的竞品分析方...

康乃馨的花语是什么?康乃馨的寓意是什么

康乃馨的花语是什么?康乃馨的寓意是什么

康乃馨是生活中非常漂亮的花朵,一般来说人们都将它买来,然后当做礼物送给别人,但是康乃馨是是送给什么人的,其实最常见的就是在母亲节当天,人们从市场上买一朵康乃馨,将它送给自己的妈妈,以此来表达感恩之情,...

黑客教你查询某人信息(如何查询别人手机通话

现在很多单位局域网都是无纸化办公,公司很多商业机密信息也是以电子文档的方式存储,如何公司的商业合同、设计图纸、软件代码等,如何才能防止这些机密文件不被泄密呢? 公司文档数据如何才能做到防泄密 方法...

舌尖上的英国(英国美食篇)

舌尖上的英国(英国美食篇)

英国美食,在互联网上已经被黑出了各种花样,但各位不知道的是,其实在上世纪三十年代,朱自清先生早就吐槽过了:“提到欧洲的吃喝,谁总会想到巴黎,伦敦是算不上的。不用说别的,就说煎山药蛋吧。法国的切成小骨牌...