zoukankan      html  css  js  c++  java
  • 一种破解静态链接库(.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!



  • 相关阅读:
    ElasticSearch集群设置
    NEST与JSON语法对照 一 match与multi_match
    某墙尼妹,用个Response.Filter来解决StackExchange.Exceptional中google cdn的问题
    高频
    Linux 后台执行命令
    Mysql 常用函数汇总
    Golang 昨天、今天和明天
    Golang——Cron 定时任务
    Golang 资料整理
    Golang: for range
  • 原文地址:https://www.cnblogs.com/ygxsk/p/7693992.html
Copyright © 2011-2022 走看看