Jar 包(Java Archive)是对 Java 程序的打包,它可能包含源码,也可能没有。

对于有包含源码的 Jar 包,在 Eclipse 工程里设定好 source code 路径后能直接查看到远吗,对于理解代码、调试的帮助很大。而如果 Jar 包没有打包源码,实际上也可以通过反编译的方法得到源码。道理很简单,Java 规范中,生成的.class 文件所包含的信息完全能逆向的重构出源码。

当然,一些代码为了防止自身 Jar 包被人反编译,会做代码混淆掩人耳目。其中最简单的一种方法就是是通过修改类名、变量名、方法名等方法让反编译的源码难于阅读理解。不过这个方法在混淆的时候需要特别注意:不能混淆对外提供接口的类。如果混淆了提供给外部的 API 接口的名字,整个工程就无法被正常使用了。

本文要举例的是对阿里云开放云存储 Java SDK 的反编译。由于 SDK 需要暴露接口给其他开发人员调用,本身确实没有做混淆(不理解阿里云为何没有将它开源出来),故可以做简单的反编译来查看源码。

Jadclipse 的安装使用

Jadclipse 插件的反编译功能源于 Java 反编译工具 Jad。但用裸的 Jad 来命令行执行不太友好,于是就有了 Jadclipse。

1.下载 Jad 反编译工具

下载好 Jad 工具,解压后放在合适的路径下。
Jad 下载链接

2.安装插件

按照 Eclipse 版本下载匹配的 Jadclipse 插件:下载链接。(这个插件的最近修改是 2007 年,只要不是使用的老掉牙的 Eclipse,都可以下载最新的插件版本 jadclipse3.3)。

解压后,将对应版本的.jar 包放入 Eclipse 的插件目录(eclipse/plugins)下。

3.配置 Jadclipse

插件中有两个一定要配置好的选项:

  • Jad 执行文件的路径
  • .class 文件打开时的关联工具

以下配置路径的方式可能 Windows 跟 Mac 版本的 Eclipse 各不相同,不过都比较简单,可以自行 Google。

3.1 Jad 执行文件路径

在 Eclipse 中,依次打开 Preference -> Java -> JadClipse,修改Path to decompiler的值,定位到 Jad 的执行文件路径。

3.2 .class 关联工具

由于 Eclipse 默认.class 文件打开使用的是 Class File Viewer,如果.class 没有关联的源文件,则无法查看源代码。需要将.class without source类型的文件的关联编辑器首选设置为 JadClipse Class File Viewer。

打开方式如下: Windows—> Perference—>General->Editors->File Associations

4.测试

配置好后,可能需要重启 Eclipse(或许是插件本身不够 Robust,博主在没有重启的情况下尝试打开没有附带源代码的.class 文件时失败了,重启后一切 ok)。

下载阿里云开放云存储 SDK:下载链接,解压后,将相应的 Jar 包加入到工程中。

点击其中的某个.class 文件,即可显示出它的源代码。文件的头部会有 Jad 的相关信息:

1
2
3
4
5
6
/*jadclipse*/// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) radix(10) lradix(10)
// Source File Name: HmacSHA1Signature.java …

PS

后来 Google 相关内容时,找到了 JadClipse 在 Eclipse Market 的版本:请戳,或许对大家有用=)

 原文地址:http://biaobiaoqi.me/blog/2013/10/21/decompiliation-jar/
 版权声明:自由转载-非商用-非衍生-保持署名| Creative Commons BY-NC-ND 3.0

