首页
社区
课程
招聘
[原创]SQLServer2008试用版破解
发表于: 2010-3-8 18:18 13873

[原创]SQLServer2008试用版破解

2010-3-8 18:18
13873
第一次发帖,不太懂规矩,如果有不对的地方请大家见谅。见解浅陋的地方请大家指出。

我看《加密与解密(第三版)》有一段时间了,不过很少自己尝试破解软件,网上下的小软件都加了壳,我还没学会脱壳。前天无聊点开了SQLServer2008Management studio,打开“关于”对话框,发现还有几十天就过期了(我装的是从同学那拷的180天试用版(企业版))。于是往OllyDbg里面一拖,发现没有加壳!我当时觉得奇怪,为什么这样的大软件都不加壳呢?(可能是我大惊小怪吧。。。)于是便开始调试。

我觉得试用版信息肯定是在注册表中有,于是在RegQueryValueEx上下断,按F9,Ctrl+F9,第三次来到:

6E7F29B3    FF15 04107F6E   CALL DWORD PTR DS:[6E7F1004]             ; ADVAPI32.RegQueryValueExW
6E7F29B9    F7D8            NEG EAX
6E7F29BB    1BC0            SBB EAX,EAX
6E7F29BD    83C0 01         ADD EAX,1
6E7F29C0    8945 E0         MOV DWORD PTR SS:[EBP-20],EAX

..........
6E7F2A8F    E8 DC1D0000     CALL 6E7F4870
6E7F2A94    8945 E8         MOV DWORD PTR SS:[EBP-18],EAX
6E7F2A97    837D E8 00      CMP DWORD PTR SS:[EBP-18],0
6E7F2A9B    75 30           JNZ SHORT 6E7F2ACD
6E7F2A9D    6A 00           PUSH 0
6E7F2A9F    68 70117F6E     PUSH 6E7F1170                            ; UNICODE "Error %d unencoding cookie in sqlboot!GetSkuInfo."

看到"Error %d unencoding cookie in sqlboot!GetSkuInfo."的信息时兴奋了,我感觉肯定就在前面的函数解密Licence信息了,于是跟进去一步步看,发现果然是在解密了。

解密算法挺复杂的,共有三个Key,一个用来解密Licence,另两个与被解密的字节又改变第一个Key,同时另两个Key也在变化着(可能没表述清楚......后面附的代码里有具体算法)

解密出来的明文就比较清楚了,第一个字节是明文长度,接下来有三个11字节个字符串表示的十六进制整数,可能是版本号,安装日期什么的吧,接下来是序列号,再是计算机名字,最后是11字节的试用天数:00000000180

我仔细想了一下觉得这个加密算法并不是单向的,于是花了一天一夜写出了注册机,只要把试用天数改为0就行了。思路是:读注册表->解密->最后11字节改为0x30->加密->写注册表。关键是加密和解密算法,我写成了一个类SqlLicence。

多次调试修改没错误之后运行,再打开Management Studio,打开“关于”对话框发现没有剩余天数提示了!

后来一个同学跟我说Management Studio虽然破解了但是SQL Server服务程序有没有破解呢?我觉得也是,于是在注册表同一个目录下面发现了另一个相似的信息,于是同样也把它改了。
两个键分别是:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\Tools\ClienSetup\checksum
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\100\Tools\Setup\checksum

建议大家使用先导出这两个键备份,以免意外。

第一次发帖,如果觉得本贴看不上眼千万不要喷我,我会受不了的= =!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
太厉害了,这个都能研究出来
2010-3-8 21:38
0
雪    币: 370
活跃值: (15)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
3
绝对震撼!先做个标记待用到时再试。
2010-3-8 22:02
0
雪    币: 615
活跃值: (1202)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
留个记号。。。
2010-3-8 22:24
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
第一次发帖能得到大家的好评我深感荣幸!
如果有朋友也研究过SQLServer破解,发现我有弄错的地方还请指出,谢谢!
2010-3-9 01:56
0
雪    币: 145
活跃值: (85)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
这么厉害。还第一次发帖。
2010-3-9 02:03
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
7
学以致用,很好!
2010-3-9 08:17
0
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
此帖收藏了
2010-3-9 14:07
0
雪    币: 47
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不错。
提示一下:微软等大型商业公司的软件是不会加壳的。
2010-3-9 16:12
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
哦,多谢shada的提示。

那我想知道这些大型软件公司产品怎么防破解?只是依靠自己设计的加密算法吗?
那样的话好像不太安全吧,验证注册信息的地方不是通常很容易被绕过吗?
事实上我看懂解密算法之前,已经调试到了这里:

001354D5  |.  68 2B8FD5A1   PUSH A1D58F2B
001354DA  |.  FFD0          CALL EAX
001354DC  |.  83F8 FF       CMP EAX,-1
001354DF      74 25         JE SHORT Ssms.00135506
001354E1  |.  83F8 FE       CMP EAX,-2
001354E4      74 20         JE SHORT Ssms.00135506
001354E6  |.  3D 00FFFFFF   CMP EAX,-100
001354EB      75 03         JNZ SHORT Ssms.001354F0
001354ED  |.  47            INC EDI
001354EE  |.  EB 16         JMP SHORT Ssms.00135506
001354F0  |>  C685 F3FDFFFF>MOV BYTE PTR SS:[EBP-20D],1
001354F7  |.  33FF          XOR EDI,EDI
001354F9  |.  A3 A8E21300   MOV DWORD PTR DS:[13E2A8],EAX
001354FE  |.  EB 06         JMP SHORT Ssms.00135506
00135500  |>  8BB5 ECFDFFFF MOV ESI,DWORD PTR SS:[EBP-214]
00135506  |>  3BF3          CMP ESI,EBX
00135508      74 07         JE SHORT Ssms.00135511
0013550A  |.  56            PUSH ESI                                 ; /hLibModule
0013550B  |.  FF15 98101300 CALL DWORD PTR DS:[<&KERNEL32.FreeLibrar>; \FreeLibrary
00135511  |>  389D F3FDFFFF CMP BYTE PTR SS:[EBP-20D],BL
00135517  |.  75 10         JNZ SHORT Ssms.00135529
00135519  |>  6A 10         PUSH 10
0013551B  |.  68 00040000   PUSH 400
00135520  |.  57            PUSH EDI
00135521  |.  E8 E0F6FFFF   CALL Ssms.00134C06

我故意把系统时间调到过期,发现最后一个函数是报告软件过期的函数,很容易猜想001354DA处call的是检查
注册信息的函数。
于是,我把001354EB处的 JNZ SHORT Ssms.001354F0,改成JMP SHORT Ssms.001354F0。
运行之后发现果然又能启动了,查看一下剩余天数发现是4294967200天。到这里应该已经算crack成功了。
由于我对它的解密算法还是很感兴趣,所以还是跟进去看乐,结果写出了这个程序,感觉没有过期提示更完美。
2010-3-9 17:07
0
雪    币: 47
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
Ms office, Sql server 都是不怕破解的,依靠法律,
用盗版的越多,对其越有利,你今天不给它付费,以
后可能会付费的,也可以说是一种营销手段吧。
2010-3-12 18:59
0
雪    币: 198
活跃值: (1580)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
大公司的软件首先培养用户的依赖性,然后才依靠法律来收钱。纯技术上的保护是象征性的。
2010-3-12 19:35
0
雪    币: 65
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
原来如此。
2010-3-13 12:41
0
游客
登录 | 注册 方可回帖
返回
//