swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记 -凯发k8网页登录

天平山上白云泉,云自无心水自闲。何必奔冲山下去,更添波浪向人间!
posts - 288, comments - 524, trackbacks - 0, articles - 6
  凯发k8网页登录-凯发天生赢家一触即发官网 :: 凯发k8网页登录首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
最近做一个项目的时候,需要将数据库从原先的sqlserver迁移到oracle中。
需要迁移的不仅是数据还需要将表结构、存储过程、视图、触发器.... 所有东西都迁过去。
于是在网上搜索了一下,很快找到了www.swissql.com中提供了这样的工具。
但是能下载的是30天有效。只能转换2000行sql文本的试用版。
自己动手、丰衣足食。开始破解:
1. 安装swissql
2. 把swissql的lib目录下的swissql.jar, tsql2plsp.jar, tsql2plspgui.jar文件都反编译了.
我在netbeans中新建了一个项目(因为看到, absolutelayout.jar中有com.netbeans.的内容, 所以去下载安装了netbeans,
不过根据其后的进程来看, 选用哪种javaide并不重要)
3. 查看运行程序是 java -dsun.java2d.noddraw=true
-djava.util.logging.config.file=%tsql2plsphome%\conf\internal_conf\logging.properties
-cp %classpath% com.vembu.project.gui.pl2jsqlform
4. 看了一会pl2jsqlform, 发现明显是经过混淆的, 比较复杂, 于是放弃了从头了解的念头, 专注于注册号生成的破解.
5. 运行swissql
6. 点击注册. 出来一个注册号输入框.
7. 选择对话框中提示字符串"trial user"在项目中全字符, 大小写匹配搜索, 很快在中com.vembu.project.gui.a.java中找到. 而且整个项目中只有一个.
8. 在a.java中搜索一下"ok"字符串, 发现ok按钮的事件处理函数是_mthnew(actionevent); 在ide中跳转到_mthnew的定义
9. 发现此函数的核心是
        if(!c._mthif(s1))
        {
            d.settext("invalid key !!! please ensure that the key is applied in the same machine as the one in which the reginfo file was generated.");
            u.setsize(230, 125);
            u.setlocation(400, 300);
            u.show();
            return;
        }
