要了解反编译,首先需要了解计算机语言,它包括机器语言、汇编语言、高级语言三种。其中,机器语言和汇编语言通常被称之为低级语言。
简单来说,可以这样简单的理解:低级语言是计算机认识的语言、高级语言是程序员认识的语言。
所谓编译,就是指高级语言转换成低级语言让计算机执行的过程。反编译则相反,通过低级语言进行反向工程,获取其源代码。
1. Java这门编程语言,有许多如泛型、自动装箱拆箱等语法糖。因为java虚拟机不认识这些,所以就会在编译的时候进行相应的解糖,得到class文件。反编译工具就可以帮我们反编译class文件,获得一份java文件,让我们了解到这些语法糖是如何实现的。
2.可以对其他人的代码进行反编译,学习代码实现。或者通过源代码查找bug,制作外挂等。
由于我们有工具可以对Class文件进行反编译,当然就要有对应的技术可以应对反编译,从而保护java程序。比较典型的应对策略如下:
(1)隔离Java程序,让用户接触不到你的Class文件
(2)对Class文件进行加密,提高破解难度
(3)代码混淆,将代码转换成功能上等价,但是难于阅读和理解的形式
首先我们可以自制一个demo的class文件来测试使用反编译工具。在自定义路径下,新建一个demo的java文件。简单测试即可,具体内部代码如下图。
图2-2 demo.java
然后我们在该路径下,用cmd进入命令界面,输入javac demo.java指令,即可将java文件编译成class文件,并在同目录下出现。
图2-3 编译demo.java文件
图2-4 同目录下出现demo.class文件
得到class文件以后我们就可以来测试反编译功能了。首先还是打开jd-gui.exe文件。单击【file】从中选择【Open File ...】选项,弹出一个文件选择框,可以选择要打开的文件,或者直接单击文件夹图标,直接弹出文件选择框;从文件选择框中选择要打开的.class类型的文件,单击【确定】。在打开的文件里,左侧可以看到文件的保存位置,类及方法,右侧显示类的具体内容,注释不会显示
图2-5 打开文件进行反编译
图2-6 反编译结果
Jd-gui同时也支持高级搜索。点击下图所示图标,即可进入搜索界面,快速定位需要的东西。
图2-7 高级搜索
搜索方法。类似电脑的快捷键Ctrl+F,此时不会打开小窗,在界面的下方会显示一个输入框,输入想要查找的方法名,即可。
图2-8 搜索方法
搜索类。菜单栏快捷方式,在弹框内输入想要查找的类名。
图2-9 搜索类
同样,那前面做的demo.class文件进行举例使用。打开luyten工具进入图形界面,打开文件,可以看到展示如下图。
图3-1 luyten反编译界面
可以看到,编码格式有些问题,默认为Unicode显示。我们可以点击【Settings】做一些配置,如勾选【Force Explicit Imports】,显示全部引入包的路径,默认为*显示;同时勾选【Enable Unicode Replacement】,正常显示中文。具体如下图。
图3-2 luyten配置
之后就可以正常显示了。反编译中,点击【save as】是生成当前指定文件源码,【save all】是生成当前jar包的全部文件源码。
图3-3 生成源码
原网址: 访问
创建于: 2024-02-19 18:36:52
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论