Java程序的源代码很容易被别人偷看,只要有一个反编译器,任何人都可以分析别人的代码。本文讨论如何在不修改原有程序的情况下,通过加密技术保护源代码。
一、为什么要加密?
对于传统的C或C++之类的语言来说,要在Web上保护源代码是很容易的,只要不发布它就可以。遗憾的是,Java程序的源代码很容易被别人偷看。只要有一个反编译器,任何人都可以分析别人的代码。Java的灵活性使得源代码很容易被窃取,但与此同时,它也使通过加密保护代码变得相对容易,我们唯一需要了解的就是Java的ClassLoader对象。当然,在加密过程中,有关Java Cryptography Extension(JCE)的知识也是必不可少的。
有几种技术可以“模糊”Java类文件,使得反编译器处理类文件的效果大打折扣。然而,修改反编译器使之能够处理这些经过模糊处理的类文件并不是什么难事,所以不能简单地依赖模糊技术来保证源代码的安全。
我们可以用流行的加密工具加密应用,比如PGP(Pretty Good Privacy)或GPG(GNU Privacy Guard)。这时,最终用户在运行应用之前必须先进行解密。但解密之后,最终用户就有了一份不加密的类文件,这和事先不进行加密没有什么差别。
Java运行时装入字节码的机制隐含地意味着可以对字节码进行修改。JVM每次装入类文件时都需要一个称为ClassLoader的对象,这个对象负责把新的类装入正在运行的JVM。JVM给ClassLoader一个包含了待装入类(比如java.lang.Object)名字的字符串,然后由ClassLoader负责找到类文件,装入原始数据,并把它转换成一个Class对象。
我们可以通过定制ClassLoader,在类文件执行之前修改它。这种技术的应用非常广泛??在这里,它的用途是在类文件装入之时进行解密,因此可以看成是一种即时解密器。由于解密后的字节码文件永远不会保存到文件系统,所以窃密者很难得到解密后的代码。
由于把原始字节码转换成Class对象的过程完全由系统负责,所以创建定制ClassLoader对象其实并不困难,只需先获得原始数据,接着就可以进行包含解密在内的任何转换。
Java 2在一定程度上简化了定制ClassLoader的构建。在Java 2中,loadClass的缺省实现仍旧负责处理所有必需的步骤,但为了顾及各种定制的类装入过程,它还调用一个新的findClass方法。
这为我们编写定制的ClassLoader提供了一条捷径,减少了麻烦:只需覆盖findClass,而不是覆盖loadClass。这种方法避免了重复所有装入器必需执行的公共步骤,因为这一切由loadClass负责。
不过,本文的定制ClassLoader并不使用这种方法。原因很简单。如果由默认的ClassLoader先寻找经过加密的类文件,它可以找到;但由于类文件已经加密,所以它不会认可这个类文件,装入过程将失败。因此,我们必须自己实现loadClass,稍微增加了一些工作量。
二、定制类装入器
每一个运行着的JVM已经拥有一个ClassLoader。这个默认的ClassLoader根据CLASSPATH环境变量的值,在本地文件系统中寻找合适的字节码文件。
应用定制ClassLoader要求对这个过程有较为深入的认识。我们首先必须创建一个定制ClassLoader类的实例,然后显式地要求它装入另外一个类。这就强制JVM把该类以及所有它所需要的类关联到定制的ClassLoader。Listing 1显示了如何用定制ClassLoader装入类文件。
分享到:
相关推荐
总的来说,防止Java源码被偷窥的关键在于理解并利用Java的ClassLoader机制,结合加密技术,可以在不改变程序功能的前提下增强源码的安全性。通过自定义ClassLoader并实现即时解密,可以有效地保护代码免受反编译器的...
标签“防止 USB摄像头 偷窥”进一步明确了这款软件的核心功能,即对USB摄像头进行安全防护,避免被不法分子用于非法监控。 从压缩包子文件的文件名称列表来看,有两个关键文件: 1. UsbCamSecurity.dll:这是一个...
为了防止别人偷看你的电脑,写了这个小东西,目前自己用的还可以。 亲测可以正常使用 去忙别的事情的时候,打开它,它会在7秒之后检查你的鼠标有没有在动,如果在动就会锁屏。 等你忙完之后回到位置上,如果没有...
【隐藏代码】是U盘偷窥者主程序中的一个重要组成部分,它被用来躲避反病毒软件的检测。隐藏代码可以采用各种技术,如文件属性修改、文件隐藏、进程隐藏等,使恶意程序不易被发现。例如,文件可能被设置为系统文件或...
本人使用C#编写,可以吧文件加密并删除源文件,变成无法识别的二进制文件,以便别人偷看,比如"片",想看的时候自己在用恢复就行
QQ签名偷看器程序是一个基于PHP开发的小工具,主要用于查看QQ用户的历叐签名记录。在互联网技术中,数据采集和分析是常见的应用场景之一,这个程序就体现了这一特性。通过编程手段,它能够抓取并展示QQ用户过去设置...
Java反编译工具JD-GUI是一款非常实用的Java开发者工具,它可以帮助我们查看Java字节码(.class文件)的源代码,即使原始的源代码不可用或丢失。这个工具对于学习、调试和理解第三方库的内部工作原理非常有用。在Java...
总之,文件夹伪装与加密是保护个人隐私的重要手段,它通过改变文件夹外观和添加密码保护,有效地防止了私密文件被偷看。在数字化时代,每个人都应该了解并掌握这些基本的防护技巧,以保障自己的信息安全。
如何防止别人查看你的 QQ 聊天记录 在当今时代,QQ 聊天记录已经成为个人隐私的一部分,然而,如果不小心的话,这些记录就可能被别人查看,导致个人隐私泄露的风险。但是,如何防止别人查看你的 QQ 聊天记录呢?...
4. **编码解码**:为了隐藏通信内容和防止被拦截,源代码可能包括加密和解密算法,如AES、RSA等。 5. **事件驱动编程**:GUI(图形用户界面)部分可能基于事件驱动模型,如Windows的消息循环,使得软件能响应用户的...
Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能: 认证 - 用户身份识别,常被称为用户“登录”; 授权 - 访问控制; 密码加密 - 保护或隐藏数据防止被偷窥; 会话管理 - ...
标题 "偷窥各种桌面程序SPwdSpyDemo_Src" 提示我们这可能是一个关于桌面应用程序密码监测或安全漏洞的研究项目。这个项目的源代码可能包含了用于分析、监控或模拟桌面应用程序密码输入过程的代码。描述中同样重复了...
【标题】"桌面偷窥器"所提及的是一款软件,主要功能是远程监控或查看他人的桌面活动。这种类型的软件通常被用于企业管理员对员工的工作监控,或者在技术支持场景下远程协助用户解决问题。然而,未经同意的个人使用...
java实战开发1200例源码个人语言、脚本和内容 警告:这是一个个人项目,请自担风险。 不打算供其他人使用(但仍然可以随意偷看)。 该文件包含 实用程序库+平台抽象 LightScript 个人脚本语言 solsort.com 网站 注释...
最后,压缩包中的"QQ偷窥开源"可能是指这个项目的开源版本,意味着源代码是公开的,任何人都可以查看、学习甚至修改。开源项目促进了技术共享和社区协作,但同时也要求参与者尊重开源许可证的规定,不滥用代码或侵犯...
此外,源码分析还能帮助你识别潜在的安全漏洞,学习如何加固软件安全,防止被黑客利用。 总之,这个VC远控源码集合是一个宝贵的教育资源,它提供了深入了解网络远程控制技术的机会,同时也提醒我们在技术使用中应...
这个"手势解锁通用库android_Java_下载.zip"包含了实现这一功能的Java代码资源,可以帮助开发者在自己的Android应用中集成手势解锁的功能。现在,我们将深入探讨手势解锁的工作原理、实现方式以及如何在Android应用...
初学者可能会被源码的复杂性和多样性所震撼,特别是当打开Visual Studio(VS)查看MySQL源码时,可能会觉得代码风格各异,缺乏统一的规范。这其实反映了MySQL作为一款长期迭代的开源项目,由众多开发者共同贡献的...
7. **安全性与道德规范**:值得注意的是,创建“密码文本偷窥器”这种程序需谨慎,因为它可能涉及侵犯他人隐私,违反网络安全法规。在编程实践中,应遵循合法和道德的准则,尊重他人的数据安全。 通过学习和分析这...
而PostMessage函数则是异步的,消息会被放入消息队列,程序不会等待。在密码文本偷窥器中,可能通过这些函数来模拟用户操作,比如触发键盘事件,从而获取或修改密码文本框中的内容。 密码文本偷窥器的行为涉及到了...