ytecode Viewer是一个先进的轻量级Java字节码查看器,它是一款基于图形界面的Java反编译器,Java字节码编辑器,APK编辑器,Dex编辑器,APK反编译器,DEX反编译器,Procyon Java反编译器,CFR Java反编译器,以及FernFlower Java反编译器。不仅如此,它还是一款Hex查看器,代码搜索器和代码调试器。除此之外,它还具备Smali和Baksmali等汇编器的相关功能。
这款开源工具完全采用Java编程语言进行开发。这款工具由Konloch设计并开发,目前也主要是Konloch正在维护这一开源项目。
在这款工具中,还设计有一个插件系统,它可以允许你与加载的类文件进行交互。比如说,你可以写一个字符串的反混淆工具,恶意代码搜索器,或者其他的一些你所能想到的东西。
你不仅可以使用一个他人预先编写完成的插件,而且你也可以使用你自己写的插件。不仅如此,它还支持使用Groovy脚本,Python脚本,以及Ruby脚本。当插件状态被激活之后,它会将每一个单独的类文件加载进BCV中,这样一来,用户就可以使用ASM来控制这些加载的类文件了。
目前,这款开源工具已经使用了大量其他项目中的功能代码,包括但不仅限于下面列表中的项目:
J-RET-开发者为WaterWolf
JHexPane-开发者为Sam Koivu
RSynaxPane-开发者为Robert Futrell
Commons IO-开发者为Apache
ASM-开发者为OW2
FernFlower-开发者为Stiver
Procyon-开发者为Mstrobel
CFR-开发者为Lee Benfield
CFIDE-开发者为Bibl
Smali-开发者为JesusFreke
Dex2Jar-开发者为pxb1..?
Krakatau-开发者为Storyyeller
JD GUI/JD Core-开发者为The Java-Decompiler Team
Enjarify-开发者为Storyyeller
参与过该项目并贡献了代码的人:
Konloch
Bibl
Fluke
Righteous
sahitya-pavurala
priav03
Afffsdd
Szperak
Zooty
samczsun
如果您贡献过代码,而上面的这份名单中没有您的名字,请不要生气,请您立刻与我联系(@Konloch or konloch@gmail.com)。
项目参与指导/编码规范:
上传代码包的包名必须以the.bytecode.club.bytecodeviewer开头。
如果你所编写的代码需要抛出异常,请使用the.bytecode.club.bytecodeviewer.ExceptionUI(exception, "authors@email.com")来处理抛出的异常。
所有的变量必须在每个类的开始处声明。
所有的括号必须在同一行中,比如说,public void main(String[] args) { not (String[] args) <NEWLINE_BREAK> {
官方网站: https://bytecodeviewer.com
项目源代码: https://github.com/konloch/bytecode-viewer
代码/示例文档: https://github.com/konloch/bytecode-viewer/releases
Java Docs: https://the.bytecode.club/docs/bytecode-viewer/
项目许可证: https://raw.githubusercontent.com/Konloch/bytecode-viewer/master/LICENSE
漏洞报告: https://github.com/Konloch/bytecode-viewer/issues
项目论坛: https://the.bytecode.club/forumdisplay.php?fid=69
主要特性:
1.在Bytecode Viewer的编译/反编译工具中集成了Krakatau。
2.集成了Smali/BakSmali-现在,你可以通过smali来编辑类文件和dex文件了。
3.支持APK/DEX-使用了Dex2Jar和Jar2Dex,可以轻松加载并保存APK文件。
4.Java反编译器-Bytecode Viewer的反编译工具中集成了FernFlower,Procyon和CFR。
5.字节码编译器-CFIED的修改版
6.十六进制查看器-由JHexPane驱动
7.每一个反编译器/编辑器/查看器都是可以进行切换的,你可以选择每一个操作面板上所显示的元素组件。
8.功能完整的搜索系统-可以搜索字符串,函数,以及变量等信息。
9.系统完全支持使用Groovy脚本。
除此之外,这款工具还有很多其他的特性,您可以在使用的过程中发现更多的功能。
命令行输入:
-help 显示帮助菜单
-list 显示可用的反编译器
-decompiler <decompiler> 选择要使用的编译器,系统默认为procyon
-i <input file> 选择输入的源文件 (系统将会自动识别Jar, Class, APK, ZIP,和DEX)
-o <output file> 选择输出文件 (Java源文件或者Java字节码文件)
-t <target classname> 必须提供完整的Java类文件名称,或者设置为“all”来反编译所有的类文件
-nowait 无需等待用户读取CLI信息
你是一名Java逆向工程师吗?你想学习如何对Java程序进行逆向分析吗?
请立刻加入Bytecode俱乐部吧!
更新日志(因篇幅有限,日志内容从2.9.0版本开始):
— 2.9.0 —:
02/11/2015 – 添加了ZStringArray字符串解码器(感谢Righteous)
02/20/2015 – 修复了Krakatau反编译器/反汇编器/汇编器中存在的资源泄漏问题
02/21/2015 – 修复了正则表达式搜索功能中的错误
02/21/2015 – 在Bytecode Viewer API中添加了编译/反编译示例
02/21/2015 – 优化了反编译器,每一个视图都运行在各自的反编译线程中
02/21/2015 – 新增Janino编译器,用户可以在BCV中编译或反编译源代码
02/21/2015 – 为所有的反编译工具和反汇编工具添加了可编辑选项
02/21/2015 – 新增自动缓存资源图标的功能
01/21/2015 – 将EZ-Injection更名为File-Run,但是插件名仍然保留为EZ-Injection.
02/21/2015 – 新增了读取图片文件和检测纯ASCII文件的功能
02/22/2015 – 在Java编译器中添加了错误控制台
02/22/2015 – 当BCV关闭后,确保Python/Krakatau进程被关闭
02/22/2015 – 优化了工具的操作界面,使其对新手更加友好
02/22/2015 – 修复了文件导航搜索功能
02/23/2015 – 添加了对APK资源的支持
02/23/2015 – 新增了APKTool.jar的解码功能
02/23/2015 – 在标签菜单中添加了“关闭其他标签”选项
02/23/2015 – 为BCV添加了_install.bat和_uninstall.bat
02/23/2015 – 新增了可在字节码反编译结果中添加注释的功能(再次感谢Bibl)
02/23/2015 – 添加了对Java 8的支持
— 2.9.1 —:
02/24/2015 – 修复了第三个操作窗口中无法显示搜索按钮的问题
02/24/2015 – 修复了编译器中存在的某些功能性问题
— 2.9.2 —:
02/24/2015 – 修复了编译器中存在的问题
— 2.9.3 —:
02/28/2015 – 新增了拖拽即可打开文件的功能
02/28/2015 – 新增了Ctrl + w 快速关闭当前标签的功能
02/28/2015 – 将CFR更新为0_97.jar
02/28/2015 – 修复了反编译器中的并发问题
02/28/2015 – 添加了可通过鼠标滚轮控制图片大小的功能
02/28/2015 – 新增资源刷新功能
03/20/2015 – 将Dex2Jar更新至2.0
03/20/2015 – 将CFR更新为0_98.jar
— 2.9.4 —:
04/19/2015 – 为Krakatau反编译器/反汇编器/汇编器添加-0参数(感谢Storyyeller)
04/19/2015 – 为Krakatau反编译器添加-skip参数(感谢Storyyeller)
04/19/2015 – 将针对Python的警告信息修改为“建议使用PyPy”(感谢Storyyeller)
04/21/2015 – 重做“视图界面”
04/21/2015 – 将CFR更新为0_100.jar
04/21/2015 – 新增了CTRL + R 快速运行的功能
04/21/2015 – 新增了CTRL + S 快速保存文件的功能
04/21/2015 – 新增了CTRL + T 进行快速编译的功能
04/21/2015 – 新增了Krakatau可选库
04/21/2015 – “关于”界面新增对日期的支持,将会提供更多的信息
04/21/2015 – 将“视图界面”更名为“视图”
— 2.9.5 —:
05/01/2015 – 更新了统计功能(可查看全球有多少用户正在使用BCV)
— 2.9.6 —:
05/05/2015 – 修复了“关于”界面中的小问题
05/28/2015 – 新增JD-GUI反编译工具(十分感谢JD-GUI的作者)
05/28/2015 – 新增了自动刷新并保存编译代码的功能
05/28/2015 – 重命名了“文件”菜单下的“另存为”选项,以提供更多的信息
06/24/2015 – 修复了方法搜索器中的逻辑错误
06/26/2015 – 将Procyon和CFR升级到了最新版本
— 2.9.7 —:
07/02/2015 – 新增了字体大小调节功能
07/05/2015 – 修改了工具的启动界面
07/06/2015 – 将字体大小调节功能移动到了“视图”菜单下
07/06/2015 – 修复了插件无法获取到当前类文件的错误
07/07/2015 – 将APK转换器更改为Enjarify,取代之前的Dex2Jar
07/09/2015 – 修复了Krakatau反编译器中的进程泄漏问题
07/09/2015 – 解决了JD-GUI中出现的语法异常问题
07/09/2015 – 修复了资源无法刷新的问题
07/09/2015 – 修复了因文件名过长而无法打开类文件的问题
07/09/2015 – 新增了对小屏幕的启动界面支持
— 2.9.8 —:
07/19/2015 – 修复了Enjarify中存在的漏洞
07/20/2015 – 默认支持解码APK源文件
07/20/2015 – 增强了安全管理器的安全性,使其没那么容易受到攻击
07/20/2015 – 启动页面增加了CLI
07/21/2015 – 新增了对离线模式的支持,防止用户因无法连接github而导致工具发生异常
07/21/2015 – 新增了fatjar选项
07/21/2015 – 重写了文件系统,现在可以显示工具所加载的jar文件路径
07/21/2015 – 现在可以查看反编译器是否处于可编辑模式
07/22/2015 – 修复了一个小错误(感谢affffsdsd)
07/22/2015 – 为文件导航按钮添加了图标
07/22/2015 – 将反编译器的默认图形界面修改为JD-GUI
07/22/2015 – 添加了对Python 3.X的支持
07/22/2015 – 在文件系统的更新中,修复了Krakatau的jar输出漏洞
07/22/2015 – 提升了Krakatau反编译器加载大型文件的速度
07/22/2015 – 在文件导航面板中按下回车键后,会自动打开类文件
07/22/2015 – 快速文件搜索功能会再次打开目标文件
07/24/2015 – 在“文件”菜单下新增了“加载资源”标签
07/26/2015 – 切换了查看器之后,视图面板会自动刷新
07/26/2015 – 修复了Krakatau反编译工具
07/30/2015 – Affssdd修复了文件导航面板中的快速搜索类文件的功能
07/30/2015 – 修复了Krakatau反编译工具中的进程泄漏问题