软件保护技术
软件保护技术使得软件具有抗御反向工程和篡改的能力,但它只能保护软件在被编译后不易被反汇编及被修改,而并非绝对安全的措施。这种技术的常用保护功能包括反调试和代码加密。
反调试技术旨在防止调试器或反汇编程序连接运行应用程序。反调试逻辑可寻找调试器为了控制应用程序所使用的特殊的签名、陷阱和API。这类方案虽已广获应用,但虚拟机方面取得的进步使其相形见绌。
代码混淆技术主要用于.NET 和 Java等中间语言架构,它试图通过重新命名变量、加密字符串,以及使用更先进的技术改变代码流等手段迷惑反向工程师。不过,单独个体仍然能够轻易对应用程序进行反编译,从这个意义上来说,这种迷惑技术是十分消极且被动的。
代码加密是另一种方法。软件保护初期采用的Packer 或Wrapping方法,在运行时会把整个应用程序解码释放到存储器中,因而保护能力很有限。随着保护技术的不断演进,保护方案的重点策略改为通过采用准时制(just-in-time)代码解密,尽量减小存储器中解密代码的可用性。在需要的时候才对功能进行解密,然后再重新加密,这样,任一时刻的解密代码存储量都能保持最少。
为了提高软件保护功能,开发人员开始瞄准内核级集成,比如器件驱动器。这种级别的集成能够更好地防御复杂的调试器。不过,它也引入了有害的依赖性,并对诚实用户造成干扰。
最终,一些先进的保护工具转向嵌入式定制化虚拟机,该技术可保证这些工具的运行时间保护流程的安全性,并将应用程序代码转换为供应商独有的格式。这种方法有效地隐藏了保护流程,但有可能妨碍应用程序性能。
软件保护技术
软件保护技术使得软件具有抗御反向工程和篡改的能力,但它只能保护软件在被编译后不易被反汇编及被修改,而并非绝对安全的措施。这种技术的常用保护功能包括反调试和代码加密。
反调试技术旨在防止调试器或反汇编程序连接运行应用程序。反调试逻辑可寻找调试器为了控制应用程序所使用的特殊的签名、陷阱和API。这类方案虽已广获应用,但虚拟机方面取得的进步使其相形见绌。
代码混淆技术主要用于.NET 和 Java等中间语言架构,它试图通过重新命名变量、加密字符串,以及使用更先进的技术改变代码流等手段迷惑反向工程师。不过,单独个体仍然能够轻易对应用程序进行反编译,从这个意义上来说,这种迷惑技术是十分消极且被动的。
代码加密是另一种方法。软件保护初期采用的Packer 或Wrapping方法,在运行时会把整个应用程序解码释放到存储器中,因而保护能力很有限。随着保护技术的不断演进,保护方案的重点策略改为通过采用准时制(just-in-time)代码解密,尽量减小存储器中解密代码的可用性。在需要的时候才对功能进行解密,然后再重新加密,这样,任一时刻的解密代码存储量都能保持最少。
为了提高软件保护功能,开发人员开始瞄准内核级集成,比如器件驱动器。这种级别的集成能够更好地防御复杂的调试器。不过,它也引入了有害的依赖性,并对诚实用户造成干扰。
最终,一些先进的保护工具转向嵌入式定制化虚拟机,该技术可保证这些工具的运行时间保护流程的安全性,并将应用程序代码转换为供应商独有的格式。这种方法有效地隐藏了保护流程,但有可能妨碍应用程序性能。
举报