CN106295325B - 一种用于获取显卡内容的hook方法和系统 - Google Patents

一种用于获取显卡内容的hook方法和系统 Download PDF

Info

Publication number
CN106295325B
CN106295325B CN201610664262.7A CN201610664262A CN106295325B CN 106295325 B CN106295325 B CN 106295325B CN 201610664262 A CN201610664262 A CN 201610664262A CN 106295325 B CN106295325 B CN 106295325B
Authority
CN
China
Prior art keywords
function
hook
game
read
present
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.)
Expired - Fee Related
Application number
CN201610664262.7A
Other languages
English (en)
Other versions
CN106295325A (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.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network 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 Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201610664262.7A priority Critical patent/CN106295325B/zh
Publication of CN106295325A publication Critical patent/CN106295325A/zh
Application granted granted Critical
Publication of CN106295325B publication Critical patent/CN106295325B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)
  • Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
  • Stored Programmes (AREA)

Abstract

本发明涉及游戏直播领域,本发明公开了一种用于获取显卡内容的hook方法,该方法包括:步骤S1:hook加载在内存中的游戏组件DirectX 9动态链接库中的Present函数,并读取出hook后的Present函数;步骤S2:在安全检测程序的读取函数中加入插桩函数,然后安全检测程序读取硬盘中的游戏组件的所有函数;步骤S3:逐个判断安全检测程序读取到的函数是否为hook前的Present函数,若是,则跳到步骤S4,若否,则对下一个安全检测程序读取到的函数进行判断,直至判断找出hook前的Present函数为止;步骤S4:将步骤S3中查找到的硬盘中的hook前的Present函数替换成步骤S1中读取出的hook后的Present函数。本发明还公开了一种用于获取显卡内容的系统。本发明能够有效减少游戏厂商繁琐的工作量。

Description

