首页
社区
课程
招聘
[原创]再次说下sense4加密锁
发表于: 2005-6-5 18:49 31276

[原创]再次说下sense4加密锁

2005-6-5 18:49
31276

自从上次我发表‘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.睡大觉
既然模拟文件都做好了,想必你也累了很长时间了吧。胜利了,当然要补回睡眠了,快去睡一觉再说吧。

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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (23)
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
2
衰...NB

硬件复制不知道有人解....
2005-6-5 21:38
0
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
3
牛人...
狗是越忽悠越热...
2005-6-5 21:41
0
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
4
脱的狗越涮就好吃...
2005-6-5 21:50
0
雪    币: 302
活跃值: (410)
能力值: ( LV12,RANK:410 )
在线值:
发帖
回帖
粉丝
5
这种方法对于动态使用Sense4.DLL的软件有用,可对于静态连接狗的.LIB的软件就无能为力了,因为静态使用狗的软件不会去调用Sense4.DLL。
2005-6-5 22:41
0
雪    币: 1866
活跃值: (95)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
最初由 Spring.W 发布
这种方法对于动态使用Sense4.DLL的软件有用,可对于静态连接狗的.LIB的软件就无能为力了,因为静态使用狗的软件不会去调用Sense4.DLL。

静态的一样可以!不过麻烦点罢了!!
2005-6-6 00:04
0
雪    币: 328
活跃值: (925)
能力值: ( LV9,RANK:1010 )
在线值:
发帖
回帖
粉丝
7
经验啊,学习了.
2005-6-6 06:48
0
雪    币: 161
活跃值: (231)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
虽然讲得不太详细,便总的思想都出来了,有心学习的朋友可走不少弯路。
支持
2005-6-6 10:42
0
雪    币: 255
活跃值: (175)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
支持一下!!!!!!
2005-6-6 10:49
0
雪    币: 332
活跃值: (479)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
10
首先你既然要想做一个cracker,至少要先做好一个coder吧(当然progamer要求有点高)

这是破解的最低要求,也是最高境界吧!惭愧,离coder还差很远呢....
2005-6-6 12:04
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
11
调试+逆向+编码 == 楼主强人!
2005-6-6 12:47
0
雪    币: 258
活跃值: (230)
能力值: ( LV12,RANK:770 )
在线值:
发帖
回帖
粉丝
12
最初由 Spring.W 发布
这种方法对于动态使用Sense4.DLL的软件有用,可对于静态连接狗的.LIB的软件就无能为力了,因为静态使用狗的软件不会去调用Sense4.DLL。

FK硬件的说,,牛....
...
2005-6-6 15:28
0
雪    币: 26
活跃值: (189)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
最初由 Spring.W 发布
这种方法对于动态使用Sense4.DLL的软件有用,可对于静态连接狗的.LIB的软件就无能为力了,因为静态使用狗的软件不会去调用Sense4.DLL。


对于关于.lib的我没有研究过(没有接触到此类加密的),所以是否适用,在此不敢妄说。但是我想总是有办法的。
2005-6-7 09:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我也这样解过一个sense4的狗。
深有体会 , 最难的一部其实就是分析狗中的数据
推出算法.
2005-6-7 22:28
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
深思的 读狗函数一般很有规率
总是先调用一个函数 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
);的调用
其中第一个参数与上面的函数的第一个参数一样。
近过跟踪 很快就可以找到所有读狗的地址
2005-6-7 22:41
0
雪    币: 200
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
问一个很菜的问题,怎么得到log文件???
2005-9-3 14:12
0
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
17
支持一下!!!!!!
2005-9-3 14:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
学习中 ` 薛了 ~
2005-9-3 16:24
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
水平低 不明白 继续学习
2005-9-3 20:23
0
雪    币: 238
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
有收获,我是菜鸟,我学习一下!
2005-9-6 16:14
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
学习!学习!学习!在学习
2005-9-6 17:10
0
雪    币: 209
活跃值: (54)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
学习中、、、、、、、、!
2005-9-6 19:35
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
自已写一个狗的硬件驱动。从这里截获所有的I/O。
sense4的usb驱动很简单,只有4个ioctl 命令。
2005-10-10 12:04
0
雪    币: 26
活跃值: (189)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
24
最初由 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函数的就行了)。
2006-1-10 15:11
0
游客
登录 | 注册 方可回帖
返回
//