CN107479874A - 一种基于Windows平台的DLL注入方法及系统 - Google Patents

一种基于Windows平台的DLL注入方法及系统 Download PDF

Info

Publication number
CN107479874A
CN107479874A CN201710559514.4A CN201710559514A CN107479874A CN 107479874 A CN107479874 A CN 107479874A CN 201710559514 A CN201710559514 A CN 201710559514A CN 107479874 A CN107479874 A CN 107479874A
Authority
CN
China
Prior art keywords
dll
safety detection
module
functions
current process
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201710559514.4A
Other languages
English (en)
Other versions
CN107479874B (zh
Inventor
曲恩纯
喻波
王志海
彭洪涛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Wondersoft Technology Co Ltd
Original Assignee
Beijing Wondersoft Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Wondersoft Technology Co Ltd filed Critical Beijing Wondersoft Technology Co Ltd
Priority to CN201710559514.4A priority Critical patent/CN107479874B/zh
Publication of CN107479874A publication Critical patent/CN107479874A/zh
Application granted granted Critical
Publication of CN107479874B publication Critical patent/CN107479874B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开一种基于Windows平台的DLL注入方法及系统,该方法包括以下步骤:)进程启动,判断当前进程是否需要注入安全检测DLL,如果需要,则获取需要注入安全检测DLL的模块名;判断模块名是否为“ntdll.dll”,如果是,将当前进程的注入信息插入工作队列;安全检测DLL对当前进程进行安全检测;如果经检测不安全,则结束,如果安全,则允许启动当前进程。通过本发明的方案,可以注入更多的进程,对杀毒软件不误杀,更稳定,更高效。

Description

