CN103824020B - 自动实现软件程序免杀的方法 - Google Patents

自动实现软件程序免杀的方法 Download PDF

Info

Publication number
CN103824020B
CN103824020B CN201410058478.XA CN201410058478A CN103824020B CN 103824020 B CN103824020 B CN 103824020B CN 201410058478 A CN201410058478 A CN 201410058478A CN 103824020 B CN103824020 B CN 103824020B
Authority
CN
China
Prior art keywords
library
api
software program
default
kill
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.)
Active
Application number
CN201410058478.XA
Other languages
English (en)
Other versions
CN103824020A (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 Senseshield Technology Co Ltd
Original Assignee
Beijing Senseshield 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 Senseshield Technology Co Ltd filed Critical Beijing Senseshield Technology Co Ltd
Priority to CN201410058478.XA priority Critical patent/CN103824020B/zh
Publication of CN103824020A publication Critical patent/CN103824020A/zh
Application granted granted Critical
Publication of CN103824020B publication Critical patent/CN103824020B/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

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Virology (AREA)
  • Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明公开了一种自动实现软件程序免杀的方法,其特征在于,创建若干自定义的静态库以代替操作系统提供的默认库来实现对所述软件程序中用到的API的调用,所述自定义的静态库以显式加载方式实现所述调用。本发明的自动实现软件程序免杀的方法,能够简化操作并降低程序被杀毒软件误报的概率。

Description

自动实现软件程序免杀的方法
技术领域
本发明涉及信息安全领域,尤其涉及一种自动实现软件程序免杀的方法。
背景技术
杀毒软件,也称反病毒软件或防毒软件,是用于消除电脑病毒、特洛伊木马和恶意软件等计算机威胁的一类软件。杀毒软件通过集成监控识别、病毒扫描和清除和自动升级等功能,有的杀毒软件还带有数据恢复等功能,是计算机防御系统(包含杀毒软件,防火墙,特洛伊木马和其他恶意软件的查杀程序,入侵预防系统等)的重要组成部分。
程序是否存在病毒,杀毒软件所判断的对象一般是代码和行为,前者,是扫描程序的代码,判断其中是否存在与已知病毒类似的代码模式,后者,是分析程序访问的系统对象及其访问方式,如文件、注册表键,是否匹配敏感的、可能危害系统的行为。由于目前病毒普遍使用代码变形等技术,直接分析代码越来越困难,后者逐渐成为杀毒软件主要使用的判断方式。
而对行为的分析,主要是通过程序调用了哪些操作系统API,及其调用参数来实现的,在目前主流操作系统中,系统API一般是以动态库形式提供,一般情况下,编译后的程序使用“导入表”或类似结构来动态链接到系统动态库。“导入表”有很多项,每项对应于一个系统API,其中记录了该API的函数名、所在的动态库文件名等信息,是杀毒软件分析的数据来源,在此基础上,可以分析出代码中何处调用了哪些API,传递了什么参数,若调用的次序和参数与恶意行为在某种程度上匹配,则会报毒。
现有技术中,目前,杀毒软件误报的现象越来越常见。所谓误报,即应用程序本来并不含有病毒或恶意代码,但是杀毒软件却认为它是恶意程序,因此,杀毒软件阻止其运行、对文件隔离或删除等操作。其原因在于,程序是否有病毒或恶意代码,并不存在完全准确的判断规则。杀毒软件往往只能通过代码的内容、访问数据的内容和模式,根据一些预先定义好的规则来进行模糊匹配。这种判断方式必然有一定的误判概率,即程序匹配了部分规则,但不一定匹配的就是病毒。杀毒软件的这种误报行为给软件提供商带来了很大的困扰。对此,目前也有一些解决方案,包括:
1)针对具体问题与杀毒软件厂商联系,提供特征码让杀毒软件对具体的二进制程序不报毒;
2)对程序加数字签名,使杀毒软件能够验证其发行者身份。
这些方法的缺点一是治标不治本,一次只能解决一个最终二进制文件,二是要等待杀毒软件更新,并且用户配合升级才能生效,解决问题的时间较长,沟通环节较多。
发明内容
本发明提供一种自动实现软件程序免杀的方法,能够简化操作并降低程序被杀毒软件误报的概率。
为了解决上述技术问题,本发明提供了一种自动实现软件程序免杀的方法,创建若干自定义的静态库以代替操作系统提供的默认库来实现对所述软件程序中用到的API的调用,所述自定义的静态库以显式加载方式实现所述调用。
作为优选,具体包括以下步骤:
S1:列举出所述操作系统的链接器的所有所述默认库;
S2:从操作系统软件开发工具包获取所述默认库的库文件,自动枚举出其中所有的API名,将从各个所述默认库中枚举出的API名分别保存为第一字符串数组;
S3:对所述第一字符串数组中每个API名进行自定义变换处理,处理后的结果保存为第二字符串数组;
S4:对应每个所述默认库,自动创建一个源代码文件,在文件中定义该默认库中所有的API,该源代码文件的函数体为一段固定的显式加载代码;
S5:编译所述源代码文件,生成自定义的静态库;
S6:返回步骤S2,直到生成所有所述默认库对应的自定义的静态库;
S7:修改要免杀的软件程序的工程配置,包括禁用所有所述默认库以及添加所有对应的自定义的静态库。
作为优选,步骤S3还包括对所述默认库的库文件的原库文件名进行自定义变换处理,并将处理后的结果保存为一字符串。
作为优选,步骤S4中所述函数体具体包括以下项:
A1:对所述字符串中的经变换的库文件名进行逆变换后得到的原库文件名;
A2:以所述原库文件名为参数调用系统功能而加载的动态库;
A3:对所述第二字符串数组中的对应项进行逆变换后得到的API名称;
A4:以进行逆变换后得到的API名称为参数调用系统功能而获取的API地址;
A5:跳转指令,其跳转目标是所述API地址。
作为优选,所述操作系统为Windows、Linux或者Unix。
与现有技术相比,本发明的自动实现软件程序免杀的方法的有益效果在于:由于不再有导入表等明文信息,杀毒软件难以得知程序调用了哪些API,也就无法分析程序的行为,因此,降低了误报的概率。同时,本发明的方法不需要修改程序的源代码,在源代码中,对系统API的调用,与其他普通函数没有区别,这是因为,无论“显式加载”还是“隐式加载”,都是在链接时由提供的系统库决定。通过本发明提供的方法,无需修改软件程序的源代码,即可达到降低被杀毒软件误杀的概率,提升安全性和使用的便捷性。
附图说明
图1为本发明的实施例的自动实现软件程序免杀的方法的流程示意图;
图2为应用本发明的实施例的自动实现软件程序免杀的方法处理前后的文件对照示意图。
具体实施方式
下面结合附图和具体实施例对本发明的实施例的自动实现软件程序免杀的方法作进一步详细描述,但不作为对本发明的限定。
图1为本发明的实施例的自动实现软件程序免杀的方法的流程示意图。本发明的实施例的自动实现软件程序免杀的方法,创建若干自定义的静态库以代替操作系统提供的默认库来实现对软件程序中用到的API的调用,自定义的静态库以显式加载方式实现调用。由于“显式加载”的函数没有“导出”(export)属性,链接后不会生成导入表项。
本发明得以自动实现软件程序免杀的原理就是在编译阶段,使用“显式加载”替代“导入表”(隐式加载)。编译器默认使用隐式加载,隐式加载是每当源代码中调用了一个系统API,就将调用的目标地址设定为“导入表”中的某项(多次调用同一个API,目标地址相同),而在程序运行时,操作系统会根据该导入表项中填写的动态库名和API名,在该项中填入API真正的地址,使程序可以正常工作。“显式加载”则是不使用“导入表”机制,每当源代码中调用了一个系统API,则直接生成一段代码,用来加载相应的动态库,搜索库中的API地址,然后调用。在这段代码中,动态库名和API名都不是以明文形式存在,而是经过自定义算法变换过的,只有在运行时才可能知道其内容。由于不再有导入表等明文信息,杀毒软件难以得知程序调用了哪些API,也就无法分析程序的行为,因此,降低了误报的概率。同时,本方法不需要修改程序的源代码,在源代码中,对系统API的调用,与其他普通函数没有区别,这是因为,无论“显式加载”还是“隐式加载”,都是在链接时由提供的系统库决定。链接器一般提供若干“默认库”,对源代码中调用的系统API,由于其函数没有定义在程序的自身代码中,链接时会找不到,找不到时,链接器就会从“默认库”中寻找,并找到带有“导出”(export)属性的函数,此时链接器就会添加导入表项,记录动态库名和API名。通过本发明提供的方法,无需修改软件程序的源代码,即可达到降低被杀毒软件误杀的概率,提升安全性和使用的便捷性。
作为一种改进,具体包括以下步骤:
S1:列举出操作系统的链接器的所有默认库。
不同操作系统、平台下的默认库会有不同,但都是确定可预知的,如Windows程序一般是kernel32、user32、advapi32这三个默认库。
S2:从操作系统软件开发工具包获取默认库的库文件,自动枚举出其中所有的API名,将从各个默认库中枚举出的API名分别保存为第一字符串数组。
其中,自动枚举API名,由于默认库使用“隐式加载”方式,因此,所有API名都会在库文件符号表中依次出现,所以可以解析库文件结构,自动枚举符号表。第一字符串数组格式如kernel_apis,user_apis,advapi_apis。
S3:对第一字符串数组中每个API名进行自定义变换处理,处理后的结果保存为第二字符串数组。
S4:对应每个默认库,自动创建一个源代码文件,在文件中定义该默认库中所有的API,该源代码文件的函数体为一段固定的显式加载代码。
S5:编译源代码文件,生成自定义的静态库。例如mykernel32.lib。
S6:返回步骤2,直到生成所有默认库对应的自定义的静态库。
S7:修改要免杀的程序的工程配置,禁用所有默认库,添加所有对应的自定义的静态库。
作为进一步的改进,步骤S3还包括对默认库的库文件的原库文件名进行自定义变换处理,并将处理后的结果保存为一字符串。其中,自定义变换处理方式为自定义,变换算法不限,达到不易推断出明文的目的即可。例如将字符串倒序:“abc”=>“cba”。第二字符串数组,如对kenel_apis处理为kenel_api2。库文件名也可以做类似处理(“user”=>”resu”),保存为“变换后库名称”字符串如kenel_lib_name2。
作为更进一步的改进,步骤S4中函数体具体包括以下项:
A1:对字符串中的库文件名进行逆变换(如字符串倒序)后得到的库名称;
A2:以原库文件名(例如进行逆变换后得到的库名称)为参数调用系统功能加载动态库(如loadlibrary);
A3:对第二字符串数组中的对应项进行逆变换后得到的API名称;
A4:以进行逆变换后得到的API名称为参数调用系统功能获取API地址(如GetProcAddress);
A5:跳转指令,其跳转目标是上述获取到的API地址。
作为另一种改进,操作系统为Windows、Linux或者Unix。本发明的自动实现软件程序免杀的方法不仅适用于Windows系统,还适用于Linux、Unix等操作系统。
图2为应用本发明的实施例的自动实现软件程序免杀的方法处理前后的文件对照示意图。为使本发明的目的、技术方案及优点更加清楚明白,以下参照图1和图2并举实施例,对本发明进一步详细说明(基于Windows操作系统下)。
某Windows软件运行时被杀毒软件误报,源代码工程使用VC编译,软件开发商采用本发明的实施例的自动实现软件程序免杀做软件程序的源码免杀。
首先确定系统默认库为kernel32.lib、user32lib和advapi32.lib;
从Windows Platform SDK中获取上述库文件,分别枚举出其中所有的API名,保存到第一字符串数组kernel32_apis、user32_apis,和advapi32_apis;
使用“字符串倒置”(strrev)算法对第一字符串数组和动态库名称做变换,得到第二字符串数组kernel32_api2、user32_api2、advapi32_api2和变换后库名称"lld.23lenrek"、"lld.23resu"、"lld.23ipavda";
分别创建源代码文件mykernel32.c、myuser32.c和myadvapi32.c,在各文件中定义对应库中所有的API,例如advapi32.c中RegOpenKey函数代码如下:
分别编译mykernel32.c、myuser32.c和myadvapi32.c,得到mykernel32.lib、myuser32.lib和myadvapi32.lib;
在工程配置中禁用所有默认库,并添加静态库mykernel32.lib、myuser32.lib和myadvapi32.lib。
本发明在其他操作系统如Linux、Unix上的实现方式与Windows下的实现方式基本相同,此处不再赘述。
本发明的自动实现软件程序免杀的方法的有益效果在于:由于不再有导入表等明文信息,杀毒软件难以得知程序调用了哪些API,也就无法分析程序的行为,因此,降低了误报的概率。同时,本发明的方法不需要修改程序的源代码,在源代码中,对系统API的调用,与其他普通函数没有区别,这是因为,无论“显式加载”还是“隐式加载”,都是在链接时由提供的系统库决定。通过本发明提供的方法,无需修改软件程序的源代码,即可达到降低被杀毒软件误杀的概率,提升安全性和使用的便捷性。
以上实施例仅为本发明的示例性实施例,不用于限制本发明,本发明的保护范围由权利要求书限定。本领域技术人员可以在本发明的实质和保护范围内,对本发明做出各种修改或等同替换,这种修改或等同替换也应视为落在本发明的保护范围内。

