APP下载

基于加密狗保护软件应用的探讨

2016-05-19徐涛

电脑知识与技术 2016年7期
关键词:知识产权

徐涛

摘 要:软件的开发需要大量的人力与智力的投入,提高软件的安全性才能保障开发者的合法权益。对软件进行加密是保护软件知识产权的最好方法,在软件内部实现加密技术容易被进行跟踪、分析、反编译等手段破解。基于USB接口硬件加密狗以其通用性好、成本低等优势在小型软件中得到广泛应用。软件破解技术也随着加密技术提高而进步,任何加密技术都不能确保绝对的安全。通过实例分析加密狗应用中的就安全问题,探讨结合其他加密技术增强软件的防破解能力。

关键词:加密狗;反编译; 加壳;软件安全;知识产权

中图分类号:TP309.7 文献标识码:A 文章编号:1009-3044(2016)07-0081-03

The Application of Software Protection Based on Dongle

XU Tao

(Open University of Kunshan, Kunshan 215300, China)

Abstract:Software developments need a large number of manpower and intellectual investments. Only when the security of software is improved, will legitimate rights and interests of software developers be protected.The encryption software is the best way to protect the intellectual property of software; however internal encryption technology is easy to be decrypted by tracking, analysis and decompilation. With the advantages of high versatility and low cost, USB interface hardware dongles are applicated in small softwares widely.With the developments of encryptions, the decryptions are improved as well, so that all encryptions cannot ensure absolute safety.By instance analysis the safety issues of dongles, with other encryptions, to enhance the anti-crack abilities of softwares.

Key words:dongle; decompile; software packing; software security; intellectual property right

1 概述

软件产品凝聚着开发者的智慧与劳动,由于软件产品的特殊性,软件的非法拷贝会给开发者带来经济上巨大的损失。 虽然国家在法律层面对软件的知识产权进行了保护,但软件自身通过技术手段加密保护同样重要。加密后的软件要花费破解者大量的精力进行破解和修改,增加了破解的门槛与成本。

常见的软件保护方法有:硬件加密和软件加密两种。硬件加密是通过采用加密狗、盘保护等硬件实现加密,也有通过对CPU 序列号、硬盘序列号、MAC 等硬件的唯一性绑定来实现对软件的保护。常见的软件保护有:软件水印、注册验证、软件加壳保护等。

没有任何加密是绝对安全的,解密技术也随着加密技术一同进步,传统的软件保护方法遇到越来越多的挑战,需要提出更新的软件保护方式应对。

2 加密狗介绍

加密狗是利用储存在硬件中的信息对软件进行加密保护, 软件通过特殊指令对USB接口的加密狗读取和校验,由于加密狗硬件不易复制,保护性能较好。

任何加密技术都不是绝对安全的,加密狗同样也有存在补破解的问题,常见破解加密狗的方法有三种:1) 通过硬件方式克隆或者复制出同样的加密狗;2)利用Debug工具调试跟踪软件,将加密、判断等代码跳过或修改;3)编写程序仿真软件狗,拦截软件和加密狗之间的通信。

3 加密狗安全漏洞实例

大多数硬件加密狗公司会提供加密狗的一些DLL的连接或简单的API调用,通过反编译、改写程序,容易便加密狗也失去作用。以某款jsp网站为例,软件中的登录页为Login.jsp,很容易看出其中的loginAction.action为登录动作。按照常规的登录流程可知,在登录时必定要进行加密狗的访问从而判断是否合法登录,JSP可对加密狗访问判断模块封闭成class,当找到其LoginAction.class类文件对其进行反编译得到源文件如下:

public class LoginAction //LoginAction登录动作类

{public LoginAction()

String dog = DogUtil.validate( );//读取加密狗验证状态信息方法

if(!"1".equals(dog)) //判断加密狗的读取状态

{request.setAttribute("errorMessage", "xxxx");//未验证成功则返回错误提示信息

return "login"; }//错误返回重新登录

...... } //其他代码略

很显然DogUtil类是负责进行加密狗验证, 成员函数validate( )用以返回验证加密狗的状态结果。找到DogUtil.class类文件,同样通过反编译得到其类的源代码如下:

public class DogUtil //加密狗读取类

{ public DogUtil() //构造函数

{ }

public static String validate()

{ IET99 ET99;

int tokenCount[];

byte pid[];

ET99 = new CET99();

String chPid = "";

tokenCount = new int[1];

pid = new byte[8];

char charPid[] = new char[8];

try

{ chPid = ReadConfigXML.read(); //读取加密狗信息

EncryptUtils des = new EncryptUtils("xxxx");

chPid = des.decrypt(chPid); }

catch(Exception e1) //异常处理

{ return "0"; }

for(int i = 0; i < 8; i++)

{ charPid[i] = chPid.charAt(i);

pid[i] = (byte)charPid[i]; }

ET99.FindToken(pid, tokenCount); //判断加密狗信息

System.out.println(tokenCount[0]);

if(tokenCount[0] != 0) //根据判断确定返回加密狗状态信息

return "1";

else return "0";

.... }//部分代码略

public static void main(String args[ ])

{ validate( ); } }