再次想跳转到_mthif的定义, 结果ide无法正确跳转.
10. 没关系, 使用搜索大法. 在ide中搜索 boolean _mthif(string  , 搜索结果不多,
第一眼就看到了com.vembu.license.c.java, 再到a.java包头上一看果然有import com.vembu.license.c;
11. ok, 进入com.vembu.license.c.java, 找到_mthif(string)函数
12. b b1 = new b();  string[] as = b1._mthif();
13. 仔细看一下b, 构造函数很长, 其实实际内容不多, 主要是取 mac地址, 本机机器名, 本机ip地址. 其中_mthif()就返回mac地址数组(因为可能有多个网卡, 所有是数组). b1._mthnew()返回机器名.
14. 将输入的注册号作为参数用_mthtry算出一个整数.
15. 将mac地址, 机器名和 "registered user for multi file select" 拼成一个字符串
16. 将第15步的字符串和14步算出的整数作为参数 用_mthdo算出一个新的字符串,
如果此字符串与注册号相同, 则此注册号是正确的.
17. _mthtry函数和_mthdo函数都是颇复杂的函数.
18. 想一个办法, 首先找一个8位的整数(作为14步生成的结果), 由于mac地址和机器名是定的.
所以可以调用第16步_mthdo函数. 算出一个注册号, 再用这个注册号作为参数调用_mthtry,
去算那个整数, 如果这个整数与初始整数相等, 则此注册号有效.
19. 结果很快出来一堆的注册号, 在swissql中一用. ok了. 注册成功.

下面贴出我生成注册号的源代码.
/*
 * licensevalidate.java
 *
 * created on 2006年3月30日, 下午1:39
 *
 * to change this template, choose tools | template manager
 * and open the template in the editor.
 
*/


package com.asiatom.dbmigrate;

/**
 *
 * 
@author ngcheng
 
*/

public class licensevalidate {
    
    
private static final char b[] = {
        
'h''z''t''r''b''l''q''x'
    }
;
    
private static final char _fldbyte[] = {'u''s''c''m''p''v''w''k''n'};
    
public static final char _flddo[] = {
        
'a''b''c''d''e''f''g''h''i''j'
        
'k''l''m''n''o''p''q''r''s''t'
        
'u''v''w''x''y''z''a''b''c''d'
        
'e''f''g''h''i''j''k''l''m''n'
        
'o''p''q''r''s''t''u''v''w''x'
        
'y''z''a''b''c''d''e''f''g''h'
        
'i''j''k''l'
    }
;

    
/** creates a new instance of licensevalidate */
    
public licensevalidate() {
    }

    
    
public static string licenseok(string s)
    
{
        string as[];
        
int i;
        s 
= s.replaceall(" """);
        string macaddr 
= "00-0a-eb-9b-80-1b";
        string clientname 
= "arthur";
        i 
= 0;

        string s1 
= macaddr  clientname  "registered user for multi file select";
        
int j = _mthtry(s.touppercase());
        string s2 
= _mthdo(s1, j).touppercase();
        
// system.out.println("s2: ["   s2   "]");
        if(s2.equals(s.touppercase()))
            
return "ok";
        
//system.out.println("not");  
        return s2;
    }

    
    
public static int _mthtry(string s)
    
{
        string s2 
= "";
        string s3 
=  "hztrblqx";
        string s4 
=  "uscmpvwkn";
        string s1 
= s.substring(13 s.substring(68 s.substring(910 s.substring(1113 s.substring(1415);
        
for(int j = 0; j < s1.length(); j)
        
{
            
if(s3.indexof(s1.charat(j)  ""!= -1)
            
{
                s2 
= s2  '9';
                
continue;
            }

            
for(int k = 0; k < _fldbyte.length; k)
                
if(s1.charat(j) == _fldbyte[k])
                    s2 
= s2  k;

        }


        
int i = 0x5f5e0ff - integer.parseint(s2);
        
return i;
    }


    
private static string _mthdo(string s, int i)
    
{
        
int j = 0;
        s 
= s.touppercase();
        string s1 
= new string();
        string s2 
= new string();
        string s3 
= new string();
        
for(int k = 0; k < s.length(); k)
            
if(!character.iswhitespace(s.charat(k)))
                j 
^= s.charat(k);

        j 
^= j << 6;
        
int l = i * 3  3214;
        
int _fldnew = _mthif(l);
        s1 
= (j ^ _fldnew)  "";
        s1 
= _mthbyte(s1).touppercase();
        s2 
= a(i).touppercase();
        s3 
= s1.substring(01 s2.substring(02 s1.substring(14 s2.substring(24);
        s3 
= s3  s1.substring(45 s2.substring(45 s1.substring(56 s2.substring(56 s2.substring(67 s1.substring(67 s2.substring(78 s1.substring(78);
        string s4 
= s3;
        
return s4;
    }


    
public static int _mthif(int i)
    
{
        
int j = 0xb524b;
        
boolean flag = false;
        
int ai[] = {
            
19292359532331374147
            
32571113
        }
;
        string s 
= "";
        j 
= i;
        
for(int k = 0; k < 16; k)
        
{
            string s1 
= j  "";
            
if(s1.length() == 6)
                
break;
            
if(s1.length() < 6)
            
{
                j 
*= ai[k];
                
continue;
            }

            
if(s1.length() > 7)
            
{
                j 
/= 100;
                
continue;
            }

            
if(s1.length() > 6)
                j 
/= 10;
        }


        
return j;
    }


    
public static string _mthbyte(string s)
    
{
        
return a(s.getbytes());
    }


    
public static string a(byte abyte0[])
    
{
        
char ac[] = new char[((abyte0.length - 1/ 3  1* 4];
        
int k1 = 0;
        
int l1;
        
for(l1 = 0; l1  3 <= abyte0.length;)
        
{
            
int i = (abyte0[l1& 0xff<< 16;
            i 
|= (abyte0[l1& 0xff<< 8;
            i 
|= (abyte0[l1& 0xff<< 0;
            
int l = (i & 0xfc0000>> 18;
            ac[k1
= _flddo[l];
            l 
= (i & 0x3f000>> 12;
            ac[k1
= _flddo[l];
            l 
= (i & 0xfc0>> 6;
            ac[k1
= _flddo[l];
            l 
= i & 0x3f;
            ac[k1
= _flddo[l];
        }


        
if(abyte0.length - l1 == 2)
        
{
            
int j = (abyte0[l1] & 0xff<< 16;
            j 
|= (abyte0[l1  1& 0xff<< 8;
            
int i1 = (j & 0xfc0000>> 18;
            ac[k1
= _flddo[i1];
            i1 
= (j & 0x3f000>> 12;
            ac[k1
= _flddo[i1];
            i1 
= (j & 0xfc0>> 6;
            ac[k1
= _flddo[i1];
            ac[k1
= '=';
        }
 else
        
if(abyte0.length - l1 == 1)
        
{
            
int k = (abyte0[l1] & 0xff<< 16;
            
int j1 = (k & 0xfc0000>> 18;
            ac[k1
= _flddo[j1];
            j1 
= (k & 0x3f000>> 12;
            ac[k1
= _flddo[j1];
            ac[k1
= '*';
            ac[k1
= '*';
        }

        
return new string(ac);
    }



    
public static string a(int i)
    
{
        string s1 
= "";
        
int j = 0x5f5e0ff - i;
        string s;
        
for(s = j  ""; s.length() < 8; s = "0"  s);
        
for(int k2 = 0; k2 < s.length(); k2)
            
switch(k2)
            
{
            
default:
                
break;

            
case 0// '\0'
                if(s.charat(k2) == '9')
                
{
                    s1 
= s1  b[k2];
                }
 else
                
{
                    
int k = integer.parseint(s.charat(k2)  "");
                    s1 
= s1  _fldbyte[k];
                }

                
break;

            
case 1// '\001'
                if(s.charat(k2) == '9')
                
{
                    s1 
= s1  b[k2];
                }
 else
                
{
                    
int l = integer.parseint(s.charat(k2)  "");
                    s1 
= s1  _fldbyte[l];
                }

                
break;

            
case 2// '\002'
                if(s.charat(k2) == '9')
                
{
                    s1 
= s1  b[k2];
                }
 else
                
{
                    
int i1 = integer.parseint(s.charat(k2)  "");
                    s1 
= s1  _fldbyte[i1];
                }

                
break;

            
case 3// '\003'
                if(s.charat(k2) == '9')
                
{
                    s1 
= s1  b[k2];
                }
 else
                
{
                    
int j1 = integer.parseint(s.charat(k2)  "");
                    s1 
= s1  _fldbyte[j1];
                }

                
break;

            
case 4// '\004'
                if(s.charat(k2) == '9')
                
{
                    s1 
= s1  b[k2];
                }
 else
                
{
                    
int k1 = integer.parseint(s.charat(k2)  "");
                    s1 
= s1  _fldbyte[k1];
                }

                
break;

            
case 5// '\005'
                if(s.charat(k2) == '9')
                
{
                    s1 
= s1  b[k2];
                }
 else
                
{
                    
int l1 = integer.parseint(s.charat(k2)  "");
                    s1 
= s1  _fldbyte[l1];
                }

                
break;

            
case 6// '\006'
                if(s.charat(k2) == '9')
                
{
                    s1 
= s1  b[k2];
                }
 else
                
{
                    
int i2 = integer.parseint(s.charat(k2)  "");
                    s1 
= s1  _fldbyte[i2];
                }

                
break;

            
case 7// '\007'
                if(s.charat(k2) == '9')
                
{
                    s1 
= s1  b[k2];
                }
 else
                
{
                    
int j2 = integer.parseint(s.charat(k2)  "");
                    s1 
= s1  _fldbyte[j2];
                }

                
break;
            }


        
return s1;
    }

    
    
private static string incstring(string s) {
        string res 
= "";
        s 
= s.touppercase();
        
boolean flag = false;
        
int i;
        
for (i = s.length() - 1; i >= 0; i -- ) {
            
char ch = s.charat(i);
            
if ( ch == 'z'
                flag 
= true;
                res 
= "a"  res ;
            }
 else {
                res 
= (char)(ch  1 res;
                
break;
            }

        }

        res 
= s.subsequence(0, i)  res;
        
return res;
    }

    

    
public static void main(string args[]) {
        
//38238466
        
        
//licen

        string smacaddr 
= "xx-xx-xx-xx-xx-xx";
        string smachinename 
= "machinename";
        string s1 
= smacaddr  smachinename  "registered user for multi file select";
        
for ( int i = 38200000; i < 38238466; i  ) {
            string s2 
= _mthdo(s1, i);
            
int mid = _mthtry(s2);
            
if ( mid == i ) {
                system.out.println(
"got: "  s2);
            }

        }

    }

}





评论

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2006-04-01 23:10 by
可以直接修改class文件,让c._mthif函数返回true就可以了

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2006-04-03 09:15 by
不是这么简单的, 因为反编译出来的程序中出现了无数的错误.
根本无法编译通过.
所以采用了静态分析法.

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2006-04-05 15:54 by
搞不出来,方便的话给个注册码出来试试

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2006-04-06 16:42 by
注册码是和安装swissql机器的机器名和mac地址有关的.
我无法给出一个通用的注册码.

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2006-07-11 11:01 by
string smacaddr = "00-0f-ea-06-67-34";
string smachinename = "pc174";
string s1 = smacaddr smachinename "estc";
生成很多的类似“mwstiykwnszvmiwy”的码
我在 username 中输入 estc,
在下面的 key 中 依次输入 mwst-iykw-nszv-miwy,提示无效的code!怎么回事?多谢指教!
msn:estc.wu@hotmail.com

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2006-10-24 10:27 by
通过提供的java ,产生了一堆key。
但是通过尝试,较难获得验证通过!
请版主指教,谢谢!!!
我的msn :quexd@hotmail.com

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2006-10-24 15:15 by
你的swissql的版本是3.0吗?

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2006-10-26 09:35 by
我用的是3.0
请在msn加我,ok?
我上班白天都在线。
谢谢!!! 

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2006-12-14 00:35 by
lz的方法可以用。

b[],_fldbyte[]和int l = i * 3 3214;中的3和3214以及各方法要相应替换。

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2006-12-16 20:44 by
@rui

能说得清楚点吗? 我没有看明白你的意思.

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2006-12-22 11:03 by
楼主大哥

不知道您给的这段代码不知道是在那里运行

方便的话,直接打包做成一个执行文件,运行就产生注册码

好像这样的东西叫做注册机

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2006-12-23 02:47 by 云自无心水自闲
@在下

先将所有的代码都复制到一个文件中,licensevalidate.java,注意路径。
然后 javac licensevalidate.java,生成 licensevalidate.class
然后 java licensevalidate就可以运行了。

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2006-12-23 02:51 by 云自无心水自闲
@estc

string s1 = smacaddr smachinename "registered user for multi file select";
这个语句不能改成
string s1 = smacaddr smachinename "estc";
那个字符串是不能动的,否则生成的验证码就不正确了。
不知道qxd是不是也是同样的问题。

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2006-12-27 18:42 by
你好请问一下这段话是什么意思

lz的方法可以用。

b[],_fldbyte[]和int l = i * 3 3214;中的3和3214以及各方法要相应替换。

谢谢了

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2007-01-27 16:34 by
谢谢版主的文章!

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2007-10-14 15:55 by
可以用了

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记[未登录]  回复     

2007-11-20 11:03 by
很好,完全没问题,我用的3.2 swissql的都能破解

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2008-03-11 11:02 by
楼主能给发破解版的吗

lbsfans(at)gmail.com

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2009-06-14 15:14 by
楼主我没搞定,按你说的:

先将所有的代码都复制到一个文件中,licensevalidate.java,注意路径。
然后 javac licensevalidate.java,生成 licensevalidate.class
然后 java licensevalidate就可以运行了。

运行时有错误,这几个文件要放在哪执行呀?我不懂java。。。
明白人帮解释一下吧,谢谢我急用呀!

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2010-05-26 14:04 by
那请问注册时 username 输入什么呢?

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记  回复     

2013-05-08 15:41 by
可以把swissql oracle to sql server3.0 软件给我发一份吗? 谢谢!

qq:450519363
mail: 450519363@qq.com

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记[未登录]  回复     

2016-04-18 12:16 by
可以使用

# re: swissql oracle to sql server3.0(一个从oracle迁移到sqlserver数据库工具)的破解手记[未登录]  回复     

2016-04-18 12:17 by
把mac地址和机器名换成自己的,运行程序就可以了
string smacaddr = "xx-xx-xx-xx-xx-xx";
string smachinename = "machinename";
网站地图