热搜关键词: MATLAB天线OpenCVVHDL

pdf

软件加密与解密

  • 1星
  • 2022-07-01
  • 65.07MB
  • 需要1积分
  • 0次下载
  • favicon收藏
  • rep举报
  • free评论
标签: 加密

加密

《软件加密与解密》介绍了如何利用混淆、水印和防篡改等技术,来保护软件免受盗版、篡改和恶意逆向工程的危害,主要内容包括攻击者和防御者用来分析程序的各种主流方法,如何使用代码混淆技术使程序更难以被分析和理解,如何在软件中添加水印和指纹以标识软件的开发者和购买用户,等等。

《软件加密与解密》

第1章  什么是隐蔽软件  1

1.1  概述  1

1.2  攻击和防御  5

1.3  程序分析的方法  6

1.4  代码混淆  11

1.4.1  代码混淆的应用  13

1.4.2  混淆技术概述  17

1.4.3  被黑客们使用的代码混淆技术  21

1.5  防篡改技术  27

1.5.1  防篡改技术的应用  27

1.5.2  防篡改技术的例子  29

1.6  软件水印  30

1.6.1  软件水印的例子  32

1.6.2  攻击水印系统  34

1.7  软件相似性比对  36

1.7.1  代码剽窃  36

1.7.2  软件作者鉴别  37

1.7.3  软件“胎记”  38

1.7.4  软件“胎记”的案例  40

.1.8  基于硬件的保护技术  41

1.8.1  把硬件加密锁和软件一起发售  42

1.8.2  把程序和cpu绑定在一起  43

1.8.3  确保软件在安全的环境中执行  43

1.8.4  加密可执行文件  44

1.8.5  增添物理防护  45

1.9  小结  46

1.9.1  使用软件保护技术的理由  46

1.9.2  不使用软件保护技术的理由  47

1.9.3  那我该怎么办呢  47

1.10  一些说明  48

第2章  攻击与防御的方法  49

2.1  攻击的策略  50

2.1.1  被破解对象的原型  50

2.1.2  破解者的动机  52

2.1.3  破解是如何进行的  54

2.1.4  破解者会用到的破解方法  55

2.1.5  破解者都使用哪些工具  58

2.1.6  破解者都会使用哪些技术  59

2.1.7  小结  69

2.2  防御方法  70

2.2.1  一点说明  71

2.2.2  遮掩  73

2.2.3  复制  75

2.2.4  分散与合并  78

2.2.5  重新排序  80

2.2.6  映射  81

2.2.7  指引  84

2.2.8  模仿  85

2.2.9  示形  87

2.2.10  条件—触发  88

2.2.11  运动  90

2.2.12  小结  91

2.3  结论  92

2.3.1  对攻击/防御模型有什么要求  92

2.3.2  该如何使用上述模型设计算法  93

第3章  分析程序的方法  94

3.1  静态分析  95

3.1.1  控制流分析  95

3.1.2  数据流分析  103

3.1.3  数据依赖分析  107

3.1.4  别名分析  109

3.1.5  切片  115

3.1.6  抽象解析  116

3.2  动态分析  118

3.2.1  调试  118

3.2.2  剖分  129

3.2.3  trace  132

3.2.4  模拟器  135

3.3  重构源码  137

3.3.1  反汇编  139

3.3.2  反编译  146

3.4  实用性分析  155

3.4.1  编程风格度量  156

3.4.2  软件复杂性度量  158

3.4.3  软件可视化  159

3.5  小结  162

第4章  代码混淆  163

4.1  保留语义的混淆转换  164

4.1.1  算法obfcf:多样化转换  164

4.1.2  算法obftp:标识符重命名  170

4.1.3  混淆的管理层  173

4.2  定义  177

4.2.1  可以实用的混淆转换  178

4.2.2  混淆引发的开销  181

4.2.3  隐蔽性  181

4.2.4  其他定义  182

4.3  复杂化控制流  183

4.3.1  不透明表达式  183

4.3.2  算法obfwhkd:压扁控制流  184