一种用于获取显卡内容的hook方法和系统
技术领域
本发明涉及游戏直播领域,具体涉及一种用于获取显卡内容的hook方法和一种用于获取显卡内容的系统。
背景技术
在软件技术中,hook是指修改程序的汇编代码,即修改程序原函数的汇编指令为jmp指令,使程序跳转到伪造函数处,执行完伪造函数逻辑后再跳转到原函数汇编指令,继续执行原函数逻辑。
当前,为了给观众呈现较好的游戏直播画面,游戏直播软件均会采用游戏厂商所认可的hook方式,即主播直播时,游戏直播软件对游戏客户端进程DirectX 9动态链接库模块中的Present函数进行hook,游戏直播软件便能够获取显卡中的显示内容,并将显示内容通过网络发送给服务器;观众访问服务器,便能观看到高品质的主播的游戏直播画面。游戏的客户端中通常设有安全检测程序,用以检测客户端的游戏进程是否被修改过,具体的检测方法为:安全检测程序读取游戏组件的磁盘原始文件到内存中,并以此为模板对游戏加载的游戏组件代码进行对比,若不一致,则会终止游戏的运行。
游戏厂商为了加快游戏的推广,通常会和游戏直播公司进行合作,使游戏直播公司对自己的游戏进行直播推广,同时为了游戏直播软件能够稳定运行,会对自身的安全检测程序进行相应修改,从而与游戏直播软件的hook方式进行适配,避免自身安全检测程序对游戏直播软件的hook方式产生误判,但各家游戏直播公司的游戏直播软件的hook方式均不相同,游戏厂商需要针对各个hook方式,对安全检测程序进行一一适应修改,从而一一适配,其工作量较为浩大,且极其繁琐。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种用于获取显卡内容的hook方法和一种用于获取显卡内容的系统,能够有效减少游戏厂商繁琐的工作量。
为达到以上目的,本发明采取的技术方案是:包括以下步骤:
步骤S1:hook加载在内存中的游戏组件DirectX 9动态链接库中的Present函数,并读取出hook后的Present函数;
步骤S2:在安全检测程序的读取函数中加入插桩函数,然后安全检测程序读取硬盘中的游戏组件的所有函数;
步骤S3:逐个判断安全检测程序读取到的函数是否为hook前的Present函数,若是,则跳到步骤S4,若否,则对下一个安全检测程序读取到的函数进行判断,直至判断找出hook前的Present函数为止;
步骤S4:将步骤S3中查找到的硬盘中的hook前的Present函数替换成步骤S1中读取出的hook后的Present函数。
在上述技术方案的基础上,所述插桩函数具体为:
void*pFileBuff,DWORD nNumberOfBytesToRead
其中,void和DWORD为插桩函数的指令码,pFileBuff表示被读取的函数的内存地址,nNumberOfBytesToRead表示被读取的函数所占内存的大小。
在上述技术方案的基础上,所述步骤S3中,判断安全检测程序读取到的函数为hook前的Present函数的依据为:读取到的函数所占内存大小与hook前的Present函数所占内存大小相同,且读取到的函数位于DirectX 9动态链接库中。
在上述技术方案的基础上,所述步骤S4具体为:
将步骤S1中读取出的hook后Present函数的内存地址转换成文件地址,并获取该文件地址对应的文件偏移处的内容,然后将安全检测程序取到的硬盘中hook前的Present函数文件偏移处的内容,替换成hook后的Present函数文件偏移处的内容。
在上述技术方案的基础上,所述读取函数用于读取硬盘中的游戏组件中的函数。
本发明还提供一种用于获取显卡内容的系统,该系统包括:直播端、控制端和服务器;
所述直播端用于运行游戏组件和游戏直播软件,所述游戏直播软件用于获取显卡中的游戏画面,并将获取的游戏画面发送给服务器;
所述控制端用于hook运行在内存中的游戏组件中的函数,并在安全检测程序读取的函数中找出内存中被hook函数对应的hook前的函数,然后将hook前的函数替换成内存中hook后的函数,所述安全检测程序读取的函数为硬盘中的游戏组件中的函数;
所述服务器用于接收所述直播端发送的游戏画面。
在上述技术方案的基础上,所述控制端hook的函数为游戏组件DirectX 9动态链接库中的Present函数。
在上述技术方案的基础上,所述直播端和服务器通过互联网进行通讯。
在上述技术方案的基础上,所述控制端还用于在安全检测程序的读取函数中加入插桩函数。
与现有技术相比,本发明的一种用于获取显卡内容的hook方法的优点在于:本方法在对内存中的hook的游戏组件进行游戏厂商认可的hook时,同时也会对硬盘中相应的游戏组件进行修改,使得游戏的安全检测程序在将硬盘中的原始游戏组件加载到内存中与运行在内存中的游戏组件比对时,两者相同,从而通过游戏安全检测程序的检测,避免游戏中的安全检测程序对本hook方式的误判,游戏厂商也不必对已经认可的hook方式,花费额外的精力来对安全检测程序进行适配修改,使对Present函数的hook通过安全检测程序的检测,即通过游戏厂商认可的,允许游戏直播软件对内存和硬盘中的Present函数进行修改的方式,采用游戏直播软件自身适配安全检测程序的办法,使得游戏厂商不必针对各个游戏直播软件来对安全检测程序进行修改,有效减少游戏厂商编程人员的工作量,进而减少整个游戏的制作成本。
本发明的一种采用绕过安全检测hook方法的系统的优点在于:通过修改硬盘中的游戏组件,使得游戏直播软件修改内存中游戏组件,便捷的获取显卡中的画面时,同时也能够通过游戏的安全检测程序的检测,避免安全检测程序对游戏厂商本身已经的认可的hook方式进行误判,既减轻了游戏厂商对安全检测程序作适配修改的工作量,同时也保证了游戏主播的正常直播。
附图说明
图1为本发明一种用于获取显卡内容的hook方法的流程图。
具体实施方式
以下结合附图对本发明作进一步详细说明。
参见图1所示,本发明提供一种用于获取显卡内容的hook方法,使游戏直播软件通过游戏厂商认可的hook方式来获取显卡显示的画面,游戏在运行时,会将硬盘中的游戏组件加载到内存中运行,同时硬盘中还保留有原游戏组件,每个游戏包括多个游戏组件,且每个游戏组件包括多个函数,安全检测程序在检测时,会读取硬盘的游戏组件的所有函数,该用于获取显卡内容的hook方法包括以下步骤:
步骤S1:对内存中加载的游戏组件DirectX 9动态链接库中的Present函数进行hook,从而使得游戏直播软件能够获取显卡显示的画面,然后读取出hook后的Present函数,同时编写插桩函数,插桩函数具体的为:
void*pFileBuff,DWORD nNumberOfBytesToRead
其中,void和DWORD为插桩函数的指令码,pFileBuff表示被读取到的函数的内存地址,nNumberOfBytesToRead表示读取到的函数的大小。
步骤S2:在安全检测程序的读取函数中加入插桩函数,然后安全检测程序读取硬盘中的游戏组件的所有函数,即安全检测程序使用读取函数读取硬盘中的游戏组件中的所有函数。
步骤S3:逐个判断安全检测程序读取到的函数是否为hook前的Present函数,若是,则跳到步骤S4,若否,则对下一个安全检测程序读取到的函数进行判断,直至判断找出hook前的Present函数为止,即依次对安全检测程序读取到的函数进行判断,若为hook前的Present函数,则跳转到步骤S4,若不是hook前的Present函数,则对下一个函数进行判断,直到找出hook前的Present函数为止。判断插桩函数读取到的函数为hook前的Present函数的依据为:需同时满足读取到的函数所占内存大小与hook前的Present函数所占内存大小相同,且读取到的函数位于游戏组件DirectX 9动态链接库中。每个游戏组件,其组件的文件头均是一固定格式,例如文件头可以是一个16进制的0x54AD字符,因此利用这一原理,判断读取到的函数是否位于游戏组件DirectX 9动态链接库中,具体的判断过程如下:
S3.1:对读取到的函数的内存地址进行判断,具体的为:
将读取到的函数的内存地址转换成PIMAGE_DOS_HEADER pDosHeader=(PIMAGE_DOS_HEADER)pFileBuff,判断pDosHeader->e_magic是否是IMAGE_DOS_SIGNATURE(0x5A4D),若不是,则结束,若是,则跳转到步骤S3.2,pFileBuff表示读取到的函数的内存地址,PIMAGE_DOS_HEADER pDosHeader为DOS头指针,PIMAGE_DOS_HEADER为定义DOS头部的结构体,在PIMAGE_DOS_HEADER中,pDosHeader->e_magic为该结构体的第一个字段;
S3.2:将读取到的函数的内存地址转换成PIMAGE_NT_HEADERS pNtHeaders=(PIMAGE_NT_HEADERS)((DWORD)dwBuff+pDosHeader->e_lfanew),判断pNtHeaders->Signature是否是IMAGE_NT_SIGNATURE(0x4550),若不是,则结束,若是,则说明读取到的函数位于游戏组件DirectX 9动态链接库中,PIMAGE_NT_HEADERS为一结构体,pDosHeader->e_lfanew为该结构体的最后一个字段。
步骤S4:将步骤S1中读取出的hook后Present函数的内存地址转换成文件地址,并获取该文件地址对应的文件偏移处的内容,然后将步骤S3中安全检测程序查找到的硬盘中hook前的Present函数文件偏移处的内容,替换成hook后的Present函数文件偏移处的内容,从而完成对硬盘中相应游戏组件的修改,当游戏的安全检测程序将硬盘中的游戏组件加载到内存中,与运行在内存中的游戏组件比对时,两者完全一致,从而通过安全检测程序的检测,避免游戏中的安全检测程序对本hook方式的误判,游戏厂商也不必对已经认可的hook方式,花费额外的精力来对安全检测程序进行适配修改,使对Present函数的hook通过安全检测程序的检测,即通过游戏厂商认可的,允许游戏直播软件对内存和硬盘中的Present函数进行修改的方式,采用游戏直播软件自身适配安全检测程序的办法,使得游戏厂商不必针对各个游戏直播软件来对安全检测程序进行修改,有效减少游戏厂商编程人员的工作量,进而减少整个游戏的制作成本。
上述将hook后的游戏组件的内存地址转换成文件地址的具体转换公式为:
fileOffset=PointerToRawData+(hookAddr–VirtualAddress)
式中,PointerToRawData和VirtualAddress均为PIMAGE_SECTION_HEADER中的字段,PIMAGE_SECTION_HEADER是hook后的Present函数中的一个构成结构,hookAddr是hook后的Present函数的内存地址,游戏组件的每个函数中均包括有一DLL区段,PIMAGE_SECTION_HEADER为hook后的Present函数的DLL区段中的一个构成结构,PIMAGE_SECTION_HEADER中包含有Present函数的DLL区段的文件偏移处的起始地址和DLL区段在内存中的起始地址。
本发明还包括一种基于上述获取显卡内容的hook方法的用于获取显卡内容的系统,该系统包括直播端、控制端和服务器,直播端和控制端均位于主播直播时所用的PC(personal computer,个人计算机)中,服务器运行在机房中,直播端与服务器通过互联网进行通讯。
直播端用于运行游戏组件和游戏直播软件,游戏直播软件用于获取显卡中的游戏画面,并将获取的游戏画面发送给服务器;控制端用于hook运行在内存中的游戏组件中的函数,并在安全检测程序读取的函数中找出内存中被hook函数对应的hook前的函数,然后将hook前的函数替换成内存中hook后的函数,安全检测程序读取的函数为硬盘中的游戏组件中的函数,同时,为便于找出内存中被hook函数对应的hook前的函数,还需在安全检测程序的读取函数中加入插桩函数,具体的为:hook加载在内存中的游戏组件DirectX 9动态链接库中的Present函数,并读取出hook后的Present函数,然后在硬盘中找出对应的hook前的Present函数,并将hook前的Present函数替换成读取出hook后的Present函数。服务器用于接收直播端发送的游戏画面,观众通过智能设备或PC访问服务器,即可观看游戏主播的直播画面。
该系统对内存中Present函数进行hook,然后将硬盘中对应的hook前的Present函数替换成hook后的Present函数,使得游戏直播软件能够便捷的获取显卡中的画面时,同时也能够通过游戏的安全检测程序的检测,避免安全检测程序对游戏厂商本身已经的认可的hook方式进行误判,既减轻了游戏厂商对安全检测程序作适配修改的工作量,同时也保证了游戏主播的正常直播。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

