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. 回家过年,CSDN博客暂时歇业

    CSDN博客之星2013评选活动,结束了,感谢大家的投票. 我个人只是主动拉了300票左右,2400+的票都是大家主动投的,非常感谢啊! (*^__^*) 年关将至,最近也在忙自己的事情,不再更新了. ...

  2. Spring Boot中的缓存支持(一)注解配置与EhCache使用

    Spring Boot中的缓存支持(一)注解配置与EhCache使用 随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决 ...

  3. SVN—怎样安装SVNclient软件

            一.怎样安装TortoiseSVN-1.7.12.24070-win32-svn-1.7.9版本号的SVNclient软件:        a.下载TortoiseSVN-1.7.12 ...

  4. JavaScript系列--JavaScript数组高阶函数reduce()方法详解及奇淫技巧

    一.前言 reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值. reduce() 可以作为一个高阶函数,用于函数的 compose. reduce()方 ...

  5. 【AtCoder ABC 075 B】Minesweeper

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟,把#换成1 八个方向加一下就好. [代码] #include <bits/stdc++.h> using name ...

  6. 爬虫抓取页面数据原理(php爬虫框架有很多 )

    爬虫抓取页面数据原理(php爬虫框架有很多 ) 一.总结 1.php爬虫框架有很多,包括很多傻瓜式的软件 2.照以前写过java爬虫的例子来看,真的非常简单,就是一个获取网页数据的类或者方法(这里的话 ...

  7. 特殊类型数据:IP地址字段(IPv4)

    人们经常使用varchar(15)来存储ip地址,然而,它们实际上是32位无符号整数,不是字符串. MySQL提供INET_ATON()和INET_NTOA()函数将ip地址在整数和四段表示形式之间进 ...

  8. jquery-8 jquery如何处理css样式

    jquery-8  jquery如何处理css样式 一.总结 一句话总结: 1.如何获取网页的三个高? 1)可视区域的高$(window).height(); 2)文档总高度$(document).h ...

  9. cat /proc/cpuinfo 引发的思考--CPU 物理封装-物理核心-逻辑核心-超线程之间关系

    CPU的物理封装,一个物理封装使用独立的一个CPU物理插槽,共享电源和风扇: CPU物理核心:在一个物理封装中封装了多个独立CPU核心,每一个CPU核心都有自己独立的完整硬件单元. CPU逻辑核心:一 ...

  10. http500:服务器内部错误案例详解(服务器代码语法错误或者逻辑错误)

    http500:服务器内部错误案例详解(服务器代码语法错误或者逻辑错误) 一.总结 服务器内部错误可能是服务器中代码运行的时候的语法错误或者逻辑错误 二.http500:服务器内部错误案例详解 只是一 ...