CN106295340A - 一种程序文件恢复***及方法 - Google Patents

一种程序文件恢复***及方法 Download PDF

Info

Publication number
CN106295340A
CN106295340A CN201610629674.7A CN201610629674A CN106295340A CN 106295340 A CN106295340 A CN 106295340A CN 201610629674 A CN201610629674 A CN 201610629674A CN 106295340 A CN106295340 A CN 106295340A
Authority
CN
China
Prior art keywords
object function
memory
internal memory
address
file
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.)
Pending
Application number
CN201610629674.7A
Other languages
English (en)
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 CN201610629674.7A priority Critical patent/CN106295340A/zh
Publication of CN106295340A publication Critical patent/CN106295340A/zh
Pending legal-status Critical Current

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/568Computer malware detection or handling, e.g. anti-virus arrangements eliminating virus, restoring damaged files
    • 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)
  • Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明涉及计算机安全领域,公开了一种程序文件恢复***。本发明还公开了一种程序文件恢复方法。该方法包括:步骤S1:查找所述目标函数内存地址的模块起始地址,并获取所述模块起始地址在磁盘上所对应的PE文件;步骤S2:在PE文件中找到目标函数的模块起始地址对应的文件偏移位置,并将文件偏移位置处的内容读取到内存中保存;步骤S3:将文件偏移位置处内容与内存中的目标函数的内存地址进行比对,若相同,则结束,若不同,则将内存中的目标函数的内存地址替换成文件偏移位置处的内容。本发明能够有效保证用户程序的使用安全。

Description

