CN104199778A - 测试软件注册算法错误的方法 - Google Patents
测试软件注册算法错误的方法 Download PDFInfo
- Publication number
- CN104199778A CN104199778A CN201410470191.8A CN201410470191A CN104199778A CN 104199778 A CN104199778 A CN 104199778A CN 201410470191 A CN201410470191 A CN 201410470191A CN 104199778 A CN104199778 A CN 104199778A
- Authority
- CN
- China
- Prior art keywords
- registration
- software
- algorithm
- code
- registration algorithm
- 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
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明涉及一种能够检测出软件注册算法bug的测试软件注册算法错误的方法。包括:在软件的注册算法中增加校验代码段;编译所述增加的校验代码段的软件,生成可执行代码,得到二进制文件;利用得到的二进制文件对所述增加的校验代码段进行逆向分析,获得分析结果。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种测试软件注册算法错误的方法。
背景技术
目前,很多软件系统开发投入商用后都会有一个注册的机制保护自己的软件,从而实现开发的软件系统只有自己的客户可以使用,目前软件保护机制各不相同,强度也各有差别,而怎样提高自己软件注册机制的保护强度,是一个广泛存在的问题。
由于在软件开发过程几乎都采用高级程序语言进行代码编写,所以软件开发者只能通过更好的改进注册算法的设计来提高软件的保护强度。但是再好的算法在使用的过程中也可能会有错误(bug)存在,而bug的存在会导致算法整个失效,由于这种bug并不是错误,所以在编译的时候并不会报错,甚至不会对软件的真正应用造成任何的影响,目前并没有一种行之有效的检测这种bug的方法。
有鉴于上述的缺陷,本设计人,积极加以研究创新,以期创设一种测试软件注册算法错误的方法,使其更具有产业上的利用价值。
发明内容
为解决上述技术问题,本发明的目的是提供一种能够检测出软件注册算法bug的测试软件注册算法错误的方法。
本发明的测试软件注册算法错误的方法,包括:
在软件的注册算法中增加校验代码段;
编译所述增加的校验代码段的软件,生成可执行代码,得到二进制文件;
利用得到的二进制文件对所述增加的校验代码段进行逆向分析,获得分析结果。
进一步的,所述注册算法具体为高级加密标准AES算法;在在软件的注 册算法中增加校验代码段之前,还包括:用户采用用户名+注册码的方式进行注册,在注册的过程,随机生成16字节作为用户名,利用所述16字节的用户名作为数据输入,选定另外16字节数据作为AES加密算法的key,利用AES加密算法的key将数据输入经过一次AES算法,得到新的16字节的数据输出,若是得到的数据输出的16字节与注册码相同,则注册检测通过;若是得到的数据输出的16字节与注册码不同,则注册检测未通过。
进一步的,所述增加的校验代码段具体为AfxMessageBox("注册信息验证")。
进一步的,所述逆向分析包括静态反汇编和动态调试。
进一步的,所述利用得到的二进制文件对所述增加的校验代码段进行逆向分析,获得分析结果,具体包括:
将所述生成的二进制文件导入到第三方软件中,第三方软件分析编译器生成的可执行代码,获得汇编代码,其中,所述汇编代码是去除编译器的各项优化处理之后生成的真实的可执行代码;
根据所述获得的汇编代码,确定所述软件的注册信息是否正确。
借由上述方案,本发明至少具有以下优点:
本发明通过逆向分析的技术分析软件注册相关算法的实现及注册信息判定,使用这种技术可以直接面向编译器生成的最终代码进行分析,去除了编译器的优化功能对代码的影响,另外直接面向汇编语言分析,可以非常精确的分析算法的真实实现过程以及最终的判定注册信息是否正确的过程。这种分析方法比面向高级程序语言分析具有精确性的优点,可以看到代码究竟被编译器编译成了什么样子,用来给客户或者程序开发者参考。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。
附图说明
图1是本发明测试软件注册算法错误的方法的方法流程图;
图2为本发明实施例的注册函数的C++代码截图;
图3为本发明实施例中将可执行文件导入第三方软件后弹出的界面的示意图;
图4为本发明实施例中搜索到的校验代码段“注册信息验证”的示意图;
图5为本发明实施例中校验代码段“注册信息验证”在函数中的位置的示意图;
图6为本发明实施例中zhuce函数经过编译之后的汇编代码整体结构图;
图7为本发明实施例中zhuce函数编译后的汇编代码分支跳转指令放大图。
具体实施方式
下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。
参见图1所示,一种测试软件注册算法错误的方法,包括
步骤101:在软件的注册算法中增加校验代码段,这些校验代码段可以方便后续逆向分析中更加容易的找到指定的代码。
在发明实施例中的一个具体例子中,该注册算法具体为AES算法,这个算法是一种对称算法,使用16字节的秘钥,可以使得通过穷举法的方式破解这个算法成为一件不可能的事情。
注册的过程采用用户名+注册码的方式,随机生成16字节作为用户名,利用该16字节的用户名作为数据输入,选定另外16字节数据作为高级加密标准AES加密算法的key,利用AES加密算法的key将数据输入经过一次AES算法,得到16字节的数据输出,若是得到的数据输出的16字节与注册码相同,则注册检测通过,可以进行注册,若是得到的数据输出的16字节与注册码不同,则注册检测未通过,不能注册。
在实施例中,在判断数据输出的16字节与注册码是否相同的代码前增加一行校验代码段,例如:AfxMessageBox("注册信息验证");加上这一行校验代码段的目的是在逆向分析时更加快速的定位到该位置,从而生成的汇编代码。验证代码如图2所示,增加的校验代码段也在图中标出来。
步骤102:重新编译上述增加了校验代码段的软件,生成新的可执行代码,得到二进制文件,利用得到的二进制文件进行逆向分析。逆向分析过程有两种方法,第一种是静态反汇编,第二种是动态调试,这两种途径可以配合使用。
步骤103、利用静态反汇编的方式进行逆向分析增加的校验代码段。
例如:可以利用第三方软件IDA PRO进行静态汇编,通过这款第三方软件对指定代码进行可执行文件的反汇编,可以从整体上把握指定校验代码段的结构。
具体过程如下:首先将步骤102中生成的二进制文件导入到第三方软件中,第三方软件分析编译器生成的可执行代码,获得汇编代码,该汇编代码是去除编译器的各项优化处理之后生成的真实的可执行代码。
例如:生成的二进制文件名为cryptoee.exe,在第三方软件中点击新建,之后选择这个文件,会出现图3所示的界面。点击OK按钮之后能看到第三方软件对这个可执行的二进制文件进行解析,将文件中的机器码逆向成汇编语言。
但是由于这个文件内容很多,基本上包含所有软件系统的所有内容,代码量很大,所以如何快速定位到注册部分就显得不是很容易。本发明利用步骤101中增加的那句校验代码段,在第三方软件菜单中选择search->text,在弹出框中输入之前的那句校验代码段里的汉字“注册信息验证”,点击‘OK’按钮,会跳转到这六个汉字的存储空间里,如图4所示,就是查到的“注册信息验证”校验代码段存放的位置。在图中可以看到在这个校验代码段的右侧有一个注释:“DATA XREF:sub_403F10+6B↑o”,这段注释表示在sub_403F10这个子函数中调用了这个校验代码段,跳转到这个子函数看一下,如图5所示,能找到AfxMessageBox("注册信息验证");对应的汇编代码
这段代码上面有一个
call sub_4017B0
的调用就是注册算法中的crypted(user,datakey);对应的汇编代码。而sub_403F10函数就是本发明的注册函数zhuce(BYTE*user,BYTE*outcmp)。
接下来在汇编语言的基础上进一步的分析增加的代码段,此时面对的是经编译器编译之后的汇编语言,在此基础上不仅可以看到整个注册算法的汇编语言的实现,也可以非常精确的知道判定注册信息正确与否的方式是怎么实现的。现在在第三方软件中切换到图形视图,然后要分析的函数sub_403F10整体结构如图6所示,从图6可以看出这个函数最后有两条分支,这两条分支一条是注册信息验证正确,另一条分支便是注册信息验证失败。图7放大了分支跳转的条件,可以看到一条跳转指令jz short loc_403FAA,这里是jz指令,如果修改一下这条指令,改为jnz,那么就会变成注册信息错误的时候可以注册成功,而注册信息错误的时候反而会提示注册失败。
到目前可以看出,虽然示例选用了加密强度很高的AES算法,也使用了16字节秘钥,看起来似乎软件保护做的很周密,但是实际上却是很容易被攻克的。
本发明通过静态反汇编的方式,逆向分析增加的校验代码段,由于直接对编译器生成的可执行文件进行分析,可以去除编译器的优化处理功能对代码的影响,更加直接的得到最终的可执行文件。另外,由于分析的是汇编语言,可以非常精准的分析注册算法的实现及判定的实现。
本发明的有益效果在于:本发明通过逆向分析的技术分析软件注册相关算法的实现及注册信息判定,使用这种技术可以直接面向编译器生成的最终代码进行分析,去除了编译器的优化功能对代码的影响,另外直接面向汇编语言分析,可以非常精确的分析算法的真实实现过程以及最终的判定注册信息是否正确的过程。这种分析方法比面向高级程序语言分析具有精确性的优点,可以看到代码究竟被编译器编译成了什么样子,用来给客户或者程序开发者参考。
以上所述仅是本发明的优选实施方式,并不用于限制本发明,应当指出, 对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变型,这些改进和变型也应视为本发明的保护范围。
Claims (5)
1.一种测试软件注册算法错误的方法,其特征在于,包括:
在软件的注册算法中增加校验代码段;
编译所述增加的校验代码段的软件,生成可执行代码,得到二进制文件;
利用得到的二进制文件对所述增加的校验代码段进行逆向分析,获得分析结果。
2.根据权利要求1的测试软件注册算法错误的方法,其特征在于,所述注册算法具体为高级加密标准AES算法;在在软件的注册算法中增加校验代码段之前,还包括:用户采用用户名+注册码的方式进行注册,在注册的过程,随机生成16字节作为用户名,利用所述16字节的用户名作为数据输入,选定另外16字节数据作为AES加密算法的key,利用AES加密算法的key将数据输入经过一次AES算法,得到新的16字节的数据输出,若是得到的数据输出的16字节与注册码相同,则注册检测通过;若是得到的数据输出的16字节与注册码不同,则注册检测未通过。
3.根据权利要求1的测试软件注册算法错误的方法,其特征在于,所述增加的校验代码段具体为AfxMessageBox("注册信息验证")。
4.根据权利要求1的测试软件注册算法错误的方法,其特征在于,所述逆向分析包括静态反汇编和动态调试。
5.根据权利要求1的测试软件注册算法错误的方法,其特征在于,所述利用得到的二进制文件对所述增加的校验代码段进行逆向分析,获得分析结果,具体包括:
将所述生成的二进制文件导入到第三方软件中,第三方软件分析编译器生成的可执行代码,获得汇编代码,其中,所述汇编代码是去除编译器的各项优化处理之后生成的真实的可执行代码;
根据所述获得的汇编代码,确定所述软件的注册信息是否正确。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410470191.8A CN104199778B (zh) | 2014-09-15 | 2014-09-15 | 测试软件注册算法错误的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410470191.8A CN104199778B (zh) | 2014-09-15 | 2014-09-15 | 测试软件注册算法错误的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104199778A true CN104199778A (zh) | 2014-12-10 |
CN104199778B CN104199778B (zh) | 2017-09-15 |
Family
ID=52085074
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410470191.8A Active CN104199778B (zh) | 2014-09-15 | 2014-09-15 | 测试软件注册算法错误的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104199778B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110135152A (zh) * | 2019-03-28 | 2019-08-16 | 江苏通付盾信息安全技术有限公司 | 应用程序攻击检测方法及装置 |
CN111143877A (zh) * | 2019-12-20 | 2020-05-12 | 国能日新科技股份有限公司 | 加密基于Python的风光预测算法文件的方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101119588B (zh) * | 2007-07-25 | 2010-08-18 | 宇龙计算机通信科技(深圳)有限公司 | 注册码的密钥生成方法及系统以及软件的注册方法及系统 |
CN103116489A (zh) * | 2012-11-15 | 2013-05-22 | 深圳中兴网信科技有限公司 | 注册码获取装置和注册码获取方法 |
-
2014
- 2014-09-15 CN CN201410470191.8A patent/CN104199778B/zh active Active
Non-Patent Citations (1)
Title |
---|
吕杨等: "逆向工程之软件破解与注册机编写", 《计算机安全》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110135152A (zh) * | 2019-03-28 | 2019-08-16 | 江苏通付盾信息安全技术有限公司 | 应用程序攻击检测方法及装置 |
CN111143877A (zh) * | 2019-12-20 | 2020-05-12 | 国能日新科技股份有限公司 | 加密基于Python的风光预测算法文件的方法及装置 |
CN111143877B (zh) * | 2019-12-20 | 2023-01-03 | 国能日新科技股份有限公司 | 加密基于Python的风光预测算法文件的方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104199778B (zh) | 2017-09-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Wang et al. | Neufuzz: Efficient fuzzing with deep neural network | |
Hooda et al. | Software test process, testing types and techniques | |
JP6686529B2 (ja) | 脆弱性分析のための自律型推論システム | |
US9389849B2 (en) | Test case pattern matching | |
US8635602B2 (en) | Verification of information-flow downgraders | |
US20080126867A1 (en) | Method and system for selective regression testing | |
TWI541669B (zh) | Detection systems and methods for static detection applications, and computer program products | |
US10049031B2 (en) | Correlation of violating change sets in regression testing of computer software | |
CN108182359B (zh) | 一种测试可信环境下api安全性的方法、装置及存储介质 | |
Morgado et al. | Automated pattern-based testing of mobile applications | |
US20110320876A1 (en) | Systems and methods for processing source code during debugging operations | |
Wetzlmaier et al. | Hybrid monkey testing: enhancing automated GUI tests with random test generation | |
Chen et al. | Automatic Mining of Security-Sensitive Functions from Source Code. | |
US10331513B2 (en) | Zero overhead code coverage analysis | |
Sun et al. | Dexbert: Effective, task-agnostic and fine-grained representation learning of android bytecode | |
CN104199778A (zh) | 测试软件注册算法错误的方法 | |
KR20140088963A (ko) | 애플리케이션 개발을 위한 런타임 에러 테스팅 시스템 및 방법 | |
US20220284109A1 (en) | Backdoor inspection apparatus, backdoor inspection method, and non-transitory computer readable medium | |
CN104239055A (zh) | 检测软件代码复杂度的方法 | |
US8365281B2 (en) | Determining whether method of computer program is a validator | |
US20220292201A1 (en) | Backdoor inspection apparatus, backdoor inspection method, and non-transitory computer readable medium | |
WO2014117668A1 (zh) | 一种在安全环境中生成代码提高软件保护强度的方法 | |
Yan et al. | SPIDER: Speeding up Side-Channel Vulnerability Detection via Test Suite Reduction | |
Calvagna et al. | Combinatorial validation testing of Java Card byte code verifiers | |
CN106897622A (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 |