能力值:
( LV2,RANK:10 )
|
-
-
2 楼
两个crackme不都有Solution了
你的代码混淆貌似不起作用。
|
能力值:
( LV9,RANK:210 )
|
-
-
3 楼
不能因为已经有解决方法,就不去研究破解了,那么我们只是去读 solution
就是和看看书,不去实践邮什么两样
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
我的意思是现在的两个Crackme难度不够大,很快就有Solution,用JAD反编译,根本没有你说的代码混淆,虽然提示字符串加密了,但在第一个中没有作用,根据代码都可以猜出来是啥提示。在第二个中
由于加密字串参与运算,作用才体现出来。
----------
第一个:
if(s1.length() <= 3)
{
JOptionPane.showMessageDialog(this, I.I(12));//猜测提示用户名长度不能小于3
return;
}
BASE64Encoder base64encoder = new BASE64Encoder();
String s3 = base64encoder.encode(s1.getBytes());//编码用户名
byte abyte0[] = s3.getBytes();//Base64编码后的用户名
byte abyte1[] = s2.getBytes();//输入的序列号
boolean flag = false;//标志位
if(abyte0.length != abyte1.length)//输入的序列号的长度如果和用户名Base64编码后的长度不一样,则出错
{
JOptionPane.showMessageDialog(this, I.I(47));//猜测:提示序列号错误
return;
}
for(int i = 0; i < abyte0.length; i++)
{
flag = abyte0[i] == abyte1[i];//按位比较
if(!flag)//只要有一位不同就提示出错
{
JOptionPane.showMessageDialog(this, I.I(47));//猜测:提示序列号错误
return;
}
}
if(!flag)
{
JOptionPane.showMessageDialog(this, I.I(47));//猜测:提示序列号错误
return;
} else
{
JOptionPane.showMessageDialog(this, I.I(63));//猜测:提示注册成功
return;
}
----------------
第二个:
if(s1.length() <= 3)
{
//ReCompile,看看都是啥?
//JOptionPane.showMessageDialog(this, I.I(47));
//JOptionPane.showMessageDialog(this, I.I(51));
//
JOptionPane.showMessageDialog(this, I.I(12));
return;
}
byte abyte0[] = null;
try
{
MessageDigest messagedigest = MessageDigest.getInstance(I.I(47));//对java不太了解,这里是定义编码方式?这里加密字串就起作用了
messagedigest.update(I.I(51).getBytes());
messagedigest.update(s1.getBytes());
abyte0 = messagedigest.digest();
}
catch(Exception exception) { }
CRC32 crc32 = new CRC32();
crc32.update(abyte0);
long l = crc32.getValue();
//添加一句,然后ReCompile,注册码自显示:)
JOptionPane.showMessageDialog(this,Long.toString(l, 36));
//
long l1 = Long.parseLong(s2, 36);
boolean flag = false;
if(l / l1 == 1L)
flag = true;
else
flag = false;
if(!flag)
{
JOptionPane.showMessageDialog(this, I.I(60));//出错
return;
} else
{
JOptionPane.showMessageDialog(this, I.I(76));//成功
return;
}
-----------
|
|
|