扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:开发者在线 来源:开发者在线 2007年7月26日
关键字:
代码迷惑技巧
除替换文字和取消行号外,各种迷惑工具还使用许多技巧。进一步利用无意义的字符串技巧是一种流行的迷惑方法,即用一个非法的字符串代替类文件中的一个符号。替代的内容可能是诸如private这样的关键字,或者更令人迷惑的,是一个完全没有任何意义的符号,如***。一些虚拟机,特别是在浏览器中,无法正常处理这样古怪的符号。技术上,变量以符号(如=)为名不符合Java规范;一些虚拟机会忽视这种情况。
一些迷惑工具使用的其它技巧一般主要针对特定的解译工具,如Mocha和JDOE。它将一个有害的指令注入代码中,这对代码运行不会造成任何影响,但它能够破坏解译工具。
我们以初始代码(解译后)为例来说明这样的有害指令:
Method void main(java.lang.String[])
0 new #4
3 invokespecial #10
6 return
以下是执行代码迷惑后的代码(为了简化,保留了相同的名称):
Method void main(java.lang.String[])
0 new #4
3 invokespecial #10
6 return
7 pop
注意,现在程序在返回(return)后增加了一个弹出(pop)指令。很明显,函数在返回后无法做其它事情——这就是诀窍所在。通过在返回语句后插入一个指令,可以保证语句绝不会被执行。这里的代码基本上无法解译。由于它不与任何可能的Java源代码相对应,因而也没有什么意义。
以下是另外一些常用的代码迷惑技巧:
结论
我们应该记住,至今还没有哪一种迷惑工具能够保证使代码完全免遭逆向工程;因此,迷惑工具并不能提供类似于现代加密方案的安全水平;如果安全问题极其重要,你应该结合使用其它保护方法。
最常见的软件逆向工程攻击目标拷贝保护方案。这些方案往往在很大程度上依赖于现有操作系统进程调用,因而使用在解译代码时用到的相同工具就可以轻松避开基本的代码迷惑技巧。此外,迷惑后的代码一般依赖于平台和编译器的特有特征,如果发生改变,就很难对其进行管理。
Peter V. Mikhalenko是一名通过Sun认证的专家,现在任德意志银行商业顾问。
责任编辑:德东
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者