首页
论坛
专栏
课程

[商业保护] [原创]再次说下sense4加密锁

2005-6-5 18:49 27346

[商业保护] [原创]再次说下sense4加密锁

2005-6-5 18:49
27346
自从上次我发表‘15个日夜破解sense4锁’以来,我不断收到很多朋友的留言和来信。大致都是来交流、咨询破解方式和心得的(也有个别人索要破解成品,对这部分人我只能表示抱歉没有给你们任何回复),由于本人时间和经历有限,不能一一答复,再次表示歉意。所以在这里我想再次把心得说一下。当然与上次的会有所重复。其实我觉得上次已经基本把思路说清楚了,只是没有深入....
不过这次我还是不会把细节说清楚。在这里请大家不要问我理由(我不说大家都应该知道)

1.分析
至于深思4锁的特性就不用介绍了,请不了解的朋友访问www.sense4.com.cn
破解一个软件,首先应该是看其readme等文档,然后先运行下看有什么限制,分析是否加壳,如果是硬件加密莫过于看看是什么硬件了。sense4锁加密的也不过于这样分析。
只是sense4的储存数据区太大,所存放的‘重要数据’够多够复杂。这就给破解带来了非常大的难度。首先如果没有锁在手上,你几乎是无法运行起来调试的。换句话说你是无法在无锁的情况下破解的。插句题外话--对hasp有经验的人都应该知道,即使有hasp锁,对软件来爆破,不但很累,想爆破完美也是非常难的。而换种方式,通过改写驱动来拦截hasp狗内的所有单元数据。再写个模拟,在运行软件需要hasp数据的时候,由模拟服务程序返回读取出来的数据给软件。这样就’简单‘多了。至少可以确保是完美的。用句我的以为破解朋友的话说:hasp4 is shit.

2.打印读取锁日志log文件
既然hasp可以如此做,sense4的数据量那么大,爆破很难,那就不如模拟了。怎么模拟呢。先从软件进行调试分析,得出哪些地址需要调用sense4得数据。这些数据是如何调用的。要那些参数。收集好了后就可以开始写个全新的程序,用这个程序来替换掉软件中的同名文件(sense4加密的程序,基本都有个sense4.dll文件,这个文件是一个锁数据读取中心)。同时要注意,在这个新的文件里要做好一个输出管道,也就是说不管是软件进锁前调用参数,还是从锁内读取的数据,还有偏移地址统统都打印出来形成文件。我这个文件称为读锁日志--log文件。这里有一点需要注意,为了确保log文件是完全的,就必须尽可能的把软件的所有功能都一次使用完。得到这个log文件后,最重要的一步就完成了。下一步就是分析并写模拟了。

3.分析log文件
给我发邮件和QQ留言的朋友问,获得了这个log文件有什么用啊,如何分析啊,如何。。。。。
问这些问题的朋友,请看看我说的这个log文件是由3部分组成的。
1。偏移地址
2。调用读锁参数
3。读锁后的数据
既然有了这3个’重要‘数据,下一步我想应该是不难的了。
这3个部分告诉了我们什么?
1)那个地方需要调用锁
2)调用锁的参数是什么
3)调用锁返回的数据是什么。
好了,这个清楚后,就应该分析这些数据之间的关系了。这部分是比较难,但是总是有办法的。一般来说加密者不外乎以下几种加密方式
a)把一些常量放锁内
b)把重要变量放锁内
c)把重要数据处理过程、函数放锁内
至于a)应该是很容易的。步多说了
b)有点难度。但是这些变量大凡都是有规律的。你可以从这些log文件中把规律找出来。呵呵,需要你的时间,精力,尤其是你的能力。
c)看起来应该是最难的了。一个算法,怕怕。但是不要惊惶。从我做过的两套(不好意思,还不算多,经验积累还不能说多)sense锁加密的程序来看,里面的算法都不算复杂(可能是加密者怕算法太复杂影响软件运行速度,效率吧)。大家想必都做过跟踪出注册码算法吧。当然这个与c)还有很大区别。因为我们无法跟踪到里面的算法汇编语句。怎么办,还是一样要多分析log文件找出规律。累吗,当然累。如果你想成功就应该坚持。。。。

4.写模拟文件
来问我的朋友中有人问我:‘你是如何爆破的,下了什么断点’。这里我再告诉你一下,我没有能力爆破sense4(除非加密者只用几个简单的标志变量来跳转)。我想目前还没有人能爆破吧,至少从我分析理论上很难。
好了。既然数据分析的差不多了,规律找出来了,写模拟文件应该是‘很简单’的事情。针对上面的a)b)c)
a)把常量值直接放模拟文件中,让程序调用
b)写成一个函数把分析出来的规律写成函数体做数据返回。
c)其实如b)一样。只是这里‘更’着重算法。
还有朋友问我,这样的模拟文件如何写啊。我想这个问题太没什么意思了。首先你既然要想做一个cracker,至少要先做好一个coder吧(当然progamer要求有点高)

5.睡大觉
既然模拟文件都做好了,想必你也累了很长时间了吧。胜利了,当然要补回睡眠了,快去睡一觉再说吧。

好了,献丑了。我知道我说的有点乱,也不够详细。但是抱歉,我水平有限。如果还有朋友愿意和我一起交流,最好还是在坛子里吧。让大家都能看到,一起回答,一起交流这样比较好。
上面说的难免有错误,请朋友们指正!!

[公告]安全测试和项目外包请将项目需求发到看雪企服平台:https://qifu.kanxue.com

最新回复 (23)
qiweixue 19 2005-6-5 21:38
2
0
衰...NB

