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,一切正常,成功跳过时间限制。
后记:这个软件除了的试用版除时间限制之外还有功能上的限制,这种暴力破解美中不足的无法去掉软件的其它限制。进一步的工作是找到功能限制的代码,实现软件的完全破解。
本来想弄清其中的加密算法,但算法实在太复杂,调了几天也没有弄明白,于是退而求其次,想其它办法。基本的思路是恰当添加自己的指令,修改相关寄存器的值,并跳过原程序协注册表的部分代码。步骤如下:
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,一切正常,成功跳过时间限制。
后记:这个软件除了的试用版除时间限制之外还有功能上的限制,这种暴力破解美中不足的无法去掉软件的其它限制。进一步的工作是找到功能限制的代码,实现软件的完全破解。
相关文章推荐
- FastRBF破解笔记 II
- Science论文"Clustering by fast search and find of density peaks"学习笔记
- 【论文学习笔记】Clustering by fast search and find of density peak
- HpmbCalc破解笔记 by 天易love
- Detecting Oriented Text in Natural Images by Linking Segments:SegLink实现图像内文档识别的github代码复现实践笔记
- 笔记:Matrix completion by Truncated Nuclear Norm Regularization
- 论文笔记之: Person Re-Identification by Multi-Channel Parts-Based CNN with Improved Triplet Loss Function
- 1.Spring学习笔记_HelloWorld(by尚硅谷_佟刚)
- 菜鸟学java 网络视频笔记 第三课(by Super)(2011-11-23 20:32)
- X Chen笔记---百度云破解限速
- 《Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》阅读笔记与实现
- FastSpring学习笔记一
- FastSpring学习笔记五(Web页面显示)
- Fastjson 学习笔记
- win7下LoadRunner安装及破解--学习笔记
- ShadowStar CodeFast 开发笔记
- sourceInsight4 破解笔记(完美破解)
- 【杂碎笔记】【计算机与机器视觉 by E.R.Davies】Chapter5
- 论文笔记:Improving Deep Visual Representation for Person Re-identification by Global and Local Image-language Association
- 性能测试培训笔记-安装与破解