Claims (8)

1.一种用于获取显卡内容的hook方法,其特征在于,包括以下步骤:
步骤S1:hook加载在内存中的游戏组件DirectX 9动态链接库中的Present函数,并读取出hook后的Present函数;
步骤S2:在安全检测程序的读取函数中加入插桩函数,然后安全检测程序读取硬盘中的游戏组件的所有函数;
步骤S3:逐个判断安全检测程序读取到的函数是否为hook前的Present函数,若是,则跳到步骤S4,若否,则对下一个安全检测程序读取到的函数进行判断,直至判断找出hook前的Present函数为止;
步骤S4:将步骤S3中查找到的硬盘中的hook前的Present函数替换成步骤S1中读取出的hook后的Present函数;
所述步骤S3中,判断安全检测程序读取到的函数为hook前的Present函数的依据为:读取到的函数所占内存大小与hook前的Present函数所占内存大小相同,且读取到的函数位于DirectX 9动态链接库中。
2.如权利要求1所述的一种用于获取显卡内容的hook方法,其特征在于,所述插桩函数具体为:
void*pFileBuff,DWORD nNumberOfBytesToRead
其中,void和DWORD为插桩函数的指令码,pFileBuff表示被读取的函数的内存地址,nNumberOfBytesToRead表示被读取的函数所占内存的大小。
3.如权利要求1所述的一种用于获取显卡内容的hook方法,其特征在于,所述步骤S4具体为:
将步骤S1中读取出的hook后Present函数的内存地址转换成文件地址,并获取该文件地址对应的文件偏移处的内容,然后将安全检测程序取到的硬盘中hook前的Present函数文件偏移处的内容,替换成hook后的Present函数文件偏移处的内容。
4.如权利要求1所述的一种用于获取显卡内容的hook方法,其特征在于:所述读取函数用于读取硬盘中的游戏组件中的函数。
5.一种基于权利要求1所述方法的用于获取显卡内容的系统,其特征在于,该系统包括:直播端、控制端和服务器;
所述直播端用于运行游戏组件和游戏直播软件,所述游戏直播软件用于获取显卡中的游戏画面,并将获取的游戏画面发送给服务器;
所述控制端用于hook运行在内存中的游戏组件中的函数,并在安全检测程序读取的函数中找出内存中被hook函数对应的hook前的函数,然后将hook前的函数替换成内存中hook后的函数,所述安全检测程序读取的函数为硬盘中的游戏组件中的函数;
所述服务器用于接收所述直播端发送的游戏画面。
6.如权利要求5所述的一种用于获取显卡内容的系统,其特征在于:所述控制端hook的函数为游戏组件DirectX 9动态链接库中的Present函数。
7.如权利要求5所述的一种用于获取显卡内容的系统,其特征在于:所述直播端和服务器通过互联网进行通讯。
8.如权利要求5所述的一种用于获取显卡内容的系统,其特征在于:所述控制端还用于在安全检测程序的读取函数中加入插桩函数。
CN201610664262.7A 2016-08-12 2016-08-12 一种用于获取显卡内容的hook方法和系统 Expired - Fee Related CN106295325B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610664262.7A CN106295325B (zh) 2016-08-12 2016-08-12 一种用于获取显卡内容的hook方法和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610664262.7A CN106295325B (zh) 2016-08-12 2016-08-12 一种用于获取显卡内容的hook方法和系统

