关于破解JShrink 2.36

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; } } <淘宝热门商品:
 

188.00 元  

脚踏运动-专卖品牌折扣店(已加入消费者保障计划)

08款 耐克5折=nike WMNS LEGEND 板鞋 女 311958-193 包邮+赠品

 

268.00元  

Shanghai 秀卡蒂 女性健康購物中心 瘦身減肥

来源:程序员网

小小豆叮

0 Responses to "关于破解JShrink 2.36"

发表评论