`

也论java加壳

    博客分类:
  • java
阅读更多
在C世界,对代码进行加密,主要通过加壳的方式。所谓加壳,就是先将程序代码加密,然后用特定的程序加载器,将代码解密后加载进内存,这样可以在防止代码的反编译,当然,有加壳工具,也有解壳工具,虽然不能100%防止crack,但仍然给代码增加一层有力的保护。
然而在java世界,保护代码是件很困难的事情,因为class文件非常规范,极易反编译,且反编译后的代码清晰可读。常见的保护办法是使用混淆器,打乱class和function以及变量的名字,可以干扰反编译后的代码的可读性。虽然简单提高了代码的安全性,但还仅仅相当于未加壳的C程序。
java可以加壳吗?以前我认为这是不可能的,因为动态加载代码这样的内存级别的操作,java无法做到,除非使用JNI(Java Native Interface),调用自己编写的C代码,在C代码中实现动态加载java代码。但是,C如何加载java代码呢?这需要对JVM相当的了解。所以当时的我认为这是不可能的。
然而,最近接触的一些知识告诉我——java也可以加壳!!

1.URLClassLoader。用URLClassLoader可以在java程序的运行期间,再将文件夹或者jar加入到classpath中,这个特性事实上就是动态加载。既然可以动态加载class的文件夹或者jar,为何不可以加载加密后的classes呢,将classes用自己的方式加密,在URLClassLoader调用时,使用自己的方式解密。不就是达到了加壳的目的了吗?不过解密的代码放在何处是个问题,就是说解壳器的代码暴露在外,还是很危险的。

2.javassist。这实在是一个非常神奇的新技术,我是在学习Tapestry5时第一次遇到这个包的,他可以动态创建java字节码,甚至可以修改你已经写好的函数,比如你的getter和setter,只是简单的读取和赋值,你可以在Runtime用他修改你的getter和setter,让你的getter和setter每次调用时都可以触发某些代码。借助这项神奇的技术,一定可以实现更强大的动态加载,加壳也就有了可能。

让我有些不爽的是,javassist又是小日本创建的项目。
http://www.open-open.com/open54954.htm
Javassist是一个开源的分析、编辑和创建Java字节码的类库。是由东京技术学院的数学和计算机科学 系的 Shigeru Chiba 所创建的。它已加入了开放源代码JBoss 应用服务器项目,通过使用Javassist对字节码操作为JBoss实现动态AOP框架。

真是让人感慨,国外的计算机科学领域在做什么,国内的计算机科学领域又在做什么,跟在别人的技术后面,做一些肤浅的事情。不说了,跑题了~~~以后再聊这个问题
分享到:
评论
19 楼 tbest 2007-03-23  
长见识了!
18 楼 run_xiao 2007-03-22  
引用

2.javassist。这实在是一个非常神奇的新技术,我是在学习Tapestry5时第一次遇到这个包的,他可以动态创建java字节码,甚至可以修改你已经写好的函数,比如你的getter和setter,只是简单的读取和赋值,你可以在Runtime用他修改你的getter和setter,让你的getter和setter每次调用时都可以触发某些代码。借助这项神奇的技术,一定可以实现更强大的动态加载,加壳也就有了可能。

并非只有javassist才能做到,ASM早就可以实现动态修改字节码的功能
17 楼 wjsir 2007-03-21  
这不但是个技术问题,还是个法律问题呢,据说在我国,传输加密信息,确切的说,传输不能被D查看的信息是非法的——据说是这样
16 楼 rautinee 2007-03-21  
关键是一个国家和民族对待科学的态度,现在的国人很浮躁,整天都想着如何快速致富,劳动密集型产业,国内的软件业真正搞创新的有多少呢?大部分的公司铺天盖地的招聘信息都是熟悉struts/hibernate/spring/jdo等等(我是指java的b/s开发方面),现在大家都在做外包,软件公司都成了劳动密集型企业,很多程序员跟服装厂的工人差不多少,区别在于人家用缝纫机,我们用键盘,整天重复着同样的工作,没有创新,没有激情。。。

我也发发牢骚!
15 楼 towjzhou 2007-03-20  
请100个初程重写一遍软件比什么加密都管用.
14 楼 roger 2007-03-19  
直接用混淆器,反编译出的代码基本上没什么价值
不过使用混淆器,要慎用Class.forName("")这样的方式来load class
13 楼 抛出异常的爱 2007-03-19  
混嚣器把
jdk一起混了...
12 楼 jasongreen 2007-03-19  
larlf 写道
可以先对java.exe加壳,然后可运行经过加密后的Jar文件。很多加密的公司都有相关的解决方案。


可否给点详细情报
11 楼 qingjian 2007-03-19  
国家 人才。。。悲哀
10 楼 dengyin2000 2007-03-19  
引用
1.URLClassLoader。用URLClassLoader可以在java程序的运行期间,再将文件夹或者jar加入到classpath中,这个特性事实上就是动态加载。既然可以动态加载class的文件夹或者jar,为何不可以加载加密后的classes呢,将classes用自己的方式加密,在URLClassLoader调用时,使用自己的方式解密。不就是达到了加壳的目的了吗?不过解密的代码放在何处是个问题,就是说解壳器的代码暴露在外,还是很危险的。

那你的URLClassLoader需要夹克么?不加壳别人非常容易知道你是怎样加密的。
9 楼 larlf 2007-03-19  
可以先对java.exe加壳,然后可运行经过加密后的Jar文件。很多加密的公司都有相关的解决方案。
8 楼 jasongreen 2007-03-19  
solospider 写道
这是个很神奇的技术。。
不过我想问一下Dynamic Proxy不是也可以实现这个功能吗?
小日本的那个开源的东东和Dynamic Proxy有什么区别?


区别在于小日本的可以无中生有,proxy只能移花接木
7 楼 liangguanhui 2007-03-19  
guoshiguan 写道
java开源,总觉得不是天经地意的事吗,
Java是开源,不代表用Java做的东西都是开源的
6 楼 guoshiguan 2007-03-19  
java开源,总觉得不是天经地意的事吗,
5 楼 fantasy 2007-03-19  
国内的开源组织还是太少了
4 楼 solospider 2007-03-19  
这是个很神奇的技术。。
不过我想问一下Dynamic Proxy不是也可以实现这个功能吗?
小日本的那个开源的东东和Dynamic Proxy有什么区别?
3 楼 zhlmmc 2007-03-19  
小日本在计算机方面的确很强。。。。
2 楼 天之魔神 2007-03-18  
确实不错,java真的很深奥
1 楼 dennis_zane 2007-03-18  
这样的帖子不应该投隐藏吧,我投良好了

相关推荐

    Java加壳源码-自定义类加载器

    Java加壳技术是一种保护Java程序不被轻易反编译或篡改的安全手段,它通过自定义类加载器来实现对原始字节码的包装。在Java中,类加载器是负责加载类到JVM(Java虚拟机)的核心组件。自定义类加载器允许开发者根据...

    java加壳的问题

    然而,近年来的发展表明,通过某些特定的技术手段,Java也是可以实现加壳的。具体来说,可以考虑以下两种方案: 1. **使用JNI技术**:通过Java Native Interface (JNI)接口调用C/C++代码,进而实现在C/C++中对Java...

    java 加壳工具将jar包二次加密,让打出来的jar包无法被查看

    此工具可以针对java打出来的jar包进行二次打包,实现jar包保护,防止别人反编译进行代码抄袭,保护知识产权

    关于Java加壳和代码混淆

    所谓加壳,即是先将程序代码加密,然后用特定的程序加载器,将代码解密后加载进内存,这样能够在避免代码的反编译,当然,有加壳东西,也有解壳东西,尽管不能避免crack,但仍然给代码增加一层有力的维护。...

    加壳检查工具 加壳检查工具 加壳检查工具

    然而,加壳也可能被恶意软件利用来逃避检测,因此“加壳检查工具”就显得尤为重要。 加壳检查工具的主要功能是检测一个程序是否被加壳处理,以及识别可能存在的后门或恶意代码。这类工具通常通过分析文件的头部信息...

    软件加壳论文 有需要的就来拿

    软件加壳 论文有点乱,有需要就拿去 有些程序的试用版每次运行都有时间限制,例如运行10分钟或20分钟就停止工作,必须重新运行该程序才能正常工作。这些程序里面自然有个定时器来统计程序运行的时间。 这种方法使用...

    C# 项目加壳 winform 软件加壳

    给winfrom做的项目 进行加壳 项目加壳,保证了软件的代码的安全,有漏洞无风险

    C#实现软件加壳

    在IT行业中,"软件加壳"是一种保护程序不被逆向工程分析或篡改的技术。在C#中实现软件加壳并非易事,因为C#编译后的代码是.NET的MSIL(中间语言),相对于汇编语言,更容易被反编译工具解析。然而,通过一些策略和第...

    加壳工具 Themida 2.2.9.0 (TMD加壳工具)

    加壳工具,如Themida 2.2.9.0(TMD加壳工具),是IT行业中用于软件保护的一种重要技术。它的工作原理是通过在原始可执行文件(PE文件)周围添加一层外壳,以此来隐藏和混淆程序的原始代码,增加逆向工程的难度。在...

    菜鸟也来加壳免杀菜鸟也来加壳免杀

    菜鸟也来加壳免杀菜鸟也来加壳免杀菜鸟也来加壳免杀菜鸟也来加壳免杀菜鸟也来加壳免杀菜鸟也来加壳免杀菜鸟也来加壳免杀菜鸟也来加壳免杀菜鸟也来加壳免杀

    超级加壳工具GUI版!

    然而,它也被用于恶意软件的隐藏,因此,合法和正当使用加壳工具显得尤为关键。 本文将详细介绍一款名为“超级加壳工具GUI版”的高级工具,这款工具提供图形用户界面版本,以一种简便的方式对可执行文件进行加壳...

    WinlicenseFiles 加壳 教程WinlicenseFiles 加壳 教程 WinlicenseFiles 加壳 教程

    WinlicenseFiles 加壳 教程WinlicenseFiles 加壳 教程WinlicenseFiles 加壳 教程WinlicenseFiles 加壳 教程WinlicenseFiles 加壳 教程WinlicenseFiles 加壳 教程WinlicenseFiles 加壳 教程WinlicenseFiles 加壳 教程

    加壳工具Themida.zip

    软件加壳、加壳工具

    sysshell驱动加壳程序源代码

    通过研究这些源代码,开发者可以了解如何在驱动程序上实施加壳技术,同时也可以深入理解Windows驱动程序的内部工作原理,以及如何与操作系统交互。然而,这样的技术应当谨慎使用,以免违反法律法规或道德规范。在...

    检测加壳工具

    总之,检测加壳工具是网络安全领域的重要工具,它们帮助我们识别和对抗加壳的恶意软件,同时也促进了软件安全性和知识产权的保护。随着加壳技术的不断发展,这类检测工具的更新和优化将持续进行,以适应新的挑战。

    易语言UPX编译自动加壳

    开发者需要知道如何在易语言中执行外部命令,如调用UPX的命令行接口,指定输入文件(未加壳的程序)、输出文件(加壳后的程序)以及加壳参数。此外,为了使加壳过程更加智能,可能还需要获取程序的安装目录,以便将...

    调试加壳程序的dmp文件

    加壳后的程序crash生成的dmp文件不好在VC++上调试,这里是一个转换程序,转换加壳后的dmp到加壳前的dmp。以便更方便调试它。 用法如下: DmpMatch.exe xxx.dmp my_tmd.exe 第一个参数是dmp文件名,第二个参数是未...

    kc加壳助手_加壳的_kc加壳助手_

    kc加壳助手 用于给exe软件、程序加密 加壳

    加壳软件加壳软件加壳软件

    加壳软件加壳软件加壳软件加壳软件加壳软件加壳软件加壳软件加壳软件加壳软件加壳软件加壳软件加壳软件

Global site tag (gtag.js) - Google Analytics