首页
社区
课程
招聘
[旧帖] [求助]请问JAVA写的程序怎么调试? 0.00雪花
发表于: 2008-8-10 23:39 11052

[旧帖] [求助]请问JAVA写的程序怎么调试? 0.00雪花

2008-8-10 23:39
11052
java写的程序,一个大的程序,里面包含exe,jar,dll,xml,
目前看来最主要的部分是jar和exe里,
可是ollyice调试不下去,

请问这个怎么调试呀?
谢谢!

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 328
活跃值: (39)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
2
在论坛上搜一下 Java 就可以找到答案了
2008-8-11 09:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
现在有一个问题,就是这个jar文件实在是大,67M之多,
解压后里面的子目录和文件太多了,想用jad和DJ把CLASS文件都反编译过来,
结果都失败了,
请教各位,如何进行?
2008-8-11 10:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不知道,飘过。。。。。。
2008-8-11 16:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我不晓得 飘过哦
2008-8-12 00:45
0
雪    币: 220
活跃值: (117)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
是不是一个uml软件?
你解压后不要用jad反编译全部的,看一下结构,有选择性的反编译。然后就是运气了。
2008-8-12 10:08
0
雪    币: 200
活跃值: (10)
能力值: ( 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就无效了。
上传的附件:
2008-8-12 21:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
高手给个解释
2008-8-13 11:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
这两天,程序没破出来,JAVA的学习更深入了,什么都了解了,
看了将近2万行代码!!!
2008-8-13 22:55
0
雪    币: 318
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
见过别人破解的java的程序,补丁打在dll文件上面
2008-8-13 23:19
0
雪    币: 220
活跃值: (117)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
这个软件不是很难,我几年前遇到一个高手可以写注册文件。所以我知道不是很难。
但自己没动过。是香港的公司的产品。因为放了一个60几M的jar,很有印象。
class 文件用jad 反编译。
2008-8-14 16:48
0
雪    币: 220
活跃值: (117)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
忘了说,如果只是用uml,那还有其他的工具magicdraw , eclipseUML,破解都好找。
2008-8-14 16:49
0
雪    币: 200
活跃值: (10)
能力值: ( 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就不破解了。
2008-8-14 20:48
0
雪    币: 328
活跃值: (39)
能力值: ( 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;
        }
    }
2008-8-15 13:42
0
雪    币: 328
活跃值: (39)
能力值: ( 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;
    }
2008-8-15 13:54
0
雪    币: 220
活跃值: (117)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
16
膜拜楼上一下,
不知道有没有人试过jformdiesigner这个软件。网上找了一下,发现以前有shock的破解是用aspectj破的,不知道有没有人知道如何操作。
2008-8-15 18:09
0
雪    币: 200
活跃值: (10)
能力值: ( 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);
        }         
}
}
2008-8-15 21:00
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
求教vhly这位大高手,可惜我只懂得些皮毛,
高手寥寥数语,已见功底,
我辈凡夫俗子,求之不得。

不知能否再来答复,我不知如何调用jar内部的类方法?
这种调用方法能够再编译获得可运行的程序吗?

(JAVA菜鸟)
2008-10-5 19:53
0
雪    币: 151
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
学习了,运来java的也可以。
2008-10-5 20:13
0
游客
登录 | 注册 方可回帖
返回
//