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代码。

    努力与获得往往不成正比,但不至于成反比。
  • 相关阅读:
    C#磁吸屏幕窗体类库
    准备
    我写的诗
    How to turn off a laptop keyboard
    How to tell which commit a tag points to in Git?
    Why should I care about lightweight vs. annotated tags?
    How to get rid of “would clobber existing tag”
    Facebook, Google and Twitter threaten to leave Hong Kong over privacy law changes
    The need for legislative reform on secrecy orders
    Can a foreign key be NULL and/or duplicate?
  • 原文地址:https://www.cnblogs.com/yasepix/p/7911274.html
Copyright © 2011-2022 走看看