关键词:
Java代码保护
混淆
加壳
智能SD卡
摘要:
随着互联网的快速发展,尤其是近几年来移动互联网的爆发式发展,可穿戴式设备的不断兴起,人们的生活越来越离不开智能工具。智能手机、智能眼镜、智能手表、智能腰带即将走进现代人的生活中,计算机软件在这场互联网革命中扮演着核心武器的作用。
然而,计算机软件的版权保护,近些年来受到了很大的挑战。尤其是以Java为代表的编程语言为主编写的程序,在不经过任何处理的情况下,极易遭到反编译攻击。究其原因,Java并不像C/C++语言那样,最终程序会被编译为二进制的可执行文件。Java为了取得跨平台特性,源程序编译后会被保存为Class文件。Java虚拟机运行时解释执行类文件。带来的后果就是,Class文件保存了很多的冗余信息,使得反编译Java程序可以得到质量很高的代码。
对于这类比较棘手的问题,已经有很多企业和个人参与进来,共同研究解决之道。比如,开源的Proguard就是一剂解决这一问题的良药,它通过对Java程序编译生成的Class文件进行混淆处理,实现了效果显著的Java代码保护。其他的保护方式也都有很多人在参与研究,比如本地化技术、远程接口访问技术、数字水印技术、加壳保护技术等等。这些保护策略各有优缺点,都只能提供一定程度的Java代码保护。
针对这种情况,本文在深入研究Java语言基础、Class文件结构、类加载运行机制、各种代码混淆算法、本地化技术的基础上,对布局混淆和加壳技术提出了较大改进。目前,在布局混淆中,主要使用a、b、c这种顺序生成的字符来替代原有的变量名称,这种替换对攻击者的迷惑性还不够强烈,我的改进是可以使用大抵上等长的相似字符的组合来替换变量名称,提高了混淆的强度。同时,目前加壳技术主要有两方面的缺点,一是密钥保存不够安全、加解密效率不够高,二是解密的明文容易暴露。针对这两个问题,本文提出了相应的解决方案。本文中使用智能SD卡来保存密钥,完成加解密,不仅解决了密钥保存不够安全的问题,同时利用硬件实现加解密也提高了加解密的效率。通过结合本地化编程技术,并直接向上层返回Class对象而非明文字节流的方式,也解决了明文字节流容易暴露的威胁。
总体上来说,本文为Java代码保护提出了两种有效的改进,是一次非常有意义的探索和实践。