CodeMeter加密C/C++程序后无法正常运行怎么办?
WIBU
2020-10-09
CodeMeter加密C/C++程序后无法正常运行的解决办法
C/C++/delphi等开发语言编写的32/64位应用程序及动态库经过加密后无法正常运行,要通过修改加密参数来解决。
使用AxProtector加壳工具对native程序加密时,默认“安全设置”步骤中会对程序进行高级加密设置、防调试工具设置、高级安全设置,这些勾选项有些会导致加密后的程序无法正常运行或运行期崩溃。
1.高级加密设置
1)资源加密:同时加密受保护应用程序的资源。 应用程序启动后位于PC内存中的资源将“按需”解密。
2)静态加密:对软件内部代码进行修改,以防止调试,转储和逆向工程。 这些修改在加密后会添加到应用程序中。
扩展静态加密:将扩展的多嵌套安全性机制添加到静态代码中。
3)动态加密:在应用程序运行时受保护的应用程序的源代码是动态修改状态。
2.防调试工具设置
1)基础调试工具检测:检测调试器是否已连接到您的应用程序。如果检测到则不会启动或退出应用程序。
2)核心调试工具检测:额外检查内核调试器程序,例如SoftICE。如果找到调试器,则不会启动应用程序。
3)高级调试工具检测: 高度检索可能与应用程序并行运行的调试程序及破解工具(例如ImpREC)。如果找到调试器,则不会启动应用程序。
4)IDE调试工具检测:检查所有调试器程序。使用此选项根本不允许调试器程序运行,即使在开发人员环境中(例如Visual Studio,Delphi)如果发现调试器程序,则不会启动应用程序。
5)通用调试工具检测:向应用程序添加一种防护机制,防止在应用程序运行时调试程序附加到应用程序中。
6)虚拟机检测: 检测是否允许在虚拟机上启动应用程序,如果检测到虚拟机则阻止程序运行。
7)激活许可所示功能: 一旦检测到调试器在调试受保护的应用程序,将锁定加密锁容器的许可证访问权限,一旦加密锁容器被锁定,正式公司码的访问数数值将直接变为0,需要开发商通过母锁对最终用户的许可容器来解锁。(加密锁固件版本必须高于1.14)
3.高级安全设置
1)添加代码完整性检测:如果此选项被选中,则将使用非对称身份验证,非对称身份验证机制来检查受保护的应用程序的代码完整性。在进行代码完整性检查时,首先将创建应用程序的校验(哈希值),并使用独立软件供应商(ISV)的私钥进行签名。哈希值和签名已添加到应用程序。 使用位于软件(AxEngine)中的公钥,在运行时检查中对哈希值(进而对应用程序)进行重新计算和完整性检查以确定是否被篡改。
2)将API库以静态方式连接到程序:CodeMeter Core API静态链接到受保护的应用程序。 这个选项增加了安全性,但同时也增加了可执行文件的大小。可以指定要加密的代码部分的百分比,以百分比数字表示。此选项会严重影响加密后的代码安全度,建议按照默认100%执行,不要更改。
如上述步骤中可选项全部去掉依旧无法正常运行程序,需要在“高级选项”步骤中的“扩展命令行选项”的文本框中添加"-cci"参数(此选项意义为:指定受保护的应用程序的“导入地址表”保持不变),加密程序后观察问题是否已解决。如下图所示: