21 年 第 2 0t O卷 第 7期
h / wcsa r. 印:ww . -. gc / - o n
计 算 机 系 统 应 用
.
N T软件代码分析与保护① E
吕君 可
( 师范大学 行知 金华 3 10 ) 浙江 2 0 4
摘
要:从 实用角度 出发 ,结合 实例 ,介绍了软件代码 常见的几种 分析技术 ;进而利用强名称 、名称混淆、
代码混淆 、加壳等保护技术 ,逐步给代码加上 防护层 ,以增强软件代码被 反编译破解 的难度 ,从而实现软件代
码 的保护。
关键词:软件保护 ;代码分析;代码 混淆;加壳
NETo t r d ay i a d P o e t n S fwa eCo eAn lss n r tc i o
.
LVu . J n Ke
( n z ̄ ol eZ ei gNoma U iesy J h a 2 04 C ia Xigh C lg , hj n r l nv r t,i u 10 , hn ) e a i n 3
Absr c :F o t r ci a e s e t e h epa e nr d c s s v r lc mm o n y ig tc n q e b u o t r ta t r mhe p a tc p r p c v ,t p ri to u e e ea o l i n a a z n e h i u sa o ts fwa e l c d swi o ec s s a d ui z st ep o e tn e h i u s to g n n e a eo f s a o ,I c e o u c to d o e t s m a e , h n ti e r tc g t n q e :s n a l ,n m b u c t n Lo bf s a n a l h i c r i d i n p c i g ec h o e i r tc e a e y ly r t n a c h ifc ly c a k d b e o ie n O a he e te a k n t .T e c d sp oe td ly rb a e o e h n e te df u t rc e y d i c mp l ,a d t c iv h pupo e o r tc n tes fwaec e . r s fp o e t g h o t r o s i d Ke r :s fw aep o e to ; o ea a y i; o eo f s a o pa k n y wo ds o t r r tc n c i d n ss c l d b u c t n; c g i i
1 引言
随着互连网的发展 ,软件传播愈发开放与便捷 ,
码 ,使用 多种技术手段 ,逐步给其加上防护层 ,从而 实现软
件代码的保护 。文中使用的示例程序在 wn p ix
系统、V 2 0 S 0 8的 V . t Bn 中调试通过。 e
使得软件的盗版现象 日益严重 。 据商业软件联盟(S ) B A
委托 市场调查 公司( ) I 的一项 调查报 告显示 ,20 DC 05 年全球 商用软件 中 3 %为盗版,价值 3 2亿美元,而 5 4
中国的软件盗版更为猖獗,高达 8 %t。随着. t 6 ” Ne 时
2 代码分析技术
代码分析技术是对程序控制流程 ,数据流程等抽 象信息进行分析 、提取及获得的分析技术 。软件代码 分析主要包括静态 分析和动态分析两种。
21静 态分析 .
代 的到来 ,越来越 多的
软件使用. t技术,这种 以平 Ne 台无关 的中间代码来发布 的软件代码与源码相似 ,比 起传统 的二进制可执行代码更 易遭 到静态分析甚至恶 意修改 。为 了防止 软件被非法复制 、修改 ,除 了用法 律对软件知识产权进 行保护之外 ,还需要在技术上对
软件进行保护 。
静态分析是对 没有运 行的静态程序 进行的,它的
主要任务是定位程序的关键代码 ,分析 程序 流程。即
利用 反汇编工具将程序的指令字节反编译成 儿 指令 或 高级语 言,通过阅读 反编译代码 掌握程序 的流程与 功能。 图 2所示为双击密码验证 函数 c 玎C MM 时 如 }巳 K 反编译 出的 V 原码 ,从 中可 以得出用 户的注册密码 B 为 “ eo 。由此可见 ,程序 中应 避免使用未经加密的 hl ” l
字符 串。
代码保护 是 目前 最有效的方法之一。利用 软件代 码保护 技术 ,给软件代码 加上防护层,只要能使破解 者对软件代码的分析破解付 出较 高的代 价,就可认 为 软件在其生命周期 内实现 了知识产 权与代码 的保护 。 本文使用常见的密码验证程序为例 ,分析其中关键代
① 收 稿时 间: 1—02 ; 修 改稿时 间: 1-20 2 01—8收到 0 2 01-4 0
E pr nexhne 经验交 流 2 3 xei cs cag e E 3
计 算 机 系 统 应 用
h p/ w c —. gc t :w w.Sa r. t / — o a
21 0 1年 第 2 O卷 第 7 期
I 0 2 L 00 :
cl i al r vt
isa c cas 【y tm . ntn e ls S se
Wid ws o msS s m. n o .o s e t x n o . r ] y t Wid ws r . xBo F e Fm T
ts.o 1: e T xBo 1) e t r : t et x ( Fm g
_
I L
_
00 : 0 7
cl i al r vt
isa csr g 【 ytm. n tn e tn i Ss e
图 1 密 码验 证 程 序
P i e F n t ]] l l∞ Y r y u c i n CD cr l y d T o m R t r c = E l o 】 eun r el
En u ctn dFn i o
Wid ws o sS se W id ws o s e t x:e_ n o . r ] y tm. n o . r . xBo : t Fm Fm T g .
T x( et )
Sr n)^ ola t i g sB o e n
_
’ 获取 T xB x 中的字符串 et o l
i sa c bo l e t o l : n tn e o ts. r : Fm
I 0 0 c l it L 0 c: l a vr
C E K H C MM( r g ’ s i ) 调用 函数 C E K tn H C MM
I L I L
_
图 2 对密码验证函数 C E K H C MM 进行反编译
2 动 态 调 试 . 2
O 1: bfl . 圈 - o4 ’ 0 r s S L o 2 l ae 密码错误跳转 O 1: cl 03 a l c s t t . My r et l s e. a sMy Po c j /
i