1、申请ID:findreams
2、个人邮箱:findreams@163.com
3、原创技术文章:DeltaWalker v2.1.1 破解
[软件介绍]
DeltaWalker是Deltopia出品的文件和文件夹比较和同步软件,可以让你比较,编辑和合并文件和同步文件夹,支持本地和远程文件。DeltaWalker不仅能对比普通的文本文件,还可以对比文本格式的pdf。此软件是用java和Eclipse编写的,所以程序会稍显很臃肿,貌似在MAC下比较受欢迎。
[背景]
最近由于工作原因,日常的工作OS切到了LINUX下,之前在WINDOWS下使用的文件对比工具就是Beyond Compare(同事5年前给的,版本超级老。。。基本上不用了)和这个DeltaWalker,DeltaWalker也是在几年前用朋友的MAC时,找此类软件时发现的(1.9.6版,有WIN32,MAC,LINUX三个版本),还算好用,而且由于是基于JAVA,支持全平台(当时BC好像还只有WINDOWS版),个人比较喜欢这种多平台的软件,省却了在不同平台下切换其他软件那种不适感,所以就一直在用这个,结果这次出问题了。。。
由于之前下的软件版本也有些老了,当时下载的LINUX版本是32位的,现在用的OS是64位,启动就报错,后来又是安装32位JVM,又是修改配置,折腾了一通,能用了,但还是有些小问题,界面不美观不说,主界面上有些该显示的内容显示不出来,查看log中一堆Exception,看来还是版本太老了,去官网一看,已经都是2.1.1版本了,仍旧是多平台,并且每个平台都分出了32与64位版,开始找破解。。。未果。。。网上能找到的最新的破解是1.9.9.2的,下载链接还都失效了,能下的只有1.9.8的,但是还只有WIN版的包,这个软件的旧版本安装包都很难找。。。
在寻找过程中,无意中发现了52pojie上Hmily破解的Beyond Compare 4.0.7,居然BC也是全平台的了,而且看网上的人说比DeltaWalker好用(这个见人见智,不过DeltaWalker是JAVA开发,占资源肯定要高些),煞是激动。。。再次失望,Hmily给出了WIN和MAC的破解,唯独没有LINUX的,说有空的时候再来弄,本人急性子,当时就想找找他的联系方式,看看有没眉目了。。。再次。。。论坛没注册的看不到他信息,注册吧得要邀请码,花钱的有点舍不得(其实不贵啦,比买个软件便宜),只能看看牛人通道能行不,一不做二不休,虽然没搞过破解,但天天弄JAVA,决定试一试破解DeltaWalker,本想着不管成功失败,把过程写出来看能不能注册上ID找Hmily要个BC的Linux破解。。。结果,把这玩意先给搞出来了
[过程]
balabala了一大堆,现在讲讲正式的过程,本人破解新手一枚,从没破过软件,所以方法可能比较笨,各位同仁见笑了。
最开始想了两个思路:
1. 使用Java的Remote Debug方式运行DeltaWalker,然后连接上去Debug,了解软件的运行过程,找到试用及注册的代码,再考虑如何修改。
2. 由于是JAVA软件,你懂得,使用JD-GUI这类工具,反编译出来,虽然出来的代码不好看,但总比人家分析C的简单多了,然后人工去找要修改的代码。
结果由于学艺不精,方法1不会弄。。。放弃,只能方法2了。
方法2有个缺点,就是程序不在运行时,要想找代码全靠人工感觉了,这时当年1.9.6的破解帮助了我。看当年的各JAR包和现在版本的虽然在结构上有变化,但是大体区别还不是很大,1.9.6当时的破解就是替换掉一个JAR包,com.deltawalker_1.9.6.jar,看包名没有其他后缀(其他包都是有表明功能的后缀的,比如xml,ui等等),估计程序的主要入口一类的都在这里面,新版可能也是类似的,于是找新版的这个文件,找到:com.deltawalker_2.1.1.201501261015.jar,反编译之,然后使出笨人的办法,全文件搜索。。。
破解前
搜索的思路是去找软件界面上的文字,然后去找显示这些文字的代码,因为试用版的About中会显示:Deltopia DeltaWalker 2.1.1.201501261015 Trial Edition ,Install License Key中会显示:Your DeltaWalker trial will expire in 30 days. 这些文字肯定在程序中有定义,但Trail Edition与30天肯定是程序算出来的,找到这些文字在哪里,计算这个的代码在哪里,破解就有了希望。
于是搜索Your DeltaWalker trial will expire,WOW,找到,有个文件UIMsg.properties,里面全是各种界面显示的字串,上面这两个就都在它里面.
[Java] 纯文本查看 复制代码 AboutDlg_productInfo=Deltopia DeltaWalker {0} {1} Edition {2}\n\n\Copyright � 2004-2014 Deltopia Inc. All Rights Reserved.\n\n
AboutDlg_remainingDays=Your DeltaWalker trial will expire in {0} days
继续查找这两个字串的名字,AboutDlg_productInfo与AboutDlg_remainingDays,在类com.deltawalker.ui.UIMsg中,成员全是public的String,成员名和properties中的key都是一样的,好,继续查找这个UIMsg都在哪些类里被引用,看看AboutDlg_productInfo与AboutDlg_remainingDays是在哪里计算的。
在com.deltawalker.internal.ui.dialogs.AboutDialog中找到了对AboutDlg_productInfo的使用,这个类就是显示About界面的,看看那个Trial Edition是怎么来的,原来是AddonInfo.edition().displayName(),那接下来的重点就是AddonInfo了,这个类在com.deltawalker.AddonInfo,仔细一看下面还有个AddonVerifier,Verifier?这名字有戏.
分析了AddonInfo的代码,发现这个类保存了那个30天试用日期,产品的注册key等信息,正是我们要找的,以下是关键代码
[Java] 纯文本查看 复制代码 public class AddonInfo implements IJsonState {
private static final Logger LOG = LoggerFactory.getLogger(AddonInfo.class);
public static final int TRIAL_DAYS = 30;
private Addon addon;
private String key;
private final Map<AddonInfo.Param, Object> params;
public Addon addon() throws AddonException {
String var1 = this.paramValueAsString(AddonInfo.Param.KEY);
if(this.key == null || !this.key.equals(var1) || this.addon == null) {
this.addon = Addon.recreate(var1);
this.key = var1;
}
return this.addon;
}
}
而这其中的addon才是真正保存版本,edition的类,上面代码中的var1就是软件注册的key,通过Addon.recreate进行校验,Addon又将key的校验委托给AddonVerifier,以下是Addon中的关键代码,Addon中放着几个预定义的ENUM,分别是不同的几个版本,根据你输入的KEY,对这几个版本进行循环校验,哪个能对上就表示你是哪个版本,试用版的内置了一个TRAIL版本的KEY,所以就会校验到这个版本上面
[Java] 纯文本查看 复制代码 public static enum Edition {
ORO,
PRO,
STANDARD,
TRIAL;
private final String constName;
private final String dispName;
static {
ORO = new Addon.Edition("ORO", 0, Msg.AddonEdition_oro, "oro");
PRO = new Addon.Edition("PRO", 1, Msg.AddonEdition_pro, "pro");
STANDARD = new Addon.Edition("STANDARD", 2, Msg.AddonEdition_standard, "standard");
TRIAL = new Addon.Edition("TRIAL", 3, Msg.AddonEdition_trial, "trial");
}
}
public static Addon recreate(String var0) throws AddonException {
if(StringUtil.isEmpty(var0)) {
throw new AddonException("\'key\' cannot be null or empty");
} else {
EnumSet var1 = EnumSet.allOf(Addon.Edition.class);
EnumSet var2 = EnumSet.allOf(Addon.Type.class);
String var3 = AddonInfoUtil.productVersion();
String var4 = Platform.getOS();
AddonVerifier var5 = new AddonVerifier(var0);
Addon var6 = null;
Iterator var8 = var1.iterator();
while(var8.hasNext()) {
Addon.Edition var7 = (Addon.Edition)var8.next();
if(var6 != null) {
break;
}
Addon var9 = new Addon(var7, (Addon.Type)null, var4, var3);
if(var5.verify(var9)) {
var6 = var9;
break;
}
Iterator var11 = var2.iterator();
while(var11.hasNext()) {
Addon.Type var10 = (Addon.Type)var11.next();
var9 = new Addon(var7, var10, var4, var3);
if(var5.verify(var9)) {
var6 = var9;
break;
}
}
}
if(var6 == null) {
throw new AddonException("Couldn\'t recreate addon");
} else {
return var6;
}
}
}
var5.verify(var9),这是真正执行校验的地方,对一个Addon进行验证以判断是否成功注册某个版本,以下是AddonVerifier的校验代码
[Java] 纯文本查看 复制代码 public boolean verify(Addon paramAddon) throws AddonException {
byte[] arrayOfByte1 = this.getLicenseKeyBytes();
if(arrayOfByte1 == null) {
return false;
} else {
Signature localSignature = this.getSignature();
byte[] arrayOfByte2 = paramAddon.toBytes();
try {
localSignature.update(arrayOfByte2);
return localSignature.verify(arrayOfByte1);
} catch (SignatureException var6) {
throw new AddonException(var6);
}
}
}
二话不说,改这里,我们想要的是ORO版本,及ENTERPRISE的注册类型,给他加上:
[Java] 纯文本查看 复制代码 if(paramAddon.edition() == Edition.ORO && paramAddon.type() == Type.CMRL_ENTERPRISE) {
return true;
不进行实际的校验,在前面所说的循化检验时,如果传过来的是ORO ENTERPRISE版本,就跳过实际的代码直接给他返回校验成功。
修改完毕,啦啦,编译替换成文件打包,运行测试,WOW,About中变为了:Deltopia DeltaWalker 2.1.1.201501261015 Oro Edition Enterprise,下面的License Key中也有了显示(显示的其实就是内置的TRAIL KEY,只不过我们骗他这是ORO版本)。
破解后
搞定~~~
[后话]
搞定之后还发现个问题,已解决,我在这里提出来,但就不说如何解决的了,给大家留个作业,请感兴趣的人根据我上面的思路去自己找一下,很容易的,我会把我改好的版本打包发出来,需要的人可直接使用。
上面的修改会解决版本问题,但是在Install License Key界面中提示可以输入另一个新KEY,而我们之前其实并没有输过任何的KEY,所以在这儿输入的话,会提示KEY的格式不合法,因为我也不知道合法的KEY是什么样的,也懒得去分析相关的校验逻辑了,所以想办法屏蔽之,大家可以自己研究下屏蔽方法,我的包中已经改好。
输入注册码报错
屏蔽后只保留了用户名等信息的输入,同时发现代码中有一段会向官方发个信息,也一并干掉(没分析具体用途,貌似不要的好。。。因为是在输入了KEY等信息后发包),屏蔽后如图
屏蔽注册码输入
如果遇到了输入了KEY,提示不合法,然后关掉软件,每次打开都让输入KEY无法使用的情况,在你的home目录下(我的是linux,就是~目录,WINDOWS应该是USER那个目录吧,这个没去找过),有个叫.XXXXXX.dwk的文件,这里的X就是字母和数字,这个是保存注册信息的,删除他等于重置了注册信息,打开软件时就不报那个了。
[喊话]
Hmily,我还在等你做的BC Linux版破解哟。
--------------------------------------------------------------------------------------------
下面是做好的破解补丁,替换掉安装目录下,plugins目录中对应的文件即可。
com.deltawalker_2.1.1.201501261015.jar.rar
(1.97 MB, 下载次数: 17)
|