zoukankan      html  css  js  c++  java
  • 【Jad】利用jdk自带的jad.exe实现批量反编译class文件

    命令:

    C:Program FilesJavaJDK1.7jdk1.7.0_67in>jad -o -8 -r -dD:/output2/src -sjava D:companycodeabcWEB-INFclassescomsendinfo***.class

    解释:

    1.**表示sendinfo文件夹下的所有文件,不限层级的文件夹,有多少层就扫描多少层。*.class表示所有class后缀的文件。

    sendinfo***.class

    2.jad -o -8 -r -dXXXXX -sjava XXXXX

    -o:  覆盖写,如果文件已经存在,则覆盖

    -r:  建立和java包一致的文件夹路径

    -dXXXX:  反编译后保存路径,如 D:/output/src

    -sjava:  反编译后的文件后缀名,我们希望是.java文件

     -8: 避免反编译时将中文编译为unicode,必不可少。

    注意:路径中不要有中文,否则会出现错误,JavaClassFileReadException: can't open input file on `D:XXXXXX'

     注意:会丢失注解 ,比如@XmlAttribute,@Autowired等等,全部缺失。表示很无赖

    补充:

    使用方法:

    [1] 反编译一个class文件:jad example.class,会生成example.jad,用文本编辑器打开就是java源代码

    [2] 指定生成源代码的后缀名:jad -sjava example.class,生成example.java

    [3] 改变生成的源代码的名称,可以先使用-p将反编译后的源代码输出到控制台窗口,然后使用重定向,输出到文件:jad -p example.class > myexample.java

    [4] 把源代码文件输出到指定的目录:jad -dnewdir -sjava example.class,在newdir目录下生成example.java

    [5] 把packages目录下的class文件全部反编译:jad -sjava packages/*.class

    [6] 把packages目录以及子目录下的文件全部反编译:jad -sjava packages/**/*.class,不过你仍然会发现所有的源代码文件被放到了同一个文件中,没有按照class文件的包路径建立起路径

    [7] 把packages目录以及子目录下的文件全部反编译并建立和java包一致的文件夹路径,可以使用-r命令:jad -r -sjava packages/**/*.class

    [8] 当重复使用命令反编译时,Jad会提示“whether you want to overwrite it or not”,使用-o可以强制覆盖旧文件

    最权威的还是help:

    bin>jad
    Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov (jad@kpdus.com).
    Usage: jad [option(s)] <filename(s)>
    Options: -a - generate JVM instructions as comments (annotate)
    -af - output fully qualified names when annotating
    -b - generate redundant braces (braces)
    -clear - clear all prefixes, including the default ones
    -d <dir> - directory for output files
    -dead - try to decompile dead parts of code (if there are any)
    -dis - disassembler only (disassembler)
    -f - generate fully qualified names (fullnames)
    -ff - output fields before methods (fieldsfirst)
    -i - print default initializers for fields (definits)
    -l<num> - split strings into pieces of max <num> chars (splitstr)
    -lnc - output original line numbers as comments (lnc)
    -lradix<num>- display long integers using the specified radix
    -nl - split strings on newline characters (splitstr)
    -noconv - don't convert Java identifiers into valid ones (noconv)
    -nocast - don't generate auxiliary casts
    -noclass - don't convert .class operators
    -nocode - don't generate the source code for methods
    -noctor - suppress the empty constructors
    -nodos - turn off check for class files written in DOS mode
    -nofd - don't disambiguate fields with the same names (nofldis)
    -noinner - turn off the support of inner classes
    -nolvt - ignore Local Variable Table entries (nolvt)
    -nonlb - don't insert a newline before opening brace (nonlb)
    -o - overwrite output files without confirmation
    -p - send all output to STDOUT (for piping)
    -pa <pfx>- prefix for all packages in generated source files
    -pc <pfx>- prefix for classes with numerical names (default: _cls)
    -pe <pfx>- prefix for unused exception names (default: _ex)
    -pf <pfx>- prefix for fields with numerical names (default: _fld)
    -pi<num> - pack imports into one line using .* (packimports)
    -pl <pfx>- prefix for locals with numerical names (default: _lcl)
    -pm <pfx>- prefix for methods with numerical names (default: _mth)
    -pp <pfx>- prefix for method parms with numerical names (default:_prm)
    -pv<num> - pack fields with the same types into one line (packfields)
    -r - restore package directory structure
    -radix<num>- display integers using the specified radix (8, 10, or 16)
    -s <ext> - output file extension (default: .jad)
    -safe - generate additional casts to disambiguate methods/fields
    -space - output space between keyword (if, while, etc) and expression
    -stat - show the total number of processed classes/methods/fields
    -t<num> - use <num> spaces for indentation (default: 4)
    -t - use tabs instead of spaces for indentation
    -v - show method names while decompiling
    -8 - convert Unicode strings into ANSI strings (ansi)
    -& - redirect STDERR to STDOUT

  • 相关阅读:
    228. Summary Ranges
    324. Wiggle Sort II
    42. Trapping Rain Water
    工作之后
    279. Perfect Squares
    391. Perfect Rectangle
    351. Android Unlock Patterns
    246. Strobogrammatic Number
    [LeetCode] 75. Sort Colors Java
    [Java] 80. Remove Duplicates from Sorted Array II Java
  • 原文地址:https://www.cnblogs.com/flydkPocketMagic/p/7048350.html
Copyright © 2011-2022 走看看