一种基于Windows平台的DLL注入方法及系统
技术领域
本发明涉及数据安全领域,具体涉及一种基于Windows平台的安全检测DLL注入方法及系统。
背景技术
现阶WINDOWS安全检测DLL注入方式主要分三大类:Windows消息钩子、API HOOK和COM HOOK。
1)Windows消息钩子(操作系统本身提供)
Windows消息钩子分为全局消息钩子和局部消息钩子(即线程消息钩子),如:控制键盘的消息钩子。
2)API HOOK技术是一种用于改变API执行结果的技术,Microsoft自身也在Windows操作系统里面使用了这个技术,如Windows兼容模式等。API HOOK技术并不是计算机病毒专有技术,但是计算机病毒经常使用这个技术来达到隐藏自己的目的。
按照拦截方式不同又可分为以下几类:
InLine HOOK
IAT HOOK
EAT HOOK
3)针对COM接口虚函数表的HOOK技术,只适用COM接口。
现有技术中常用的几种HOOK技术与本发明技术方案最为接近。现阶段API HOOK(Inline HOOK最常见)流程如图1所示。
原函数内联后,跳转到处理函数,在处理函数处理完之后,再跳转回原函数跳转之前的位置。该技术在遇到加壳程序ShellCode和服务程序等情况时会发生注入失败的情况。
WINDOWS系统在进程创建的过程中会加载导入PE文件导入表的一系列模块依赖,而后会调用ZwTestAlert函数,本发明正是利用了这个过程,将ZwTestAlert函数ShellCode,使得无论是加壳程序还是服务程序,只要进程依赖“ntdll.dll”文件就可以实现完美注入。
发明内容
为解决上述技术问题,本发明提供了一种基于Windows平台的安全检测DLL注入方法,该方法包括以下步骤:
(1)进程启动,判断当前进程是否需要注入安全检测DLL,如果需要,则转入步骤(2),否则转入步骤(8);
(2)获取需要注入安全检测DLL的模块名;
(3)判断模块名是否为“ntdll.dll”,如果否,则转入步骤(8);
(4)如果是,将当前进程的注入信息插入工作队列;
(5)安全检测DLL对当前进程进行安全检测;
(6)如果经检测不安全,转入步骤(8);
(7)如果安全,则允许启动当前进程;
(8)结束。
根据本发明的实施例,优选的,所述工作队列的工作流程如下:
(4.1)获取进程空间中关键函数地址;
(4.2)根据关键函数地址,生成注入用的加壳代码ShellCode;
(4.3)修改关键函数中相关函数的前五个字节为跳转到加壳代码ShellCode指令。
根据本发明的实施例,优选的,所述关键函数包括Windows系统函数:
ZwProtectVirtualMemory、LdrLoadDll、ZwTestAlert。
根据本发明的实施例,优选的,修改关键函数ZwTestAlert的前五个字节为跳转到加壳代码ShellCode的指令。
根据本发明的实施例,优选的,所述加壳代码ShellCode实现如下功能:
(a)利用Windows系统函数NtProtectVirtualMemory保护Windows系统函数ZwTestAlert所在内存;
(b)还原Windows系统函数ZwTestAlert前五个字节;
(c)调用Windows系统函数LdrLoadDll加载要注入的安全检测DLL。
为解决上述技术问题,本发明提供了一种基于Windows平台的安全检测DLL注入系统,该系统包括:
注入判断模块,判断当前进程是否需要注入安全检测DLL;
模块名获取模块,获取需要注入安全检测DLL的模块名;
模块名判断模块,判断需要注入安全检测DLL的模块名是否为“ntdll.dll”;
确定注入模块,在确定注入安全检测DLL的模块名为“ntdll.dll”时,将当前进程的注入信息插入工作队列;
安全检测模块,安全检测DLL对当前进程进行安全检测;
进程启动模块,如果当前进程通过了安全检测,启动当前进程。
根据本发明的实施例,优选的,所述工作队列实现如下功能:
(1)获取进程空间中关键函数地址;
(2)根据关键函数地址,生成注入用的加壳代码ShellCode;
(3)修改关键函数中相关函数的前五个字节为跳转到加壳代码ShellCode指令。
根据本发明的实施例,优选的,所述关键函数包括Windows系统函数:
ZwProtectVirtualMemory、LdrLoadDll、ZwTestAlert,修改关键函数ZwTestAlert的前五个字节为跳转到加壳代码ShellCode的指令。
根据本发明的实施例,优选的,所述加壳代码ShellCode包括如下模块:
内存保护子模块,利用Windows系统函数NtProtectVirtualMemory保护Windows系统函数ZwTestAlert所在内存;
还原子模块,还原Windows系统函数ZwTestAlert前五个字节;
调用子模块,调用Windows系统函数LdrLoadDll加载要注入的安全检测DLL。
为解决上述技术问题,本发明提供了一种计算机存储介质,其包括计算机程序指令,当执行该计算机程序指令时,执行上述方法之一。
本发明的技术方案取得了以下技术效果:
(一)相对于其它注入方法,可以注入更多的进程;
(二)由于采用新的注入方法,杀毒软件对其并不误杀,更稳定,更高效。
附图说明
图1是现有技术的内联函数执行流程图
图2是本发明的进程映像加载流程图
图3是本发明的工作队列流程图
图4是本发明的ShellCode工作流程图
图5是采用发明的实施例流程图
具体实施方式
Shellcode:Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。另外,Shellcode一般是作为数据发送给受攻击服务器的。Shellcode是溢出程序和蠕虫病毒的核心,提到它自然就会和漏洞联想在一起,毕竟Shellcode只对没有打补丁的主机有用武之地。网络上数以万计带着漏洞顽强运行着的服务器给hacker和Vxer丰盛的晚餐。漏洞利用中最关键的是Shellcode的编写。
DLL注入:所谓DLL注入就是将一个DLL放进某个进程的地址空间里,让它成为那个进程的一部分。要实现DLL注入,首先需要打开目标进程。
<业务处理方法>
如图1,本发明的进程映像加载流程如下:
(一)映像加载,该映像指的是进程创建或销毁时加载到内存的PE文件或DLL文件,判断当前进程是否需要放过不注入,如果需要放过则直接结束。
(二)如果为需要处理的进程,获取当前进程包括的模块名。
进程加载的时候,系统会不断调用同一个回调函数,模块名会不断变换,进程需要加载很多DLL,是按顺序加载的,操作系统每次在回调模块中提供当前正在加载的模块名,所以这个流程每次只会提供一个模块名,直到进程开始加载“ntdll.dll”的时候,模块名就变为了“ntdll.dll”。
(三)判断模块名是否为“ntdll.dll”,如果否,放过不处理。
(四)如果是,将当前进程的注入信息插入工作队列。
如图2,本发明的工作队列流程如下:
(一)获取进程空间中以下关键函数的地址,所述关键函数包括:
ZwProtectVirtualMemory,LdrLoadDll,ZwTestAlert。其中,ZwProtectVirtualMemory,LdrLoadDll是在驱动中加载DLL必须的函数,而ZwTestAlert是进程创建的时候必然会调用的函数。
(二)根据关键函数地址,生成注入用ShellCode。
(三)修改ZwTestAlert前五个字节为跳转到ShellCode指令。
因为进程创建时必会调用ZwTestAlert,正因为必调用它,所以修改这个函数前五个字节代码,让它跳转到ShellCode中,以便执行注入的安全检测DLL。
如图3,本发明的ShellCode工作流程:
(一)利用NtProtectVirtualMemory保护ZwTestAlert函数所在内存。
(二)还原ZwTestAlert前五个字节(工作队列流程中,将其前五个字节修改为跳转到ShellCode指令)。
(三)调用LdrLoadDll函数加载要注入的安全检测DLL。
<业务处理系统>
本发明提供了一种基于Windows平台的安全检测DLL注入系统,该系统包括:
注入判断模块,判断当前进程是否需要注入安全检测DLL;
模块名获取模块,获取需要注入安全检测DLL的模块名;
模块名判断模块,判断需要注入安全检测DLL的模块名是否为“ntdll.dll”;
确定注入模块,在确定注入安全检测DLL的模块名为“ntdll.dll”时,将当前进程的注入信息插入工作队列。
根据本发明的实施例,所述工作队列实现如下功能:
(1)获取进程空间中关键函数地址;
(2)根据关键函数地址,生成注入用的加壳代码ShellCode;
(3)修改关键函数中相关函数的前五个字节为跳转到加壳代码ShellCode指令。
根据本发明的实施例,所述关键函数包括Windows系统函数:ZwProtectVirtualMemory、LdrLoadDll、ZwTestAlert,修改关键函数ZwTestAlert的前五个字节为跳转到加壳代码ShellCode的指令。
根据本发明的实施例,所述加壳代码ShellCode包括如下模块:
内存保护子模块,利用Windows系统函数NtProtectVirtualMemory保护Windows系统函数ZwTestAlert所在内存;
还原子模块,还原Windows系统函数ZwTestAlert前五个字节;
调用子模块,调用Windows系统函数LdrLoadDll加载要注入的安全检测DLL。
<具体实施例>
如图5,为根据本发明技术方案实现的一具体实施例。
(一)进程启动。
(二)判断该进程是否为敏感进程(需要防泄密的进程),如果否,则放过不注入安全检测DLL。
(三)如果是,调用注入模块,注入安全检测DLL。
(四)安全检测DLL对进程进行安全检测。
(五)如果经检测不安全,则拒绝打开。
(六)如果安全,则允许打开。
将该技术方案用于对QQ等聊天工具进行监控,但一般的注入方式无法对QQ进程进行注入控制,采用本发明的注入方式,成功的注入了检测DLL,对QQ等软件的聊天信息进行了很好的控制。
通过本发明的技术方案取得了以下技术效果:相对于其它注入方法,可以注入更多的进程;由于采用新的注入方法,杀毒软件对其并不误杀,更稳定,更高效。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换以及改进等,均应保护在本发明的保护范围之内。

