好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 Kali-J 于 2016-9-18 13:05 编辑
参考了F8大神的思路,但是等到真正动手,逆向分析写代码的时候才发现知道怎么做和真正做起来还是蛮大距离的
分析的思路我就不说了……太麻烦了……看代码吧……真的有兴趣的可以留言
和吾爱的朋友们讨论之后发现上传的附件有些问题,打包有错,我会更新附件并上传,朋友们也可以用我贴出来代码编译运行。同时发现因为我们在没有购买full版本的时候只能下到demo版本,这两个版本的代码是不一样的,所以即使激活了也只是一个使用期限很长的demo版本。还是在论坛下载流出的full版本吧,给各位朋友带来困扰了
先贴上代码
Decrypt.java
[Java] 纯文本查看 复制代码 import com.sun.xml.internal.ws.server.AbstractWebServiceContext;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;
import java.util.concurrent.SynchronousQueue;
public class Decrypt{
//public static final String str = "Copyright (c) 1993, 2015, Oracle and/or its affiliates. All rights reserved. ";
public static void main(String[] args) {
long IP = BX.IP();
int beforez=(((int)(IP >> 32))) - 28363537 + 1432778632 & 2147483647;
long beforezint = beforez ;
beforezint = beforezint << 32;
beforezint = ((int)(((int)BX.IP())+ 1460952406)) + beforezint;
int time = ((int)(System.currentTimeMillis() / 1000));
time = (time + 300000000 - 3456000)^1450416845;
int check=0;
for (int i = time;i > 0 ; i >>= 4){
check += i & 15;
}
check = check % 10;
System.out.print(String.valueOf(beforezint)+"Z"+String.valueOf(time)+String.valueOf(check));
}
}
BX.java
[Java] 纯文本查看 复制代码 import java.io.*;
import java.security.NoSuchAlgorithmException;
import java.util.Scanner;
import java.security.MessageDigest;
import java.nio.*;
public final class BX {
private static long[] GS = null;
private static String osName = null;
private static final long LK = 121820464987384338L;
private static String userName;
static { // static修饰的代码块为静态代码块,该类被加载时就会执行该代码块
int v0 = 2;
osName = System.getProperty(Decode.decode(new byte[]{44, 28, 94, 23, 19, 4, 2}, v0, 129), "");
userName = System.getProperty(Decode.decode(new byte[]{54, 28, 21, 11, 92, 7, 6, 5, 17}, v0, 73), "Lambda");
if(!osName.startsWith(Decode.decode(new byte[]{-123, 62, 7, 10, 11, 24, 4}, 1, 210))) {
v0 = 1;
}
GS = new long[v0];
for(v0 = 0; v0 < GS.length; ++v0) {
GS[v0] = -1;
}
}
public BX() {
super();
}
private static long IP(int arg7) {
long result=0;
int v1;
int v6 = 3;
int v5 = 2;
String v0 = null;
if(arg7==0){
v1 = 23;
try {
v0 = BX.IP(Decode.decode(new byte[]{52, 2, 25, 26, 82, 10, 20, 24, 6, 79, 76, 22, 74,
84, 17, 94, 92, 71, 12, 85, 71, 89, 85}, 2, 65), Decode.decode(new byte[]{40,
0, 28, 13}, 1, 125)) + "__" + BX.ry();
}
catch(Exception v1_1) {
}
if(v0 == null) {
v0 = Decode.decode(new byte[]{15, 14, 29, 27, 22, 8, 43, 9, 25, 66, 76, 2}, v5, 107) + "__" +
BX.userName;
}
try {
MessageDigest v1_2 = MessageDigest.getInstance("MD5");
v1_2.update(v0.getBytes());
ByteBuffer v0_2 = ByteBuffer.wrap(v1_2.digest());
v0_2.order(ByteOrder.LITTLE_ENDIAN);
result = v0_2.getLong() & 9223372036854775807L;
}
catch(NoSuchAlgorithmException v0_1) {
result = 0;
}
return result;
}
if(arg7 != 1) {
if(v0 == null) {
v0 = Decode.decode(new byte[]{15, 14, 29, 27, 22, 8, 43, 9, 25, 66, 76, 2}, v5, 107) + "__" +
BX.userName;
}
v1 = 3;
try {
MessageDigest v1_2 = MessageDigest.getInstance("MD5");
v1_2.update(v0.getBytes());
ByteBuffer v0_2 = ByteBuffer.wrap(v1_2.digest());
v0_2.order(ByteOrder.LITTLE_ENDIAN);
result = v0_2.getLong() & 9223372036854775807L;
}
catch(NoSuchAlgorithmException v0_1) {
result = 0;
}
return result;
}
try {
v0 = BX.ry();
}
catch(Exception v1_1) {
}
if(v0 == null) {
v0 = Decode.decode(new byte[]{15, 14, 29, 27, 22, 8, 43, 9, 25, 66, 76, 2}, v5, 107) + "__" +
BX.userName;
}
v1 = 3;
try {
MessageDigest v1_2 = MessageDigest.getInstance("MD5");
v1_2.update(v0.getBytes());
ByteBuffer v0_2 = ByteBuffer.wrap(v1_2.digest());
v0_2.order(ByteOrder.LITTLE_ENDIAN);
result = v0_2.getLong() & 9223372036854775807L;
}
catch(NoSuchAlgorithmException v0_1) {
result = 0;
}
return result;
}
private static String ry() {
return BX.IP(Decode.decode(new byte[]{11, 26, 4, 10, 67, 66, 11, 6, 28, 83, 71, 2, 17, 84, 83, 22,
23, 27, 8, 13, 2, 27, 24, 15, 7, 23}, 1, 124), Decode.decode(new byte[]{16, 10, 2, 16, 19,
5, 41, 29, 25, 66, 77, 17}, 2, 122));
}
public static long IP(){
long v2;
try {
if(BX.GS[0] < 0) {
BX.GS[0] = BX.IP(0);
}
v2 = BX.GS[0];
}
catch(Throwable v0) {
throw v0;
}
return v2;
}
private static String IP(String arg3, String arg4) {
Process process;
String v0 = null;
Runtime runtime = Runtime.getRuntime();
try {
process = runtime.exec(arg3.split(" "));
}
catch(IOException v1_1) {
return v0;
}
OutputStream v2 = process.getOutputStream();
InputStream v1_3 = process.getInputStream();
try {
v2.close();
}
catch(IOException v1_1) {
return v0;
}
Scanner v2_1 = new Scanner(v1_3);
try {
do {
if(v2_1.hasNext()) {
if(!arg4.equals(v2_1.next())) {
continue;
}
break;
}
v2_1.close();
return v0;
}
while(true);
v0 = v2_1.next().trim();
}
catch(Throwable v0_1) {
v2_1.close();
throw v0_1;
}
v2_1.close();
return v0;
}
}
Decode.java,这个字符串的解密代码是参考了这篇文章的
[Java] 纯文本查看 复制代码 public class Decode {
public static final String str = "Copyright (c) 1993, 2015, Oracle and/or its affiliates. All rights reserved. ";
public static String decode(byte[] bytes, int type, int dec) {
byte[] decBytes = new byte[0];
int bytesLegth = 0;
String reslut = "";
int count = 0;
try {
if(type != 0 && bytes.length != 0) {
if(type == 1) {
bytesLegth = bytes.length;
decBytes = new byte[bytesLegth];
byte byte1 = ((byte)dec);
while(count < bytesLegth) {
decBytes[count] = ((byte)(byte1 ^ bytes[count]));
byte1 = decBytes[count];
++count;
}
reslut = new String(decBytes, "UTF-8");
}else if(type == 2) {
bytesLegth = bytes.length;
decBytes = new byte[bytesLegth];
int index = 0;
while(count < bytesLegth) {
decBytes[count] = ((byte)(bytes[count] ^ (((byte)str.charAt(index)))));
index = (index + 1) % str.length();
++count;
}
reslut = new String(decBytes, "UTF-8");
}else{
throw new RuntimeException();
}
}
}catch(Exception excepion) {
reslut = new String(decBytes);
}
return reslut;
}
}
附上注册机
注册方法:
1、先在官网注册并下载一个40天试用版,注册的时候要写姓名和邮箱,记好
2、解压缩后运行,出现下图所示
3、去图上所示URL,把许可证数据和注册时所用信息填入,获得一个试用版Key,不用管
4、运行附件中的jar文件,得到一个Key,粘贴入许可证密钥中,点击verify即可。附件比较大,用网盘了http://pan.baidu.com/s/1bNjjyu
之所以要有步骤3,是为了把你的机器信息留在官方数据库中,这样才能更新。
注册成功
更新成功
|
免费评分
-
查看全部评分
本帖被以下淘专辑推荐:
- · 学习及教程|主题: 1126, 订阅: 1119
- · 分析示例|主题: 622, 订阅: 108
|