Publications (2)

Publication Number Publication Date
CN106295325A CN106295325A (zh) 2017-01-04
CN106295325B true CN106295325B (zh) 2020-02-07

Family

ID=57669898

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610664262.7A Expired - Fee Related CN106295325B (zh) 2016-08-12 2016-08-12 一种用于获取显卡内容的hook方法和系统

Country Status (1)

Country Link
CN (1) CN106295325B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108845841B (zh) * 2018-06-15 2021-10-01 广州多益网络股份有限公司 改变终端应用行为的方法、装置及终端
CN110691278B (zh) * 2018-07-05 2022-02-22 武汉斗鱼网络科技有限公司 防止直播时外挂误判的方法、存储介质、电子设备及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103823683A (zh) * 2014-02-27 2014-05-28 北京六间房科技有限公司 一种视频录制装置及方法
CN105808251A (zh) * 2016-03-03 2016-07-27 武汉斗鱼网络科技有限公司 一种基于虚函数表劫持绕过安全检测的方法与系统
CN105808256A (zh) * 2016-03-08 2016-07-27 武汉斗鱼网络科技有限公司 一种构造合法堆栈返回值绕过函数调用检测的方法与系统
CN105843640A (zh) * 2016-03-21 2016-08-10 武汉斗鱼网络科技有限公司 一种动态链接库的注入方法及装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103823683A (zh) * 2014-02-27 2014-05-28 北京六间房科技有限公司 一种视频录制装置及方法
CN105808251A (zh) * 2016-03-03 2016-07-27 武汉斗鱼网络科技有限公司 一种基于虚函数表劫持绕过安全检测的方法与系统
CN105808256A (zh) * 2016-03-08 2016-07-27 武汉斗鱼网络科技有限公司 一种构造合法堆栈返回值绕过函数调用检测的方法与系统
CN105843640A (zh) * 2016-03-21 2016-08-10 武汉斗鱼网络科技有限公司 一种动态链接库的注入方法及装置