Claims (10)

1.一种基于Windows平台的DLL注入方法,该方法包括以下步骤:
(1)进程启动,判断当前进程是否需要注入安全检测DLL,如果需要,则转入步骤(2),否则转入步骤(8);
(2)获取需要注入安全检测DLL的模块名;
(3)判断模块名是否为“ntdll.dll”,如果否,则转入步骤(8);
(4)如果是,将当前进程的注入信息插入工作队列;
(5)安全检测DLL对当前进程进行安全检测;
(6)如果经检测不安全,转入步骤(8);
(7)如果安全,则允许启动当前进程;
(8)结束。
2.根据权利要求1所述的方法,所述工作队列的工作流程如下:
(4.1)获取进程空间中关键函数地址;
(4.2)根据关键函数地址,生成注入用的加壳代码ShellCode;
(4.3)修改关键函数中相关函数的前五个字节为跳转到加壳代码ShellCode指令。
3.根据权利要求2所述的方法,所述关键函数包括Windows系统函数:
ZwProtectVirtualMemory、LdrLoadDll、ZwTestAlert。
4.根据权利要求2或3所述的方法,修改关键函数ZwTestAlert的前五个字节为跳转到加壳代码ShellCode的指令。
5.根据权利要求4所述的方法,所述加壳代码ShellCode实现如下功能:
(a)利用Windows系统函数NtProtectVirtualMemory保护Windows系统函数ZwTestAlert所在内存;
(b)还原Windows系统函数ZwTestAlert前五个字节;
(c)调用Windows系统函数LdrLoadDll加载要注入的安全检测DLL。
6.一种基于Windows平台的DLL注入系统,该系统包括:
注入判断模块,判断当前进程是否需要注入安全检测DLL;
模块名获取模块,获取需要注入安全检测DLL的模块名;
模块名判断模块,判断需要注入安全检测DLL的模块名是否为“ntdll.dll”;
确定注入模块,在确定注入安全检测DLL的模块名为“ntdll.dll”时,将当前进程的注入信息插入工作队列;
安全检测模块,安全检测DLL对当前进程进行安全检测;
进程启动模块,如果当前进程通过了安全检测,启动当前进程。
7.根据权利要求6所述的系统,所述工作队列实现如下功能:
(1)获取进程空间中关键函数地址;
(2)根据关键函数地址,生成注入用的加壳代码ShellCode;
(3)修改关键函数中相关函数的前五个字节为跳转到加壳代码ShellCode指令。
8.根据权利要求7所述的系统,所述关键函数包括Windows系统函数:
ZwProtectVirtualMemory、LdrLoadDll、ZwTestAlert,修改关键函数ZwTestAlert的前五个字节为跳转到加壳代码ShellCode的指令。
9.根据权利要求8所述的系统,所述加壳代码ShellCode包括如下模块:
内存保护子模块,利用Windows系统函数NtProtectVirtualMemory保护Windows系统函数ZwTestAlert所在内存;
还原子模块,还原Windows系统函数ZwTestAlert前五个字节;
调用子模块,调用Windows系统函数LdrLoadDll加载要注入的安全检测DLL。
10.一种计算机存储介质,其包括计算机程序指令,当执行该计算机程序指令时,执行权利要求1-5之一的所述方法。
CN201710559514.4A 2017-07-11 2017-07-11 一种基于Windows平台的DLL注入方法及系统 Active CN107479874B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710559514.4A CN107479874B (zh) 2017-07-11 2017-07-11 一种基于Windows平台的DLL注入方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710559514.4A CN107479874B (zh) 2017-07-11 2017-07-11 一种基于Windows平台的DLL注入方法及系统

