能力值:
( LV9,RANK:210 )
|
-
-
2 楼
在论坛上搜一下 Java 就可以找到答案了
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
现在有一个问题,就是这个jar文件实在是大,67M之多,
解压后里面的子目录和文件太多了,想用jad和DJ把CLASS文件都反编译过来,
结果都失败了,
请教各位,如何进行?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
不知道,飘过。。。。。。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
我不晓得 飘过哦
|
能力值:
( LV6,RANK:90 )
|
-
-
6 楼
是不是一个uml软件?
你解压后不要用jad反编译全部的,看一下结构,有选择性的反编译。然后就是运气了。
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
对,是Visual Paradigm for UML 6.3 Enterprise Edition,肯定是用JAVA写的程序,
安装后有一个LIB目录,里面有一个vpplatform.jar的文件,用文件监视器可以看到,关键时刻,这个文件被频繁的调用,
所以想,主要的加密程序应该在这个里面!就是这个文件太大,67M,解压后一大群文件,都不知道是什么,
用“小颖”软件反汇编后,也找不到相关的提示字符串,
而且一些比较小的5K左右的CLASS文件,不能反编译,不知道为什么!
有个问题,这种JAVA写的程序,加密的主要函数有可能在exe或者DLL文件中吗?
现在有一些头绪了,知道注册后的LICENSE文件存放位置,而且是XML方式存放的,
但是不能随意更改,因为可能有验证程序,更改一个字母就注册不了了,
一开始怀疑是MD5,但是license文件里有VERIFY DATA给的是一个108字节的数据,
不知道是什么加密算法了!
不过可能肯定,这个验证加密算法肯定和keyfile导入时候用的加密算法不一样。
《加密与解密(第三版)》已经在半个月前买了,可惜没有JAVA的相关内容,遗憾!
第一个文件是注册时候需要导入的KEYFILE,
第二个文件是注册后,保存在硬盘里的LICENSE文件,文件里主要内容一个字符都不能改,改了LICENSE就无效了。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
高手给个解释
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
这两天,程序没破出来,JAVA的学习更深入了,什么都了解了,
看了将近2万行代码!!!
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
见过别人破解的java的程序,补丁打在dll文件上面
|
能力值:
( LV6,RANK:90 )
|
-
-
11 楼
这个软件不是很难,我几年前遇到一个高手可以写注册文件。所以我知道不是很难。
但自己没动过。是香港的公司的产品。因为放了一个60几M的jar,很有印象。
class 文件用jad 反编译。
|
能力值:
( LV6,RANK:90 )
|
-
-
12 楼
忘了说,如果只是用uml,那还有其他的工具magicdraw , eclipseUML,破解都好找。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
谢谢,楼上的兄弟,因为以前没整过JAVA破解,走了很多弯路。
现在用“小颖”这个软件已经把所有的CLASS文件都反编译了,
(小颖其实就是用的JAD,DJ Decompiler太难用!),
搜索字符串,但是找不到相关的东西,
后来经过看代码,原来他把那些dialog里的字符串都做成int数组,而且每个int值都加5,
这样都是乱码,真正要显示的时候,再每个int-5,最后直接转换成要显示的字符串ASCII,
真是费心呀!!!
其实已经找到了他的关键代码,就是找不到他注册的那段代码,可能是重载了某个函数,
不太好找!打算这两天再看看!
而且他一个文件夹下有5万个class文件,每个文件名都是类似"abcd.class"等等之类的,
不知道这个叫不叫混淆?
MagicDraw,EA,StarUML,ROSE,Visio都有,其实也有VP的社区版,就是想自己整个企业版,这样就没什么限制了。中国自己出的Trufun就不破解了。
|
能力值:
( LV9,RANK:210 )
|
-
-
14 楼
原来是 VP-UML 我现在已经做了,生成License的方式是这样的,
1、License 文件 是一个 xml文件,
2、Lic文件中 有几个关键点 , <VerifyKey> 这个标签,其中包含了,验证信息,
验证信息可以通过 vpplatform.jar 中的一个类文件的方法来生成,这样 Lic文件肯定没有问题
3、类包 v 中含有大量的类文建,由于时间限制,没有继续作,只是 重新编译了几个类文建,在配合Lic文件,就可以自己生成 lic 同时 控制 使用的时间了。
生成注册Lic文件的方法如下
private void keyGen() {
String name = textUserName.getText();
String email = textEMail.getText();
String pn = (String) cboProductName.getSelectedItem();
String pe = (String) cboEdition.getSelectedItem();
String pv = textProductVersion.getText();
boolean isExpire = expireCheckBox.isSelected();
String edays = textExpiredDays.getText();
String ps;
StringBuffer ** = new StringBuffer();
if(pn.startsWith("Smart Development Environment")){
**.append("Smart Development Environment ");
**.append(pe);
int index = pn.indexOf(" for ");
if(index != -1){
String target = pn.substring(index);
**.append(target);
target = null;
}
}else{
**.append(pn);
**.append(' ');
**.append(pe);
}
ps = **.toString();
int days = 30;
Calendar ca = Calendar.getInstance();
if(edays != null && edays.length() > 0){
try {
days = Integer.parseInt(edays);
} catch (NumberFormatException e) {
days = 30;
}
}
ca.add(Calendar.DATE,days);
Date date = ca.getTime();
KeyFile kf = new KeyFile();
kf.setEmail(email);
kf.setEvaluation(isExpire);
kf.setExpiredDate(date);
kf.setProductName(ps);
kf.setProductVersion(pv);
kf.setUserName(name);
String result = kf.toXML();
textVerifyKey.setText(kf.getVerifyKeyResult());
File f = new File(licFilePath);
// if(!f.exists()){
// try {
// f.createNewFile();
// } catch (IOException e) {
// return;
// }
// }
FileWriter fw = null;
try {
fw = new FileWriter(f);
fw.write(result);
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
} finally {
if(fw != null){
try {
fw.close();
} catch (IOException e) {
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
fw = null;
}
}
|
能力值:
( LV9,RANK:210 )
|
-
-
15 楼
KeyFile的实现是这样
/**
* KeyFile<br/>
* Date: 2008-6-30<br/>
* Time: 13:35:26<br/>
*
* @author vhly[FR]
*/
public class KeyFile {
/*
<KeyType type="1">
<LicenseKey keyVersion="20020918">
<ExpireDate value="2207979548972"/>
<EMail value="vhly@163.com"/>
<MachinelInfo value="Java"/>
<UserName value="vhly FR"/>
<ProductName value="Smart Development Environment Enterprise Edition for IntelliJ"/>
<ProductVersion value="4.2"/>
<ProductBuild value="20060214"/>
<ProductRegisterDate value="1205387548972"/>
<SerialNumber value="4107432024611871"/>
<VerifyKey value="NTQ1R0A7NjE+Nz4xOUA/PkIzNEdBOEE2P0g7PUB6b2CATUFDPz1ycXRWa3lxfXNlhiFHV1p9Y3Z3IE9Zhm11dXF8Z3t0IkV1e2eCcHFyc3t5LFRnhGZ4a4JzfWsiUGlzd29xfSNrfXQjVnB1c25ydVg3PDU6PzE1M0M8NUA6QEQ4QX11f3Q="/>
<Evaluation value="false"/>
<Type value="1"/>
</LicenseKey>
</KeyType>
*/
private int keyType;
private String keyVersion;
private Date expiredDate;
private String email;
private String machinelInfo;
private String userName;
private String productName;
private String productVersion;
private String productBuild;
private Date registerDate;
private String serialNumber;
private String verifyKey;
private boolean evaluation;
private String upgradeSN;
private String tagValue;
private int type;
public String toXML(){
String ret = null;
StringBuffer ** = new StringBuffer();
**.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
**.append("<KeyType type=\""+getKeyType()+"\">\n");
**.append("<LicenseKey keyVersion=\"20020918\">\n");
**.append("<ExpireDate value=\""+getExpiredDate().getTime()+"\"/>\n");
**.append("<EMail value=\""+getEmail()+"\"/>\n");
**.append("<MachinelInfo value=\"Java\"/>\n");
**.append("<UserName value=\""+getUserName()+"\"/>\n");
**.append("<ProductName value=\""+getProductName()+"\"/>\n");
**.append("<ProductVersion value=\""+getProductVersion()+"\"/>\n");
**.append("<ProductBuild value=\""+getProductBuild()+"\"/>\n");
**.append("<ProductRegisterDate value=\""+getRegisterDate().getTime()+"\"/>\n");
**.append("<SerialNumber value=\""+getSerialNumber()+"\"/>\n");
**.append("<VerifyKey value=\""+getVerifyKeyResult()+"\"/>\n");
**.append("<Evaluation value=\""+isEvaluation()+"\"/>\n");
**.append("<Type value=\"1\"/>\n");
**.append("</LicenseKey>\n");
**.append("</KeyType>\n");
ret = **.toString();
** = null;
return ret;
}
public KeyFile() {
keyType = 1;
keyVersion = "20020918";
Calendar cl = Calendar.getInstance();
cl.add(Calendar.YEAR,2);
long d = cl.getTime().getTime();
d /= 100000;
d *= 100000;
expiredDate = new Date(d);
email = "vhly@163.com";
machinelInfo = "Java";
userName = "qqyang";
productName = "Visual Paradigm for UML Enterprise Edition";
productVersion = "6.2";
productBuild = "20060214";
d = new Date().getTime();
d /= 100000;
d *= 100000;
registerDate = new Date(d);
serialNumber = Long.toString(System.currentTimeMillis());
evaluation = false;
upgradeSN = "";
tagValue = "";
type = 1;
}
public final String getVerifyKeyResult(){
String ret;
StringBuffer ** = new StringBuffer();
**.append(getSerialNumber());
**.append(getExpiredDate().getTime());
**.append(getEmail());
**.append(getMachinelInfo());
**.append(getUserName());
**.append(getProductName());
**.append(getProductVersion());
**.append("");
**.append(getRegisterDate().getTime());
**.append(getType());
String s;
s = isEvaluation() ? "true" : "false";
**.append(s);
**.append(tagValue);
ret = **.toString();
** = null;
ret = eyj.i(ret);
return ret;
}
|
能力值:
( LV6,RANK:90 )
|
-
-
16 楼
膜拜楼上一下,
不知道有没有人试过jformdiesigner这个软件。网上找了一下,发现以前有shock的破解是用aspectj破的,不知道有没有人知道如何操作。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
下面这个程序是针对官方给的vpsuite.zvpl文件的,如果你用记事本打开这个文件,
都是乱码。用这个程序,你就可以看到,zvpl文件中已经把license文件中的内容写好了,
都是XML格式的,根本不用生成。
只不过是用了zip工具压缩后写入了vpsuite.zvpl。
现在最重要的就是VerifyKey的内容,在程序运行期间,是如何验证的,其实把目录V下的3万多个文件反编译,
然后搜一搜VerifyKey就行了。
import java.lang.*;
import java.io.*;
import java.util.zip.*;
public class Crack{
public static void main(String[] args){
try{File file = new File("vpsuite.zvpl");
// if(file.getName().endsWith(".zvpl") || file.getName().endsWith(".zip"))
// {
FileInputStream fileinputstream = new FileInputStream(file);
fileinputstream.skip(2L);
byte abyte1[] = new byte[fileinputstream.available()];
fileinputstream.read(abyte1);
fileinputstream.close();
// }
InputStream inputstream = ((InputStream) (new ByteArrayInputStream(abyte1)));
ZipInputStream zipinputstream = new ZipInputStream(inputstream);
for(ZipEntry zipentry = zipinputstream.getNextEntry(); zipentry != null; zipentry = zipinputstream.getNextEntry())
{
String s = zipentry.getName();
ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
byte abyte0[] = new byte[2048];
for(int j = zipinputstream.read(abyte0); j > 0; j = zipinputstream.read(abyte0))
if(j == 2048)
bytearrayoutputstream.write(abyte0);
else
bytearrayoutputstream.write(abyte0, 0, j);
bytearrayoutputstream.close();
ioxa ioxa1 = new ioxa(s, bytearrayoutputstream.toByteArray(), zipentry.isDirectory(), null);
ioxa1.screen();
}
zipinputstream.close();
}
catch(Exception exception)
{
System.out.print(exception);
}
}
}
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
求教vhly这位大高手,可惜我只懂得些皮毛,
高手寥寥数语,已见功底,
我辈凡夫俗子,求之不得。
不知能否再来答复,我不知如何调用jar内部的类方法?
这种调用方法能够再编译获得可运行的程序吗?
(JAVA菜鸟)
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
学习了,运来java的也可以。
|
|
|