且行且远
分类: 逆向手札 由 ssfighter 于 2007年9月1日 发表

本文仅供学习研究使用,请勿用于非法用途

gSyncit是一款可以将Google Calendar和Outlook进行双向同步的软件,支持手动同步和定时自动同步,软件利用Google和Outlook提供的API做成,软件的主页是http://www.daveswebsite.com/software/gsync/煎蛋上提供了一篇介绍gSyncit的文章,如果需要可以看看这里

我是在水木社区的某内部版面上看到有人求这个软件的破解,就自己下载下来试了一下,没有太仔细看,花了10分钟搞定之,现在把破解的过程简单写写。

这个软件是用.Net写的,运行需要.Net Framework 2.0的支持,用Reflector打开,软件作者超级厚道,居然没用混淆化,呵呵。不多说了,判断是否注册在这里:



public static bool IsRegistered()
{
RegistryKey key = Registry.CurrentUser.CreateSubKey(@”SOFTWARE\gSyncit”);
string productKey = (string) key.GetValue(“RegCode”, “”);
key.Close();
return IsRegistered(productKey);
}

这里可以看出来,注册码存储在HKCU\Software\gSyncit下的键值为RegCode里。继续往下跟,可以知道最终调用的gsyncext.dll里的一个叫GetOutlookItem的导出函数,通过这个函数来判断是否注册。因此,用IDA先分析一下gsyncext.dll,然后再用OD的LoadDLL来调试之。调试的方法就不说了,直接来到关键的地方:

1000144E |. 8D50 01 lea edx, [eax+1] ; 注册码
10001451 |> 8A08 /mov cl, [eax]
10001453 |. 83C0 01 |add eax, 1
10001456 |. 84C9 |test cl, cl
10001458 |.^ 75 F7 \jnz short 10001451
1000145A |. 2BC2 sub eax, edx
1000145C |. 8D9424 54020000 lea edx, [esp+254]
10001463 |. 52 push edx
10001464 |. 50 push eax
10001465 |. 56 push esi
10001466 |. 8D4C24 1C lea ecx, [esp+1C]
1000146A |. E8 F10C0000 call 10002160 ; 把注册码的前20位进行Base64编码

继续往下看,

10001471 |. 8D48 01 lea ecx, [eax+1] ; 关键字符串gSyncOutlookAddinv1
10001474 |> 8A10 /mov dl, [eax]
10001476 |. 83C0 01 |add eax, 1
10001479 |. 84D2 |test dl, dl
1000147B |.^ 75 F7 \jnz short 10001474
1000147D |. 2BC1 sub eax, ecx
1000147F |. 8D4C24 60 lea ecx, [esp+60]
10001483 |. 51 push ecx
10001484 |. 50 push eax
10001485 |. 57 push edi
10001486 |. 8D4C24 1C lea ecx, [esp+1C]
1000148A |. E8 D10C0000 call 10002160 ; 关键字符串进行Base64编码

再往下,来到这里:

100014AA |. 50 push eax
100014AB |. 8D4C24 70 lea ecx, [esp+70]
100014AF |. 51 push ecx
100014B0 |. 8D9424 68020000 lea edx, [esp+268]
100014B7 |. 52 push edx
100014B8 >|. 8D8424 60040000 lea eax, [esp+460]
100014BF |. 68 E8750210 push 100275E8 ; ASCII "%s/t%s/t%i"
100014C4 |. 50 push eax
100014C5 |. E8 A8170100 call <_sprintf>

这里将两组Base64编码进行组合,再往下来:

100014DA |. 51 push ecx
100014DB |. 8D4C24 28 lea ecx, [esp+28]
100014DF |. E8 DC180000 call 10002DC0 ; MD5_Init
100014E4 |. 8D4C24 24 lea ecx, [esp+24]
100014E8 |. E8 530F0000 call 10002440 ; 进行MD5编码
100014ED |. 8BD5 mov edx, ebp
100014EF |. 90 nop
100014F0 |> 8A08 /mov cl, [eax]
100014F2 |. 880A |mov [edx], cl
100014F4 |. 83C0 01 |add eax, 1
100014F7 |. 83C2 01 |add edx, 1
100014FA |. 84C9 |test cl, cl
100014FC |.^ 75 F2 \jnz short 100014F0
100014FE |. 55 push ebp
100014FF |. E8 34130100 call <__mbsupr> ; 转成大写字母