一种程序文件恢复***及方法
技术领域
本发明涉及计算机安全领域,具体涉及一种程序文件恢复***和一种程序文件恢复方法。
背景技术
随着网络通信技术的快速发展,各种智能操作***被广泛应用,从而方便人们的生产生活,但各种外挂或木马程序也逐渐侵入到操作***中,对操作***中运行的各种程序的函数进行修改,从而达到外挂或木马所要达到的非法目的,外挂和木马程序一般是通过内联钩子函数对程序中的目标函数进行修改挂钩,即在目标函数的前5个字节中加入跳转指令,这样无论目标函数如何解析自身的函数地址,外挂或木马均能勾住目标函数,从而控制目标函数的运行,进而达到外挂或木马所要达到的非法目的,影响用户的正常使用体验。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种程序文件恢复***和一种程序文件恢复方法,能够有效保证用户程序的使用安全。
为达到以上目的,本发明采取的技术方案是:包括:
查找模块,适于根据目标函数的模块起始地址,查找模块起始地址在硬盘中对应的PE文件,并获取模块起始地址在PE文件中对应文件偏移位置处的内容;
检测模块,适于将查找模块获取的文件偏移位置处的内容与目标函数的内存地址进行比对,并判断两者是否相同;
恢复模块,适于根据所述检测模块的判断结果,若文件偏移位置处的内容与目标函数的内存地址不相同,则将内存中的目标函数的内存地址替换成文件偏移位置处的内容,若相同,则结束操作。
在上述技术方案的基础上,所述恢复模块还用于调用API函数中的VirtualProtect指令更改目标函数的内存属性。
在上述技术方案的基础上,当内存中目标函数的内存地址替换成文件偏移位置处内容时,所述恢复模块调用API函数中的VirtualProtect指令将目标函数的内存属性更改为可写。
本发明还提供一种程序文件恢复方法,该方法包括以下步骤:
步骤S1:查找所述目标函数内存地址的模块起始地址,并获取所述模块起始地址在磁盘上所对应的PE文件;
步骤S2:在PE文件中找到目标函数的模块起始地址对应的文件偏移位置,并将文件偏移位置处的内容读取到内存中保存;
步骤S3:将文件偏移位置处内容与内存中的目标函数的内存地址进行比对,若相同,则结束,若不同,则将内存中的目标函数的内存地址替换成文件偏移位置处的内容。
在上述技术方案的基础上,所述步骤S1具体为:
将目标函数记为pFunction,然后查找目标函数内存地址的模块起始地址,并获取模块起始地址在磁盘上所对应的PE文件。
在上述技术方案的基础上,所述步骤S2具体包括以下步骤:
S2.1:获取PE文件中的所有节表,并将节表的个数标记为N,节表记为SectionTable,所述N为自然数;
S2.2:读取第i个节表,且0≤i<N,判断pFunctio与VirtualAddress和VirtualAddress+SectionTable[i]之间的字节长度大小关系,若
VirtualAddress≤pFunctio<VirtualAddress+SectionTable[i]
则目标函数的文件偏移位置=(PointerToRawData-pFunction[i]),其中,VirtualAddress为SectionTable的内存起始地址,SectionTable[i]表示第i个节表的内存地址,PointerToRawData为SectionTable的文件起始位置地址,pFunction[i]为第i个节表的内存起始地址;
S2.3:将文件偏移位置处的内容读取到内存中保存。
在上述技术方案的基础上,所述步骤S3还包括:
将目标函数的内存属性改为可写,再将内存中目标函数的内存地址替换成文件偏移位置处的内容。
在上述技术方案的基础上,目标函数的内存属性的更改通过API函数中的VirtualProtect指令完成。
与现有技术相比,本发明的一种程序文件恢复***的优点在于:查找模块根据内存中运行的程序的函数的模块起始地址,查找到该函数对应的PE文件中的文件偏移位置处的内容,然后检测模块将文件偏移位置处的内容与该函数的内存地址进行比对,相当于将运行在内存中函数的内存地址,与该函数在硬盘中的最初始地址进行比较,从而判断该函数是否被挂钩,若被函数被挂钩,则进行替换修复,将函数恢复到正常状态,保证程序的正常稳定运行。
本发明的一种程序文件恢复方法的优点在于:通过将函数的内存地址与该函数文件偏移位置处的内容进行比对,判断函数是否被挂钩,若被挂钩,则进行替换修复,采用该方法对内存中运行的程序的各个函数进行检测和修复,从而保证程序的正常稳定运行,提高用户体验。
附图说明
图1为本发明一种程序文件恢复方法的流程图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
本发明提供一种程序文件恢复***,该***具体的包括查找模块、检测模块和恢复模块,程序保存在硬盘中,每个程序均包括多个函数,当程序需要运行时,会将程序读取到内存中进行运行,这里对内存中程序的某一个函数进行检测举例,检测该函数是否被挂钩,若被挂钩,则将该函数恢复为初始状态,这里将该函数命名为目标函数。
目标函数运行在内存中,查找模块适于根据内存中目标函数的模块起始地址,查找到模块起始地址在硬盘中对应的PE文件,并获取模块起始地址在PE文件中对应文件偏移位置处的内容;检测模块适于将查找模块获取的文件偏移位置处的内容与目标函数的内存地址进行比对,并判断两者是否相同;恢复模块适于根据检测模块的判断结果,若文件偏移位置处的内容与目标函数的内存地址不相同,说明目标函数被挂钩了,则将内存中的目标函数的内存地址替换成文件偏移位置处的内容,从而将目标函数恢复成初始状态,即正常状态,若相同,说明目标函数没有被挂钩,则结束操作。一般情况下,函数的内存属性仅为可读和可执行属性,因此在将内存中目标函数的内存地址替换成文件偏移位置处内容时,需要调用API(Application Programming Interface,应用程序编程接口)函数中的VirtualProtect指令,将目标函数的内存属性更改为可写,然后再替换,VirtualProtect为一逻辑包装函数,常用于修改其它函数的内存属性。
使用控制端对运行在内存中程序的各个函数进行检测和修复,该***带有检测和修复功能,便能够消除程序的潜在危险,并对已经被挂钩的函数进行修复,从而保证程序的正常运行。
参见图1所示,本发明还提供一种程序文件恢复方法,为上述程序文件恢复***的具体运行方法,该方法包括以下步骤:
步骤S1:将目标函数记为pFunction,然后调用API函数中的VirtualQuery指令来对目标函数的内存地址的模块起始地址进行查找,查找到模块起始地址后,再调用API函数中的GetModuleFileName指令查找模块起始地址在磁盘上所对应的PE(PortableExecutable,可移植的执行体)文件,PE文件内包含有目标函数对应程序的导出表、导入地址表、重定位表、节表等很多重要信息,这里我们用到的是PE文件中的节表;
步骤S2:获取PE文件中的所有节表,并将节表的个数标记为N,节表记为SectionTable,所述N为自然数;读取第i个节表,且0≤i<N,判断pFunctio与VirtualAddress和VirtualAddress+SectionTableall[i]之间的字节长度大小关系,即pFunctio所占内存与VirtualAddress和VirtualAddress+SectionTableall[i]之间的字节长度大小关系,若
VirtualAddress≤pFunctio<VirtualAddress+SectionTableall[i]
则目标函数的文件偏移位置=(PointerToRawData-pFunction[i]),并将文件偏移位置处的内容读取到内存中保存。其中,VirtualAddress为SectionTable的内存起始地址,SectionTable[i]表示第i个节表的内存地址,PointerToRawData为SectionTable的文件起始位置地址,pFunction[i]为第i个节表的内存起始地址。
步骤S3:将步骤S2中读取到内存中保存的文件偏移位置处内容与内存中的目标函数的内存地址进行比对,若相同,说明目标函数没有被挂钩,故整个检测结束,若不相同,说明目标函数被挂钩,则调用API函数中的VirtualProtect指令,将目标函数的内存属性改为可写,再将内存中目标函数的内存地址替换成步骤S2中读取到内存中保存的文件偏移位置处的内容,然后结束,从而完成对目标函数的修复,将被挂钩的目标函数恢复到初始的正常状态。
通过上述方法,对内存中运行的程序的各个函数进行检测,若函数被挂钩,则进行修复,从而保证程序的正常稳定运行,提高用户体验。
以下结合具体实施例,对上述程序文件恢复方法的具体应用进行说明。
实施例
程序组件DirectX 11动态链接库中的Present函数,即显示绘制函数,常被第三方程序非法修改,第三方程序以此来达到获取显卡中的显示的画面内容的目的,这里,对Present函数是否被内联钩子非法修改进行检测恢复举例。
此时目标函数为Present函数,调用API函数中的VirtualQuery指令查找到内存中的Present函数内存地址对应的模块起始地址,接着调用API函数中的GetModuleFileName指令查找到Present函数的模块起始地址在磁盘上所对应的PE文件;获取Present函数对应PE文件中的所有节表,并将节表的个数标记为N,节表记为SectionTable,所述N为自然数;读取第i个节表,且0≤i<N,判断Present函数所占内存与VirtualAddress和VirtualAddress+SectionTableall[i]之间的字节长度大小关系,若
VirtualAddress≤Present<VirtualAddress+SectionTableall[i]
则Present函数的文件偏移位置=(PointerToRawData-Present[i]),并将文件偏移位置处的内容读取到内存中保存。其中,VirtualAddress为SectionTable的内存起始地址,SectionTable[i]表示Present函数对应PE文件节表中第i个节表的内存地址,PointerToRawData为SectionTable的文件起始位置地址,Present[i]为Present函数对应PE文件节表中第i个节表的内存起始地址。
将读取到内存中保存的文件偏移位置处内容与Present函数的内存地址进行比对,若相同,说明Present函数没有被挂钩,即没有被非法修改,故整个检测结束,若不相同,说明Present函数被挂钩,即已被非法修改,则调用API函数中的VirtualProtect指令,将Present函数的内存属性改为可写,再将内存中Present函数的内存地址替换成上述读取到内存中保存的文件偏移位置处的内容,从而完成对被修改的Present函数的恢复。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。