反编译Jar包的更多相关文章

  1. jad 反编译 jar包

    1.利用winrar解压缩jar包 或者CMD>jar -xvf test.jar -C classes 2.下载jad,利用jad反编译jar包 CMD>[jad_home]/jad.e ...

  2. IDEA—使用插件反编译jar包

    关注微信公众号:CodingTechWork,一起学习进步. 引言   在产品上线后,如果遇到问题阻塞,我们第一步要做的就是去查看日志,但是代码不是一个人写的,说不定就会遇到没有日志的,遇到这种情况, ...

  3. 如何修改可运行Jar包,如何反编译Jar包

    将可运行Jar包,反编译成项目,修改代码,再次编译,打包. 需要工具:jd-gui.myeclipse 具体步骤: 1.使用jd-gui打开原始的Jar包,选择File-->Save All  ...

  4. JD-GUI反编译jar包为Java源代码

    程序员难免要借鉴其他java工程的代码.可有时只能拿到.calss文件,jar包或者war包,这个时候要求程序员能熟练的将这些类型文件反编译为Java代码并形成可编译运行的项目.本文介绍的反编译工具是 ...

  5. idea反编译jar包,jclasslib Bytecode Viewer

    下载 jclasslib Bytecode Viewer https://plugins.jetbrains.com/plugin/9248-jclasslib-bytecode-viewer/ver ...

  6. IDEA反编译jar包源码

    1.maven 项目查看jar源码 如何在idea中查看jar包源码   文章目录 准备jar包 idea打开文件夹 最后一步 准备jar包 例如,我准备看resin的jar,在桌面准备了一份 ide ...

  7. Eclipse Oxygen(4.7.0)安装插件Eclipse Class Decompiler反编译JAR文件

    引用自官方内容 Eclipse Class Decompiler是一款Eclipse插件,整合了多种反编译器,和Eclipse Class Viewer无缝集成,能够很方便的使用插件查看类库源码,进行 ...

  8. MatLab 2014a编译jar包时mcc无法使用的问题

    http://blog.csdn.net/heroafei/article/details/43273373 MatLab 2014a编译jar包时mcc无法使用的问题 2015-01-29 16:5 ...

  9. protobuf 在win10系统如何编译jar包

    最近在搞java服务器项目,前段要求用protobuf进行数据传输,以前没搞过,查了很多资料,走了一些弯路! 先把一些需要下载的链接放上来: protobuf下载地址:https://github.c ...

随机推荐

  1. (转) 25个必须记住的SSH命令

    转自:http://www.cnblogs.com/weafer/archive/2011/06/10/2077852.html OpenSSH是SSH连接工具的免费版本.telnet,rlogin和 ...

  2. 【 2017 Multi-University Training Contest - Team 9 && hdu 6162】Ch’s gift

    [链接]h在这里写链接 [题意] 给你一棵树,每个节点上都有一个权值. 然后给你m个询问,每个询问(x,y,a,b); 表示询问x->y这条路径上权值在[a,b]范围内的节点的权值和. [题解] ...

  3. 解题报告 之 HDU5305 Friends

    解题报告 之 HDU5305 Friends Description There are  people and  pairs of friends. For every pair of friend ...

  4. 2014年武汉的IT行情好像不太好

    本周,加入武汉一起好工作一周了,也就是说本次找工作彻底结束了. 总的来说,求职行情不太行,双方都匹配的工作好少呀. 1. 武汉财富基石,过了一面,第二面没有去.   钱太少,4K多,跳楼价. 2.武汉 ...

  5. 【t057】任务分配

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 现有n个任务,要交给A和B完成.每个任务给A或给B完成,所需的时间分别为ai和bi.问他们完成所有的任 ...

  6. USB 3.0规范中译本 第5章 机械结构

    本文为CoryXie原创译文,转载及有任何问题请联系cory.xie#gmail.com. 本章定义USB 3.0连接器和线缆组件的form, fit 和 function.包括以下方面: • 连接器 ...

  7. 《转》couldn't connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:145

    couldn't connect to server 127.0.0.1:27017 at src/mongo/shell/mongo.js:145,有须要的朋友能够參考下. 应为昨天安装的时候没及时 ...

  8. [Angular] Subscribing to router events

    In our root component, one thing we can do is subscribe to Router events, and do something related t ...

  9. Android图文具体解释属性动画

    Android中的动画分为视图动画(View Animation).属性动画(Property Animation)以及Drawable动画.从Android 3.0(API Level 11)開始. ...

  10. SqlBulkCopy 帮助类

    using System;using System.Collections.Generic;using System.Configuration;using System.Data;using Sys ...