一种破解静态链接库(.lib)的简单方法

一种破解静态链接库(.lib)的简单方法 

作者:游蓝海

 博客:http://blog.csdn.net/you_lan_hai


        最近,在研究某代码时,遇到这样一个问题:整个解决方案中,有一个工程没有cpp源码,只有头文件跟一个静态链接库,虽然整个程序可以编译通过,但是lib文件中做了一些时间限制,导致程序启动的时候会弹出一个messagebox,提示工程过期,然后就终止执行了。当然这个问题可以通过调系统时间来暂时解决,但总是调时间也不是个事,于是就想起了要破解它。

        在网上无意间搜索到一种破解方式(http://www.cnblogs.com/DylanWind/archive/2010/11/15/1877889.html),替换掉MessageBox,文中作者虽然尝试失败了,但是却给了我们一种思路——用参数相同的其他函数进行替换。比如,MessageBox的定义如下:

extern "C" int WINAPI MessageBoxA(
    __in_opt HWND hWnd,
    __in_opt LPCSTR lpText,
    __in_opt LPCSTR lpCaption,
    __in UINT uType);

那么我们可以写一个类似的函数:

extern "C" int WINAPI MessageBoxX(
                       __in_opt HWND hWnd,
                       __in_opt LPCWSTR lpText,
                       __in_opt LPCWSTR lpCaption,
                       __in UINT uType)
{
    return 0;
}

然后,打开xxx.lib文件,将里面的MessageBoxA全部替换成我们的MessageBoxX,重新编译应用程序,MessageBox就被屏蔽掉了。

        也许上面的替换太过草率,你可以反汇编lib文件,查看具体的代码,以决定替换掉那些函数。

        运行vc命令行,输入:dumpbin /disasm xxx.lib > test.txt  就会生成一个test.txt文件。在test.txt文件中搜索MessageBox,你可能会得到类似下面的反汇编:


        在MessageBox之前,有一段比较时间的代码,如果满足条件会跳转到地址000000DD,也就是说不调用MessageBox,那么高手可以修改这个地方的代码,让他无条件跳转(很遗憾,我不是高手,所以只能用投机取巧的方法了)。在MessageBox之后,会调用abort函数,终止应用程序,因此,这行代码也必须要换掉!可以使用c语言库函数clock来替代。

        总之,遵循一个规则:哪里用着不爽就替换掉哪里。good luck to you!



posted @ 2017-10-19 18:07  游蓝海2017  阅读(1660)  评论(0编辑  收藏  举报