Claims (5)

1.一种自动实现软件程序免杀的方法,其特征在于,创建若干自定义的静态库以代替操作系统提供的默认库来实现对所述软件程序中用到的API的调用,所述自定义的静态库以显式加载方式实现所述调用。
2.根据权利要求1所述的自动实现软件程序免杀的方法,其特征在于,具体包括以下步骤:
S1:列举出所述操作系统的链接器的所有所述默认库;
S2:从操作系统软件开发工具包获取所述默认库的库文件,自动枚举出其中所有的API名,将从各个所述默认库中枚举出的API名分别保存为第一字符串数组;
S3:对所述第一字符串数组中每个API名进行自定义变换处理,处理后的结果保存为第二字符串数组;
S4:对应每个所述默认库,自动创建一个源代码文件,在文件中定义该默认库中所有的API,该源代码文件的函数体为一段固定的显式加载代码;
S5:编译所述源代码文件,生成自定义的静态库;
S6:返回步骤S2,直到生成所有所述默认库对应的自定义的静态库;
S7:修改要免杀的软件程序的工程配置,包括禁用所有所述默认库以及添加所有对应的自定义的静态库。
3.根据权利要求2所述的自动实现软件程序免杀的方法,其特征在于,步骤S3还包括对所述默认库的库文件的原库文件名进行自定义变换处理,并将处理后的结果保存为一字符串。
4.根据权利要求3所述的自动实现软件程序免杀的方法,其特征在于,步骤S4中所述函数体具体包括以下项:
A1:对所述字符串中的经变换的库文件名进行逆变换后得到的原库文件名;
A2:以所述原库文件名为参数调用系统功能而加载的动态库;
A3:对所述第二字符串数组中的对应项进行逆变换后得到的API名称;
A4:以进行逆变换后得到的API名称为参数调用系统功能而获取的API地址;
A5:跳转指令,其跳转目标是所述API地址。
5.根据权利要求1至4中任一项所述的自动实现软件程序免杀的方法,其特征在于,所述操作系统为Windows、Linux或者Unix。
CN201410058478.XA 2014-02-20 2014-02-20 自动实现软件程序免杀的方法 Active CN103824020B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410058478.XA CN103824020B (zh) 2014-02-20 2014-02-20 自动实现软件程序免杀的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410058478.XA CN103824020B (zh) 2014-02-20 2014-02-20 自动实现软件程序免杀的方法

