首页 > 语言 > 关键词 > 最新资讯 > 正文

如何有效防止Java程序源码被人偷窥?

2007-08-05 00:51 · 稿源:天极yesky

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装入类文件。

【Listing 1:利用定制的ClassLoader装入类文件】

以下为引用的内容:
// 首先创建一个ClassLoader对象
  ClassLoader myClassLoader = new myClassLoader();
  // 利用定制ClassLoader对象装入类文件
  // 并把它转换成Class对象
  Class myClass = myClassLoader.loadClass( "mypackage.MyClass" );
  // 最后,创建该类的一个实例
  Object newInstance = myClass.newInstance();
  // 注意,MyClass所需要的所有其他类,都将通过
  // 定制的ClassLoader自动装入

如前所述,定制ClassLoader只需先获取类文件的数据,然后把字节码传递给运行时系统,由后者完成余下的任务。

ClassLoader有几个重要的方法。创建定制的ClassLoader时,我们只需覆盖其中的一个,即loadClass,提供获取原始类文件数据的代码。这个方法有两个参数:类的名字,以及一个表示JVM是否要求解析类名字的标记(即是否同时装入有依赖关系的类)。如果这个标记是true,我们只需在返回JVM之前调用resolveClass。

【Listing 2:ClassLoader.loadClass()的一个简单实现】

