收 稿日期 : 2009-02-26; 修 回日期 : 2009-03-23 基 金项 目: 国 家“863”计 划资 助项目 ( 2006AA01Z405)
作 者简介 : 尚涛( 1985- ) , 男, 陕 西安 康 人, 硕 士 研究 生, 主 要 研究 方 向为 软 件安 全 ( shangtaohit@ yahoo. com. cn) ; 谷 大 武( 1970- ) , 男, 教 授, 博
导, 主要研 究方 向为密 码学 与信息 安全.
软 件 防 反 汇 编 技 术 研 究
*
尚 涛, 谷大武
( 上 海交 通大 学 计算 机科 学与工 程系 , 上海 200240)
摘 要: 为 了保 护软 件所 有权 , 根 据一 般的 反汇 编算法 的特 征, 提 出代码 重叠 、跳转地 址重 定 向和 控 制 流混 淆 等
几种 代码 混淆 技术。 这些 技术 能使 反汇 编结 果出现 混淆 , 误 导攻 击 者 对 程 序 理 解, 从 而 提 高 软 件防 反 汇 编 的 能
力, 有效 地阻 止对 软件 的逆 向分 析, 保护 了软 件的知 识产 权。
关键 词: 软 件保 护; 逆 向分 析; 代 码混 淆; 程 序理 解; 反 汇编
中图 分类 号: TP311 文 献标 志码: A 文 章编 号: 1001-3695( 2009) 12-4553-05
doi: 10. 3969/j. issn.1001-3695. 2009. 12. 043
Research on resistance to disassembly of software
SHANG Tao, GU Da-wu
( Dept. of Computer Science & Engineering, Shanghai Jiaotong University, Shanghai 200240, China)
Abstract: In order to protect the property of software, according to the characteristics of general disassembly algorithms, this
paper provided code overlap, jumping address redirection and obfuscation of control flow etc. several approaches in code ob-
fuscation technologies. These approaches are able to make the disassembly process go away, and misdirect the adversaries’
comprehension to programs, consequently enhance the software’s resistance to disassembly, thus preventingthe software from
reverse analysing and protecting its property effectively.
Key words: software protection; reverse analysis; code obfuscation; programcomprehension; disassembly
0 引言
随着计算机技术普及与应用, 计算机软件产业迅速发展起
来, 针对软件的各种攻击和未授权使用以及盗版复制等行为越
来越多, 软件安全成为保护知识产权的关键。目前的计算机软
件基本上是以二进制代码形式发布的, 攻击者通常利用静态反
汇编工具或动态调试工具等逆 向分析 技术对 软件可 执行版 本
进行分析破解, 通过寻找 软件漏 洞或抽 取其核 心算法 等方式,
对软件进行窜改进而窃取 软件知 识产权。软 件逆向 分析技 术
包括针对软件的 反汇 编
[ 1,2]
和反 编译
[ 3]
两 个部 分。反汇 编 技
术是把可执行二进制机器码反 汇编成 为基本 可读的 汇编语 言
程序代码的方法, 一 般 包含 静态 反 汇编 技术 和 动态 反汇 编 技
术
[ 4]
。静态反汇编是把二进制 代码一 次性全 部翻译 为汇编 代
码, 它的耗时与二进制文 件大小 成正比; 动态 反汇编 是通过 人
为分析载入到反汇编器的二进制程序, 捕捉运行特征指令翻译
为可读的汇编代码。反编译技 术是把 汇编程 序进一 步反编 译
为可读性更强的高级语言代码。为了维护知识产权, 目前常用
的办法是通过法律打击非法行为, 另外就是开发出软件防窜改
技术来抵抗各种非法使用。
软 件防 窜改技 术
[ 5]
是目 前主要 的软 件保 护技 术, 主要 包
括许可认证方式、水印技术
[ 6]
、窜改 验证技 术、软件加 密等, 或
让软件通过网络运行在服务器端, 这样防止敌手获取软件可执
行文件进行逆向分析。这些技术总体上是软件开发的过程利
用加密算法保护软件核心技术, 在软件运行时对其进行解密后
执行, 的确对软件起到一定 保护作 用, 但是一 般软件 运行需 要
先解密, 且很难保证处理器 能够快 速解密 软件; 另外 软件对 运
行环境的硬件要求较高, 而且利用反汇编技术同样可以对加密
技术的核心算法进 行 抽取 分析
[ 4]
, 进而 达到 窜 改水 印或 提 取
并破解相关验证算法。
软件代码混淆技术是从软 件的反 汇编层 面进行 操作的 保
护技术, 从而加强了软件的 抗逆向 分析能 力, 对软件 起到更 强
的保护作用。代码混淆技术早 期多在 软件反 汇编和 反编译 研
究中被粗略提到, Barak 等人
[ 7]
在 2001 年理论证明代码混淆技
术不能完全彻底保护软件安 全, 但 是大部 分情况 下, 代码混 淆
技术不需要为软件提供绝对保护, 只要能够有效地拖延针对软
件的逆向分析就达到了保 护的目 的。随着软 件逆向 分析技 术
发展使得通过密码算法保护软件能力变得脆弱, 最近几年代码
混淆技术也逐渐被重视。目前 代码混 淆技术 多数针 对静态 反
汇编
[ 8,9]
技术或某特定 语言开 发平台
[ 10]
相 关的混 淆技 巧。 一
方面, 这种反静态反汇编方法无法对付动态反汇编技术对软件
的逆向调试, 由于动态反汇编技术通过调试软件读取堆栈内存
中的参数, 可以进一步确定软件的控制流程; 另一方面, 随着编
程语言的发展, 代码混淆技术应该应用于程序结构而不仅仅针
对特定语言平台, 其研究范围也将会越来越广泛。本文从物理
层二进制代码混淆到高级语言的结构混淆, 从不同层次研究代
码混淆技术, 最终达到防止软件反汇编。
第 26 卷 第 12 期
2009 年 12 月
计 算 机 应 用 研 究
Application Research of Computers
Vol. 26 No. 12
Dec. 2009