新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论Java, J2SE, J2ME, J2EE, 以及Eclipse, NetBeans, JBuilder等Java开发环境,还有JSP, JavaServlet, JavaBean, EJB以及struts, hibernate, spring, webwork2, Java 3D, JOGL等相关技术。
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Java/Eclipse 』 → Java程序的加密和反加密 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 2702 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: Java程序的加密和反加密 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     admin 帅哥哟,离线,有人找我吗?
      
      
      
      威望:9
      头衔:W3China站长
      等级:计算机硕士学位(管理员)
      文章:5255
      积分:18407
      门派:W3CHINA.ORG
      注册:2003/10/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给admin发送一个短消息 把admin加入好友 查看admin的个人资料 搜索admin在『 Java/Eclipse 』的所有贴子 点击这里发送电邮给admin  访问admin的主页 引用回复这个贴子 回复这个贴子 查看admin的博客楼主
    发贴心情 Java程序的加密和反加密

    ● Java程序的加密和反加密发信人: diaochong (静静的雕虫~~小猪), 信区: J2EE
    标  题: Java程序的加密和反加密
    发信站: BBS 水木清华站 (Tue Mar 30 09:43:45 2004), 站内

    【 以下文字转载自 JavaClub 讨论区 】
    发信人: neek2000 (泥壳), 信区: JavaClub
    标  题: Java程序的加密和反加密
    发信站: BBS 水木清华站 (Sun Mar  2 13:12:32 2003), 转信

    Java程序的加密和反加密

    neek2000@SMTH
    neek@sina.com
    2003.3.2
    =========================================================================

        写在前面的话:写这篇文档的目的是让大家能更深入的了解Java技术,而不是教你怎
    么去破解Java程序;武器没有罪过,要看是好人用它还是坏人用它。

        首先我们来看看Java程序的反加密,也就是通常所说的Crack过程,只有明白了这个
    过程,我们才能有效的对我们的程序进行加密。

        通常我们得到的Java程序的Crack包有两种,一种属于KeyGen(注册码生成器)、一
    种属于替换修改;

        我们先看第一种,当我们找到一个应用程序的KeyGen的时候我们总是很佩服那个做出
    KeyGen的人,觉得他很厉害,但是你仔细分析一下,为什么他能做出KeyGen呢?只有
    他对这个Java程序的加密算法了解的非常清楚;这种人有哪些呢?一个是那个公司里面的
    人,那不可能,除非内讧,还又呢,就是猜想,反推,这个可能吗?呵呵,更不可能,那
    这个算法从哪里来呢?呵呵,往往泄漏秘密的就是秘密本身……回过头来想想,Java应用
    程序怎么知道你输入的
    注册码是否正确呢?呵呵,那你就该从应用程序入手……
    得到的它的加密算法,自然KeyGen就不在话下了……(但是这也有列外,如果它是用的公
    钥秘钥对加密的,就没有办法喽,只能用第二种方法。)

        这种办法只适合对付只要一个注册号,别的什么都不要的情况,经典代表Borland
    JBuilder & Optimizeit Suite


    再看第二种,为什么要用替换修改?我们是修改了那部分呢?不用想,肯定是License验
    证的部分,为什么我们不像上面的方法那样找加密算法呢?原因有两种:(1)使用上面
    的办法搞不定;(2)Java程序不仅要Key,还有其他的License配置;遇到这种情况,我
    们只要找到用于License验
    证的类,进行修改替换就行了。

        这种办法使用于任何情况,经典代表BEA WebLogic

        经过上面的分析,我们的问题就集中了,关键就是怎么找到用于License验证的部分
    或加密算法的部分,我们需要3个工具:一个是Sun公司提供的标准JVM:),一个是你
    的耐心和细心:),一个是Jad(经典Java反编译工具)。

        第一步是定位,这也是最关键的一步,我们这里以Together For JBuilder Edition
    为例,启动Together,先看看长什么样子?喔,上来就问我要License;Ok,
    每关系,退出;找到Together的启动Bat文件,找到它的启动命令:java .....,OK,在
    Java启动的时候给一个参数:“ -Xrunhprof:cpu=times”,保存,在启动,还是要
    License,退出,这个时候,我们可以发现,在这个目录下多了一个“java.hprof.txt”
    文件,打开一看,就是我要的JVM的Dump文件,好多内容啊,没关系,慢慢看来。


    我们可以看见这个文件里面有好多熟悉的东西啊:java.*/com.sun.*/javax.*等等,但这
    个不是我们关心的,我们要的是com.togethersoft.*或者是一些没有包名的zd.d等等。(
    这里插一句,几乎所有的Java应用程序都会混淆的,其实混淆的原理也很简单,我们后面
    再说。)先找找有没有
    License有关的,Serach一下,嘿嘿,果然,474行:com.togethersoft.together.impl.i
    de.license.LicenseSetup.execute([DashoPro-V2-050200]:Unknown
    line),Ok上那堆classpath中的Jar包里面找一下吧(推荐用WinRAR),找到了之后用Jad
    反编译,一看,这个没有混淆,但是用了一个zae的类,这个看名字就知道混淆过了,先
    不理它,再看看下面一句IdeLicenseAccess.setLicense(zae1),Ok接着找到
    IdeLicenseAccess,哈哈,就这点名
    堂,所有的License验证都是走的这个类,面向对象的思想不错,呵呵:)


    定位定完了,接下来的事情就是按猜想的方法修改这两个类,屏蔽掉LicenseSetup里面
    execute方法的实际内容,修改IdeLicenseAccess,让多有的验证都返回true,然后编译
    ,替换;不要高兴太早,这还没有完呢,要有责任心!!启动Together,果然,这下不要
    License了,有启动画面,
    进去了,但是一片灰色,怎么回事,一看控制台,一堆错,没关系,就怕不出错,查找根
    源,还有一个IdeLicenseUtil类出了问题,再反编译,修改,替换;这下搞定了。再启动
    ,测试一下,OK。

        就这样,一个Java应用程序搞定了。看看其实也很简单。

        再来说说混淆,大家可能都知道没有经过混淆的Java的Class反编译回来连方法和变
    量的名字都不会变,这是什么原因呢?这就要追述到Class文件的结构了,简单来说,
    Class文件种包含又一个常数池(constant
    pool)这个里面就存放了变量和方法的名称等一下和Class相关的东西,我们通常所说的
    混淆就是用一种工具把这个常数池里面的东东弄的胡涂一点,这样就能骗过反编译器和你
    ,呵呵:)这就是为什么有时候反编译回来的东西编译不过去的原因。
    完美的办法进行加密的,其实不然,我们必须遵循一些原则,才能有效的保护你的产品。

        原则一,尽量使用公钥和秘钥对进行加密;
        原则二,不要在加密验证的部分使用面向对象思想:)把验证的方法写在程序的各个
    角落,并标注为private final void,让编译器替你处理成内联方法;
        原则三,尽可能的大幅度混淆:)找个好点的混淆器;

        就这些吧,要是有谁对产品的加密有问题,我可以提供咨询,呵呵:)

    --

    ※ 修改:·qyjohn 于 Mar 30 09:43:54 修改本文·[FROM:   219.238.203.*]           
    ※ 来源:·BBS 水木清华站 smth.edu.cn·[FROM: 166.111.208.40]                    

    索引页面|上一篇|下一篇


       收藏   分享  
    顶(0)
      




    ----------------------------------------------

    -----------------------------------------------

    第十二章第一节《用ROR创建面向资源的服务》
    第十二章第二节《用Restlet创建面向资源的服务》
    第三章《REST式服务有什么不同》
    InfoQ SOA首席编辑胡键评《RESTful Web Services中文版》
    [InfoQ文章]解答有关REST的十点疑惑

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/9/23 0:40:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Java/Eclipse 』的所有贴子 点击这里发送电邮给Google AdSense  访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2025/9/13 8:08:03

    本主题贴数1,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    78.125ms