-
-
[旧帖]
[原创]分享破解软件 OLMtoPST的过程
0.00雪花
-
发表于:
2013-6-3 10:58
7335
-
[旧帖] [原创]分享破解软件 OLMtoPST的过程
0.00雪花
为了感谢看雪的共享精神,也为了像我一样的新手能有更多的兴趣在这条路上走的更远。在此分享一下上周我的一个破解实例。
因为本人是新手,从没搞过这些,先从网上看了一堆资料,下载了一些网上介绍的软件,有反编译的,有看壳的。如下:.net reflector, w3232dsam, ILdasm, Ilspy. Ultraedit,ExeinfoPE, PEid, language2000 等等。
先说一下看壳软件,目前很多看壳软件都太老了,我们用的软件一般都是update到最新的,这样的话老的看壳软件就识别不出来是加的什么壳甚至是看不出用什么软件编写的。就拿我要破的MAC outlook explore 和 OLMtoPST 来说,用language2000, 只能看出出品人,编写软件的语言等啥也没有。完败啊。
用PEid 能看出是第二个软件是"Microsoft Visual C# / Basic .NET [Overlay]". 对第一个也是无能为力。
用ExeinfoPE 看了一下,都是Microsoft Visual C# / Basic .NET 的, 第一个软件是用intelilook授权托管的。这个我目前是对付不了的。第二个软件没有壳。放心了。这个好。Peid 太老了,ExeInfoPE 不错。
就拿第二个开始破解吧。首先说明一下,我不是为了破解而破解,是老板交的私活,他有一个苹果机上的outlook文件.OLM要转到Windows下的PST。否则好歹得拿个带壳的试试。不说了,开始吧。
运行了一下,是用注册码的,点击UNLOCK解锁。 有点小清新,不像有些软件,编的不乍样,壳加了一堆。乱七八糟的。
先使用.net reflecter. 这个号称是最好的反编译器,for C# /.Net的。果然不错,Decompiling 出一堆代码。
就是无法设置断点,追踪。这个以后再说。
思路是从注册这个点切入,强行注册,UNLOCK.。
开始看代码。。。,
找到注册的点。好像叫方法:Registerwidows ,button1_click(), 里面是如何将用户名和注册码换算的,死活也看不出啊。一天就过去了。晕啊!
试着注册,随便输点东西,看代码,发现了一个加密的代码/方法,用ildasm 看出16进制的值,用Ultraedit找到后都设00,也就是C#里的空白代码,哈哈,就是没代码,IL里的nop. 对了还要下载了MSIL代码指令集大全。对照着看。缺一不行啊。
出错!
改回! 继续找,找到一个perfermemce.md=true, 说明是DEMO版本的,改成false. 当然是改二进制文件,用Ultraedit了。没想到不是在主文件里,也就是可执行文件,而是在那个.dll 文件里。狡猾狡猾的。又学到一点。
这里看不到小锁的图标了,trial版本的字样也没了。看起来好像是搞定了。耶!
运行,,,,刚开始转换,程序中断了,点击后强行退出了。
又找到一个startup()的地方,看。。。 还是一头雾水啊,再晕。。。
咦,看到有什么好象跟注册表相像的地方,面熟啊,用regedit.exe打开注册表,果然有程序里一样的项目,
try
{
MAPIInit.Initialize(this._userId.Text.Trim(), this._registrationKey.Text.Trim());
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Software\KNR-iDigital\Ver O2P 1", true);
key.SetValue("lt", "private");
byte[] buffer = new byte[2];
key.SetValue("mode", buffer);
MessageBox.Show(this, ProductResources.UnlockingSuccessLabel);
(Application.Current as App).Preferences._md = false;
this._ownerWindow.Unlock();
base.Close();
}
catch (Exception)
{
MessageBox.Show(this, ProductResources.UnlockingFailedLabel);
}
}
再对照网上找到的regsterkey.setvalue() 的说明,明白了,是要从这里对照一下注册表看是不是注册过的。那就好办了,改注册表。。。
当当当,,,好了,重新打开程序,看起来是注册过的样子了。当然这时候的程序又从新装过了,都是没改过的。仅该了注册表。
来试试吧,走起。。。纳尼?!!! 还是死在了转换过程中,这回也不跳出错误窗口了,就给你无反应了。。。看看窗外,天已经漆黑里,家里还有俩孩子呢。肚子也咕咕叫了。回吧。。。 又是失败的一天。。。
可这又能怎样,我又没学过C#, 没学过 .net framework. 能懵懵懂懂的看看代码,全靠了我那点八百年前自学的C。我压根就正儿八经的学过编程。曾经完全靠爱好电脑才看过几本书而已。。。
这个老板交给的任务,而且是私人的活,你能拒绝吗,还想加工资吗,想想这里,不行就他妈自己掏钱给买一个注册码。好歹给交代过去。可是$129 大洋啊,美刀!要是几十人民币我还真就掏钱了。没办法,舍不得啊,这也变成了我破解的动力。。。
在路上,在床上,我想,我思,我靠!!!
又是一天,我来了,继续,Today 是周末,我竟然没想起来,对我这样天天盼周末的人而言可想我有多么的投入,哈哈。一点点啦。。。
终于发现Ilspy的好处了,前面说过,可以设断点,追踪,Debug...爱死你了,.net reflector立马退居二线。
而且又发现一个超强的能力,能解密一些加密的模块代码,就是反编译,Reflector 就不行,没有这个功能,我这两天就算是白忙乎了。看样子这个作者可不是小清新啊,有点腹黑,外面没加壳,里面都是黑匣子啊(加密的模块)。这里要说一下,Ilspy也不是能反编译所有加密的代码。反编译说起啦也是靠二进制码逆向还原的,俗话说的“猜”。编程的时候塞个麻团进去,死也“猜”不出来啊。。。:)..
我对照过reflector 和ILSpy“猜”出的代码,有些地方还是不同的,这个应该是和这两个软件作者的编程的习惯有关。嗯,ILSpy还原出的代码可读性更强一点。呵呵,个人观点。
解密的代码被一下子剥出来,爽啊,一览无遗。。。我设,我设,我追,在追。。。
喂猫改来改去,最好的结果也只是没有小锁,能运行但也还是DEMO的功能(就是每个文件夹下只转换10个邮件)?
气死我了。想想网上说的,高手的三个层次,一,暴力破解,二、改注册码,或是算出注册码,三是制作出注册机。
我真是泄气啊,暴力都不行啊。
让我再想想,我是一头钻在了要去注册它的牛角里了, 换个思路,不用去管他什么注册不注册了。他不是未注册的只能转10个吗,找到限制的地方,打开限制不就好了吗,我真是个天才!!
这样就好办了,ILSpy开起来。设断点,追,,一个一个设,小心地追,反复看应用程序的反映,找到了模块:DoExportEmailFolder , 在.DLL的文件里,藏的可真够深的,还是加密的。没Ilspy还真是不行啊。
好了,找到关键点:
if (this._exportSettings.ExportEML)
{
if (num == 10)
{
goto IL_2FB;
}
}
这里有一个是判断是否是 demo版,是的话再判断转换邮件数量是否到 10,到的话退出循环,检查下一个 Folder。所以在这里只要把第一个判断语句改为是 Demo的话就不作邮件数量的判断限制。相当于:
if ( ! this._expertSettings.ExportEML)
明白了吧,我这肯定是DEMO的,不用说,加个!的话,if(num ==10)这条语句永远不会被执行。那就是有多少条就转多少条了,爽不?!
多么简单啊,用Ildasm找到这句IL的语句:brture.s L-284. 记不清了,用Ildasm的好处是能看到16进制的代码,找到后记下来,在用Ultraedit打开程序去找,reflector 就不行,改成brfalse.s L-284. 用Ultraedit找到相应的位置把2D改成2C。save!
再运行程序试试,看着就是那个爽,。。。上面顶着小锁(DEMO),下面却转个不停,没了限制,一直到完成。
搞定,收工。。再看,天又是漆黑一片。。。不过心情是很不错的。发邮件给老板告诉他文件存放位置。走人。
后记,第一次破解C#/.Net 的一个小程序,居然花了2天半。看样子这活也不好干。不过当我最终搞定的时候。真的是非常嗨啊,鸡冻。。也许这就是魅力所在。献上此文,与新手们共勉!!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课