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


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

  • 标 题: 关于.lib的我研究过
  • 作 者:haibin1013
  • 时 间:2005-06-07 22:41

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