Publications (2)

Publication Number Publication Date
CN107479874A true CN107479874A (zh) 2017-12-15
CN107479874B CN107479874B (zh) 2021-04-16

Family

ID=60594932

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710559514.4A Active CN107479874B (zh) 2017-07-11 2017-07-11 一种基于Windows平台的DLL注入方法及系统

Country Status (1)

Country Link
CN (1) CN107479874B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111026452A (zh) * 2019-11-20 2020-04-17 北京明朝万达科技股份有限公司 一种远程32位进程注入64位进程的方法及系统
CN111475229A (zh) * 2020-04-09 2020-07-31 广州锦行网络科技有限公司 一种Windows平台下的dll注入方法及系统
CN111737738A (zh) * 2020-06-11 2020-10-02 浙江华途信息安全技术股份有限公司 一种Windows防信息泄漏系统
TWI739284B (zh) * 2020-01-20 2021-09-11 精品科技股份有限公司 控制台程式的控制管理方法及系統

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103530118A (zh) * 2013-09-30 2014-01-22 广州华多网络科技有限公司 将自定义dll注入目标进程的方法及装置
CN105843640A (zh) * 2016-03-21 2016-08-10 武汉斗鱼网络科技有限公司 一种动态链接库的注入方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103530118A (zh) * 2013-09-30 2014-01-22 广州华多网络科技有限公司 将自定义dll注入目标进程的方法及装置
CN105843640A (zh) * 2016-03-21 2016-08-10 武汉斗鱼网络科技有限公司 一种动态链接库的注入方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
YIFI: "《https://www.cnblogs.com/yifi/p/6389251.html》", 11 February 2017 *

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111026452A (zh) * 2019-11-20 2020-04-17 北京明朝万达科技股份有限公司 一种远程32位进程注入64位进程的方法及系统
CN111026452B (zh) * 2019-11-20 2023-10-20 北京明朝万达科技股份有限公司 一种远程32位进程注入64位进程的方法及系统
TWI739284B (zh) * 2020-01-20 2021-09-11 精品科技股份有限公司 控制台程式的控制管理方法及系統
CN111475229A (zh) * 2020-04-09 2020-07-31 广州锦行网络科技有限公司 一种Windows平台下的dll注入方法及系统
CN111475229B (zh) * 2020-04-09 2021-01-15 广州锦行网络科技有限公司 一种Windows平台下的dll注入方法及系统
CN111737738A (zh) * 2020-06-11 2020-10-02 浙江华途信息安全技术股份有限公司 一种Windows防信息泄漏系统