只要有java编程经验的人都可以很明显的看出:以上if…else…语句是实现对读加密狗取后信息的判断,如果吻合则return "1",反之则return "0".通过validate()成员函数通过改写则可以绕开验证,最简单的改写方式如:

public static String validate()

{ return "1"; }

将以上源文件进行编译得到的类去覆盖原始文件,这样无论软件是否带狗运行都永远认为是通过了合法验证。

也有开发者用利如:java obfuscator混编器来把程序进行打乱,给破解者设置障碍,但这种方法容易被软件重新整理,所以也不安全。

4 软件“加壳”技术

“加壳”技术是对可执行程序进行压缩来实现对程序的保护,它利用特殊算法对可执行程序中的代码和资源进行压缩。压缩后的文件可独立运行,解压在内存中完成,解压过程隐蔽。加壳后的程序可直接运行, 只有经过脱壳才可以看到程序的源代码。外壳程序被执行后会将原程序解压到内存中,解压后的程序与被加壳前功能完全相同,解压后外壳程会把控制权交还给脱壳后的程序。由于加壳后程序以加密的形式存在,在执行时才在内存中还原,可有效防止对程序进行静态反编译和篡改。

加壳后的程序执行时由Loader加载器将程序载入内存进行解密、还原等操作,再将控制权交还给原的程序。许多加密狗会附带的加壳工具,可以利用加密狗实现对程序的加密,更加便捷和高效的实现软件的加密。

5 软件“脱壳”技术

加壳后的软件同样会有被逆向脱壳的问题,常见的有手工脱壳或利用专门的脱壳软件实现自动脱壳两种,脱壳后的程序容易被破解。

应用常采用以下方法提高被脱壳的难度:

5.1 多次加壳技术

采用不同的加壳软件对程序文件进行多次加壳,从而达到增强软件的保护强度。

5.2 伪装加壳技术

通过改变程序的特征属性来伪装程序,干扰软件破解者。使破解者无法正确分辨软件的外壳类型。

5.3 添加“花指令”

加壳时也常在原程序的代码段里中加入无用的数据,反汇编时这些数据迷惑反编译引擎,提高破解的难度。

6 结束语

“加壳”会增加程序对内存占用和CPU的处理量,在速度与安全之间选择毕竟安全更为重要。只使用加密狗而未对程序进行回加壳容易通过对程序的逆向工程破解加密狗读写模块,将加密代码内置在程序中进行加壳容易被通过脱壳后破解。采用加密狗与加壳技术结合将程序加壳密码外置到加密狗中的方式无疑给程序的破解增加了难度,使程序得到更多一层安全保护。

软件破解与防破解是软件安全领域的一个永恒话题,软件破解技术也将伴随着保护技术的发展而进步。没有哪技术能保证软件的绝对安全,只能通过对软件的破解增加难度与复杂度来提高软件的相对安全性。

参考文献:

[1] 李文.基于壳技术的软件保护研究[D].成都: 电子科技大学,2012.

[2] 林汉玲.密码技术在 Java 类文件保护技术中的新应用[J].现代电子技术,2013,36 (3) :102-103.

[3] 吴德会,王志毅.基于混沌保密的 USB 软件加密狗及其反解密研究[J].微计算机息,2005(8):12-13.

[4] 杨波.现代密码学[M].北京:清华大学出版社,2003:15-16.

[5] 许永和.8051单片机USB接口程序设计[M].北京:北京航空航天大学出版社,2004.

[6] 杨新柱.可执行文件格式分析与应用[D].北京:北京邮电大学,2009:30-34.

[7] 蒋阳,黄志葵.智能型并口用软件加密狗的设计[J].电子技术,2002(6):23-24

[8] 兰勇,龚捷,刘亦歆.软件保护机制研究[J].电脑知识与技术,2014,10(5):1083-1084.

猜你喜欢

知识产权
《种子法》修改 聚焦种业知识产权保护
《电子知识产权》征稿启事
Mesenchymal stromal cells as potential immunomodulatory players in severe acute respiratory distress syndrome induced by SARS-CoV-2 infection
高校知识产权贯标的研究
关于知识产权请求权内容构建的思考
重庆五大举措打造知识产权强市
关于知识产权损害赔偿的几点思考
以知识产权为切入点创新德育工作
“加强知识产权保护运用加快知识产权强国建设”-2016年福建省知识产权宣传周成功开幕
知识产权为“互联网+”护航