想从jvm里读取class类....

编程小妞儿 2011-07-03 09:37:43
大家知道class文件加密吧..我想反编译这个工程...但是反编译工具不认为它是有效的class文件.试想反编译工具不认,jvm又怎么会认呢,查了半天加密与解密,发现是一个classloader.dll的问题,是jvm在加载class之前,先加载的classloader.dll,是由它进行解密的.

遇到了classloader.dll文件,要是C#写的,早就攻破了.是C++写的...只能反汇编,学了两个晚上的汇编.感觉想把汇编译成高级语言并不是那么容易的事.也有人提出说,把dll设置断点,在它解密后,用汇编指令去内在中读取字节码.

想来想去.想从jvm中读取class文件.....


请各位赐教!

...全文
107 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
翰林听海 2011-07-05
  • 打赏
  • 举报
回复
你重写一个classloader就行了呗,我原来就这么干过,能看到jvm是如何加载class字节码的,注意如果包含调用dll的时候,复杂的时候如果不注意,会出错。
qybao 2011-07-03
  • 打赏
  • 举报
回复
jvm中拿到的已经是一个class对象了,而且java本身也没有提供class对象还原回byte流方法,所以从jvm本身来考虑也比较有难度,而且jvm本身加载类的时候,把从class文件读入转换为class对象的代码写在本地方法里,也就是写在某个自带的dll(猜测是jvm.dll)里,所以你也没法从jvm上层截获这个byte流,所以把classloader.dll设置断点,在它解密后,用汇编指令去内在中读取字节码,这个看上去还有点可行,就是对汇编不熟的话,难度相当高。
编程小妞儿 2011-07-03
  • 打赏
  • 举报
回复
谢谢!
飞跃颠峰 2011-07-03
  • 打赏
  • 举报
回复
没做过
帮顶一下
编程小妞儿 2011-07-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 qybao 的回复:]
引用 6 楼 c_4444 的回复:
引用 5 楼 alexandertech 的回复:
引用 4 楼 c_4444 的回复:

我对jvm不太了解,对汇编吧..刚查了几个指令,能看懂两行....


如果这样的话,建议你放弃算了
要看懂汇编程序(而且是大段大段看懂)可不是一日之功,不但要深刻理解机器底层运作的原理,还要有强大的抽象思维、逻辑思维和记忆力


"放弃"一个字不……

年轻人有志气啊,可以给你另一个方法建议,就是找到jdk的源代码,然后重新改写ClassLoader,在相应的defineClass()方法一类的地方,追加把byte[]信息出力到文件的处理,或者某些其他可能与classload.dll发生关系的方法追加一些需要的处理,然后重新编译打包jdk相应的jar,然后替换掉jvm原来的jar来启动jvm。
[/Quote]

谢谢你的思路!!...
飞跃颠峰 2011-07-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 c_4444 的回复:]

"放弃"一个字不应该出现在一个程序员的嘴里,也不应该让别人放弃,程序里没有绝对的加密....一切不过时间问题而矣!那这个贴,就等我解决了再结!

思路收集中...
[/Quote]

哈哈,有志气
那成功之日记得来报喜
qybao 2011-07-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 c_4444 的回复:]
引用 5 楼 alexandertech 的回复:
引用 4 楼 c_4444 的回复:

我对jvm不太了解,对汇编吧..刚查了几个指令,能看懂两行....


如果这样的话,建议你放弃算了
要看懂汇编程序(而且是大段大段看懂)可不是一日之功,不但要深刻理解机器底层运作的原理,还要有强大的抽象思维、逻辑思维和记忆力


"放弃"一个字不应该出现在一个程序员的嘴里,也不应该让别……
[/Quote]

年轻人有志气啊,可以给你另一个方法建议,就是找到jdk的源代码,然后重新改写ClassLoader,在相应的defineClass()方法一类的地方,追加把byte[]信息出力到文件的处理,或者某些其他可能与classload.dll发生关系的方法追加一些需要的处理,然后重新编译打包jdk相应的jar,然后替换掉jvm原来的jar来启动jvm。
编程小妞儿 2011-07-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 alexandertech 的回复:]
引用 4 楼 c_4444 的回复:

我对jvm不太了解,对汇编吧..刚查了几个指令,能看懂两行....


如果这样的话,建议你放弃算了
要看懂汇编程序(而且是大段大段看懂)可不是一日之功,不但要深刻理解机器底层运作的原理,还要有强大的抽象思维、逻辑思维和记忆力
[/Quote]

"放弃"一个字不应该出现在一个程序员的嘴里,也不应该让别人放弃,程序里没有绝对的加密....一切不过时间问题而矣!那这个贴,就等我解决了再结!

思路收集中...
飞跃颠峰 2011-07-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 c_4444 的回复:]

我对jvm不太了解,对汇编吧..刚查了几个指令,能看懂两行....
[/Quote]

如果这样的话,建议你放弃算了
要看懂汇编程序(而且是大段大段看懂)可不是一日之功,不但要深刻理解机器底层运作的原理,还要有强大的抽象思维、逻辑思维和记忆力
编程小妞儿 2011-07-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qybao 的回复:]
jvm中拿到的已经是一个class对象了,而且java本身也没有提供class对象还原回byte流方法,所以从jvm本身来考虑也比较有难度,而且jvm本身加载类的时候,把从class文件读入转换为class对象的代码写在本地方法里,也就是写在某个自带的dll(猜测是jvm.dll)里,所以你也没法从jvm上层截获这个byte流,所以把classloader.dll设置断点,在它解密后,用汇编指令去……
[/Quote]

我对jvm不太了解,对汇编吧..刚查了几个指令,能看懂两行....

50,530

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