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要求有点高)

 

深思的 读狗函数一般很有规率
总是先调用一个函数 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
);的调用
其中第一个参数与上面的函数的第一个参数一样。
近过跟踪 很快就可以找到所有读狗的地址
 

上一篇:破解彩虹狗GS-MH
下一篇:AceFTP3 算法分析
X

点击这里给我发消息
微信号:crackgou