4.3.3  使用别名  186

4.3.4  算法obfctjbogus:插入多余的控制流  191

4.3.5  算法obfldk:通过跳转函数执行无条件转移指令  195

4.3.6  攻击  198

4.4  不透明谓词  201

4.4.1  算法obfctjpointer:从指针别名中产生不透明谓词  202

4.4.2  算法obfwhkdopaque:数组别名分析中的不透明值  204

4.4.3  算法obfctjthread:从并发中产生的不透明谓词  205

4.4.4  攻击不透明谓词  207

4.5  数据编码  211

4.5.1  编码整型数  213

4.5.2  混淆布尔型变量  217

4.5.3  混淆常量数据  220

4.5.4  混淆数组  222

4.6  结构混淆  226

4.6.1  算法obfwcsig:合并函数签名  226

4.6.2  算法obfctjclass:分解和合并类  229

4.6.3  算法obfdmrvsl:摧毁高级结构  232

4.6.4  算法obfajv:修改指令编码方式  239

4.7  小结  243

第5章  混淆理论  245

5.1  定义  248

5.2  可被证明是安全的混淆:我们能做到吗  249

5.2.1  图灵停机问题  250

5.2.2  算法reaa:对程序进行反混淆  252

5.3  可被证明是安全的混淆:有时我们能做到  254

5.3.1  算法obflbs:混淆点函数  254

5.3.2  算法obfns:对数据库进行混淆  261

5.3.3  算法obfpp:同态加密  263

5.3.4  算法obfcejo:白盒des加密  267

5.4  可被证明是安全的混淆:(有时是)不可能完成的任务  272

5.4.1  通用混淆器  273

5.4.2  混淆最简单的程序  276

5.4.3  对混淆所有程序的不可能性的证明  277

5.4.4  小结  278

5.5  可被证明为安全的混淆:这玩儿还能成吗  279

5.5.1  跳出不可能性的阴霾  280

5.5.2  重新审视定义:构造交互式的混淆方法  281

5.5.3  重新审视定义:如果混淆不保留语义又当如何  283

5.6  小结  286

第6章  动态混淆  288

6.1  定义  290

6.2  代码迁徙  292

6.2.1  算法obfkmnm:替换指令  293

6.2.2  算法obfagswap:自修改状态机  296

6.2.3  算法obfmamdsb:动态代码合并  307

6.3  加密技术  311

6.3.1  算法obfcksp:把代码作为产生密钥的源泉  312

6.3.2  算法obfagcrypt:结合自修改代码和加密  318

6.4  小结  324

第7章  软件防篡改  325

7.1  定义  327

7.1.1  对篡改的监测  328

7.1.2  对篡改的响应  331

7.1.3  系统设计  332

7.2  自监测  333

7.2.1  算法tpca:防护代码之网  335

7.2.2  生成hash函数  338

7.2.3  算法tphmst:隐藏hash值  342

7.2.4  skype中使用的软件保护技术  349

7.2.5  算法rewos:攻击自hash算法  352

7.2.6  讲评  356

7.3  算法retcj:响应机制  357

7.4  状态自检  360

7.4.1  算法tpcvcpsj:易遭忽视的hash函数  362

7.4.2  算法tpjjv:重叠的指令  365

7.5  远程防篡改  368

7.5.1  分布式监测和响应机制  368

7.5.2  解决方案  369

7.5.3  算法tpzg:拆分函数  369

7.5.4  算法tpslspdk:通过确保远程机器硬件配置来防篡改  372

7.5.5  算法tpcns:对代码进行持续的改变  375

7.6  小结  376

第8章  软件水印  378

8.1  历史和应用  378

8.1.1  应用  379

8.1.2  在音频中嵌入水印  382

8.1.3  在图片中嵌入水印  383

8.1.4  在自然语言文本中嵌入水印  384

8.2  软件水印  387

8.3  定义  388

8.3.1  水印的可靠性  389

8.3.2  攻击  391

8.3.3  水印与指纹  392