Claims (8)

1.一种程序文件恢复***,用于检测并恢复内存中目标函数,其特征在于,包括:
查找模块,适于根据目标函数的模块起始地址,查找模块起始地址在硬盘中对应的PE文件,并获取模块起始地址在PE文件中对应文件偏移位置处的内容;
检测模块,适于将查找模块获取的文件偏移位置处的内容与目标函数的内存地址进行比对,并判断两者是否相同;
恢复模块,适于根据所述检测模块的判断结果,若文件偏移位置处的内容与目标函数的内存地址不相同,则将内存中的目标函数的内存地址替换成文件偏移位置处的内容,若相同,则结束操作。
2.如权利要求1所述的一种程序文件恢复***,其特征在于:所述恢复模块还用于调用API函数中的VirtualProtect指令更改目标函数的内存属性。
3.如权利要求2所述的一种程序文件恢复***,其特征在于:当内存中目标函数的内存地址替换成文件偏移位置处内容时,所述恢复模块调用API函数中的VirtualProtect指令将目标函数的内存属性更改为可写。
4.一种基于权利要求1所述***的程序文件恢复方法,用于检测运行在内存中的目标函数是否被非法修改,其特征在于,该方法包括以下步骤:
步骤S1:查找所述目标函数内存地址的模块起始地址,并获取所述模块起始地址在磁盘上所对应的PE文件;
步骤S2:在PE文件中找到目标函数的模块起始地址对应的文件偏移位置,并将文件偏移位置处的内容读取到内存中保存;
步骤S3:将文件偏移位置处内容与内存中的目标函数的内存地址进行比对,若相同,则结束,若不同,则将内存中的目标函数的内存地址替换成文件偏移位置处的内容。
5.如权利要求4所述的一种程序文件恢复方法,其特征在于,所述步骤S1具体为:
将目标函数记为pFunction,然后查找目标函数内存地址的模块起始地址,并获取模块起始地址在磁盘上所对应的PE文件。
6.如权利要求5所述的一种程序文件恢复方法,其特征在于,所述步骤S2具体包括以下步骤:
S2.1:获取PE文件中的所有节表,并将节表的个数标记为N,节表记为SectionTable,所述N为自然数;
S2.2:读取第i个节表,且0≤i<N,判断pFunctio与VirtualAddress和VirtualAddress+SectionTable[i]之间的字节长度大小关系,若
VirtualAddress≤pFunctio<VirtualAddress+SectionTable[i]
则目标函数的文件偏移位置=(PointerToRawData-pFunction[i]),其中,VirtualAddress为SectionTable的内存起始地址,SectionTable[i]表示第i个节表的内存地址,PointerToRawData为SectionTable的文件起始位置地址,pFunction[i]为第i个节表的内存起始地址;
S2.3:将文件偏移位置处的内容读取到内存中保存。
7.如权利要求6所述的一种程序文件恢复方法,其特征在于,所述步骤S3还包括:
将目标函数的内存属性改为可写,再将内存中目标函数的内存地址替换成文件偏移位置处的内容。
8.如权利要求7所述的一种程序文件恢复方法,其特征在于:目标函数的内存属性的更改通过API函数中的VirtualProtect指令完成。
CN201610629674.7A 2016-08-03 2016-08-03 一种程序文件恢复***及方法 Pending CN106295340A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610629674.7A CN106295340A (zh) 2016-08-03 2016-08-03 一种程序文件恢复***及方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610629674.7A CN106295340A (zh) 2016-08-03 2016-08-03 一种程序文件恢复***及方法

