一起学习
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;
}
}
下载本文示例代码
关于破解JShrink 2.36关于破解JShrink 2.36关于破解JShrink 2.36关于破解JShrink 2.36关于破解JShrink 2.36关于破解JShrink 2.36关于破解JShrink 2.36关于破解JShrink 2.36关于破解JShrink 2.36关于破解JShrink 2.36关于破解JShrink 2.36关于破解JShrink 2.36
阅读(225) | 评论(0) | 转发(0) |