java class文件批量反编译

末蓝、 2022-05-12 09:56 340阅读 0赞

java class文件批量反编译

需要先下载最新版本的jad文件。https://varaneckas.com/jad/

jad -o -r -sjava -dsrc ‘tree/\/*.class’

由于jad反编译在多层目录结构下无法很好的处理,下面用脚本调用jad实现整个目录的反编译

  1. import os
  2. import sys
  3. from os.path import join
  4. import subprocess
  5. def run_command(cmd):
  6. proc = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=os.environ)
  7. try:
  8. outs, errs = proc.communicate(timeout=15)
  9. # print("outs %r %r" % (outs, proc))
  10. except Exception:
  11. proc.kill()
  12. outs, errs = proc.communicate()
  13. if errs is not None and len(errs) > 0:
  14. print("cmd %r, errs %r" % (cmd, errs))
  15. if errs is None or len(errs) == 0:
  16. return outs.decode()
  17. return errs
  18. print("__name__ %r" % (__name__))
  19. if __name__ == '__main__':
  20. frmdir = "classes"
  21. todir = "src"
  22. if len(sys.argv) >= 3:
  23. frmdir = sys.argv[1]
  24. todir = sys.argv[2]
  25. print("run %r frm %s to %s" % (sys.argv, frmdir, todir))
  26. for root, dirs, files in os.walk(frmdir):
  27. for f in files:
  28. if f.endswith('.class'):
  29. clsfile = join(root, f)
  30. tofile = clsfile.replace(frmdir, todir)
  31. tofile = tofile.replace(".class", ".java")
  32. tofiledir = os.path.dirname(tofile)
  33. if not os.path.isdir(tofiledir):
  34. # print("mkdir %s" % tofiledir)
  35. run_command("mkdir %s" % tofiledir)
  36. run_command("jad -o -p %s > %s" % (clsfile, tofile))
  37. # print("gen file %s" % tofile)

jad.exejad.py放到path环境中,跳到WEB-INF目录下,执行jad.py,会输出src的源文件目录。

发表评论

表情:
评论列表 (有 0 条评论,340人围观)

还没有评论,来说两句吧...

相关阅读