软件保护系统WinLicense独家保护技术SecureEngine使用指南(8)——关于检查代码的完整性

翻译|使用教程|编辑:李显亮|2020-03-19 11:12:52.570|阅读 192 次

概述:WinLicense使用SecureEngine®保护技术,该技术能够以最高优先级运行其代码,以实现前所未有的保护技术。SecureEngine®宏允许使用SecureEngine®与应用程序进行交互,从而使应用程序和SecureEngine®可以作为一个整体运行。

# 31款JAVA开发必备控件和工具 # 企业数字化建设合规无风险[专题]

WinLicense是一个功能强大的保护系统,为希望保护其应用程序免受高级逆向工程和软件破解的软件开发人员设计。WinLicense使用SecureEngine®保护技术,该技术能够以最高优先级运行其代码,以实现前所未有的保护技术。

SecureEngine®宏允许使用SecureEngine®与应用程序进行交互,从而使应用程序和SecureEngine®可以作为一个整体运行。要将SecureEngine®宏包含到应用程序中,需要在应用程序源代码中指定这些宏。 当SecureEngine®打算保护应用程序时,它将在应用程序内找到这些宏并将所需的操作应用于每个特定的宏。

SecureEngine®提供给软件开发人员的不同宏如下:

  • 在编程语言中使用宏
  • 虚拟机宏
  • 突变宏
  • StrEncrypt宏
  • 注册宏
  • 未注册的宏
  • 未保护的宏
  • 检查保护宏
  • 检查代码完整性宏
  • 检查注册宏
  • 检查Virtual PC宏

如果你还没有使用过WinLicense,可以点击此处下载最新版测试。


关于检查代码的完整性

CHECK_CODE_INTEGRITY宏允许您检查受保护应用程序的代码部分是否在运行时被打了补丁(例如使用内存补丁)。此宏提供受保护的应用程序和SecureEngine保护之间的通信。

注意:当前版本的SecureEgine®不支持。net语言或Visual Basic应用程序的宏。

可以从其他宏中调用CHECK_CODE_INTEGRITY宏。实际上,强烈建议从VM宏内部调用CHECK_CODE_INTEGRITY宏。

CHECK_CODE_INTEGRITY宏有一个特殊的语法:

CHECK_CODE_INTEGRITY (user_variable user_value)

其中“user_variable”是应用程序中的任何局部或全局变量,“user_value”是任何即时值(常数值)。它的工作方式如下:

  • 调用CHECK_CODE_INTEGRITY宏。
  • SecureEngine控制处理器,并进行特殊检查,以了解您的应用程序的代码部分是否已打补丁。
  • 如果应用程序的代码部分没有打补丁,SecureEngine将“user_variable”设置为“user_value”。
  • 如果应用程序打了补丁,SecureEngine不会设置“user_variable”。您应该注意将“user_variable”初始化为“user_value”中的其他内容。
  • SecureEngine将控制返回到受保护的应用程序。受保护的应用程序应该检查“user_variable”的值,如果应用程序的代码部分已经打了补丁,则执行所需的操作。

如果你发现你的应用程式的程式码部分已被窜改,请考虑以下做法:

  • 避免立即采取行动,如显示消息或崩溃的应用程序。如果你立即采取行动,黑客将知道有问题的代码在哪里,并将集中他所有的注意力,试图找出问题的根源在代码。
  • 避免显示应用程序被篡改的消息。相反,应该在应用程序的“后期”崩溃(参见下面的内容),或者在应用程序的后期显示一个奇怪的错误消息。
  • 造成“后期崩溃”或故障。也就是说,如果您检测到您的应用程序被篡改了,您可以在您的代码中标记特殊的变量(或类似的操作)。在应用程序的后期,应用程序崩溃或以错误的方式初始化进一步的结构,因此,应用程序将无法按预期工作。例如,假设您正在保护一个CD刻录应用程序。当您的应用程序正在初始化时,您可以调用“CHECK_CODE_INTEGRITY”宏来确定应用程序代码是否打了补丁。如果它是补丁,你不会采取任何行动,但相反,你会等待光盘录制过程烧伤随机或不正确的数据到光盘。
  • 在调用CHECK_CODE_INTEGRITY和检查应用程序代码是否已打补丁的地方使用VM或宏。另外,如果您决定产生“后期”崩溃或故障,则产生崩溃或故障的代码应该进入VM或CodeReplace宏。

显示Delphi宏用法

var

 MyCheckVar: Integer;

 

begin

 

{$I VM_Start.inc}

 

// your code goes here

 

{$I CheckCodeIntegrity_Prolog.inc}

asm

 push 11111111                     // 11111111 is our special constant

 pop  MyCheckVar                   // SecureEngine will set "MyCheckVar" to 11111111 if protection is OK

end;

{$I CheckCodeIntegrity_Epilog.inc}

 

// your code goes here

 

if MyCheckVar <> 11111111 then

 ShowMessage("We are tampered!");

 

{$I VM_End.inc}

显示C++宏用法

int MyCheckVar;

 

VM_START

 

// your code goes here

 

CHECK_CODE_INTEGRITY(MyCheckVar, 0x12345678)

 

// your code goes here

 

if (MyCheckVar != 0x12345678)

 printf("Application code is patched!");

 

VM_END

温馨提示

  • 将CHECK_CODE_INTEGRITY宏放在VM宏中。

  • 应该在应用程序代码中的特定点调用CHECK_CODE_INTEGRITY。您也可以从一个线程调用它,它会周期性地调用这个宏(每30-60秒调用一次)。

  • 对于有大量代码的应用程序,这个宏可能需要一些时间来执行。如果你想在调用这个宏时提高速度,你可以在高级选项面板中插入以下选项:OPTION_MACROS_FAST_CHECK_CODE_INTEGRITY=YES


慧都网是WinLicense正版代理商,提供最低的授权价格和最优质的服务,在线购买享受超值优惠>>


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至hey@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
在线咨询
联系我们
TOP
在线客服系统
live chat