CN105843640A - 一种动态链接库的注入方法及装置 - Google Patents
一种动态链接库的注入方法及装置 Download PDFInfo
- Publication number
- CN105843640A CN105843640A CN201610160227.1A CN201610160227A CN105843640A CN 105843640 A CN105843640 A CN 105843640A CN 201610160227 A CN201610160227 A CN 201610160227A CN 105843640 A CN105843640 A CN 105843640A
- Authority
- CN
- China
- Prior art keywords
- dynamic link
- link library
- function
- target process
- section
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Document Processing Apparatus (AREA)
Abstract
本发明涉及一种链接库注入方法及装置,尤其是涉及一种动态链接库的注入方法及装置。该注入方法及装置不通过调用Windows的LoadLibrary函数来加载动态链接库,而使用远程内存读写的方式加载一个动态链接库,从而不会留下注入的痕迹,导致游戏检测不到此模块,从而绕过游戏的反外挂检测。
Description
技术领域
本发明涉及一种链接库注入方法及装置,尤其是涉及一种动态链接库的注入方法及装置。
背景技术
目前,直播软件都是通过hook进程中的d3d9.dll的Present函数来获取显卡的显示内容,然后把显示内容通过网络发送到服务端就可以实现直播了。目前的hook技术都是在所要hook的函数前面插桩。插桩就是把所要hook的函数头的汇编代码修改成jmp指令跳转到自己的函数,然后自己函数调用完后还原修改处的代码,然后再跳转到原先的所要hook的函数。此方法的实现需要修改d3d9.dll的代码。
但是目前很多游戏尤其是第一人称射击类游戏(First-personshooting game,FPS)类型的游戏存在“外挂”,并且“外挂”功能的实现也会去修改d3d9.dll的代码,所以这样会导致游戏开发商尤其是FPS类型的游戏会对d3d9.dll的代码完整性进行检测,如果检测到有代码被修改则会认定是外挂,游戏会被踢下线。“外挂”不仅会hook Present函数,还会对游戏数据进行修改,是一种不合法的调用,而直播软件只会hookPresent函数从而获取直播的显示内容,而不会对游直播数据做任何修改,是一种合法的调用,不应该被视作非法调用。
发明内容
本发明主要是解决现有技术所存在的动态链接库容易被检测到,从而导致游戏难以正常运行的技术问题,提供了一种动态链接库的注入方法及装置。该注入方法及装置通过在目标进程中分配可执行空间并自加载需要注入的动态链接库,不使用Windows的Loadlibrary,所以无法通过Windows的API检测到此动态链接库的存在。
为了解决上述问题,根据本发明的一个方面,
一种动态链接库的注入方法,其特征在于,包括:
动态链接库加载步骤,用于将动态链接库加载到目标进程的内存空间中;
初始化函数注入步骤,用于将动态链接库初始化函数加载至目标进程的内存空间中;所述动态链接库初始化函数用于修复动态链接库的重定位表及导入表并且调用动态链接库的安全传输层协议初始化表及入口函数;
动态链接库映射步骤,用于将已加载至目标进程内存空间中的动态链接库初始化函数拷贝到目标进程的起始地址;
动态链接库隐藏步骤,用于抹去已加载至目标进程内存空间中的动态链接库信息,所述动态链接库信息包括动态链接库的名字。
优选的,所述动态链接库加载步骤包括以下子步骤:
句柄获取子步骤,用于获取目标进程的句柄,并通过VirtualAlloc函数在目标进程中分配用于加载待注入动态链接库的第一内存空间;
映射加载子步骤,用于解析动态链接库的各个区段,将各个区段独立拷贝至第一内存空间中,同时将各区段所占用的内存单元的属性修改为对应区段的属性。
优选的,所述初始化函数注入步骤中通过VirtualAlloc函数在目标进程中分配用于加载待动态链接库初始化函数的第二内存空间;并且,所述动态链接库初始化函数包括:
重定位表修复步骤,用于通过动态链接库的格式获取其重定位区段,然后按照各区段在目标进程中加载的实际地址修复动态链接库的重定位表;
导入表修复步骤,通过动态链接库的格式获取其导入区段,然后按照导入表需要的真实函数地址进行填充;
初始化表调用步骤,用于调用动态链接库的TLS初始化表;
入口函数调用步骤,用于调用动态链接库的dllmain入口函数。
优选的,所述动态链接库映射步骤中通过创建一个入口函数地址为动态链接库初始化函数入口地址的远程线程来将动态链接库初始化函数拷贝到目标进程的起始地址。
优选的,所述动态链接库隐藏步骤中通过将动态链接库的PE头填充成0的方式抹去动态链接库信息。
一种动态链接库的注入装置,其特征在于,包括:
动态链接库加载模块,用于将动态链接库加载到目标进程的内存空间中;
初始化函数注入模块,用于将动态链接库初始化函数加载至目标进程的内存空间中;所述动态链接库初始化函数用于修复动态链接库的重定位表及导入表并且调用动态链接库的TLS初始化表及入口函数;
动态链接库映射模块,用于将已加载至目标进程内存空间中的动态链接库初始化函数拷贝到目标进程的起始地址;
动态链接库隐藏模块,用于抹去已加载至目标进程内存空间中的动态链接库信息,所述动态链接库信息包括动态链接库的名字。
在上述的一种动态链接库的注入装置,所述动态链接库加载模块进一步包括以下单元:
句柄获取单元,用于获取目标进程的句柄,并通过VirtualAlloc函数在目标进程中分配用于加载待注入动态链接库的第一内存空间;
映射加载单元,用于解析动态链接库的各个区段,将各个区段独立拷贝至第一内存空间中,同时将各区段所占用的内存单元的属性修改为对应区段的属性。
优选的,所述初始化函数注入模块中通过VirtualAlloc函数在目标进程中分配用于加载待动态链接库初始化函数的第二内存空间;并且,所所述动态链接库初始化函数包括:
重定位表修复单元,用于通过动态链接库的格式获取其重定位区段,然后按照各区段在目标进程中加载的实际地址修复动态链接库的重定位表;
导入表修复单元,通过动态链接库的格式获取其导入区段,然后按照导入表需要的真实函数地址进行填充;
初始化表调用单元,用于调用动态链接库的TLS初始化表;
入口函数调用单元,用于调用动态链接库的dllmain入口函数。
优选的,所述动态链接库映射模块中通过创建一个入口函数地址为动态链接库初始化函数入口地址的远程线程来将动态链接库初始化函数拷贝到目标进程的起始地址。
优选的,所述动态链接库隐藏模块中通过将动态链接库的PE头填充成0的方式抹去动态链接库信息。
因此,本发明通过在目标进程中分配可执行空间并自加载需要注入的动态链接库,不使用Windows的Loadlibrary,所以游戏无法通过Windows的API检测到此动态链接库的存在。
附图说明
附图1是本发明的系统连接结构示意图。
附图2是本发明的方法流程示意图。
具体实施方式
下面通过实施例,对本发明的技术方案作进一步具体的说明。
实施例:
一种动态链接库的注入方法,包括以下步骤:
(1)获取目标进程(需要注入进程游戏)的句柄。
(2)调用Windows函数VirtualAlloc在目标进程中分配内存空间,分配大小则是需要注入的动态链接库的内存大小。
(3)将动态链接库以映射的方式加载到分配的空间中,由于动态链接库在磁盘中的对齐方式和在内存的对齐方式不一致,所以需要去解析动态链接库的各个区段,按照每个区段去独立拷贝。并修改内存属性为对应的每个区段的属性。
(4)调用Windows函数VirtualAlloc在目标进程中分配内存空间,这段内存空间是一段本地函数代码,主要用于初始化之前在目标进程映射的动态链接库。此段函数主要需要做如下事情:
①修复动态链接库的重定位表:通过动态链接库的格式获取其重定位区段,然后按照实际在目标进程中加载的地址进行修复。
②修复动态链接库的导入表:通过动态链接库的格式获取其导入区段,然后按照导入表需要的真实函数地址进行填充。
③调用动态链接库的TLS初始化表。
④调用动态链接库的入口函数,即dllmain函数。
(5)将上述(4)中的代码拷贝到目标进程中后,通过Windows函数调用CreateRemoteThread,在目标进程中创建一个远程线程,入口函数地址填入(4)中的函数地址入口,从而将上述函数拷贝到目标进程的起始地址。
(6)将目标进程映射的动态链接库的PE头填充成0,这样就抹去了此动态链接库的详细信息,包括动态链接库的名字。
从上述描述可知,本发明的创新点在于不通过调用Windows的LoadLibrary函数来加载动态链接库,而使用远程内存读写的方式加载一个动态链接库,从而不会留下注入的痕迹,导致游戏检测不到此模块,从而绕过游戏的反外挂检测。
本文中所描述的具体实施例仅仅是对本发明精神作举例说明。本发明所属技术领域的技术人员可以对所描述的具体实施例做各种各样的修改或补充或采用类似的方式替代,但并不会偏离本发明的精神或者超越所附权利要求书所定义的范围。
Claims (10)
1.一种动态链接库的注入方法,其特征在于,包括:
动态链接库加载步骤,用于将动态链接库加载到目标进程的内存空间中;
初始化函数注入步骤,用于将动态链接库初始化函数加载至目标进程的内存空间中;所述动态链接库初始化函数用于修复动态链接库的重定位表及导入表并且调用动态链接库的安全传输层协议初始化表及入口函数;
动态链接库映射步骤,用于将已加载至目标进程内存空间中的动态链接库初始化函数拷贝到目标进程的起始地址;
动态链接库隐藏步骤,用于抹去已加载至目标进程内存空间中的动态链接库信息,所述动态链接库信息包括动态链接库的名字。
2.根据权利要求1所述的一种动态链接库的注入方法,其特征在于,所述动态链接库加载步骤包括以下子步骤:
句柄获取子步骤,用于获取目标进程的句柄,并通过VirtualAlloc函数在目标进程中分配用于加载待注入动态链接库的第一内存空间;
映射加载子步骤,用于解析动态链接库的各个区段,将各个区段独立拷贝至第一内存空间中,同时将各区段所占用的内存单元的属性修改为对应区段的属性。
3.根据权利要求1所述的一种动态链接库的注入方法,其特征在于,所述初始化函数注入步骤中通过VirtualAlloc函数在目标进程中分配用于加载待动态链接库初始化函数的第二内存空间;并且,所述动态链接库初始化函数包括:
重定位表修复步骤,用于通过动态链接库的格式获取其重定位区段,然后按照各区段在目标进程中加载的实际地址修复动态链接库的重定位表;
导入表修复步骤,通过动态链接库的格式获取其导入区段,然后按照导入表需要的真实函数地址进行填充;
初始化表调用步骤,用于调用动态链接库的TLS初始化表;
入口函数调用步骤,用于调用动态链接库的dllmain入口函数。
4.根据权利要求1所述的一种动态链接库的注入方法,其特征在于,所述动态链接库映射步骤中通过创建一个入口函数地址为动态链接库初始化函数入口地址的远程线程来将动态链接库初始化函数拷贝到目标进程的起始地址。
5.根据权利要求1所述的一种动态链接库的注入方法,其特征在于,所述动态链接库隐藏步骤中通过将动态链接库的PE头填充成0的方式抹去动态链接库信息。
6.一种动态链接库的注入装置,其特征在于,包括:
动态链接库加载模块,用于将动态链接库加载到目标进程的内存空间中;
初始化函数注入模块,用于将动态链接库初始化函数加载至目标进程的内存空间中;所述动态链接库初始化函数用于修复动态链接库的重定位表及导入表并且调用动态链接库的TLS初始化表及入口函数;
动态链接库映射模块,用于将已加载至目标进程内存空间中的动态链接库初始化函数拷贝到目标进程的起始地址;
动态链接库隐藏模块,用于抹去已加载至目标进程内存空间中的动态链接库信息,所述动态链接库信息包括动态链接库的名字。
7.根据权利要求6所述的一种动态链接库的注入装置,其特征在于,所述动态链接库加载模块进一步包括以下单元:
句柄获取单元,用于获取目标进程的句柄,并通过VirtualAlloc函数在目标进程中分配用于加载待注入动态链接库的第一内存空间;
映射加载单元,用于解析动态链接库的各个区段,将各个区段独立拷贝至第一内存空间中,同时将各区段所占用的内存单元的属性修改为对应区段的属性。
8.根据权利要求6所述的一种动态链接库的注入装置,其特征在于,所述初始化函数注入模块中通过VirtualAlloc函数在目标进程中分配用于加载待动态链接库初始化函数的第二内存空间;并且,所所述动态链接库初始化函数包括:
重定位表修复单元,用于通过动态链接库的格式获取其重定位区段,然后按照各区段在目标进程中加载的实际地址修复动态链接库的重定位表;
导入表修复单元,通过动态链接库的格式获取其导入区段,然后按照导入表需要的真实函数地址进行填充;
初始化表调用单元,用于调用动态链接库的TLS初始化表;
入口函数调用单元,用于调用动态链接库的dllmain入口函数。
9.根据权利要求6所述的一种动态链接库的注入装置,其特征在于,所述动态链接库映射模块中通过创建一个入口函数地址为动态链接库初始化函数入口地址的远程线程来将动态链接库初始化函数拷贝到目标进程的起始地址。
10.根据权利要求1所述的一种动态链接库的注入装置,其特征在于,所述动态链接库隐藏模块中通过将动态链接库的PE头填充成0的方式抹去动态链接库信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610160227.1A CN105843640B (zh) | 2016-03-21 | 2016-03-21 | 一种动态链接库的注入方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610160227.1A CN105843640B (zh) | 2016-03-21 | 2016-03-21 | 一种动态链接库的注入方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105843640A true CN105843640A (zh) | 2016-08-10 |
CN105843640B CN105843640B (zh) | 2017-11-14 |
Family
ID=56587672
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610160227.1A Active CN105843640B (zh) | 2016-03-21 | 2016-03-21 | 一种动态链接库的注入方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105843640B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106295325A (zh) * | 2016-08-12 | 2017-01-04 | 武汉斗鱼网络科技有限公司 | 一种用于获取显卡内容的hook方法和系统 |
CN106502745A (zh) * | 2016-10-26 | 2017-03-15 | 腾讯科技(深圳)有限公司 | 一种函数调用方法和装置 |
CN106650475A (zh) * | 2016-12-02 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 一种隐藏so文件的方法及装置 |
CN107479874A (zh) * | 2017-07-11 | 2017-12-15 | 北京明朝万达科技股份有限公司 | 一种基于Windows平台的DLL注入方法及系统 |
CN107480029A (zh) * | 2017-08-02 | 2017-12-15 | 北京深思数盾科技股份有限公司 | 一种函数调用时间的监控方法及装置 |
CN108446146A (zh) * | 2018-03-22 | 2018-08-24 | 北京奇艺世纪科技有限公司 | 一种游戏数据采集方法及装置 |
CN108573143A (zh) * | 2017-03-10 | 2018-09-25 | 南京大学 | 基于程序插桩和动态信息验证的栈保护方法 |
CN109145638A (zh) * | 2018-07-20 | 2019-01-04 | 武汉斗鱼网络科技有限公司 | 一种获取自加载模块函数的方法及装置 |
CN109656571A (zh) * | 2018-09-27 | 2019-04-19 | 深圳壹账通智能科技有限公司 | 加载方法、装置、终端及计算机可读存储介质 |
CN110298175A (zh) * | 2019-07-05 | 2019-10-01 | 武汉斗鱼网络科技有限公司 | 一种dll文件的处理方法及相关装置 |
CN111420406A (zh) * | 2020-03-31 | 2020-07-17 | 福建天晴在线互动科技有限公司 | 一种通过内存清零实现防止游戏外挂的方法及其系统 |
CN112948024A (zh) * | 2021-04-15 | 2021-06-11 | 网易(杭州)网络有限公司 | 动态链接库的加载方法、装置、存储介质及电子设备 |
CN114307165A (zh) * | 2021-12-30 | 2022-04-12 | 完美世界(北京)软件科技发展有限公司 | 外挂检测方法、装置、设备及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103530118A (zh) * | 2013-09-30 | 2014-01-22 | 广州华多网络科技有限公司 | 将自定义dll注入目标进程的方法及装置 |
CN104679561A (zh) * | 2015-02-15 | 2015-06-03 | 福建天晴数码有限公司 | 一种动态链接库文件加载的方法及系统 |
-
2016
- 2016-03-21 CN CN201610160227.1A patent/CN105843640B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103530118A (zh) * | 2013-09-30 | 2014-01-22 | 广州华多网络科技有限公司 | 将自定义dll注入目标进程的方法及装置 |
CN104679561A (zh) * | 2015-02-15 | 2015-06-03 | 福建天晴数码有限公司 | 一种动态链接库文件加载的方法及系统 |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106295325B (zh) * | 2016-08-12 | 2020-02-07 | 武汉斗鱼网络科技有限公司 | 一种用于获取显卡内容的hook方法和系统 |
CN106295325A (zh) * | 2016-08-12 | 2017-01-04 | 武汉斗鱼网络科技有限公司 | 一种用于获取显卡内容的hook方法和系统 |
CN106502745A (zh) * | 2016-10-26 | 2017-03-15 | 腾讯科技(深圳)有限公司 | 一种函数调用方法和装置 |
CN106650475A (zh) * | 2016-12-02 | 2017-05-10 | 武汉斗鱼网络科技有限公司 | 一种隐藏so文件的方法及装置 |
CN108573143A (zh) * | 2017-03-10 | 2018-09-25 | 南京大学 | 基于程序插桩和动态信息验证的栈保护方法 |
CN107479874A (zh) * | 2017-07-11 | 2017-12-15 | 北京明朝万达科技股份有限公司 | 一种基于Windows平台的DLL注入方法及系统 |
CN107479874B (zh) * | 2017-07-11 | 2021-04-16 | 北京明朝万达科技股份有限公司 | 一种基于Windows平台的DLL注入方法及系统 |
CN107480029A (zh) * | 2017-08-02 | 2017-12-15 | 北京深思数盾科技股份有限公司 | 一种函数调用时间的监控方法及装置 |
CN108446146A (zh) * | 2018-03-22 | 2018-08-24 | 北京奇艺世纪科技有限公司 | 一种游戏数据采集方法及装置 |
CN108446146B (zh) * | 2018-03-22 | 2022-03-08 | 北京奇艺世纪科技有限公司 | 一种游戏数据采集方法及装置 |
CN109145638B (zh) * | 2018-07-20 | 2021-01-01 | 武汉斗鱼网络科技有限公司 | 一种获取自加载模块函数的方法及装置 |
CN109145638A (zh) * | 2018-07-20 | 2019-01-04 | 武汉斗鱼网络科技有限公司 | 一种获取自加载模块函数的方法及装置 |
CN109656571A (zh) * | 2018-09-27 | 2019-04-19 | 深圳壹账通智能科技有限公司 | 加载方法、装置、终端及计算机可读存储介质 |
CN110298175A (zh) * | 2019-07-05 | 2019-10-01 | 武汉斗鱼网络科技有限公司 | 一种dll文件的处理方法及相关装置 |
CN111420406A (zh) * | 2020-03-31 | 2020-07-17 | 福建天晴在线互动科技有限公司 | 一种通过内存清零实现防止游戏外挂的方法及其系统 |
CN111420406B (zh) * | 2020-03-31 | 2023-08-04 | 福建天晴在线互动科技有限公司 | 一种通过内存清零实现防止游戏外挂的方法及其系统 |
CN112948024A (zh) * | 2021-04-15 | 2021-06-11 | 网易(杭州)网络有限公司 | 动态链接库的加载方法、装置、存储介质及电子设备 |
CN114307165A (zh) * | 2021-12-30 | 2022-04-12 | 完美世界(北京)软件科技发展有限公司 | 外挂检测方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105843640B (zh) | 2017-11-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105843640A (zh) | 一种动态链接库的注入方法及装置 | |
CN109064334B (zh) | 一种智能合约记账方法、计算机装置及可读存储介质 | |
CN108970117B (zh) | 游戏资源包的发布方法、终端设备及介质 | |
CN105677415A (zh) | 热更新方法及装置 | |
CN106874245B (zh) | 一种CTF在线竞赛平台动态Flag处理方法及装置 | |
US20200250912A1 (en) | Distributed Voting System, Method, Apparatus, Computer Device and Readable Storage Medium | |
CN102780932B (zh) | 多窗口播放方法和系统 | |
CN106658145A (zh) | 一种直播数据处理方法和装置 | |
CN103238169B (zh) | 显示器上的像素再现 | |
CN110046517B (zh) | 一种对写入区块链的交易进行隐匿的方法及装置 | |
CN108648323A (zh) | 目标信息的选取方法、装置、计算机设备和存储介质 | |
CN110011800B (zh) | 一种区块链数据读取方法及装置 | |
JP2021513404A (ja) | ゲームシーンにおけるスタティックコンポーネントの処理方法、レンダリング方法および装置 | |
CN105955762A (zh) | 一种注入动态链接库文件的方法、装置及电子设备 | |
CN103530118A (zh) | 将自定义dll注入目标进程的方法及装置 | |
CN105809054A (zh) | 信息获取方法及装置 | |
CN106055469A (zh) | 一种基于代码注入的移动端应用测试系统及方法 | |
CN106357392A (zh) | 存储装置和认证方法 | |
CN109447599A (zh) | 基于区块链的数字资产发行方法及系统 | |
CN105701854B (zh) | 一种3d渲染方法、装置及引擎 | |
CN110321504A (zh) | 一种页面处理方法及装置 | |
CN107172445A (zh) | 一种获取数据的方法及装置 | |
CN109361806A (zh) | 黑号码存储方法、黑号码标记方法、系统及装置 | |
CN108064383A (zh) | 一种应用程序权限的管控方法、终端及pos终端 | |
CN110298175B (zh) | 一种dll文件的处理方法及相关装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |