能力值:
( LV2,RANK:10 )
2 楼
打包个EXE的吧
能力值:
(RANK:570 )
3 楼
看惯X86,反而不想看高级语言代码了。。
能力值:
( LV2,RANK:10 )
4 楼
java 到底有没有类似于OD的调试器可以直接调试jar文件??
我快找疯了
能力值:
( LV3,RANK:30 )
5 楼
jd-gui和rej无法打开,不知道咋破解
能力值:
( LV8,RANK:130 )
6 楼
喜欢JAVA的人少,我来吧。
先反编译Loader.class,写出解密函数,解密加密了的类。
package com.vhly.crackmes.cm4;
import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
public class decrypt {
public static void main(String[] args) {
String s1 = "c:/KeyFile.class";
try{
InputStream inputstream = new BufferedInputStream(new FileInputStream(s1));
BufferedInputStream bufferedinputstream = new BufferedInputStream(inputstream);
ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream(1024);
for(int i = 0; (i = bufferedinputstream.read()) != -1;)
{
i ^= 0xa8;
i ^= 0x63;
bytearrayoutputstream.write(i);
}
byte abyte0[] = bytearrayoutputstream.toByteArray();
inputstream.close();
FileOutputStream fout = new FileOutputStream(s1);
fout.write(abyte0);
fout.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
解密加密了的class,分析Main.class的actionPerformed方法和KeyFile.class的isVal方法就可以写出keygen.
package com.vhly.crackmes.cm4;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.security.MessageDigest;
import java.util.zip.CRC32;
import sun.misc.BASE64Encoder;
public class KeyGen {
public static void main(String[] args){
if(args.length != 1)
return;
String magic = "vhly[FR]'s CrackMe #4 KeyFile";
String name = args[0];
String serial = "";
long crcvalue = 0L;
try
{
StringBuffer stringbuffer = new StringBuffer();
stringbuffer.append("aAF#@QRAJSEFjkaos0dvjkl;asefQ$@#%@Q$T%Jmoa0pl_)(*&(^*%^%$");
stringbuffer.append(" ");
stringbuffer.append(name);
stringbuffer.append(" asdfjkl;asdfQ#$TSHSDFHGSdfgjkopasdu90zxcv");
StringBuffer stringbuffer1 = stringbuffer.reverse();
String s = stringbuffer1.toString();
MessageDigest messagedigest = MessageDigest.getInstance("SHA-1");
messagedigest.update(s.getBytes());
byte abyte0[] = messagedigest.digest();
messagedigest = null;
BASE64Encoder base64encoder = new BASE64Encoder();
String s1 = base64encoder.encodeBuffer(abyte0);
serial = s1;
CRC32 crc32 = new CRC32();
crc32.update(magic.getBytes());
crc32.update(name.getBytes());
crc32.update(serial.getBytes());
crcvalue = crc32.getValue();
KeyFile kf = new KeyFile();
kf.setCRC(crcvalue);
kf.setName(name);
kf.setSerial(serial);
FileOutputStream fos = new FileOutputStream("c:/key.reg");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(kf);
fos.close();
oos.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
运行需要KeyFile.class
package com.vhly.crackmes.cm4;
import java.io.Serializable;
import java.security.MessageDigest;
import java.util.zip.CRC32;
import sun.misc.BASE64Encoder;
public class KeyFile implements Serializable
{
public KeyFile()
{
magic = "vhly[FR]'s CrackMe #4 KeyFile";
name = "vhly[FR]";
serial = "null";
crcvalue = 0L;
}
public final String getName()
{
return name;
}
public final void setName(String s)
{
name = s;
}
public final void setSerial(String s)
{
serial = s;
}
public final void setCRC(long l)
{
crcvalue = l;
}
public final boolean isVal()
{
CRC32 crc32 = new CRC32();
crc32.update(magic.getBytes());
crc32.update(name.getBytes());
crc32.update(serial.getBytes());
long l = crc32.getValue();
crc32 = null;
if(l != crcvalue)
return false;
StringBuffer stringbuffer = new StringBuffer();
stringbuffer.append("aAF#@QRAJSEFjkaos0dvjkl;asefQ$@#%@Q$T%Jmoa0pl_)(*&(^*%^%$");
stringbuffer.append(" ");
stringbuffer.append(name);
stringbuffer.append(" asdfjkl;asdfQ#$TSHSDFHGSdfgjkopasdu90zxcv");
StringBuffer stringbuffer1 = stringbuffer.reverse();
stringbuffer = null;
String s = stringbuffer1.toString();
stringbuffer1 = null;
try
{
MessageDigest messagedigest = MessageDigest.getInstance("SHA-1");
messagedigest.update(s.getBytes());
byte abyte0[] = messagedigest.digest();
messagedigest = null;
BASE64Encoder base64encoder = new BASE64Encoder();
String s1 = base64encoder.encodeBuffer(abyte0);
base64encoder = null;
if(s1.equals(serial))
return true;
}
catch(Exception exception)
{
return false;
}
return false;
}
private String magic;
private String name;
private String serial;
private long crcvalue;
}
能力值:
( LV8,RANK:130 )
7 楼
2006-12-07, 09:59:20
居然才发现06年的东西