代码保护(二) 通过Java反编译工具测试加密效果

xiaoxiao2021-02-28  24

上节介绍了当下几款代码保护工具,本节介绍反编译工具对加密的软件进行破解。

反编译工具:jd-gui

打包工具:exe4j

脱壳工具:PEID

调试工具:OllyICE

一、未加密状态

测试过程:

1.运行发布的clock.exe文件

2.在C盘AppData\Local\Temp\目录下搜索jar并拷贝到新建文件夹

3.在jd-gui中打开可将.class字节文件反编译得出程序代码

二、测试常用加密软件

1、使用DRMsoft-EXEResPacker加密

(1)进行加密:

(2)得到加密文件并运行

(3)无法正常打开C盘AppData\Local\Temp\目录,双击后闪退

 

(4)使用PEID查壳工具检测加密外壳   ,未发现程序外壳,提示程序编码语言为:Borland Delphi 6.0 - 7.0 [Overlay],(检索得知:可能是作者自己写的壳。PE头在加密情况下,提取工具提取不到)。

(5)使用OllyDBG载入程序寻找关键(算法)的调用,修改有关汇编语言达到软件破解的目的

(6)但最终失败没能找到明显的函数调用,以及在搜索中也没能找到常用的字符串使用。最终未能破解成功。本软件可以用来进行加密。

2、使用EXECryptor加密

(1)加密程序Clock.exe

 

(2)设定参数执行文件后出现如下错误,检索未果

(3)查阅帮助文档得EXECryptor未提供支持Java的API

(5)此软件不能对java项目加密

3、使用VProject加密

(1)发现该软件不支持Java文件加密

三、总结及解决方案

         由于Java语言面向对象和编译成中间字节码执行的特点,导致在使用Javac编译成class文件后,在编译的过程,不像C/C++或C#那样在编译时能进行加密或混淆,而是直接对其进行符号化、标记化的编译处理,其中间码与机器码之间存在特定的对应关系就可以根据class文件借助反编译工具反向解析出原来的Java文件。所以上述的非针对Java语言的加密软件在加密Java编码的exe文件后出现了不少错误。

    之前在寻找加密软件的过程中,未能意识到Java 的语言的特性,导致收集来的不少软件都不能完成对Java可执行文件的加密。进一步了解,得知常用的Java反盗版解决方案有如下几种:

1.绑定序列号

在序列号生成器中使用私钥将用户返回的信息(硬盘序列号,用户名)进行加密得到相应的注册序列号;在序列号合法性判断函数中使用私钥将用户输入的注册序列号解密;在运行时,对TEMP文件夹下做相应的保护处理,由此达到防止盗版的目的。

2.代码混淆

代码混淆是把代码打乱,并掺入一些随机或特殊的字符,让代码的可读性大大降低,进而使得破解的时长变长,其本质是打乱代码的顺序、将各类符号(如类名、方法名、属性名)进行随机或乱命名,使其无意义,降低代码的可阅读性、可理解性。

常用的Java代码混淆器有:ProGuard、RetroGuard、JavaGuard等;以ProGuard为例,在eclipse中可以整合ant,在编译生成.class文件时进行混淆。

3. ExcelsiorJET

    ExcelsiorJET是一款通过提前(Ahead-Of-Time(AOT))编译技术增强的Java虚拟机,也含有当前大多数J2SE VM环境中的使用JIT编译技术。AOT编译器能够将Java代码转化为传统的Windows可执行文件(EXE、DLL和NT服务)或Linux二进制文件(可执行文件或共享库),他们如同由C++、FORTRAN或COBOL编写的程序一样,可以直接在硬件上运行。   

java代码保护的解决方案:

①.在编译生成.class文件时,使用混淆器增加反编译破解难度;

②.在生成jar转化exe文件时使用Excelsior JET转换为二进制exe文件

③.对exe可执行文件进行加壳加密保护。

 

转载请注明原文地址: https://www.6miu.com/read-2150364.html

最新回复(0)