Also Published As

Publication number Publication date
CN106295325A (zh) 2017-01-04

Similar Documents

Publication Publication Date Title
CN106295326B (zh) 一种用于获取显卡内容的内联hook方法和系统
CN110442366B (zh) 一种传屏处理方法、装置、设备和存储介质
CN106126423B (zh) 游戏应用程序的测试方法、装置及系统
JP2005202963A (ja) Javaプログラムの処理速度を向上させるシステム及びその方法
US20110029881A1 (en) Devices and methods for providing software programs compatible with a computer system for download by a user
CN111831538A (zh) 调试方法、装置以及存储介质
CN106326749B (zh) 文件修复方法及装置
CN106295325B (zh) 一种用于获取显卡内容的hook方法和系统
CN108446146B (zh) 一种游戏数据采集方法及装置
CN110928559A (zh) 一种数据烧录方法、装置、电子设备及存储介质
CN109936716B (zh) 一种显示驱动的实现方法及系统
CN105120259A (zh) 数字电视机检测方法及装置
CN112416775A (zh) 基于人工智能的软件自动化测试方法、装置及电子设备
CN110135163B (zh) 一种基于目标应用的安全检测方法、装置及系统
EP3264226A1 (en) Pin control method and device
KR20140090503A (ko) 앱 미리보기 수행 및 자동 인증 가능한 앱스토어 시스템
CN107908391B (zh) 程序调用的优化方法及装置
CN112507344A (zh) 漏洞检测方法、装置、电子设备和计算机可读存储介质
CN110113396B (zh) 一种控制终端的方法和装置
CN107861807B (zh) 程序调用的优化方法及装置
CN112596751B (zh) 应用程序安装包的编译方法、终端、服务器及存储介质
US11397662B2 (en) Method for debugging computer program, device employing method, and storage medium
CN114741035A (zh) Linux系统适配龙芯整机的EDID数据的读取方法
US9189368B2 (en) System and method for testing a user application using a computing apparatus and a media playback apparatus
CN114185773A (zh) 程序测试方法、装置、电子设备和计算机可读存储介质

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
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20200207