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. 2、qq物联环境搭建

    1.使用easyopenjtag.openjtag来烧写uboot 2.体验uboot 插讲<网络设置_ping问题解决_远程登录ssh_文件互传ftp> 192.168.1.183 wi ...

  2. 源码笔记---MBProgressHUD

    前言 作为初学者,想要快速提高自己的水平,阅读一些优秀的第三方源代码是一个非常好的途径.通过看别人的代码,可以学习不一样的编程思路,了解一些没有接触过的类和方法. MBProgressHUD是一个非常 ...

  3. RISC-V评估系列

    RISC-V评估系列 RISC-V工具链搭建 SiFive虚拟机分享--提取码:xe1c SiFive SDK函数结构 底层驱动 driver框架 操作系统FreeRTOS移植 FGPA评估 benc ...

  4. lv resize

    # lvreduce -L -400G /dev/vg_atalinux001/lv_home # resize2fs   /dev/vg_atalinux001/lv_home resize2fs ...

  5. VC ADO “ParameterDirectionEnum”:“enum” 类型等 重定义问题 解决方案

    原因分析: 1.在头文件中: #import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace ...

  6. Latex表格制作记录

    Latex表格制作记录 主要功能 合并表格的行列 长表格的使用 makecell例程借鉴 效果图 参考代码 \documentclass{ctexart} \usepackage{indentfirs ...

  7. fastjson排序 Map多层嵌套转换自动排序问题终极解决方案

    阅读更多 最近项目中用到了fastjson(1.2.15)需要将前端多层嵌套json转换为map,由于map的无序性,想了很多办法,最终找到使用 Map m= JSONArray.parseObjec ...

  8. 自定义控件三部曲之动画篇(一)——alpha、scale、translate、rotate、set的xml属性及用法

    前言:这几天做客户回访,感触很大,用户只要是留反馈信息,总是一种恨铁不成钢的心态,想用你的app,却是因为你的技术问题,让他们不得不放弃,而你一个回访电话却让他们尽释前嫌,当最后把手机号留给他们以便随 ...

  9. 体验ArcGIS9.2的历史库功能

    转自原文 体验ArcGIS9.2的历史库功能 ESRI公司于2006年11月9日全球同步发布了历史上重要的软件版本ArcGIS9.2,在该版本中,主要新增了以下四大功能(ESRI田昌莲): 第一大新功 ...

  10. 枚举系统磁盘驱动器(使用GetLogicalDriveStrings API函数,system("pause"); 很实用,还用到wcslen等函数)

    代码如下: #include "stdafx.h" #include <vector> #include <string> #include <Win ...