您的位置:首页 > 其它

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

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

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

1. 用W32dsm89或OLLYDBG打开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,一切正常,成功跳过时间限制。

后记:这个软件除了的试用版除时间限制之外还有功能上的限制,这种暴力破解美中不足的无法去掉软件的其它限制。进一步的工作是找到功能限制的代码,实现软件的完全破解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: