[初级]用实例讲解OllyICE(OllyDBG)破解一个商业时间限制软件[原创]
发表于:
2007-1-29 20:20
43901
[初级]用实例讲解OllyICE(OllyDBG)破解一个商业时间限制软件[原创]
本文以MaxT公司(http://www.maxt.com/)的MAXIM Eval Edition软件为例程来说明一般破解思路,同时熟悉该工具的使用方法。 OllyICE是从看雪下载的1.10汉化第二版本,没有用到其他的软件。 该软件是个全功能版本的软件,试用期是30天。破解的目标是要去掉30天限制,窗口标题不提示剩余多少天。
一般商业软件都会把序列号校验等功能放在一个独立的运行模块(exe或者dll),而且大都是购买专业的保护软件工具来编写。对于普通的一般程序的破解,一般是找到弹出窗口字符串的引用地址进行暴力破解即可。 1. 查看主程序依赖的dll模块,找到可疑的dll.
使用OllyICE打开该软件,选择可执行模块(ALT+E),出现下面的窗口:
可以明显的发现其中有个可疑的dll: KeyLib32.dll,搜索网上的相关资料确信它确实是
http://www.softwarekey.com公司的Protection Plus 开发套件中的一个dll。
2. 在所有调用到该dll函数的地方设置断点(静态连接dll的有效,如果是动态的可以查找LoadLibrary函数断点).
按ALT+R打开所有内部引用到函数调用窗口,按模块排序(不要按调用地址排序),找到相应的KeyLib32的调用地址(可以先导出所有的调用列表到一个txt文件中,再搜索到KeyLib32,找到相应的调用地址,如:00C5B5E6 call <jmp.&KeyLib32.pp_daysleft> KeyLib32.pp_daysleft,这一行说明了调用地址是00C5B5E6,调用的函数是pp_daysleft函数)。在下面的command窗口中输入:bp 00C5B5E6(在该地址处下断点)即可来到相关调用地址,可以看到所有的KeyLib32中函数的调用地址都这一块(如果按模块排序的话),在所有的调用地方在右键菜单中选择设置断点。 3. 动态跟踪上面设置的断点,让程序跑起来后运行到断点附近查看断点上下寄存器和内存中数据的变化进行分析.
选择菜单中的调试菜单,选择运行,然后按Ctrl+F8,让程序跑起来,跑起来后程序会停在所有设置了断点的地方。
在下载的试用版本KeyLib32.dll的开发包中可以看到它的内部函数的相关说明中有两个函数涉及到了password敏感参数,其中一个是:
LONG PPPEXPORT WINAPI PP_LFOPEN( LPSTR filename, LONG flags, LONG type, LPSTR password, LPLONG ret_handle );
可以看到第二个入栈的参数就是password字符串的地址(从右往左入栈,stdcall方式),忽略所有的断点(按Ctrl+F8)直接来到调用PP_LFOPEN函数的断点,
在这个地方可以看到当程序运行到图片中的黑色部分的时候,用于解密Key文件的密码的地址已经入栈,再运行到00C5C002的时候
Key文件名路径地址也入栈了,这个时候就会调用该函数了。
参考下载的试用版本的KeyLib32开发包,里面就附带了相关的Key文件编辑工具(前提是必须知道密码),可以对现有的Key文件进行编辑,也可以新建一个key文件,名称是:LFRW.exe 使用已经截获的密码(AD!#113go;jk94),使用LFRW.exe打开截获的Lic文件(maxim103.lf),输入截获的解密密码,可以看到上面的窗口,编辑 EZ Trial Days to Run,修改成你需要的天数(最大不能超过12/31/2050),我随便改成了36500(100年,呵呵),选择Write Changes.
然后找一台没有安装改软件的的机器,安装改软件,然后替换它的maxim103.lf为你刚刚编辑的软件,运行程序,出现最上面的那个窗口,提示还剩余:16116天,呵呵,好像到了2050年了吧。
4. 优化,去掉窗口标题中的多少天剩余烦人的提示.
程序运行后的标题应该是通过两个字符串连接生成的标题,一个是厂商原来的程序标题,一个是剩余多少天的字符串,两个连接而成。看到KeyLib32函数中就有个PP_DaysLeft的函数(其实也可以破解这个dll让它永远不过期,道理是一样的),应该是计算还剩余多少天的函数,重新运行程序,跳过所有的断点,到达PP_DaysLeft断点, 可以明显的看到”%d days left”这个应该是明显的格式化字符串的函数,程序运行到 call 004103E0,再往下一条指令的时候,EDX寄存器存放的地址对应的字符串为:“16116 days left”,如果能把这个地址改成0,那么后面进行标题字符串连接的时候就不会把这个字符串连接进去了,因为NULL是空地址。双击 mov edx, dword ptr [ebp-C]指令的注释空白地方,在注释中把原来的指令拷贝填写成注释,如果修改错误可以根据注释再改回来。双击其汇编指令,把代码修改为:mov edx,0 , OllyICE会自动根据指令长短,把多出的字节用空指令(nop)替换。修改后如下:
然后选择右键菜单,选择复制到可执行文件-》所有修改,弹出窗口,选择全部复制,进入原文件的汇编窗口,右键选择保存文件,起另外一个名称,如:MAXIM1.exe,保存,退出OllyICE,然后运行MAXIM1.exe,看看修改后的效果:
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)