Publications (2)

Publication Number Publication Date
CN103824020A CN103824020A (zh) 2014-05-28
CN103824020B true CN103824020B (zh) 2017-10-24

Family

ID=50759076

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410058478.XA Active CN103824020B (zh) 2014-02-20 2014-02-20 自动实现软件程序免杀的方法

Country Status (1)

Country Link
CN (1) CN103824020B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI611292B (zh) * 2016-03-08 2018-01-11 慧榮科技股份有限公司 函式管理方法與記憶體裝置
RU2697954C2 (ru) * 2018-02-06 2019-08-21 Акционерное общество "Лаборатория Касперского" Система и способ создания антивирусной записи

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103514395A (zh) * 2012-06-20 2014-01-15 阿里巴巴集团控股有限公司 插件权限控制方法及系统

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101187899B (zh) * 2006-11-17 2010-05-12 中兴通讯股份有限公司 嵌入式系统存储空间的优化方法
US8640245B2 (en) * 2010-12-24 2014-01-28 Kaspersky Lab, Zao Optimization of anti-malware processing by automated correction of detection rules
CN103123676B (zh) * 2013-03-11 2015-11-18 北京锐安科技有限公司 一种基于内存的免杀方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103514395A (zh) * 2012-06-20 2014-01-15 阿里巴巴集团控股有限公司 插件权限控制方法及系统

