突破软件的菜单限制

软件的菜单限制,已经是现在普遍的现象。给人的可望而不可及的感觉,促使人进行付费注册,然后达到开发者的目的。

事实上,我们这里突破菜单限制的软件指试用版和正式版为同一个软件,只是注册后开放了原先禁止的功能。而那种试用版和正式版为两个完全不同的版本,那么大家就没有在一个频道上了。

我们看一下示例程序:

突破软件的菜单限制

使用OD打开之:

突破软件的菜单限制

查看解析出来的代码,因为这款软件mene被禁止,我也尤其关注这个字段,于是发现了:

突破软件的菜单限制

经过调研,原来,要将软件菜单和窗口变为不可用状态,需要使用EnableMenuItem()函数和EnableMenuItem()函数

此例使用EnableMenuItem()函数,我们关注一下这个函数原型:

BOOL EnableMenuItem(
  HMENU 
hMenu,  // handle to menu菜单句柄
  UINT uIDEnableItem// menu item to enable, disable, or gray欲允许或禁止的一个菜单的标识符
  UINT wEnable  // menu item flags控制标志,包括允许0h,灰化1h、禁止2h等等
  );

我们可以看到,在004011E3处,控制标志被设置为1h,我们将其设置为0突破软件的菜单限制

保存后,重新运行软件:

突破软件的菜单限制