社区
Java SE
帖子详情
JVM相关,.Class文件格式问题
devie
2008-12-28 06:19:56
今天看一个框架,反编译类文件的时候提示不是有效的.Class文件,察看文件起始的内容并不是0xCAFEBABE,但是,这个类却能被JVM很好的识别,哪位高人能告诉这是用的什么原理。
...全文
169
20
打赏
收藏
JVM相关,.Class文件格式问题
今天看一个框架,反编译类文件的时候提示不是有效的.Class文件,察看文件起始的内容并不是0xCAFEBABE,但是,这个类却能被JVM很好的识别,哪位高人能告诉这是用的什么原理。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
20 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
devie
2008-12-30
打赏
举报
回复
研究明白了,用了ClassLoader进行解码载入,对于保护自己将软件是一个很好的思路!!
qinaldo
2008-12-29
打赏
举报
回复
呵呵,新人学习中!!
devie
2008-12-29
打赏
举报
回复
谢谢各位了,启发很大。
其实我也是想了解一些加密的技术,不破解别人的,也得保护自己的呀!
filec75
2008-12-29
打赏
举报
回复
友情up
success000
2008-12-29
打赏
举报
回复
友情up
云上飞翔
2008-12-29
打赏
举报
回复
[Quote=引用 12 楼 ZangXT 的回复:]
研究反编译和破解的人好多。
[/Quote]
答:呵呵。。,大家只是互相讨论,互相聊聊,互相启发。我一直相信的是:三人行必有我师。像:2楼、4楼的兄弟观点都是对我有启发的。我又学到新东西,这才是最主要的。别人可能达到了“研究的水平”,我是差得远的。我是说的真心话:越学习讨论JAVA,发现不懂的反而越来越多,只好继续努力了。
真心地向大家学习与讨论而已。
ZangXT
2008-12-29
打赏
举报
回复
研究反编译和破解的人好多。
老紫竹
2008-12-29
打赏
举报
回复
你直接运行那个类,或者你写一个Test类直接使用看看,如果不能用,则肯定被加密了。
云上飞翔
2008-12-29
打赏
举报
回复
[Quote=引用 9 楼 ahlon 的回复:]
引用 3 楼 jiangnaisong 的回复:
引用楼主 devie 的帖子:
生成的.class字节码跟运行是加载的classloader没有直接关系吧
[/Quote]
答:有关系啊.JVM装载入框架自定义的classloader之后,用自定义的classloader来读入这些非标准的"篡改的"class文件,然后就在内存中当时就(on the fly)进行"反变换成"正常的class字节码,交由JVM去运行啊.这不很正常吗.
xiaoxuanfengsyn
2008-12-29
打赏
举报
回复
不懂,学习一下
devie
2008-12-29
打赏
举报
回复
[Quote=引用 11 楼 java2000_net 的回复:]
你直接运行那个类,或者你写一个Test类直接使用看看,如果不能用,则肯定被加密了。
[/Quote]
不能被使用,编译都通不过!!
ahlon
2008-12-28
打赏
举报
回复
[Quote=引用 3 楼 jiangnaisong 的回复:]
引用楼主 devie 的帖子:
今天看一个框架,反编译类文件的时候提示不是有效的.Class文件,察看文件起始的内容并不是0xCAFEBABE,但是,这个类却能被JVM很好的识别,哪位高人能告诉这是用的什么原理。
答:显然,这个框架,自定义了自己的ClassLoader,然后使用自己的ClassLoader来装载这些"特殊的class文件",这是基本的加密手段.JAVA混淆器有些也是基于这一原理对JAVA类文件进行"篡改的".
[/Quote]
生成的.class字节码跟运行是加载的classloader没有直接关系吧
ZiSheng
2008-12-28
打赏
举报
回复
[Quote=引用 7 楼 wangbin3961 的回复:]
不懂up
[/Quote]
一样不懂,up
胡须棉花糖
2008-12-28
打赏
举报
回复
不懂up
java小小兵
2008-12-28
打赏
举报
回复
原来如此。
shuaiAWP
2008-12-28
打赏
举报
回复
不懂,顶顶
zijiyiren
2008-12-28
打赏
举报
回复
为了防止Class文件被直接反编译,许多开发人员将一些关键的Class文件进行加密,例如对注册码、序列号管理相关的类等。在使用这些被加密的类之前,程序首先需要对这些类进行解密,而后再将这些类装载到JVM当中。这些类的解密可以由硬件完成,也可以使用软件完成。
云上飞翔
2008-12-28
打赏
举报
回复
[Quote=引用楼主 devie 的帖子:]
今天看一个框架,反编译类文件的时候提示不是有效的.Class文件,察看文件起始的内容并不是0xCAFEBABE,但是,这个类却能被JVM很好的识别,哪位高人能告诉这是用的什么原理。
[/Quote]
答:显然,这个框架,自定义了自己的ClassLoader,然后使用自己的ClassLoader来装载这些"特殊的class文件",这是基本的加密手段.JAVA混淆器有些也是基于这一原理对JAVA类文件进行"篡改的".
ahlon
2008-12-28
打赏
举报
回复
也许是编译.class文件的时侯加了混淆器混淆了。
好像Jbuilder可以混淆编译之后的字节码,当然也有其他的工具。
【
JVM
】.
class
文件如何在
JVM
中运行的?
线程私有(与线程同寿),每个方法都对应一个栈帧,方法中的操作等都在栈帧中进行。】将.
class
文件转化成二进制字节流,并加载到运行时数据区(.
class
信息存在【】中操作:将方法的变量依次存入栈帧中并根据操作进行出栈入栈等操作;(5)如果方法中创建了对象,则对象一般会分配到【:线程私有,存储native修饰的方法信息;(4)如果方法中调用了本地方法,则会调用在【,存储
Class
信息、常量、静态变量等等;:线程私有,记录指令执行的位置。(6)当堆上的对象不再使用时,【(3)执行方法时,会在【
【
JVM
】.
class
类文件是如何被加载的?
当且仅当父类(接口除外)中定义的变量被使用时才出发父类的初始化。(1)类构造器()会手机所有变量的赋值动作(类成员赋值、静态代码块中的赋值)并进行赋值。:本质上是执行类构造器()方法的过程,生成的静态变量和代码中定义的保持一致。:根据类的成员属性分配内存;(4)符号引用验证:解析阶段验证直接引用和间接引用是否合法。(2)元数据验证:验证字节码的是否符合java语法规范;(3)字节码验证:验证字节流中的语义是合法的;中的obj替换成此对象的在堆中的实际内存地址。
在cmd命令行窗口怎样把.java文件编译成.
class
文件?java文件和
class
文件内部代码长什么样?.
class
文件如果想要被
JVM
加载,要求是什么?
在cmd命令行窗口怎样把.java文件编译成.
class
文件?java文件和
class
文件内部代码长什么样?.
class
文件如果想要被
JVM
加载,要求是什么? 编译.java文件 首先创建一个hello.java文件,此文件的内部内容,如下图: hello.java文件的存放路径是在D:/新建文件夹 这个路径下,如下图: 接着在cmd命令行窗口,进入jdk的bin目录中,去编译此.java文件,编译命令如下图: 编译成功之后,会自动在.java文件的目录中生成一个.
class
文件,如下图: 编译好
JVM
之
Class
文件详解
class
文件是Java程序在
JVM
上执行的基础,它承载着Java程序的字节码指令和符号信息。通过
JVM
的加载、链接和执行过程,
class
文件被转换为可执行的机器码,并在内存中运行。同时,
JVM
对
class
文件的执行进行了多种优化,以提高Java程序的性能。
class
文件在Java应用开发、Web开发、移动开发、插件和库以及反编译和逆向工程等领域都有广泛的应用。
【
JVM
】
class
文件格式
,
JVM
加载
class
文件流程,
JVM
运行时内存区域,对象分配内存流程
这篇文章本来只是想讲一下
class
文件格式
,讲着讲着越讲越多。
JVM
这一块吧,知识比较散比较多,如果深研究下去如死扣《深入理解Java虚拟机》,这本书很深很细,全记住是不可能的,其实也没必要。趁这个机会直接把标题中的这些的主要知识点都总结一下,不会过深,也不会是太浮于表面的八股文,总结一下比较好记,也省的后面自己再忘了。
Java SE
62,634
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章