硬件复制不知道有人解....
qiweixue 19 2005-6-5 21:41
3
0
牛人...
狗是越忽悠越热...
qiweixue 19 2005-6-5 21:50
4
0
脱的狗越涮就好吃...
Spring.W 10 2005-6-5 22:41
5
0
这种方法对于动态使用Sense4.DLL的软件有用,可对于静态连接狗的.LIB的软件就无能为力了,因为静态使用狗的软件不会去调用Sense4.DLL。
dalao 1 2005-6-6 00:04
6
0
最初由 Spring.W 发布
这种方法对于动态使用Sense4.DLL的软件有用,可对于静态连接狗的.LIB的软件就无能为力了,因为静态使用狗的软件不会去调用Sense4.DLL。

静态的一样可以!不过麻烦点罢了!!
liyangsj 25 2005-6-6 06:48
7
0
经验啊,学习了.
采臣·宁 1 2005-6-6 10:42
8
0
虽然讲得不太详细,便总的思想都出来了,有心学习的朋友可走不少弯路。
支持
lee 3 2005-6-6 10:49
9
0
支持一下!!!!!!
laoqian 8 2005-6-6 12:04
10
0
首先你既然要想做一个cracker,至少要先做好一个coder吧(当然progamer要求有点高)

这是破解的最低要求,也是最高境界吧!惭愧,离coder还差很远呢....
prince 16 2005-6-6 12:47
11
0
调试+逆向+编码 == 楼主强人!
qiweixue 19 2005-6-6 15:28
12
0
最初由 Spring.W 发布
这种方法对于动态使用Sense4.DLL的软件有用,可对于静态连接狗的.LIB的软件就无能为力了,因为静态使用狗的软件不会去调用Sense4.DLL。

FK硬件的说,,牛....
...
kingday 1 2005-6-7 09:31
13
0
最初由 Spring.W 发布
这种方法对于动态使用Sense4.DLL的软件有用,可对于静态连接狗的.LIB的软件就无能为力了,因为静态使用狗的软件不会去调用Sense4.DLL。


对于关于.lib的我没有研究过(没有接触到此类加密的),所以是否适用,在此不敢妄说。但是我想总是有办法的。
haibin1013 2005-6-7 22:28
14
0
我也这样解过一个sense4的狗。
深有体会 , 最难的一部其实就是分析狗中的数据
推出算法.
haibin1013 2005-6-7 22:41
15
0
深思的 读狗函数一般很有规率
总是先调用一个函数 S4VerifyPin 效验一下 用户PIN 码。
DWORD WINAPI S4VerifyPin(
IN SENSE4_CONTEXT *s4Ctx,
IN LPBYTE lpPin,
IN DWORD dwPinLen,
IN DWORD dwPinType
);
此时dwPinType  肯定是 S4_USER_PIN  0x000000a1       
那么 dwPinLen  肯定是  8
隔不远有一个函数 调用
DWORD WINAPI S4Execute(
IN SENSE4_CONTEXT * s4Ctx,
IN LPCSTR lpszFileID,
IN LPVOID lpInBuffer,
IN DWORD dwInbufferSize,
OUT LPVOID lpOutBuffer,
IN DWORD dwOutBufferSize,
OUT LPDWORD lpBytesReturned
);的调用
其中第一个参数与上面的函数的第一个参数一样。
近过跟踪 很快就可以找到所有读狗的地址
machine 2005-9-3 14:12
16
0
问一个很菜的问题,怎么得到log文件???
pendan2001 4 2005-9-3 14:46
17
0
支持一下!!!!!!
阿杰 2005-9-3 16:24
18
0
学习中 ` 薛了 ~
987654321 2005-9-3 20:23
19
0
水平低 不明白 继续学习
loucm 2005-9-6 16:14
20
0
有收获,我是菜鸟,我学习一下!
蚂蚁 2005-9-6 17:10
21
0
学习!学习!学习!在学习
ynwtjhvtk 2005-9-6 19:35
22
0
学习中、、、、、、、、!
acguy 2005-10-10 12:04
23
0
自已写一个狗的硬件驱动。从这里截获所有的I/O。
sense4的usb驱动很简单,只有4个ioctl 命令。
kingday 1 2006-1-10 15:11
24
0
最初由 haibin1013 发布
深思的 读狗函数一般很有规率
总是先调用一个函数 S4VerifyPin 效验一下 用户PIN 码。
DWORD WINAPI S4VerifyPin(
IN SENSE4_CONTEXT *s4Ctx,
IN LPBYTE lpPin,
........


刚看到这个关于静态库lib调用加密的回帖。我大致说一下我的解决方案
不管对动态库dll还是静态库lib的加密调用都必须调用S4函数
S4Verfypin是校验用户口令。
S4Execute是执行锁内可执行文件函数。
在这两个函数调用前一般还应该有一个S4ChangeDIR(改变目录)函数
其实找到这些函数的调用地址可以说都非常简单,最重要的也不是得到这些函数的调用地址,而应该是S4Execute函数的指针输入参数和输出指针所有元素值。对于动态dll调用改写dll即可(我在上文提到过),对于静态Lib调用可以采用dll注入、APIhook等方式来拦截和打印读锁日志。
如何dll注入,APIhook这个我一句话说不清楚,大家可以google参考一些技术文档

上面我只说了做模拟的大概思想,其实可以做模拟,就能做复制。模拟只是把狗内算法复原形成硬盘文件和数据供软件调用。你只要把这些复原的算法重新写到新狗里就是复制锁了。因为这里有一个很好的锁‘bug’可以利用:开发商指令与被加密软件无关,而用户指令可以随便修改(改成对应的S4VerifyPin函数的就行了)。
游客
登录 | 注册 方可回帖
返回