8.4  使用重新排序的方法嵌入水印  392

8.4.1  算法wmdm:重新排列基本块  394

8.4.2  重新分配资源  396

8.4.3  算法wmqp:提高可靠性  397

8.5  防篡改水印  400

8.6  提高水印的抗干扰能力  403

8.7  提高隐蔽性  408

8.7.1  算法wmmimit:替换指令  409

8.7.2  算法wmvvs:在控制流图中嵌入水印  409

8.7.3  算法wmcc:抽象解析  416

8.8  用于隐写术的水印  421

8.9  把水印值分成几个片段  425

8.9.1  把大水印分解成几个小片段  426

8.9.2  相互冗余的水印片段  427

8.9.3  使用稀疏编码提高水印的可靠性  432

8.10  图的编/解码器  432

8.10.1  父指针导向树  433

8.10.2  底数图  433

8.10.3  排序图  434

8.10.4  根延伸的平面三叉树枚举编码  434

8.10.5  可归约排序图  435

8.11  讲评  436

8.11.1  嵌入技术  437

8.11.2  攻击模型  438

第9章  动态水印  439

9.1  算法wmct:利用别名  443

9.1.1  一个简单的例子  443

9.1.2  水印识别中的问题  445

9.1.3  增加数据嵌入率  447

9.1.4  增加抵御攻击的抗干扰性能  452

9.1.5  增加隐蔽性  455

9.1.6  讲评  458

9.2  算法wmnt:利用并发  459

9.2.1  嵌入水印的基础构件  462

9.2.2  嵌入示例  467

9.2.3  识别  469

9.2.4  避免模式匹配攻击  470

9.2.5  对构件进行防篡改处理  471

9.2.6  讲评  473

9.3  算法wmccdkhlspaths:扩展执行路径  474

9.3.1  水印的表示和嵌入  474

9.3.2  识别  479

9.3.3  讲评  480

9.4  算法wmccdkhlsbf:防篡改的执行路径  481

9.4.1  嵌入  481

9.4.2  识别  484

9.4.3  对跳转函数进行防篡改加固  484

9.4.4  讲评  485

9.5  小结  486

第10章  软件相似性分析  489

10.1  应用  490

10.1.1  重复代码筛选  490

10.1.2  软件作者鉴别  492

10.1.3  剽窃检测  495

10.1.4  胎记检测  496

10.2  定义  497

10.3  基于k-gram的分析  501

10.3.1  算法ssswawinnow:有选择地记录k-gram  hash  501

10.3.2  算法ssswamoss:软件剽窃检测  504

10.3.3  算法ssmckgram:java  字节码的k-gram“胎记”  507

10.4  基于api的分析  509

10.4.1  算法sstnmm:面向对象的“胎记”  510

10.4.2  算法sstonmm:动态函数调用“胎记”  512

10.4.3  算法sssdl:动态k-gram  api“胎记”  513

10.5  基于树的分析  514

10.6  基于图的分析  518

10.6.1  算法sskh:基于pdg的重复代码筛选  518

10.6.2  算法sslchy:基于pdg的剽窃检测  521

10.6.3  算法ssmcwpp:整个程序的动态“胎记”  522

10.7  基于软件度量的分析方法  525

10.7.1  算法sskk:基于软件度量的重复代码筛选  525

10.7.2  算法sslm:基于度量的软件作者鉴别  527

10.8  小结  532

第11章  用硬件保护软件  534

11.1  使用发行的物理设备反盗版  535

11.1.1  对发行盘片的保护  536

11.1.2  软件狗和加密锁  541

11.2  通过可信平台模块完成认证启动  545

11.2.1  可信启动  546

11.2.2  产生评估结果  548

11.2.3  tpm  550

11.2.4  盘问式验证过程  551

11.2.5  社会可信性和隐私问题  553

11.2.6  应用和争议  555

11.3  加密的可执行文件  556

11.3.1  xom体系结构  557

11.3.2  阻止重放攻击  560

11.3.3  修补有漏洞的地址总线  561

