精华内容
参与话题
问答
  • 2020年支持java8的Java反编译工具汇总

    万次阅读 多人点赞 2018-06-29 10:58:53
    luyten是一款操作简单、功能实用的java反编译工具,软件支持*.JAR、*.zip、*.class等类型文件的反编译操作,还原度非常高,支持更多功能设置,如显式导入、类型、合成组件等等,用户可根据不同的需求选择合适的显示...

         大多商业软件,会对程序进行加密、加壳等安全措施以防范软件被破解,从而使得反编译越来越难。反编译是一个对目标可执行程序进行逆向分析,从而得到源代码的过程。尤其是像Java这样的运行在虚拟机上的编程语言,更容易进行反编译得到源代码。

          我们知道,在代码支撑方面,JDK 1.7引入了字符串Switch、泛型接口改进等新功能,1.8增加了lambda表达式、方法传递、多重注解等新特性,这使得反编译工具的编写难度加大。今天我们盘点一下目前仍然可用的、相对功能很强大的Java反编译工具(Eclipse插件不做评价),比较老的反编译工具很难支持Java8及其以上版本。

     

    1、Java 反编译器 JD-GUI

    JD-GUI 是一个用 C++ 开发的 Java 反编译工具,由 Pavel Kouznetsov开发,支持Windows、Linux和苹果Mac Os三个平台。而且提供了Eclipse平台下的插件JD-Eclipse、IntelliJ的插件JD-IntelliJ。JD-GUI不需要安装,直接点击运行,可以反编译jar,class文件。

    最新版本1.4.0,官方网站:http://jd.benow.ca/

     

    2、Java 反编译器 procyon-decompiler及其window下独立UI工具luyten

         Procyon-Decompiler支持JDK1.8类的反编译,在很多方面做得非常不错,如反编译匿名类、内部类、Java8 Lambda等等。Procyon-Decompiler支持JDK1.8类的反编译,在很多方面做得非常不错:字符串的Switch、枚举声明方面、注解方面、匿名类、内部类、Java8新接口规范、Java8 Lambda表达式、Java8 方法传递等。

          luytenProcyon的GUI,是一款操作简单、功能实用的java反编译工具,软件支持*.JAR、*.zip、*.class等类型文件的反编译操作,还原度非常高,支持更多功能设置,如显式导入、类型、合成组件等等,用户可根据不同的需求选择合适的显示项目,结果更明了。

         luyten的最新版本0.53,官方网址:https://github.com/deathmarine/Luyten,只需要下载luyten即可,不用下载ProcyonProcyon最新版本0.5.30。

     

    3、Android反编译gui工具Jadx

         jadx是一款Android反编译gui工具,它支持apk、dex、jar、class、zip、aar等文件。jadx操作方便,反编译后的代码可读性高,同时还拥有较完善的gui界面,除去混淆部分的代码,jadx已经非常接近源代码了。

       Jadx最高版本v0.7.1,官方地址https://github.com/skylot/jadx/

       三个工具中JD-GUI打开jar文件反编译速度飞快、luyten次之、Jadx最慢(有时候需要等好一会,喝杯咖啡先。三者都会遇到反编译不出来的情况,建议配合使用。

    展开全文
  • java 反编译

    2011-08-23 22:27:25
    java 反编译java 反编译java 反编译java 反编译java 反编译java 反编译java 反编译java 反编译java 反编译
  • java反编译

    2018-03-04 22:03:52
    java反编译java反编译java反编译java反编译java反编译java反编译java反编译java反编译java反编译
  • Java反编译

    2018-12-14 15:41:43
    Java反编译工具,解析class字节码文件。 解析class字节码文件
  • java反编译工具jad 1.5.8g(可以反编译jdk1.5,1.6)

    千次下载 热门讨论 2008-05-27 21:39:48
    java反编译工具jad 1.5.8g支持 jdk1.5,jdk1.6。 说明很多 记住一个万能的命令基本就够用了。 jad -sjava -r -8 -o **\*.class <br>--------------- This is README file for Jad - the fast Java ...
  • Java 反编译

    千次阅读 2019-12-26 17:09:19
    今天网上找到个jar,顺便反编译看看它的源码。 通过eclipse在线安装插件的方式 安装下图的顺序安装eclipse的插件 通过下载插件zip文件,自行拷贝方式 插件解压缩下来将将features和plugins分别拷贝到eclipse的...

    今天网上找到个jar,顺便反编译看看它的源码。

    通过eclipse在线安装插件的方式

    安装下图的顺序安装eclipse的插件

    通过下载插件zip文件,自行拷贝方式

    插件解压缩下来将将features和plugins分别拷贝到eclipse的features和plugins文件夹中

    site.xml的内容

    <?xml version="1.0" encoding="UTF-8"?>
    <site>
       <description url="http://jd.benow.ca/jd-eclipse/update/">
          Eclipse Update Site for Java Decompiler Plug-in
       </description>
       <feature url="features/jd.ide.eclipse.feature_1.0.0.jar" id="jd.ide.eclipse.feature" version="1.0.0">
          <category name="JD-Eclipse"/>
       </feature>
       <category-def name="JD-Eclipse" label="Java Decompiler Eclipse Plug-in"/>
    </site>
    

    jd链接

    展开全文
  • jd-jui,java反编译工具,用来反编译java的.class文件jd-jui,java反编译工具,用来反编译java的.class文件jd-jui,java反编译工具,用来反编译java的.class文件
  • JAVA 反编译

    2012-03-13 22:58:21
    常用的保护技术 由于 Java 字节码的抽象级别较高,因此它们较容易被反编译。本节介绍了几种 常用的方法,用于保护 Java 字节码不被反编译。通常,这些方法不能够绝对防 止程序被反编译,而是加大反编译的难度...
    常用的保护技术 由于 Java 字节码的抽象级别较高,因此它们较容易被反编译。本节介绍了几种 常用的方法,用于保护 Java 字节码不被反编译。通常,这些方法不能够绝对防
     止程序被反编译,而是加大反编译的难度而已,因为这些方法都有自己的使用环 境和弱点。 隔离 Java 程序 最简单的方法就是让用户不能够访问到 Java Class 程序,这种方法是最根本的方法,具体实现有多种方式。例如,开 发人员可以将关键的 JavaClass
     放在服务器端,客户端通过访问服务器的相关 接口来获得服务, 而不是直接访问 Class 文件。 这样黑客就没有办法反编译 Class 文件。目前,通过接口提供服务的标准和协议也越来越多,例如 HTTP、Web Service、RPC 等。但是有很多应用都不适合这种保护方式,例如对于单机运行 的程序就无法隔离 Java 程序。这种保护方式见图 1 所示。 图 1 隔离 Java 程序示意图
     对 Class 文件进行加密 为了防止 Class 文件被直接反编 译,许多开发人员将一些关键的 Class 文件进行加密,例如对注册码、序列号管 理相关的类等。在使用这些被加密的类之前,程序首先需要对这些类进行解密, 而后再将这些类装载到 JVM 当中。这些类的解密可以由硬件完成,也可以使用软 件完成。 在实现时,开发人员往往通过自定义 ClassLoader 类来完成加密 类的装载(注意由于安全性的原因,Applet 不能够支持自定义的 ClassLoader)。 自定义的 ClassLoader 首先找到加密的类,而后进行解密,最后将解密后的类装
     载到 JVM 当中。在这种保护方式中,自定义的 ClassLoader 是非常关键的类。由 于它本身不是被加密的,因此它可能成为黑客最先攻击的目标。如果相关的解密 密钥和算法被攻克,那么被加密的类也很容易被解密。这种保护方式示意图见图 2。 图2 对 Class 文件进行加密示意图 转换成本地代码 将程序转换成本地代 码也是一种防止反编译的有效方法。因为本地代码往往难以被反编译。开发人员 可以选择将整个应用程序转换成本地代码,也可以选择关键模块转换。如果仅仅 转换关键部分模块,Java 程序在使用这些模块时,需要使用
     JNI 技术进行调用。 当然,在使用这种技术保护Java 程序的同时,也牺牲了 Java 的跨平台特性。对 于不同的平台,我们需要维护不同版本的本地代码,这将加重软件支持和维护的 工作。不过对于一些关键的模块,有时这种方案往往是必要的。 为了保证
     这些本地代码不被修改和替代,通常需要对这些代码进行数字签名。在使用这些 本地代码之前,往往需要对这些本地代码进行认证,确保这些代码没有被黑客更 改。如果签名检查通过,则调用相关 JNI 方法。这种保护方式示意图见图 3。 代码混淆 图 3 转换成本地代码示意图 代码混淆是对 Class 文件进行重新组织和处 理,使得处理后的代码与处理前代码完成相同的功能(语义)。但是混淆后的代码 很难被反编译,即反编译后得出的代码是非常难懂、晦涩的,因此反编译人员很 难得出程序的真正语义。从理论上来说,黑客如果有足够的时间,被混淆的代码
     仍然可能被破解, 甚至目前有些人正在研制反混淆的工具。 但是从实际情况来看, 由于混淆技术的多元化发展,混淆理论的成熟,经过混淆的 Java 代码还是能够 很好地防止反编译。下面我们会详细介绍混淆技术,因为混淆是一种保护 Java 程序的重要技术。图
     4 是代码混淆的示意图。 图 4 代码混淆示意图 几种技术的总结 以上几种技术都有不同的应用环境, 各自都有自己的弱点, 表 1 是相关特点的比较。 混淆技术介绍 表 1 不同保护技术比较表 到目前为止,对于 Java 程序的保护,混淆技术还是最基本的保护方法。Java 混
     淆工具也非常多,包括商业的、免费的、开放源代码的。Sun 公司也提供了自己 的混淆工具。它们大多都是对 Class 文件进行混淆处理,也有少量工具首先对源 代码进行处理,然后再对 Class 进行处理,这样加大了混淆处理的力度。目前, 商业上比较成功的混淆工具包括 JProof 公司的 1stBarrier 系列、Eastridge 公 司的 JShrink 和 4thpass.com 的 SourceGuard 等。 主要的混淆技术按照混淆目标 可以进行如下分类,它们分别为符号混淆(Lexical Obfuscation)、数据混淆
     (Data Obfuscation)、控制混淆(Control Obfuscation)、预防性混淆(Prevent Transformation)。 符号混淆 在 Class 中存在许多与程序执行本身无 关的信息,例如方法名称、变量名称,这些符号的名称往往带有一定的含义。例 如某个方法名为 getKeyLength(),那么这个方法很可能就是用来返回 Key 的长 度。符号混淆就是将这些信息打乱,把这些信息变成无任何意义的表示,例如将 所有的变量从 vairant_001 开始编号; 对于所有的方法从 method_001
     开始编号。 这将对反编译带来一定的困难。对于私有函数、局部变量,通常可以改变它们的 符号,而不影响程序的运行。但是对于一些接口名称、公有函数、成员变量,如 果有其它外部模块需要引用这些符号,我们往往需要保留这些名称,否则外部模 块找不到这些名称的方法和变量。因此,多数的混淆工具对于符号混淆,都提供 了丰富的选项,让用户选择是否、如何进行符号混淆。 数据混淆 图 5 改变数据访问 数据混淆是对程序使用的数据进行混淆。混淆的方法也有多种,主要可以分为改 变数据存储及编码(Store and Encode Transform)、改变数据访问(Access
     Transform)。 改变数据存储和编码可以打乱程序使用的数据存储方式。例 如将一个有 10 个成员的数组,拆开为 10 个变量,并且打乱这些变量的名字;将 一个两维数组转化为一个一维数组等。对于一些复杂的数据结构,我们将打乱它 的数据结构,例如用多个类代替一个复杂的类等。 另外一种方式是改变数 据访问。 例如访问数组的下标时, 我们可以进行一定的计算, 5 就是一个例子。 图 在实践混淆处理中,这两种方法通常是综合使用的,在打乱数据存储的同时,也 打乱数据访问的方式。经过对数据混淆,程序的语义变得复杂了,这样增大了反
     编译的难度。 控制混淆 控制混淆就是对程序的控制流进行混淆,使得 程序的控制流更加难以反编译, 通常控制流的改变需要增加一些额外的计算和控 制流,因此在性能上会给程序带来一定的负面影响。有时,需要在程序的性能和 混淆程度之间进行权衡。控制混淆的技术最为复杂,技巧也最多。这些技术可以 分为如下几类: 增加混淆控制 通过增加额外的、复杂的控制流,可以将程 序原来的语义隐藏起来。例如,对于按次序执行的两个语句 A、B,我们可以增 加一个控制条件,以决定 B 的执行。通过这种方式加大反汇编的难度。但是所有 的干扰控制都不应该影响
     B 的执行。图 6 就给出三种方式,为这个例子增加混淆 控制。 图 6 增加混淆控制的三种方式 控制流重组 重组控制流也是重要的混淆方 法。例如,程序调用一个方法,在混淆后,可以将该方法代码嵌入到调用程序当 中。反过来,程序中的一段代码也可以转变为一个函数调用。另外,对于一个循 环的控制流,为可以拆分多个循环的控制流,或者将循环转化成一个递归过程。 这种方法最为复杂,研究的人员也非常多。 预防性混淆 这种混淆通常 是针对一些专用的反编译器而设计的,一般来说,这些技术利用反编译器的弱点 或者 Bug 来设计混淆方案。例如,有些反编译器对于
     Return 后面的指令不进行 反编译,而有些混淆方案恰恰将代码放在 Return 语句后面。这种混淆的有效性 对于不同反编译器的作用也不太相同的。一个好的混淆工具,通常会综合使用这 些混淆技术。 案例分析 在实践当中,保护一个大型 Java 程序经常需 要综合使用这些方法,而不是单一使用某一种方法。这是因为每种方法都有其弱 点和应用环境。综合使用这些方法使得 Java 程序的保护更加有效。另外,我们
     经常还需要使用其它的相关安全技术, 例如安全认证、 数字签名、 等。 PKI 本 文给出的例子是一个 Java应用程序,它是一个 SCJP(Sun Certificate Java Programmer)的模拟考试软件。该应用程序带有大量的模拟题目,所有的题目都
     被加密后存储在文件中。由于它所带的题库是该软件的核心部分,所以关于题库 的存取和访问就成为非常核心的类。一旦这些相关的类被反编译,则所有的题库 将被破解。现在,我们来考虑如何保护这些题库及相关的类。 在这个例子 中,我们考虑使用综合保护技术,其中包括本地代码和混淆技术。因为该软件主 要发布在 Windows 上,因此转换成本地代码后,仅仅需要维护一个版本的本地代 码。另外,混淆对 Java 程序也是非常有效的,适用于这种独立发布的应用系统。
     在具体的方案中,我们将程序分为两个部分,一个是由本地代码编写的题库访问 的模块,另外一个是由 Java 开发的其它模块。这样可以更高程度地保护题目管 理模块不被反编译。对于 Java 开发的模块,我们仍然要使用混淆技术。该方案 的示意图参见图
     7。 图 7 SCJP 保护技术方案图 对于题目管理模块,由于程序主要在 Windows 下使 用,所以使用 C++开发题库访问模块,并且提供了一定的访问接口。为了保护题 库访问的接口,我们还增加了一个初始化接口,用于每次使用题库访问接口之前 的初始化工作。它的接口主要分为两类: 1. 初始化接口 在使用题库 模块之前,我们必须先调用初始化接口。在调用该接口时,客户端需要提供一个 随机数作为参数。题库管理模块和客户端通过这个随机数,按一定的算法同时生 成相同的 SessionKey,用于加密以后输入和输出的所有数据。通过这种方式,
     只有授权(有效)的客户端才能够连接正确的连接,生成正确的 SessionKey,用 于访问题库信息。非法的客户很难生成正确的 SessionKey,因此无法获得题库 的信息。 如果需要建立更高的保密级别, 也可以采用双向认证技术。 2. 数 据访问接口 认证完成之后,客户端就可以正常的访问题库数据。但是,输 入和输出的数据都是由 SessionKey 所加密的数据。因此,只有正确的题库管理 模块才能够使用题库管理模块。 8 时序图表示了题库管理模块和其它部分的交 图 互过程。 图 8 题库管理模块和其它部分的交互过程图
    
    展开全文

空空如也

1 2 3 4 5 ... 20
收藏数 12,060
精华内容 4,824
关键字:

java反编译

java 订阅