从上面的子程序中返回,来到比较的地方:

1000180D |. 52 push edx
1000180E |. E8 7D180100 call ; MD5前20位换成注册码的前20位
10001813 |. 8D4424 28 lea eax, [esp+28]
10001817 |. 56 push esi ; 假码
10001818 >|. 50 push eax ; 真码
10001819 |. E8 040F0100 call <__mbscmp> ; 真假码比较


总结一下,注册码应该是一个32字节长度的字符串,其前20位参与真码的演算,后面的进行验证,这样,就可以很容易得到的一组可用的注册码,将其写入注册表的特定位置就可以了。这里需要注意的是,调用sprintf时,%i似乎只有0的一种状态,我没有仔细看,如果发现有问题请联系我。



hamo
2007年09月1日 10:54:10

速度真快!

ps: 你代码语法高亮用的是哪个插件?

ssfighter
2007年09月3日 22:27:37

coolcode插件

imfine
2007年09月3日 23:12:25

真赞啊~

ssfighter
2007年09月3日 23:55:24

写了个注册机,暂时就先不放出来了,如果你能进新水木的NewSoftclub版的话就可以下载

曹华
2007年09月6日 01:47:35

在水木社区看到地址,就过来随便看看。
好巧啊,我们竟然算是半个老乡。我是丹东的。呵呵……
祝你一切顺利! ^_^

ssfighter
2007年09月6日 02:03:37

呵呵,很高兴认识你……
我去过一次丹东呢,丹东和大连很近的

siquan
2007年09月7日 21:18:13

我很想用一下你的gSyncit注册机,可是在水木没有找到,不知道能否发给我一份呢?

siquan
2007年09月7日 21:25:39

忘了我的电邮是cn.jeff.lee#gmail.com,谢谢!

ssfighter
2007年09月7日 22:31:19

不是有一个可用的注册码吗,呵呵,用那么就可以呀……
不过还是把keymaker发给你吧,不要外传

mayam
2007年09月15日 06:27:22

请问这款软件有没有后门程序?隐私保护怎么样?还有最新版本好像不注册也可以用了。如果有可能,请给我也发一份注册码,谢谢。

ssfighter
2007年09月15日 14:46:38

你问的问题我都不知道,这不是我所关心的。
注册码的话上面提供了,而且注册算法也说的很清楚了。你可以自己按照注册算法编个注册机,但更好的做法应该是购买正版

mayam
2007年09月15日 18:52:05

好像已经注册上去了,谢谢你了。至于注册机,我对破解没有什么了解,看看教程再说吧。正版,曾经有冲动要买,:)

ssfighter
2007年09月15日 19:01:55

不必客气

[…] gSyncit 的作用是同步 Microsoft Outlook 和 Google Calendar,支持手动同步和定时自动同步,这也是我目前找到的让 Outlook 与 Google 日历直接同步的唯一方案。不过按照说明尝试了两次都没有成功,可能跟网络有关系。后来觉得让 Outlook 与 Google 同步也没太大的意思,所以就没有继续尝试了。另外,最新版本的 gSyncit 已经开始收费了,不付费的话用着可能不是很爽,有网友已经发现了破解方法并且放出了一个注册码。 […]

gigi
2007年10月11日 16:28:56

你好。我遇到个很奇怪的问题。开始安装以后,就跳出来一个错误,于是安装就停止了。
具体的话是:
The installer was interrupted before gSyncit could be installed.You need to restart the installer to try again.

但是我试了好几次都还是一样的问题。

ssfighter
2007年10月11日 20:52:56

抱歉,我也没遇到过。

匿名
2007年10月13日 09:59:37

Decompiling software and giving out a registration is illegal.

匿名
2007年10月13日 10:45:48

Steeling software is illegal. This is a clear attempt to give away something for free and not to educate.

ssfighter
2007年10月13日 12:32:45

对不起楼上的那位,按照您的说明,我把可用的注册码删掉了,但是我想说的是,逆向分析软件目前在国内并不是违法的,所以这篇文章并没有什么问题,我就先不删了哈。

mw
2007年11月6日 11:04:41

先谢谢了!
可以发个KEY给我吗?十分感谢!
mousewolf gmail.com

ssfighter
2007年11月8日 09:50:43

明明有注册机,自己搜索一下再要…

发表评论

昵称:  (必须)
邮件:  (必须)
网址: 
评论: