首页
社区
课程
招聘
[原创]JAVA程序的简单破解说明
发表于: 2008-1-8 01:51 15474

[原创]JAVA程序的简单破解说明

2008-1-8 01:51
15474

Crinity 是 3RSOFT 公司所开发的一套基于 Postfix MTA 的大型企业邮件系统, 核心程序基于
Postfix + sasl pwcheck_method + james 构建, 采用 JAVA 开发 Webmail client. 该系统标
准版本 500 用户售价达到 3 万元. 具体的介绍大家可以去 http://www.3rsoft.com.cn 查看.

3RSOFT 网站提供了 Crinity 7.0 for Linux 试用版本的下载, 试用版和正式版本的区别是试
用版只支持 5 个用户, 其他无任何限制.

破解说明: 以下过程你需要有一定的 Linux, Java, 和汇编基础并熟练掌握 DJ, IDA 和 Uedit

1, 按照说明文档在 Redhat Linux 9.0 系统下安装了这套邮件系统

2, 进入系统后台管理界面, 利用管理员帐户成功的注册了 5 个用户

3, 当添加第 6 个用户时系统提示 current user number is biger than license number

4, 利用 DJ Java Decompiler 对所有 JAVA CLASS 文件进行反编译得到 JAVA 程序代码

5, 搜索文本字串 current user number is biger than license number

6, 在 AdminUser.class 中发现关键代码 (注册限制在多个文件中存在这里只以此文件为例)

        String s8;
        if(i < usermodel._quotaTotal)
            usermodel._quotaTotal = i;
        if(usermodel._quotaTotal > domainmodel._maxUserQuota)
            usermodel._quotaTotal = domainmodel._maxUserQuota;
        obj = new UserHandler(usermodel);
        super.sys = SystemConfiguration.getConfiguration();
        String s5 = sys.getString("License");
        l = u_DAO.getUserTotalNum("ALL", 0);
        if(s5 == null) // <-- 在 crinity.conf 中把 License 设置为空即可绕过下面的程序
            break MISSING_BLOCK_LABEL_684;
        LKChecker lkchecker = new LKChecker();
        lkchecker.setVerbose(true);
        lkchecker.parse(s5);
        Boolean boolean1 = lkchecker.checkUserLimit(l);
        if(boolean1 != null && boolean1.booleanValue()) // <-- 非关键判断我们只需在 crinity.conf 中把 License 设置为空即可绕过
            break MISSING_BLOCK_LABEL_756;
        context.put("msg", "this license donot allow you add user");
        s8 = "t_error_msg.html";
        if(u_DAO != null)
            u_DAO.freeResource();
        if(d_DAO != null)
            d_DAO.freeResource();
        if(t_DAO != null)
            t_DAO.freeResource();
        return s8;
        String s6;
        if(l <= 5)  // <-- 关键判断
            break MISSING_BLOCK_LABEL_756;
        context.put("msg", "current user number is biger than license number");
        s6 = "t_error_msg.html";
        if(u_DAO != null)
            u_DAO.freeResource();
        if(d_DAO != null)
            d_DAO.freeResource();
        if(t_DAO != null)
            t_DAO.freeResource();
        return s6;

7, 分析上述代码不难发现关键判断语句为 if(l <= 5) 这里 5 表示系统中现有注册用户数如条件成立则跳过下面的错误提示及返回

8, 查看此文件 import 发现试用版缺少以下 class

        import com.r3s.sls.checker.LKChecker;
        import com.r3s.xdk.configuration.Configuration;

9, 以上结果告诉我们除非自行恢复这两个缺少的类文件重写所有函数否则我们不可能正常的修改并重新编译 AdminUser.java

10, 得到结论必须设法利用对源文件 AdminUser.class 进行反汇编, 并通过直接修改 class 文件完成破解

11, 利用 IDA pro 对 AdminUser.class 进行反汇编, 在汇编代码中查找 CreateUser 函数发现以下指令

        iconst_5
        if_icmple met005_756

12, 按照以上结果我们知道 iconst_5 表示将整形常量 5 压入栈, if_icmple 表示做小于等于判断

13, 查找 JVM 手册 http://java.sun.com/docs/books/jvms/ 发现此处语句的 HEX 表示方式应该为 08A4

14, 我们需要将这里的代码修改成类似 if(l > -1) 的形式让判断语句永远成立 (因为已注册用户数永远大于 -1) 对应汇编代码为

        iconst_ml
        if_icmpgt met005_756

15, 查询 JVM 手册后 HEX 表示方式应该为 02A3

16, 利用 Ultraedit 的 HEX 编辑功能查找 08A4 修改为 02A3 并保存

17, 将保存后的 AdminUser.class 覆盖原文件

18, 按此方法依次修改 AdminConf.class AdminUser.class DomainUser.class UserHandler.class 完成破解

我是新手一直看各位DX的文章学了不少,发现论坛里讨论 JAVA 程序破解的帖子比较少于是发了一篇欢迎大家拍砖!


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (33)
雪    币: 47147
活跃值: (20465)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
新手第一篇心得文章,思路比较清晰,鼓励一下。
2008-1-8 09:35
0
雪    币: 328
活跃值: (39)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
3
不错,这么长时间终于又发现了一篇Java的文章
实际上这次的分析是通过

反编译类文件取得源代码,通过阅读理解 找到关键点 尝试重编译,在困难的情况下进行类文件的二进制修改

其实可以有很多种方式,比如使用 jasper/jasmin 进行类文件的字节代码编译,这样只要是找到了关键的地方,就可以进行修复了,还可以通过原代码找到授权的位置,如果没有,那么可以强制修改了
2008-1-8 09:43
0
雪    币: 186
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
顶一个,尽管对JAVA一窍不通
2008-1-8 12:01
0
雪    币: 1919
活跃值: (901)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
5
谢谢分享java心得,上次就被java程序搞得头大~~~
2008-1-8 12:10
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
java的破解,学习!
2008-1-8 12:11
0
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
多谢老大的鼓励今后有什么心得还会继续和大家分享
2008-1-8 13:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢了,支持
2008-1-9 14:42
0
雪    币: 609
活跃值: (237)
能力值: ( LV12,RANK:441 )
在线值:
发帖
回帖
粉丝
9
学习了……呵呵……虽然还不会Java……
2008-1-9 17:44
0
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
学习了,另



使用 jasper/jasmin 进行类文件的字节代码编译  这是指什么?工具吗?
2008-1-9 23:27
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
这个java程序是不是没混淆过?
2008-1-10 00:15
0
雪    币: 188
活跃值: (32)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
应该没混淆过?要不然不可能改了!!
2008-1-10 08:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
才開始碰觸,恭喜你有些心得了。
2008-1-10 11:47
0
雪    币: 328
活跃值: (39)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
14
首先不论是不是混淆的,他用16进制编辑器,确实可以屏蔽这种保护
2008-1-10 16:15
0
雪    币: 328
活跃值: (39)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
15
jasper 将class文件反汇编成字节代码,并且有一定的格式,通过编辑字节代码 添加 修改
等等,生成的文件 .j 文件,之后可以利用 jasmin 进行针对 .j 文件的编译,生成 class文件,对于图形化的操作的方式可以参看 reJ工具
2008-1-10 16:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
java的破解,学习!
2008-1-10 16:32
0
雪    币: 257
活跃值: (105)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
17
首先,搜索字符串没有必要全部反编译类文件,可以用winrar的搜索功能。
不管是exe还是dll或是class,只要没有加密串都能搜出来。
其次,类com.r3s.sls.checker.LKChecker和com.r3s.xdk.configuration.Configuration
也许可以根据调用代码直接模仿出来。
最后,AdminUser.class类中判断用户的代码没有贴全,有可能不用修改if(l <= 5) 这个地方
直接跳过去,因为修这个还是要麻烦一些:)
2008-1-11 00:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
谢谢了。。
2008-1-11 11:25
0
雪    币: 233
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
试试\看看\再说
2008-1-11 16:41
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
java程序相对还是容易上手一些,那就从java下手
2008-1-11 21:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
不过程序要被混淆过,那真要昏到
2008-1-11 21:41
0
雪    币: 200
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
恩对java不是很了解,没破过,现在就这些就够头痛了
2008-1-16 04:01
0
雪    币: 328
活跃值: (39)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
23
舵手兄好久不见了,真的很感谢你的回复,我现在才发现RAR的字符串查找功能真的不错,
比起自己写一个类文件字符串查找程序方便、快捷多了,太感谢了
2008-1-16 09:49
0
雪    币: 257
活跃值: (105)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
24
哈哈,怎么变这么客气?小窍门而已:)
2008-1-16 11:19
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
25
原来IDA还可以反JAVA
2008-1-16 11:46
0
游客
登录 | 注册 方可回帖
返回
//