以下为引用的内容:
public Class loadClass( String name, boolean resolve )
  throws ClassNotFoundException {
  try {
  // 我们要创建的Class对象
  Class clasz = null;
  // 必需的步骤1:如果类已经在系统缓冲之中,
  // 我们不必再次装入它
  clasz = findLoadedClass( name );
  if (clasz != null)
  return clasz;
  // 下面是定制部分
  byte classData[] = /* 通过某种方法获取字节码数据 */;
  if (classData != null) {
  // 成功读取字节码数据,现在把它转换成一个Class对象
  clasz = defineClass( name, classData, 0, classData.length );
  }
  // 必需的步骤2:如果上面没有成功,
  // 我们尝试用默认的ClassLoader装入它
  if (clasz == null)
  clasz = findSystemClass( name );
  // 必需的步骤3:如有必要,则装入相关的类
  if (resolve && clasz != null)
  resolveClass( clasz );
  // 把类返回给调用者
  return clasz;
  } catch( IOException ie ) {
  throw new ClassNotFoundException( ie.toString() );
  } catch( GeneralSecurityException gse ) {
  throw new ClassNotFoundException( gse.toString() );
  }
  }

  • 相关推荐
  • 大家在看
  • 印度千万粉丝大V吐苦水:没有TikTok将失去收入来源

    据BBC报道,自印度宣布禁用 59 款中国应用程序后,引发一些印度网红的抗议。多名在社交平台TikTok上拥有上千万粉丝的印度大V用户“大吐苦水”,他们很多都是靠短视频平台TikTok为生,这其中就包括网红Geet。

  • 研究:2019年全球电子垃圾增长创历史新高 达5910万吨

    根据周四发布的一份年度报告,全球堆积如山的废弃平板电视、手机等电子垃圾在 2019 年增长创下历史新高。

  • 贾跃亭宣布破产重组完成

    ​7 月 2 日,贾跃亭发布了名为《打工创业、重启人生,带着我的致歉、感恩和承诺》的公开信称, 6 月 26 日,经过近一年的努力,自己在美国申请的个人破产重组程序终于完成,重组方案正式生效,同时债权人信托也正式设立并开始运营。

  • ​大神winter(程劭非)主持开课吧“Web前端会客厅”

    如今,前端领域正在经历由 Angular、React、Vue、Webpack等技术驱动的高速发展阶段,整个前端领域就像行驶在高速公路的汽车。而正是由于前端技术变化太快,高级前端工程师的成长速度可能跟不上企业的需要,许多前端开发者也高呼“学不动了”。其实,正确的学习方向大于无谓的努力,有了一个好的方向,成功来得比想象的更快,学习前端技术也是如此。为了让前端人更深刻了解当下前沿技术,跟上前端的生态演化的速度,数字化人才在线教育平台—?

  • inSona发布智慧生态照明系统 破解照明渠道智能化转型痛点

    金鸡湖畔,掌声阵阵。 6 月 18 日,inSona智慧生态照明系统在苏州中茵皇冠假日酒店重磅发布。发布会从融合、创新、落地三个维度对传统照明渠道向智能照明渠道转型过程中所面临到的产品痛点、技术痛点、服务痛点进行了深入刨析,引起了行业从业们的极大共鸣。inSona全新颠覆式的智慧生态照明系统重磅发布,凭借极简的无线组网方式,以及超强的智能化场景构建能力,推动智能家居渠道的升级转型。inSona智慧照明生态,填补智能家居渠?

  • 58同城:多地坚持“房住不炒”基调,购房者的春天要来了吗?

    在“房住不炒”的基调下,楼市发展的“稳”成为今后最为核心的方向。近几年,各地政府调控楼市措施层出不穷,房屋价格也是起起伏伏。面对当下尚未明朗的房价,购房刚需族们应该如何应对呢?无论楼市冷热,按需购买最重要实际上无论楼市上行还是下行,根据自己的目标买房绝对不会出错,按照自己的购房计划挑选位置、楼盘、面积大小,运算充足可以购置新房,预算偏少的可以考虑二手房。购置自用住房最重要的还是买自己买得起的,需要

  • 7月6日双星伴月什么时候观测 双星伴月观测时间地点汇总

    2020年7月份将是观测太阳系行星的最好时机,木星、土星、金星、水星等将相继迎来全年最佳观测期。其中在7月5日晚至7月6日凌晨会出现双星伴月的天象,那么什么时间来观测比较好呢,以下我们来了解下具体的时间。

  • “华为”和“荣耀”的区别盘点!不同定位相同品质

    有人称荣耀是华为的“亲儿子”,实际上两者是并肩作战的“亲兄弟”。华为和荣耀同属于华为集团,是华为消费者业务部门下两个独立的终端品牌。“华为”和”荣耀“的区别在很多方面都有体现:二者的品牌定位和目标人群都不同,定位上的不同,反应在产品设计、用户沟通风格、门店风格等各个方面。荣耀早在 2017 年就成为了中国互联网手机Top1,近几年,荣耀正在全场景、全球化、全渠道快速拓展。 2019 年,荣耀的线上线下业绩平分秋色

  • 荣耀笔记本MagicBook Pro“用力过猛”!轻薄、大屏、性能全满足

    随着人们生活质量的逐步提高,像荣耀笔记本MagicBook Pro2020 这种可以满足用户各种需求的笔记本更受消费者欢迎。它不仅是拥有大屏的轻薄笔记本,还是性能强悍的实力型笔记本,且具备多种实用功能,这样的笔记本在市场上并不多见,被消费者称为:"用力过猛过!"下面一起来了解一下这款荣耀笔记本,感受一下属于它的魅力。荣耀笔记本MagicBook Pro2020 质量非常好,A/B/C三面都是高品质铝合金材质,经过阳极氧化工艺加工后,保持铝合

  • 扔的都是真金白银!全球电子废弃物暴增:回收价值高达570亿美元

    如今在大街小巷时不时会听到这样的叫卖声:“回收旧手机,旧手机换菜刀,换剪子,换盆”。那么他们回收旧手机是干什么用呢?其实主要就是提取其中的重金属。但人们也许想不到,旧手机

  • 中商互联集团完成中科企创信息技术研究院收购

    据悉,中科企创(北京)信息技术研究院2012年7月25日成立于北京,该研究院成立8年以来,专注电子商务诚信认证、搜索引擎大数据研究。 据企查查公示,此次收购,由中商互联集团董事会成员代持中科企创(北京)信息技术研究院100%股权。据知情人士了解,中商互联集团近期动作频繁是为了终端点商宝及采商通客户增效,此次收购完成,或许有助于中商互联集团布局国内大数据产业互联网商业效果营销领跑者愿景进一步加快实现。

  • 伴宝乐硬核上市,后疫情时代为有机行业加速赋能

    2020年的开局,新型冠状病毒这只“黑天鹅”扑面而来,消费者健康观念发生巨变,品牌生存发展遭遇全新洗牌的种种考验。在这样一个充满不确定性的后疫情时代里,如何洞察市场大势,把握新需求和新机遇,如何不断地调整自己,应对挑战,从而获得逆势飞跃增长?炫耀性需求减弱,新的消费需求出现受疫情影响,用户的心理状态和生活状态都发生了双重改变,在这一过程中,消费需求也发生了变化。中国消费者对物质的追求不再那么强烈,他们

  • 供应链称苹果iPhone 12 Pro未配备120Hz高刷新率屏幕

    ​苹果12最新消息,据Display Supply Chain Consultants 创始人 Ross Young 在推特发布的消息称,目前来自供应链内部的消息显示 iPhone 12 Pro 系列并不会采用 120Hz 刷新率的屏幕,2021 iPhone 才会有。

  • 蚂蚁庄园今日答案7.3 切蛋糕时怎么做可以使切口平整且不粘

    ​2020年7月3日到了,今天是工作日的最后一天,支付宝蚂蚁庄园小课堂的问题也更新了,今天的问题是“切蛋糕时,怎么做可以使切口平整且不粘?”这个问题其实很好回答,两个选项看着就知道选哪个了,下面就来为大家科普一下。

  • 新手小白必看的良心评测:爆款电动牙刷美看Mcomb M2开箱

    电动牙刷现在已经成为日常生活中必不可少的电子产品之一,清洁能力比普通牙刷要高出几倍,尤其是声波电动牙刷。这一两年来经常开箱评测各种电动牙刷,今天要开箱的是一款被媒体称为中高端轻奢级品牌中的第一潮牌的美看Mcomb ,正在热卖的M2电动牙刷。第一、外观篇任何一款产品,给我们的第一印象就是外观,包装好不好看,是否高大上也会直接影响我们对品牌的看法。美看Mcomb其实是一个非常有爱的国内知名品牌,多少恋人都不是朝夕?

  • Decoverf皇家帝孚:超能妈妈的N个帅气时刻!

    你眼中的家是一个地方妈妈眼中的家是有你在的时光女子本弱,为母则强每一位妈妈都活成了超人的模样儿女眼中的超人妈妈在我的心里妈妈就像超人般的存在在我的生活中扮演各种各样的角色年幼的我总是喜欢乱涂乱画家里的墙面显然成为我的天然大画板但是妈妈从未阻止过我让我可以释放天性,尽情涂鸦!▲Decoverf皇家帝孚绘巧黑板漆妈妈宛若一个梦想家为我插上隐形的翅膀给我充足的自由发挥空间不压制想象,培养我的创作力!▲Decoverf皇家

  • 马斯克卖掉洛杉矶四套房产 今年靠卖房套现近亿美元

    7月1日,马斯克以6250万美元的价格将其在美国洛杉矶的四套房产脱手,自五月起马斯克已累计出售6处房产。5 月 1 日,马斯克发推文称将出售几乎所有的有形资产,将不再拥有房子。5 月 3 日,马斯克在洛杉矶的两座豪宅分别以 3000 万美元和 950 万美元在房地产网站出售。

  • 巨人网络:参股子公司完成收购重庆赐比 间接持有Playtika公司部分股权

    【TechWeb】7月3日消息,巨人网络发布公告称,参股子公司巨堃网络于近日通过增资完成了对重庆赐比商务信息咨询有限公司的收购。截至本公告日,巨堃网络拥有重庆赐比100%的权益。重庆赐比持有 Alpha Frontier Limited(以下简称“Alpha”)9,672 股 A 类普通股(占 Alpha 总股本的 42.04%)。巨人网络通过收购重庆赐比,间接持有Alpha部分股权。Alpha 旗下的 Playtika 是一家以大数据分析及人工智能 为驱动的高科技互联网公司,目?

  • 封禁TikTok之后:印度出现100种山寨它的App

    印度通信和信息技术部 6 月 29 日宣布,出于“安全”考虑,封禁包括抖音海外版TikTok在内的 59 款中国App。22 岁的萨达姆·汗(Saddam Khan)听到这个消息的时候,正在新德里火车站当搬运工,他的头上正顶着两只客户的公文包,“我真想把包扔了然后哭一场。”萨达姆·汗说。

  • 特斯拉否认解雇未复工员工 已结束降薪政策

    特斯拉北京展厅凤凰网科技讯 北京时间7月3日消息,特斯拉公司在周四澄清称,公司并未解雇因担心其加州工厂在新冠肺炎疫情期间的安全问题而选择在家的员工。特斯拉在一篇博文中称,在其工厂获准复工后,公司已经好几周时间不再使用考勤制度,并且为员工提供了一个“不会过问的居家时间窗口”,公司的防护措施符合美国县、州以及联邦层面的指导方针。《华盛顿邮报》周三报道称,三名特斯拉员工因为选择在家不去加州工厂上班而被解雇?

  • 参与评论
文明上网理性发言,请遵守新闻评论服务协议