java class文件批量反编译
java class文件批量反编译
需要先下载最新版本的jad文件。https://varaneckas.com/jad/
jad -o -r -sjava -dsrc ‘tree/\/*.class’
由于jad反编译在多层目录结构下无法很好的处理,下面用脚本调用jad实现整个目录的反编译
import os
import sys
from os.path import join
import subprocess
def run_command(cmd):
proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=os.environ)
try:
outs, errs = proc.communicate(timeout=15)
# print("outs %r %r" % (outs, proc))
except Exception:
proc.kill()
outs, errs = proc.communicate()
if errs is not None and len(errs) > 0:
print("cmd %r, errs %r" % (cmd, errs))
if errs is None or len(errs) == 0:
return outs.decode()
return errs
print("__name__ %r" % (__name__))
if __name__ == '__main__':
frmdir = "classes"
todir = "src"
if len(sys.argv) >= 3:
frmdir = sys.argv[1]
todir = sys.argv[2]
print("run %r frm %s to %s" % (sys.argv, frmdir, todir))
for root, dirs, files in os.walk(frmdir):
for f in files:
if f.endswith('.class'):
clsfile = join(root, f)
tofile = clsfile.replace(frmdir, todir)
tofile = tofile.replace(".class", ".java")
tofiledir = os.path.dirname(tofile)
if not os.path.isdir(tofiledir):
# print("mkdir %s" % tofiledir)
run_command("mkdir %s" % tofiledir)
run_command("jad -o -p %s > %s" % (clsfile, tofile))
# print("gen file %s" % tofile)
把jad.exe
和jad.py
放到path
环境中,跳到WEB-INF目录下,执行jad.py
,会输出src的源文件目录。
还没有评论,来说两句吧...