Also Published As

Publication number Publication date
CN103824020A (zh) 2014-05-28

Similar Documents

Publication Publication Date Title
US11562071B2 (en) Detecting malware via scanning for dynamically generated function pointers in memory
Koret et al. The antivirus hacker's handbook
US10055585B2 (en) Hardware and software execution profiling
US20170372068A1 (en) Method to identify known compilers functions, libraries and objects inside files and data items containing an executable code
Dahse et al. Code reuse attacks in php: Automated pop chain generation
US10242190B2 (en) System and method for detection of malicious code by iterative emulation of microcode
US7739100B1 (en) Emulation system, method and computer program product for malware detection by back-stepping in program code
JP2019067372A (ja) プロセスのアドレス空間内の悪意のあるコードの検出のためのシステムおよび方法
JP2016525760A (ja) 無関係なコードの特定
US10339305B2 (en) Sub-execution environment controller
US8458794B1 (en) System, method, and computer program product for determining whether a hook is associated with potentially unwanted activity
Lobo et al. Rbacs: Rootkit behavioral analysis and classification system
Mäki et al. Interface diversification in IoT operating systems
Case et al. HookTracer: A system for automated and accessible API hooks analysis
CN110717181B (zh) 基于新型程序依赖图的非控制数据攻击检测方法及装置
CN103824020B (zh) 自动实现软件程序免杀的方法
US9122872B1 (en) System and method for treatment of malware using antivirus driver
JP2013041598A (ja) プログラムコードの生成方法、プログラム開発システム、携帯用データキャリア、及びプログラム
JP2017134574A (ja) プログラム、情報処理装置、及び情報処理方法
EP3040895A1 (en) System and method for protecting a device against return-oriented programming attacks
CN111752570A (zh) 一种编译方法、装置、终端及计算机可读存储介质
Singh et al. Partial evaluation for java malware detection
Nguyen et al. Pushdown model generation of malware
Li et al. An improved method to unveil malware’s hidden behavior
Banescu et al. Dynamic Taint Analysis versus Obfuscated Self-Checking

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: 100872 room 1706, building 59, Zhongguancun street, Haidian District, Beijing

Applicant after: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

Address before: 100872 room 1706, building 59, Zhongguancun street, Haidian District, Beijing

Applicant before: BEIJING SHENSI SHUDUN TECHNOLOGY Co.,Ltd.

COR Change of bibliographic data
CB02 Change of applicant information

Address after: 100193 Beijing, Haidian District, East West Road, No. 10, East Hospital, building No. 5, floor 5, layer 510

Applicant after: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

Address before: 100872 room 1706, building 59, Zhongguancun street, Haidian District, Beijing

Applicant before: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

COR Change of bibliographic data
GR01 Patent grant
GR01 Patent grant
CP01 Change in the name or title of a patent holder

Address after: 100193 5th floor 510, No. 5 Building, East Yard, No. 10 Wangdong Road, Northwest Haidian District, Beijing

Patentee after: Beijing Shendun Technology Co.,Ltd.

Address before: 100193 5th floor 510, No. 5 Building, East Yard, No. 10 Wangdong Road, Northwest Haidian District, Beijing

Patentee before: BEIJING SENSESHIELD TECHNOLOGY Co.,Ltd.

CP01 Change in the name or title of a patent holder