第一次发帖,不太懂规矩,如果有不对的地方请大家见谅。见解浅陋的地方请大家指出。
我看《加密与解密(第三版)》有一段时间了,不过很少自己尝试破解软件,网上下的小软件都加了壳,我还没学会脱壳。前天无聊点开了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
建议大家使用先导出这两个键备份,以免意外。
第一次发帖,如果觉得本贴看不上眼千万不要喷我,我会受不了的= =!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
上传的附件: