• 标 题:侠盗阿凡提FlashGet详细破解过程,跟这个软件加密方式不知象不象? (4千字)
  • 作 者:paulyoung
  • 时 间:2001-4-23 22:48:14
  • 链 接:http://bbs.pediy.com

《FlashGet(JetCar Ver0.77) 破解实录》
(转载希望保持完整)
软件:FlashGet(JetCar)
版本:0.77

前言:
JetCar是我用过最好的下载工具,最快可达到11K/秒(ISDN),
它是通过把一个文件分成几个部分同时下载可以成倍的提高速度,
下载速度可以提高100%到500%。JetCar可以创建不限数目的类别,
每个类别指定单独的文件目录,不同的类别保存到不同的目录中去
,强大易用的管理功能包括支持拖拽,更名,添加描述,查找,文
件名重复时可自动重命名等等。而且可以在下载前管理软件。两种
版本均内建支持英语、简体中文、繁体中文、西班牙语、俄语、法
语、日语、乌克兰语、朝鲜语、葡萄牙语、丹麦语、德语、罗马尼
亚语、意大利语、瑞典语、斯洛文尼亚语、匈牙利语、希腊语和加
泰罗尼亚语。
中国人的骄傲,巨好的民族软件!!!
其实这个软件是完全免费的,根本没有破解的必要,但近来有
一些网友频频留言要我写一篇破解教程,唉!盛情难却,我唯有再
次操刀。
这个软件注册和不注册主要区别在:注册后“广告栏会自动移
除”--仅仅是这样。但这个软件也是取用目前较流行的防破解手
法:即在输入完注册码后并不立即进行比对 (先把注册码存放在①
文件中②注册表中③内存中) ,而是在下一次软件启动的时候才作
比对,所以这也是一个很好的破解教材!
本软件是取用第二种手法,即把注册码存放在注册表中:
\HKEY_CURRENT_USER\SoftWare\JetCar\JetCar\General的RegName
和RegPass,所以我第一时间想到的方法就是用拦注册表的API函数
:bpx RegOpenKeyA或bpx RegQueryValueExA,想在它进行注册码
比对时再把其一网打尽...^_^。天啊,原来这个软件在启动的时候
有不下数十处地方是调用这两个函数的,这又给破解带来了一些麻
烦,因为我不可能一个一个地去筛选,这样做太笨了。所以我又想
到了破解利器W32DASM,因为它常常是SoftIce的好助手。费话小说,
开工吧!

破解工具:W32DASM 8.9X
SoftIce for Win9X 4.X

首先用W32DASM把JetCar反编译,然后查找字串:RegName(这个非常
关键),一会就搜索到了:

* StringData ->"RegName"
|
:00410356 push 0049BC60

* StringData ->"General"
|
:0041035B push 0049B430
:00410360 mov ecx, esi ; 把你输入的大名写入
:00410362 call 00469650 ; \HKEY_CURRENT_USER\SoftWare\JetCar\JetCar\General的RegName
; 我怎么知道?因为我Crack过嘛!

:00410367 mov edx, dword ptr [esp+0000012C]
:0041036E mov ecx, esi
:00410370 push edx

* Possible StringData Ref from Data Obj ->"RegPass"
|
:00410371 push 0049BC58

* Possible StringData Ref from Data Obj ->"General"
|
:00410376 push 0049B430 ; 把你输入的注册码写入
:0041037B call 00469650 ; \HKEY_CURRENT_USER\SoftWare\JetCar\JetCar\General的RegPass
:00410380 push FFFFFFFF
:00410382 push 00000030

**** "Thank you for registering FlashGet. Please restart the progr"
|
:00410384 push 0000EF82
:00410389 call 004116D0 ; 就是那个提示的窗口(叫你重新启动)

既然上面的代码是把你输入的名字和注册码写入注册表中,那么它肯
定还有一段代码是把你的名字和注册码从注册表中读出来的,于是我
再次往下查找RegName,果然不出所料,这次又找到了:

* StringData ->"RegName"
|
:004104BF push 0049BC60
:004104C4 lea eax, dword ptr [esp+14]

* StringData ->"General"
|
:004104C8 push 0049B430
:004104CD mov esi, ecx
:004104CF push eax
:004104D0 call 00472783 ; 从注册表中读出你刚才输入的大名
:004104D5 push 0049FC40

* StringData ->"RegPass"
|
:004104DA push 0049BC58
:004104DF lea ecx, dword ptr [esp+10]

* StringData ->"General"
|
:004104E3 push 0049B430
:004104E8 push ecx
:004104E9 mov ecx, esi
:004104EB mov [esp+34], 00000000
:004104F3 call 00472783 ; 从注册表中读出你刚才输入的注册码
:004104F8 mov edx, dword ptr [esp+0C]

那么正确的注册码是什么?它们又是在哪里进行比对的?
哥们,先不要急,继续往下看吧!

:0041057B push ecx ; 你输入的大名
:0041057C push edx ; edx, 程序生成的
:0041057D mov ecx, esi
:0041057F call 00410620 ; 生成注册码的Call
; 有兴趣的朋友可以跟进去研究研究
:00410584 mov eax, dword ptr [esp+0C] ; 你输入的注册码
:00410588 mov ecx, dword ptr [esp+14] ; 正确的注册码 ^_^
:0041058C push eax
:0041058D push ecx
:0041058E call 00449F6E ; 注册码进行比对
:00410593 add esp, 00000008
:00410596 mov byte ptr [esp+28], bl
:0041059A test eax, eax ; 成功eax=0, 不成功eax=FFFFFFFF
:0041059C pop edi
:0041059D lea ecx, dword ptr [esp+10]
:004105A1 jne 004105DA ; 注册失败
; 也可直接把其改成9090 ^_^

现在大家应该一目了然嘛,如果还不明白,那我也没办法了!

再后整理:
1. 先运行 JetCar 0.77,然后在菜单上选“帮助->移掉广告横幅”,
用户名称:000ye,注册码:78787878,按“确认”键,最后退出JetCar。
2. 用SoftIce 的 Symbol Loader 载入JetCar (这个不用我教吧)
3. 按 F8
4. bpx 0041058C
5. F5
6. 程序中断,D ecx
7. 还不快快抄下来,正确的注册码是:05914NB7R3

浪费了大家的时间,真的不好意思!!!

000ye
2000.03.12