放飞你的梦想--翱翔我的天空 | 会员登陆 | 繁體中文 | 站点地图 | 站长博客
 | 首页 | 文章中心 | IT 前沿 | 清怡画风 | 视频教程 | 资源下载 | 精彩图库 | 博客文赏 | 天空论坛 | 访客留言 | 音乐版 | 
    本站全新推出IT 前沿频道欢迎大家访问 地址 http://it.tkbbs.com  [风雪残士  2005年12月9日]            本站推出新浪VIVI收藏夹服务,欢迎使用  [风雪残士  2005年10月18日]        
您现在的位置: 翱翔翼站 >> 文章中心 >> 编程开发 >> 编程语言 >> java编程 >> 文章正文 今天是:
关于破解JShrink 2.36 【字体:
作 者:佚名 文章来源:网络 更新:2006-4-9 点击:






2005年3月中旬,我开始听说了有一种软件,可以对生成的jar文件进行保护.为了完善自己的知识,便决定使用这种叫做混乱器(Obfuscator)的东西.由于以前曾经作过一些逆向工程的活动.所以下载了一些混乱器进行研究.由于大多数混乱器,都使用自身来保护自己的发布版本.
所以这是研究和使用混乱器的一个捷径.首先接触的就是Jshrink由于其直接显示GUI界面所以最先使用.但是其网站中提供的下载版本,必须输入序列号之后才能正常使用.否则不能进行任何操作.
第一步,使用反编译器找出jar文件的主类(Main-Class): jshrink.jshrink.研究其中的代码.首先是public static void main(String args[])方法,发现其中有处理命令行部分的代码,同时我发现,Jshrink有加密类文件字符串的功能.同时调用时使用I.I.I(xxxx)方法.
如:System.out.println(I.I.I(1243));表示I.I.I()方法返回的是字符串对象.
第二步,解密字符串,找出软件的提示信息.为了方便我使用了注入技术(我自己定义的犯法),即制作一个类并且添加到jar包中,并且设置package路径与软件的包路径相同,即可使用I.I.I()方法.找出jshrink.jshrink类中所有I.I.I()方法的调用,并添加到自己的显示字符串内容的类中.生成解密字符串文件
第三步,根据解密的字符串替换反编译之后的源文件,找到软件中对于序列号判断的代码块. 在类中:
G CQSH;// ... 关键类
......
int s = CQSH.S();
switch(s)
{
case 0: //正确并且没有过期
case -1:
...
break;
case 1: //错误
.....
break;
case 2:
.....
break;
case 3:
.....
break;
}
由于想制作注册机,所以不进行爆破
第四步,找出G类中S()方法的生成方式,制作相应的注册机.
由于时间关系,就不详细介绍制作的思想了.只介绍注册的方法:
首先获取用户输入的序列号,格式为(分为两种)
第一种 使用15天方式 [yyyy/mm/dd yourInformat Serial] yyyy/mm/dd为注册的时间
第二种 无限制用户 格式同上
不同之处在于15天试用版 中yourInformat中包含'@'也就是电子邮件地址,无限制用户的用户信息中不能包含@字符

生成Serial的方法(设 s1=日期 s2=Information s3=serial)
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(s1);
md5.update(s2);
if(s2.indexOf('@')!=-1)
{
md5.update("sin"); //注意版本不同 字符串也不同
}
else
{
md5.update("cos"); // 此处值为2.36版
}
byte data[] = md5.digest();
StringBuffer sb = new StringBuffer();
for(int i1 = 0; i1 < data.length; i1++)
sb.append((char)(65 + (data[i1] & 0xff) % 26));
String s4 = sb.toString();
if(s3.equals(s4))
{
boolean flag = (s2.indexOf("@")!=-1);
if(flag == true) // 试用版
{
Data t1,t2;
t1 = System.current..(); //返回当前时间 忘了
te = ....; //通过s1生成注册时间
//比较如果超过15天则返回 3 即失败
}
else
{
return 0;
}
}
文章录入:风雪残士    责任编辑:风雪残士 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    相关文章
  • 全面理解Java中的String数据…

  • 关于hashCode()和equals()的…

  • 在Java中运用Hashtables

  • 转一篇自己的书评,关于《重…

  • 诊断 Java 代码:“杀手组合…

  • 关于runtime exception和che…

  • 了解 JAVA classloader

  • 用BeanShell实现公式管理

  • 关于Map和List的性能测试报告

  • BeanShell

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    最新文章 TOP10
    最新热门 TOP10
    最新推荐TOP10
    翱翔翼站拥有本站所有版权! Copyright © 2005 - 2008 5-IT.COM
    本站维护 :风雪残士

    浙ICP备05039908号
    努力打造国内最全的电脑技术资料库