11.3.4  修补有漏洞的数据总线  564

11.3.5  讲评  565

11.4  攻击防篡改设备  565

11.4.1  监听总线——破解微软的xbox  566

11.4.2  猜测指令——破解达拉斯半导体公司的ds5002fp微处理器  567

11.4.3  破解智能卡  570

11.4.4  非侵入式攻击  573

11.4.5  主板级的保护  574

11.5  小结  576

参考文献  578

展开预览

推荐帖子 最新更新时间:2022-08-12 13:50

谈谈高速数字系统的滤波电容【转】
       我们在电源滤波电路上可以看到各种各样的电容,100uF,10uF,100nF,10nF不同的容值,那么这些参数是如何确定的?不要告诉我是抄别人原理图的,呵呵。         数字电路要运行稳定可靠,电源一定要”干净“,并且能量补充一定要及时,也就是滤波去耦一定要好。什么是滤波去耦,简单的说就是在芯片不需要电流的时候存储能量,在你需要电流的时候我又能及时的补充能量。不要跟我说这个职
uu5001 模拟电子
手机电池界“新宠”氮化镓,会不会洗牌充电领域
现如今,手机逐渐成为人们的交流必备工具和生活必需品,日常生活中几乎随处可见“低头族”,无数人患上“电量焦虑症”,手机连上充电器的那一刻才能得以平息。   虽然我们每天都会使用充电器,但似乎很少有人会思考充电器怎么才能更好用。今天安仔和大家聊一聊近来很火的氮化镓(GaN),一项可能会颠覆你之前充电器认知的技术。   Q1什么是氮化镓?   今年,一种新的充电科技逐
btty038 电源技术
电流源与电压源的区别
电源有两种,一种是电压源,一种是电流源。 我们先看电压源,电压源大家好理解,在我们的日常生活中,大家常接触到电压源。比 如我们家里各个角落都有提供一个电压插座,如果我们要使用电器的话,就把它往插座上一 插,就可以为我们要使用的家用电器提供能量来源。因此我们把它认为是个电源,家用电是 个 220V 的交流电,它是不变的,我们称之为电压源。电压源即提供一个恒定电压的电源。 它的工作状态如图 1 所示。
error_echo 电源技术
stc12c5a60s2型号单片机串口通信和定时器中断问题
各位高手,我想实现这样一个功能:stc12c5a60s2具有两个串口,叫做串口1和串口2。通过串口1接收任意字节的数据,并通过串口2发送到电脑的串口调试工具。程序思路是这样:通过串口一接收数据,通过定时器中断来判断是否接收数据完毕,这里设置的时间大约为10ms。当数据发送完毕超过10ms后会触发定时器中断,定时器中断函数会触发发送标志位。主程序会把串口1接收到的数据从串口2发送出去。请各位指正一下
wangwanzhao 51单片机
串口发送和接收字符串实例
1、在上一实例中,我们利用proteus中自带的虚拟终端实现了单片机通过串口向主机发送字符串的功能。本例中我们加入串口接收字符的功能 2、为了实现单片机通过终端接收字符的功能,我们需要在电路中再加入一路虚拟终端,新加入的这一路虚拟终端连接到单片机的串行接收端口RXD上,在仿真运行后,在该终端输入字符,然后将字符发送到单片机的串行接收端, 3、在keil c51中新建工程ex50,编写如下
灞波儿奔 微控制器 MCU
基础类的DSP/BIOS API调用之二
六、C6000专用模块C64x (1)Uns oldmask = C64_diableIER(Uns mask)   关闭相应的中断 返回值实际屏蔽的中断 (2)void C64_enableIER(Uns oldmask)   开放相应的中断      Uns oldmask;   oldmask = C64_disableIER(0x1); // disable INT0   
Jacktang DSP 与 ARM 处理器

评论

登录/注册

意见反馈

求资源

回顶部
查找数据手册?

EEWorld Datasheet 技术支持

热门活动

相关视频

可能感兴趣器件

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版 版权声明

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
×