Publications (1)

Publication Number Publication Date
CN106295340A true CN106295340A (zh) 2017-01-04

Family

ID=57664564

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610629674.7A Pending CN106295340A (zh) 2016-08-03 2016-08-03 一种程序文件恢复***及方法

Country Status (1)

Country Link
CN (1) CN106295340A (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109214185A (zh) * 2018-08-06 2019-01-15 郑州云海信息技术有限公司 一种Windows***进程检测方法及装置
CN109426702A (zh) * 2017-08-31 2019-03-05 武汉斗鱼网络科技有限公司 iOS平台文件读取保护方法、存储介质、电子设备及***
CN110532774A (zh) * 2019-07-24 2019-12-03 阿里巴巴集团控股有限公司 钩子检查方法、装置、服务器及可读存储介质
CN111028135A (zh) * 2019-12-10 2020-04-17 国网重庆市电力公司电力科学研究院 一种图像文件修复方法
CN111913742A (zh) * 2018-07-03 2020-11-10 武汉斗鱼网络科技有限公司 一种程序处理方法及相关设备
CN115827323A (zh) * 2022-12-01 2023-03-21 摩尔线程智能科技(北京)有限责任公司 恢复文件的方法、装置和计算机可读介质
CN117093472A (zh) * 2023-07-12 2023-11-21 荣耀终端有限公司 一种内存操作的处理方法、设备及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104700000A (zh) * 2015-03-05 2015-06-10 中国科学技术大学苏州研究院 一种基于pe文件的隐蔽信道的检测和限制方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104700000A (zh) * 2015-03-05 2015-06-10 中国科学技术大学苏州研究院 一种基于pe文件的隐蔽信道的检测和限制方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李文: "《中国优秀硕士学位论文全文数据库 信息科技辑》", 15 June 2013 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109426702A (zh) * 2017-08-31 2019-03-05 武汉斗鱼网络科技有限公司 iOS平台文件读取保护方法、存储介质、电子设备及***
CN111913742A (zh) * 2018-07-03 2020-11-10 武汉斗鱼网络科技有限公司 一种程序处理方法及相关设备
CN109214185A (zh) * 2018-08-06 2019-01-15 郑州云海信息技术有限公司 一种Windows***进程检测方法及装置
CN110532774A (zh) * 2019-07-24 2019-12-03 阿里巴巴集团控股有限公司 钩子检查方法、装置、服务器及可读存储介质
CN111028135A (zh) * 2019-12-10 2020-04-17 国网重庆市电力公司电力科学研究院 一种图像文件修复方法
CN111028135B (zh) * 2019-12-10 2023-06-02 国网重庆市电力公司电力科学研究院 一种图像文件修复方法
CN115827323A (zh) * 2022-12-01 2023-03-21 摩尔线程智能科技(北京)有限责任公司 恢复文件的方法、装置和计算机可读介质
CN115827323B (zh) * 2022-12-01 2024-02-02 摩尔线程智能科技(北京)有限责任公司 恢复文件的方法、装置和计算机可读介质
CN117093472A (zh) * 2023-07-12 2023-11-21 荣耀终端有限公司 一种内存操作的处理方法、设备及存储介质

Similar Documents

Publication Publication Date Title
CN106295340A (zh) 一种程序文件恢复***及方法
CN101937372B (zh) 异常处理的方法及装置
US9244679B1 (en) Systems and methods for automatically identifying changes in deliverable files
CN103092996B (zh) 单据数据获取装置和单据数据获取方法
CN103886229A (zh) 一种提取pe文件特征的方法及装置
CN108388496A (zh) 一种***日志的收集方法
CN101620660A (zh) 一种Windows操作***下钩子的防御方法
CN107665306A (zh) 一种检测非法文件注入的方法、装置、客户端及服务器
CN104766016B (zh) 一种基于***调用短序列的软件漏洞检测方法
CN105446757B (zh) 一种数据包的处理方法和设备
CN104679561A (zh) 一种动态链接库文件加载的方法及***
CN101251799B (zh) 管理实现的方法和装置
CN103294951A (zh) 一种基于文档型漏洞的恶意代码样本提取方法及***
CN103246594A (zh) 一种基于Linux内核的用户态网卡自动探测方法
CN105825172A (zh) 一种基于移动终端的多指纹匹配方法及***
CN103617039B (zh) 一种访问用户空间文件***的方法及装置
CN108108617A (zh) 基于静态指令流跟踪的导入表修复方法及装置
CN106201595A (zh) 一种应用程序的清理控制方法及装置
CN105793864A (zh) 检测恶意多媒体文件的***和方法
CN104866388A (zh) 数据处理方法及装置
CN104035776B (zh) 一种操作***的启动方法
US20120011083A1 (en) Product-Centric Automatic Software Identification in z/OS Systems
CN104572876A (zh) 一种软件对应配置文件的读取方法和装置
CN105243134B (zh) 一种处理被劫持浏览器的方法及设备
CN103019663A (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
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20170104