zoukankan      html  css  js  c++  java
  • CFR

    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:developjava逆向cfr_0_122.jar "%%i" --caseinsensitivefs true  --outputdir "%%~di%%~pi%%~ni"
            echo ----%%i已经翻反编译---
        )
        goto :end 
    ) else (
        title 正在反编译 %1...
        java -jar D:developjava逆向cfr_0_122.jar %1 --caseinsensitivefs true  --outputdir "%~d1%~p1%~n1"
        echo 反编译完成.
        goto :end
    )
    
    echo 反编译完成.
    @pause>nul
    
    :end
    pause
    exit

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

  • 相关阅读:
    python 安装第三方插件库报错的解决方案
    vue.js helloword
    node.js HelloWord
    十一 —— 迭代器、生成器、装饰器
    十、函数——匿名函数、推导式
    九、函数 —— 参数
    八、数据类型——bytes类型+set类型
    七、数据类型 —— 字典
    六、数据类型 —— 字符串
    五、数据类型 —— 元组
  • 原文地址:https://www.cnblogs.com/passedbylove/p/7000644.html
Copyright © 2011-2022 走看看