Also Published As

Publication number Publication date
CN107479874B (zh) 2021-04-16

Similar Documents

Publication Publication Date Title
US11003764B2 (en) System and method for exploiting attack detection by validating application stack at runtime
US9858417B2 (en) Detecting malicious computer code in an executing program module
AU2012262867B2 (en) System and method for preserving references in sandboxes
CN110110522B (zh) 内核修复方法和装置
US9613228B2 (en) Isolation and presentation of untrusted data
US20070192857A1 (en) System and method for enforcing a security context on a downloadable
CN107479874A (zh) 一种基于Windows平台的DLL注入方法及系统
US9372991B2 (en) Detecting malicious computer code in an executing program module
EP3502944B1 (en) Detecting script-based malware cross reference to related applications
US20100037317A1 (en) Mehtod and system for security monitoring of the interface between a browser and an external browser module
KR20180018531A (ko) 인터프리터 가상 머신을 이용한 행동 멀웨어 탐지
CN105608391B (zh) 多elf文件保护方法及系统
US20110093953A1 (en) Preventing and responding to disabling of malware protection software
US10055251B1 (en) Methods, systems, and media for injecting code into embedded devices
CN110837644B (zh) 一种系统渗透测试方法、装置及终端设备
US9990493B2 (en) Data processing system security device and security method
CN105760721A (zh) 一种软件加固方法和系统
Vella et al. Volatile memory-centric investigation of SMS-hijacked phones: a Pushbullet case study
CN112199151B (zh) 一种应用程序的运行方法及装置
Bousquet et al. Mandatory access control for the android dalvik virtual machine
CN116910712A (zh) 代码保护方法、系统、电子设备及存储介质
US20100218261A1 (en) Isolating processes using aspects
CN115292707A (zh) 基于动态类调用序列的可信度判断方法及装置
Zhou et al. ChanDet: Detection model for potential channel of iOS applications
CN113836529A (zh) 进程检测方法、装置、存储介质以及计算机设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant