Skip to content

Latest commit

 

History

History
55 lines (36 loc) · 6.36 KB

cow3.md

File metadata and controls

55 lines (36 loc) · 6.36 KB

ChemOffice 2018/2019 激活原理

网传破解版原理

ChemOffice应用程序在检测激活的部分是用.NET写的,因此很容易反编译和修改。网传破解版只改动了一个字节的二进制数据:简而言之,就是将程序集中IsActivated函数最后的Return result改为了Return True,就直接让程序误以为已激活,从而达成破解目的。

虽然非常高效,但这么破解有几个问题:

  • 网传破解版漏改了几个关键应用程序/动态链接库/控件;
  • 更重要的是,有些功能会检查“ActivationLevel”(如分为Viewer、Prime、Ultra、Professional等),并不依赖IsActivated函数,显然作此只改动是不能解决这个问题的。

由此导致的问题详见「为什么使用本方法」及「破解补丁vs本方法」。

总述

因此,推荐使用本方法。本方法中,Patch.exe开源Ruby代码Patch.rbExerb编译而成,依赖于可执行文件./Activation/activate18或19.exe(基于官方安装包中的Activate.exe文件修改,见此处)。

18版一键破解原理

参考「本方法原理」。简而言之,迫使程序采用旧注册机制;因此,首先Patch.exe将相关的FlxC*.dll全部重命名,使程序找不到新注册机制相关的动态链接库,从而回滚至旧注册机制。随后,Patch.exe会调用官方安装包中的Activate.exe(它相当于是将每个ChemOffice组件中和激活相关的部分单独分离出来)。但为了方便用户“一键激活”,利用dnSpy工具更改了ActivationDlg中部分TextBoxLabel控件的Caption,更改了默认的m_actcode(激活码(设为6*E-7**W3-5*-Q*5P-J3**X-O**X-35**N))和m_uinfo(包含用户名(设为电脑当前用户名)、序列号(设为87*-38**99-9**4)等信息)。部分修改代码见下

在多数情况下,激活后会在注册表HKCU/Software/PerkinElmerInformatics/ChemBioOffice/[版本号]/Ultra下写入相关注册信息,这样的话不会有任何问题。但在少数情况下(测试时未能发现触发条件),不会在HKCU(Current User)主根键下写入信息,而是会写入HKLM(Local Machine)主根键;而在HKLM/Software下,64位平台会区分32位注册表或64位注册表。因为Activate.exe是32位程序,上述键会被重定向至HKLM/Software/Wow6432Node/PerkinElmerInformatics/ChemBioOffice/[版本号]/Ultra,从而只会影响32位ChemOffice组件而不会被64位的组件所识别。因此,在最后Patch.exe还会将上述键复制一份到64位注册表的HKLM/Software/PerkinElmerInformatics/ChemBioOffice/[版本号]/Ultra,以保证64位ChemOffice组件也能正常激活。

19版一键破解原理

本节是在上一节的基础上进行说明的,关于FlxC*.dllActivate.exe、注册表的修改的讨论见上节。自19.0版本起,旧的注册机制被埋得更深了,仅仅靠上述方法已失效。可见官方有意淘汰此机制,但仍然未完全删干净代码(不知道为什么……)

首先,buttonActivate(“Activate”按钮)在一开始被设为.Enabled = False,但在之前版本中,当序列号、激活码通过验证时,会重新将其设为“可用”;而19.0版本删除了修改Enabled属性的代码,其将一直保持False状态,即一直为“灰色”状态。其次,直接删掉了buttonActivateClick事件。所以该按钮其实只剩个空壳,实际上不响应任何序列号、激活码的输入状态了

参考之前版本,将实现激活的代码“移花接木”到了buttonActivateLater上,这样就不会有Enabled的问题。还好代码不是很长,只是返回一个m_responsem_message即可(下图),验证工作会交给其他模块完成。

改完之后尝试一下,发现不行,弹出了这么个提示窗口

dnSpy中搜索“While you entered a valid”,找到三个字串,其中两个经验证为“it is not valid for ChemDraw 19.0”,而我们感兴趣的为“it is for an older version of this software”。使用“分析”工具,找到读取于DisplayActivationDialogOriginal函数,附近代码如下图所示。找到相关函数为IsValidatedBy(也有三个,必须找到对应的那一个),把返回值全部改为True即可(如下图)。

然后运行一遍Activate.exe,已经能正常工作了。但此时运行ChemDraw等程序,依然弹出“需要注册”的窗口。这是因为这些组件内部,IsValidatedBy函数依然判定为“假”。所以在Patch.exe中,搜索了所有的应用程序/动态链接库/控件,根据二进制数据的“模式”,将所有IsValidatedBy函数进行上述更改。详细代码见Patch.rb

之后一切就能正常工作了,和正常激活版本无异。

关于Activate19.exe报毒的担心

不知道做了什么修改触发了某数字杀毒软件的报警。希望上述原理描述能减轻用户的疑惑,请放心放行。

如果实在不想运行Acitvate19.exe,可以在运行Patch.exe后,手动填写注册表项HKCU/Software/PerkinElmerInformatics/ChemBioOffice/19.0/Ultra,添加如下REG_SZ字符串键(改掉星号和谐符,你懂的):

Activation Code = 6*E-7**W3-5*-Q*5P-J3**X-O**X-35**N
Email = 随便
Organization = 随便
Serial Number = 87*-38**99-9**4
Success = True
User Name = 随便

或者,找到之前激活的18版本的ChemOffice相关的注册表项,将项名18.0改为19.0也行。上述方法未经大量测试,不保证一定能成功