FastRBF破解笔记-By忧伤的内拉祖里

 

小弟做课题需要用一个叫FastRBF的软件,用邮箱注册后免费下载了一个试用版,并得到一个只有30天的license。遂想试着破解一下。把破解过程写在这里,就算关公面前耍小刀了,还请诸位高手赐教。

本来想弄清其中的加密算法,但算法实在太复杂,调了几天也没有弄明白,于是退而求其次,想其它办法。基本的思路是恰当添加自己的指令,修改相关寄存器的值,并跳过原程序协注册表的部分代码。步骤如下:

1. W32dsm89OLLYDBG打开license查看程序viewlicense.exe,在程序的导入函数里寻找读取系统时间的函数,初步断定为time

2. 加载程序,定位到调用time函数的代码,单步执行。发现执行完该函数后EAX寄存器里的数据发生变化,估计是函数的时间返回值。为了验证这一猜测,自己编了一个调用time函数读取时间的程序,发现与EAX的值相差无几,证实了先前的猜想。

3. 一个最直接想法是修改EAX寄存器的值。怎么改呢?这需要一段空白的指令以添加自己的代码。巧的是在距调用time不远的地方就有11个字节的NOP指令。足够添加一个MOV和一个JMP指令了。但怎么才能跳过去呢?在time下面是一个4字节的MOV ECX, DWORD PTR[ESP+04]的指令。[ESP+04]里面是什么呢?仔细一看竟然是和EAX一样的值。于是想到可以用2字节的MOV ECX, EAX来代替该指令,从而可以找到添加自己的跳转指令所需的2个字节。修改后的代码如下:

………………………………………

004025DC EB 37         JMP SHORT ViewLice.00402615

004025DE 8BC8          MOV ECX,EAX

………………………………………

00402615 B8 36B84B44   MOV EAX,444BB836

0040261A 894424 04      MOV DWORD PTR SS:[ESP+4],EAX

0040261E EB BE         JMP SHORT ViewLice.004025DE

4. 修改完后,继续调试。观察发现,License查看程序将调用RegSetValueExa函数修改注册表,估计是将这次启动程序的系统时间写入注册表了。因此必须跳过这段代码。查看msdn发现RegSetValueExa函数压栈6个参数,为保证跳过函数前后栈的一致性,需要将所有PUSH指令都改成空指令,同时调整LEA指令。

5. 修改后代码如下:

………………………………………

0040398F    90            NOP

00403990    90            NOP

00403991    8D4C24 24     LEA ECX,DWORD PTR SS:[ESP+24]

00403995    90            NOP

00403996    90            NOP

00403997    90            NOP

00403998    90            NOP

00403999    90            NOP

0040399A    90            NOP

0040399B   90            NOP

0040399C    90            NOP

0040399D    90            NOP

0040399E    90            NOP

0040399F    90            NOP

004039A0   90            NOP

………………………………………

6. 编写自动替换文件的程序CrackFastRBF.exe,完成自动破解。

7. 全部修改完后修改系统时间并运行程序,OK,一切正常,成功跳过时间限制。

后记:这个软件除了的试用版除时间限制之外还有功能上的限制,这种暴力破解美中不足的无法去掉软件的其它限制。进一步的工作是找到功能限制的代码,实现软件的完全破解。

posted on 2006-07-21 10:33  忧郁的内拉祖里  阅读(1279)  评论(9)    收藏  举报

导航