当前位置:首页 > 黑客业务 > 正文内容

DLL注入技术

访客4年前 (2021-04-16)黑客业务425

概述

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

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

DLL注入方法

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

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

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

  • 由于系统机制的要求,必须加载系统预设的一些基础服务模块,例如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。常见手法:

  • 静态修改PE输入表法

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

  • 输入表项DLL替换法

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

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

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

  • CreateRemoteThread法

  • RtlCreateUserThread法

  • QueueUserApc/NtQueueAPCThread APC注入法

  • SetThreadContext法

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

  • 内核KeUserModeCallback法

  • 纯WriteProcessMemory法

  • 利用系统机制加载DLL

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

  • SetwindowHookEx 消息钩子注入

  • AppInit_DLLs 注册表项注入

  • 输入法注入

  • SPI网络过滤器注入

  • ShimEngine注入

  • Explorer Shell扩展注入

  • DLL注入的防范

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

    驱动层防范

  • KeUserModeCallback防全局消息钩子注入

  • NtMapViewOfSection/LoadImageNotify对模块进行验证

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

  • Call Stack检测非法模块

  • 应用层防范

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

  • 在DLLMain中防御远程线程

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

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

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

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

    扫描二维码推送至手机访问。

    版权声明:本文由黑客接单发布,如需转载请注明出处。

    本文链接:https://therlest.com/105390.html

    分享给朋友:

    “DLL注入技术” 的相关文章

    猪肉怎么选?颜色有区别吗?今天做饭的时候发现上次买的猪肉颜色跟这

    猪肉怎么选?颜色有区别吗?今天做饭的时候发现上次买的猪肉颜色跟这 买猪肉时,根据肉的颜色、外观、气味等可以判断出肉的质量是好还是坏。优质的猪肉,脂肪白而硬,且带有香味。肉的外面往往有一层稍带干燥的膜,肉质紧密,富有弹性,手指压后凹陷处立即复原。 次鲜肉肉色较鲜肉暗,缺乏光泽,脂肪呈灰白色;表面带...

    蚯蚓的市场价格 - 2020年蚯蚓收购价格

    今年2020年这个价格还算是比较合理,市场价格较为平稳,当地蚯蚓批发价250元/万条,今日浙江海宁地区鲜蚯蚓批发价为17,最高可卖3元/两,每次都-是老家亳州的来回辗转的跑辛苦.货源充足,现在贩子登门收购18-222020元/斤不等。 目前价格多少钱一斤目前价格在8元一斤,是一种营养价值很高的无脊椎...

    存储过程oracle(oracle财务系统)

    推荐教程:甲骨文教程 本文主要介绍甲骨文中的数据转换。 1.日期转换成字符串(以2016年10月20日为例) 选择to_char(sysdate,& # 39;yyyy-mm-DD hh24:mi:ss & # 39;)strDateTime从dual-获取年-月-日:分:秒-...

    杭州今日油价最新消息_大连油价调整最新消息

    12月26日油价调整最新消息:或不做调整.多少钱一升 关于降低国内成品油价格的通知最新消息,故而5月25日24时。 京95号,7点06元92号杭州汽油,私家车车主的出行成本将有所增加。约3点66元一升,那么。 京92号,由于国际油价持续下跌,最近一次油价调整是4月10日,2019年04月23日。 全...

    书黑客,黑客软件破解吃鸡,网站黑客攻击工具

    关于较新版别的Windbg,官网已不再支撑独自下载,只能经过Windows SDK里边勾选来装置,不过装置之后Redist目录会有x64/x86/arm的装置包,也可独立装置。 此次评选活动的意图在于,在安全社区中宣扬这些技能,让职业进步对安全的注重,一起也能让这些技能能遭到认可和铭记。 因而,根据...

    intense靶场-获取User权限

    出品|MS08067实验室(www.ms08067.com) 本文作者:jokelove(Ms08067内网安全小组成员) Intense是HTB中一个难度中上的靶场,需要参与者具备下述能力: 1. Python源码审计 2. SQL注入原理 3. SNMP远程命令执行 4. 栈溢出...

    评论列表

    末屿淤浪
    3年前 (2022-07-02)

    要求,必须加载系统预设的一些基础服务模块,例如Shell扩展模块,网络服务接口模块或输入法模块等。通过干预输入表处理过程加载目标DLL(静态输入)在进程创建阶段,处理并加载输入表中的DLL模块是一项非常重要的工作。当一个进程被创建后,不会直接到EXE本身的入口处执行,首先被执行的是ntd

    发表评论

    访客

    ◎欢迎参与讨论,请在这里发表您的看法和观点。