zoukankan      html  css  js  c++  java
  • 第5章:演示版保护技术——菜单功能限制、KeyFile保护

    菜单功能限制

    相关函数:EnableMenuItem()

    hMenu : 菜单句柄
    uIDEnableItem : 欲允许或禁止的一个菜单条目的标识符。
    如果在wEnable参数中设置了MF_BYCOMMAND标志,这个参数就代表欲改变菜单条目的命令ID。如设置的是MF_BYPOSITION,则这个参数代表菜单条目在菜单中的位置(第一个条目肯定是零)
    wEnable : 对于这个函数,只能指定下述常数:MF_BYCOMMAND,MF_BYPOSITION,MF_ENABLED(允许,0),MF_DISABLED(禁止,2)以及 MF_GRAYED(灰化,1)
     
     
    在程序中看一下:

    和之前类似,注意第四个参数:

    当 eax == 110 时,会跳转到 EnableMenuItem()的执行流程:

    只需要将参数改为 0 即可。程序开始执行时运行一次,后面不会多次运行到该流程。

     
     
    KeyFile 保护
    KeyFile 文件一般比较小,包含的内容也多种多样,注册文件放入指定文件夹,经过检验即可正确使用程序。
    ① 加密或者未加密的数据
    ② 文件格式自定义
    ③ 加入垃圾信息
    ④ 将注册文件中的数据和关键代码与软件中的数据和代码挂钩
     
    相关 API :

    拆解 KeyFile 保护的一般思路:

    到程序中看一下:

    首先需要进入到对应的代码段中,可以使用消息断点 ButtonUp 进行捕获,经过多次运行找到进入代码段的函数:

    在第二次 Call ecx 且 ecx == 4012CF 时 ,会进入关键代码段,此时:

    当然也可以直接对 CreateFileA 下断点。下面分析算法:

    三个 ReadFile 分别将文件中的数据( 5,pediy,12个字节的数据 )依次读取在三个不同的地址中。而 401000 地址处的代码将 pediy 加起来,取最后两字节保存起来。

    具体算法如下:

    首先对 xor 后的 12 字节依次进行操作。每个字节都会经历 6/4/2/0 四次移位操作,结果 and 3 之后得到一个 0-3 之间的数字。根据得到的数据对地图进行操作。

    若碰到 * 则会退出,只有碰到 X 才会正常弹出窗口。

  • 相关阅读:
    .net 操作XML小结
    Oracle 10g RAC的负载均衡配置
    数据仓库建模与ETL实践技巧
    Red Hat Linux的分区
    用C#实现MVC(Model View Control)模式介绍
    SQL SERVER 日期函数大全
    ORACLE RAC工作原理
    NVARCHAR ,VARCHAR,NCHAR,CHAR区别
    SQLserver中用convert函数转换日期格式
    Linux之远程登录和文件传输
  • 原文地址:https://www.cnblogs.com/Rev-omi/p/13749641.html
Copyright © 2011-2022 走看看