jd-gui众所周知,业界公认的反编译必备工具。

笔者目前遇到一个java项目,社区版,想做一个本地化的版本,询问官方,官方说闭源,无奈之下只能反编译了。

面对那么多jar,jd-gui一个个去反编译保存,工作量的确很大。幸好在网上找到一个不错的工具

高能预警:jd-gui反编译的错误的,你敢不敢放到cfr来反编译试一试,保证有惊喜。

CFR - another java decompiler

特性:

   CFR will decompile modern Java features - Java 8 lambdas (pre and post Java beta 103 changes),

   Java 7 String switches etc, but is written entirely in Java 6.

支持主流java特性-java 8 lambdas表达式,java7字符串切换,最主要的他是用java6编写,这个就有点厉害了。

笔者还发现,他可以反编译类的注解,jd-gui无法反编译的 ,cfr却游刃有余。经过一番测试,毫不犹豫的把它收录到逆向兵器库。

使用方法比较简单,如下:

java -jar cfr_0_121.jar test.jar --outputdir c:/test

运行以上命令就可以把反编译后的test.jar代码保存到c:/test

笔者想要本地化的软件目录结构如下

└─proj
     ├─actions
     │ └─aaa.jar
     ├─drawing.jar
     ├─favs.jar
     ├─feeders.jar
     ├─imex.jar
     ├─impl.jar
     ├─language.jar
     ├─option.jar
     ├─resources.jar
     ├─runtime.jar
     ├─test.jar
     ├─treelist.jar
     └─view
          ├─editor.jar
          ├─progress.jar
          └─startup.jar

上面的jar如果用jd-gui手工反编译工作量很大,如果项目庞大,每次反编译将耽误好多时间。

于是笔者写了一个批处理decompile.bat,可以用于批量反编译,代码如下:

可以把需要单独需要反编译的jar拖拽到批处理文件上,默认情况下反编译当前目录及其子目录的所有jar

@echo off
color 17 if "%1" == "" (
for /f "delims=" %%i in ('dir /s /b /a-d /o-s *.jar') do (
echo 正在反编译 %%~ni...
title 正在反编译 %%i...
java -jar D:\develop\java逆向\cfr_0_122.jar "%%i" --caseinsensitivefs true --outputdir "%%~di%%~pi%%~ni"
echo ----%%i已经翻反编译---
)
goto :end
) else (
title 正在反编译 %1...
java -jar D:\develop\java逆向\cfr_0_122.jar %1 --caseinsensitivefs true --outputdir "%~d1%~p1%~n1"
echo 反编译完成.
goto :end
) echo 反编译完成.
@pause>nul :end
pause
exit

只要你把这个文件保存下来,放到项目根目录,运行以后,每个目录中都会根据jar文件名生成一个目录,里面是反编译后的Java代码。

CFR - another java decompiler批量反编译jar文件的更多相关文章

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

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

  2. JAVA 如何反编译JAR文件

    1 直接的jar文件可以用winrar解压,然后得到class文件,但是这里得到的class文件也是编译过的二进制文件,用传统的文本编辑器无法打开. 2 用XJad这个软件可以反编译Jar文件,直接找 ...

  3. Java Decompiler反编译Jar文件

    1.重新编译已经打包的Jar包,使用 Java Decompiler 打开需要重新编译的jar包,找到自己需要自己修改的Class文件 ,修改之后电子保存文件 ,保存的时候编译工具自动将class文件 ...

  4. Java 批量反编译class文件,并保持目录结构

    jad -o -r -d d:\src -s java C:\Users\spring\Desktop\egorder3.0\WEB-INF\classes\**\*.class -o - overw ...

  5. 批量反编译class文件

    首先得进入jad的路径中,一般都放在jdk的安装目录的bin中 进入到该目录中,否则无法使用jad命令. jad -o -r -d F:\src -s java F:\classes\**\*.cla ...

  6. 【原创】Java批量反编译利器(jd-gui)介绍

    Java反编译利器(jd-gui)介绍 当要做白盒测试或安全测试时,我们需要借助工具扫描被测代码,相信大家都遇到过没有源代码,而需要反编译的情形吧,也可能大家用过jad工具,我这里介绍下方便的工具jd ...

  7. 反编译Jar包

    Jar 包(Java Archive)是对 Java 程序的打包,它可能包含源码,也可能没有. 对于有包含源码的 Jar 包,在 Eclipse 工程里设定好 source code 路径后能直接查看 ...

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

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

  9. Java 7 中的Switch 谈 Java版本更新和反编译知识

    Java 7 中的Switch 谈 Java版本更新和反编译知识          学习编程,享受生活,大家好,我是追寻梦的飞飞.今天主要讲述的是Java7中的更新Switch实现内部原理和JAD反编 ...

随机推荐

  1. Hive基础之Hive体系架构&运行模式&Hive与关系型数据的区别

    Hive架构 1)用户接口: CLI(hive shell):命令行工具:启动方式:hive 或者 hive --service cli ThriftServer:通过Thrift对外提供服务,默认端 ...

  2. ECCV 2018 | 旷视科技提出统一感知解析网络UPerNet,优化场景理解

    全球计算机视觉三大顶会之一 ECCV 2018(European Conference on Computer Vision)即将于 9 月 8 -14 日在德国慕尼黑拉开帷幕.届时,旷视首席科学家孙 ...

  3. solr查询空值、null、不存在的字段的方法

    正常情况下我们都是按有值的方式去搜索,但是有时候有一些字段为null,solr中就没有存储进去,我们怎么获取这个字段不存在为条件的搜索结果了,我们只需要在搜索字段前加上负号,如下图 摘要: Solr的 ...

  4. Python - Django - ORM 操作表

    ORM 的对应关系: 类        --->    数据库表对象     --->    数据库行属性     --->    字段 操作数据库表     --->     ...

  5. 并发基础(三) java线程优先级

      在不同的JVM中(JVM也算是一个操作系统),有着不同的CPU调度算法,对于大部分的JVM来说,优先级也是调度算法中的一个参数.所以,线程优先级在一定程度上,对线程的调度执行顺序有所影响,但不能用 ...

  6. Bogart SysPwd.vb

    Module syspwd Public Const STR_MASK = "MyFunction" '加密用字串 '預定義密碼長度 Public GintCheckPwd As ...

  7. uva-10129-欧拉通路

    题意:每一个单词的长度最小2,最大1000,单词开头的字母和另外一个单词的末尾一样就可以连接起来,解所有的单词是不是都可以连接起来,没有遗漏的 把每一个单词的第一个字母当成一个结点,最后一个单词也作为 ...

  8. 0_Simple__simpleMPI

    MPI 的简单使用 ▶ 源代码.主机根结点生成随机数组,发布副本到各结点(例子用孩子使用了一个结点),分别使用 GPU 求平方根并求和,然后根结点使用 MPI 回收各节点的计算结果,规约求和后除以数组 ...

  9. 31. centos 下修改oracle的编码

    [root@localhost ~]# su - oracle[oracle@localhost ~]$ vi /home/oracle/.bash_profile # .bash_profile # ...

  10. ubuntu编译安装php7, 安装openssl

    sudo apt-get install openssl sudo apt-get install libssl-dev