新書推薦:

《
影神图 精装版
》
售價:HK$
140.8

《
不止于判断:判断与决策学的发展史、方法学及判断理论
》
售價:HK$
74.8

《
人才画像、测评、盘点、管理完全应用手册
》
售價:HK$
54.8

《
跳出猴子思维:如何成为不完美主义者(30天认知训练打破完美主义的困扰!实现从思维到行为的全面改变!)
》
售價:HK$
64.9

《
粤港澳大湾区创新能力与创新效率评价研究
》
售價:HK$
85.8

《
西方服饰史:从公元前3500年到21世纪(第7版,一部西方服饰百科图典。5500年时尚变迁史,装帧典雅,收藏珍品)
》
售價:HK$
437.8

《
仕途之外:先秦至西汉不仕之士研究
》
售價:HK$
65.8

《
经纬度系列丛书·帝国陨落:君士坦丁堡的40次围城
》
售價:HK$
74.8
|
編輯推薦: |
本书为战略性新兴领域“十四五”高等教育教材体系建设团队——新一代信息技术(网络空间安全)建设项目。本教材满足新一代信息技术的发展需要,将汇编语言和软件逆向分析技术相融合,特别是软件知识产权保护技术反映在教材内容中;教材案例体现传统工科专业的新需求,编写时以案例驱动,任务引导,特别是增加了软件知识产权保护场景的案例;教材的教学资源丰富,加强立体化建设;帮助读者深入理解计算机程序执行过程,开启二进制代码逆向分析的大门。
|
內容簡介: |
汇编语言是一种面向机器的底层编程语言。本书将计算机汇编语言与软件逆向分析技术交叉融合,从汇编语言的角度介绍处理器、操作系统和应用软件的底层设计,通过逆向分析技术进一步理解系统和程序的底层运行机制,以软件知识产权保护场景的案例分析展示汇编语言与逆向技术在信息安全领域的重要性。本书介绍了目前普遍使用的Intel IA32处理器及其使用的x86汇编语言,也介绍了华为鲲鹏处理器及其使用的功能更强大的ARM汇编语言。逆向技术部分,本书使用了更加先进且免费的Binary Ninja静态逆向分析平台和x64dbg动态逆向分析平台。
本书主要面向高校信息安全、网络空间安全等相关专业的师生和从事信息安全工作的技术人员。通过学习,读者可以更深入地了解计算机处理器和操作系统,理解高级语言编程的底层实现,进一步掌握静态和动态的二进制代码逆向分析方法,从案例分析中认识到汇编语言和逆向技术对于软件知识产权保护的重要性,为进一步学习“软件漏洞挖掘”“计算机病毒分析”等信息安全课程打下坚实的基础。
|
目錄:
|
第1章基本概念1
1.1欢迎来到汇编语言的世界1
1.1.1一些问题2
1.1.2汇编语言应用程序4
本节习题5
1.2虚拟机的概念5
1.2.1虚拟机与计算机的层次结构6
1.2.2汇编编译器的历史7
本节习题7
1.3数据的表示方法8
1.3.1二进制数8
1.3.2二进制加法9
1.3.3整数存储的尺寸10
1.3.4十六进制数10
1.3.5有符号整数11
1.3.6字符的存储14
本节习题16
1.4布尔运算17
本节习题19
1.5本章小结19
第2章IA32处理器体系结构21
2.1基本概念21
2.1.1微机的基本结构21
2.1.2指令执行的周期23
2.1.3内存的读取26
2.1.4程序是如何运行的27
本节习题29
2.2IA32处理器的体系结构30
2.2.1操作模式30
2.2.2基本执行环境312.2.3浮点单元34
2.2.4Intel微处理器的历史34
本节习题36
2.3IA32的内存管理37
2.3.1实地址模式37
2.3.2保护模式38
本节习题41
2.4IA32微机的构成41
2.4.1主板41
2.4.2视频输出43
2.4.3存储器43
2.4.4输入输出接口44
本节习题45
2.5输入输出系统45
本节习题47
2.6本章小结48
汇编语言与逆向技术目录
第3章汇编语言基础49
3.1汇编语言的基本元素49
3.1.1整数常量49
3.1.2整数表达式50
3.1.3实数常量50
3.1.4字符常量51
3.1.5字符串常量51
3.1.6保留字51
3.1.7标识符52
3.1.8伪指令52
3.1.9指令53
3.1.10NOP(空操作)指令55
本节习题55
3.2例子: 整数相加减56
3.2.1AddSub程序的另一个版本57
3.2.2程序模板58
本节习题59
3.3汇编、链接和运行程序59
本节习题61
3.4定义数据62
3.4.1内部数据类型62
3.4.2数据定义语句63
3.4.3定义BYTE和SBYTE数据63
3.4.4定义WORD和SWORD数据65
3.4.5定义DWORD和SDWORD数据65
3.4.6定义QWORD数据66
3.4.7定义TBYTE数据66
3.4.8定义实数66
3.4.9小端字节序67
3.4.10为AddSub程序添加变量67
3.4.11未初始化数据的声明68
本节习题69
3.5符号常量69
3.5.1等号伪指令69
3.5.2计算数组和字符串的大小70
3.5.3EQU伪指令71
3.5.4TEXTEQU伪指令72
本节习题72
3.6本章小结73
第4章数据传送、寻址和算术运算74
4.1数据传送指令74
4.1.1操作数类型74
4.1.2MOV指令75
4.1.3MOVZX、MOVSX指令77
4.1.4LAHF、SAHF指令78
4.1.5XCHG指令79
本节习题79
4.2简单算术运算80
4.2.1INC、DEC指令80
4.2.2ADD指令81
4.2.3SUB指令81
4.2.4NEG指令82
4.2.5高级语言的简单汇编实现82
4.2.6算术运算与标志位82
本节习题85
4.3伪指令和操作符86
4.3.1ALIGN伪指令86
4.3.2LABEL伪指令86
4.3.3OFFSET操作符87
4.3.4PTR操作符87
4.3.5TYPE操作符88
4.3.6LENGTHOF操作符88
4.3.7SIZEOF操作符88
本节习题88
4.4循环语句90
4.4.1JMP指令90
4.4.2LOOP指令90
4.4.3使用汇编来实现循环程序91
本节习题92
4.5内存操作数与寻址方式93
4.5.1直接偏移操作数93
4.5.2间接操作数94
4.5.3变址操作数95
本节习题95
4.6本章小结96
第5章过程98
5.1程序链接与链接库98
5.1.1链接库98
5.1.2常见链接库100
本节习题103
5.2堆栈机制103
5.2.1运行时栈103
5.2.2PUSH、POP指令104
本节习题107
5.3过程的定义和使用107
5.3.1过程的概念107
5.3.2过程声明伪指令108
5.3.3过程调用与返回指令109
5.3.4流程图111
5.3.5寄存器的恢复和保持111
本节习题112
5.4汇编程序实例讲解113
5.5本章小结116
第6章条件处理指令及程序结构117
6.1状态标志和位操作类指令117
6.1.1CPU的状态标志117
6.1.2逻辑运算指令119
6.1.3测试指令TEST122
6.1.4比较指令CMP123
本节习题123
6.2顺序程序结构123
6.3分支程序结构124
6.3.1无条件转移指令124
6.3.2条件转移指令127
6.3.3单分支结构131
6.3.4双分支结构132
6.3.5多分支结构133
本节习题133
6.4循环程序结构134
6.4.1循环指令135
6.4.2计数控制循环136
6.4.3条件控制循环137
6.4.4多重循环137
本节习题138
6.5本章小结139
第7章华为鲲鹏处理器体系结构140
7.1服务器处理器141
7.1.1服务器体系结构141
7.1.2服务器处理器并行组织结构141
本节习题143
7.2处理器体系结构143
7.2.1Intel处理器体系结构143
7.2.2ARM处理器体系结构144
7.2.3华为鲲鹏处理器146
本节习题147
7.3基于ARMv8的处理器体系结构147
7.3.1执行状态148
7.3.2数据类型148
7.3.3异常等级与安全模型149
7.3.4寄存器150
7.3.5异常处理153
7.3.6中断154
本节习题156
7.4本章小结156
第8章华为鲲鹏处理器汇编编程157
8.1ARM寻址方式157
8.1.1立即数寻址157
8.1.2寄存器寻址158
8.1.3寄存器间接寻址158
8.1.4基址寻址158
8.1.5多寄存器寻址159
8.1.6堆栈寻址160
8.1.7PC相对寻址160
8.1.8寄存器移位寻址160
本节习题161
8.2ARM指令集161
8.2.1GNU ARM汇编语言语法格式161
8.2.2跳转指令162
8.2.3异常产生指令166
8.2.4系统寄存器指令168
8.2.5数据处理指令168
8.2.6Load/Store内存访问指令176
8.2.7SIMD指令177
本节习题178
8.3ARM伪指令179
8.3.1数据定义伪操作179
8.3.2汇编控制伪操作181
8.3.3其他伪操作182
8.3.4伪指令183
本节习题184
8.4ARM汇编语言的程序结构185
8.4.1顺序结构185
8.4.2分支结构186
8.4.3循环结构188
8.4.4子程序189
本节习题189
8.5ARM的编译与调试工具190
8.5.1GCC编译器套件190
8.5.2汇编程序示例——Hello World191
本节习题193
8.6本章小结193第9章PE文件结构194
9.1可执行文件194
9.1.1Windows系统可执行文件194
9.1.2Linux系统可执行文件198
本节习题199
9.2PE的基本概念199
9.2.1基地址200
9.2.2虚拟地址201
9.2.3相对虚拟地址201
9.2.4文件偏移地址201
本节习题202
9.3DOS部分202
9.3.1DOS MZ头202
9.3.2DOS存根203
本节习题203
9.4PE文件头204
9.4.1Signature字段204
9.4.2IMAGE_FILE_HEADER结构204
9.4.3IMAGE_OPTIONAL_HEADER结构206
9.4.4目录209
本节习题210
9.5节211
9.5.1节表211
9.5.2常见的节213
9.5.3节的对齐值214
9.5.4文件偏移与虚拟内存地址转换214
本节习题215
9.6导入表216
9.6.1导入函数的调用216
9.6.2IMAGE_IMPORT_DESCRIPTOR结构216
9.6.3PE装载器218
9.6.4导入表实例分析218
本节习题222
9.7导出表222
9.7.1IMAGE_EXPORT_DESCRIPTOR结构223
9.7.2导出表实例分析224
本节习题226
9.8本章小结226第10章C语言程序逆向分析227
10.1函数与堆栈227
10.1.1函数调用与返回227
10.1.2堆栈229
10.1.3函数的参数229
10.1.4栈帧与函数的局部变量230
10.1.5全局变量与局部变量232
本节习题233
10.2调用约定233
本节习题235
10.3数组和结构体235
10.3.1数组235
10.3.2结构体237
本节习题239
10.4常见的控制流结构239
10.4.1分支结构239
10.4.2循环结构240
10.4.3switchcase结构242
本节习题245
10.5其他事项245
10.5.1识别main函数245
10.5.2不同优化级别生成的代码246
本节习题248
10.6本章小结248
第11章静态逆向分析技术249
11.1初次使用Binary Ninja249
本节习题252
11.2导航与浏览代码252
11.2.1双击导航252
11.2.2符号列表253
11.2.3导航对话框253
11.2.4字符串与交叉引用253
11.2.5导入函数与导出函数255
11.2.6搜索255
11.2.7前进与后退256
本节习题257
11.3使用Binary Ninja的主视图257
本节习题260
11.4分析与标注代码260
11.4.1重命名函数或变量260
11.4.2修改函数或变量的类型261
11.4.3添加注释261
11.4.4添加书签或者标签261
11.4.5设置高亮显示的颜色262
11.4.6撤销与重做262
本节习题263
11.5使用类型263
本节习题266
11.6修补代码267
本节习题268
11.7实例讲解269
11.7.1实例一269
11.7.2实例二271
本节习题272
11.8本章小结273
第12章动态调试分析技术274
12.1x64dbg调试器入门274
12.1.1x64dbg的获取与安装275
12.1.2初次使用x64dbg调试275
本节习题277
12.2x64dbg的主界面277
12.2.1代码窗口278
12.2.2寄存器窗口279
12.2.3内存窗口279
12.2.4堆栈窗口与调用堆栈280
12.2.5内存布局窗口281
12.2.6不同窗口间的跳转与导航281
12.2.7其他窗口282
本节习题282
12.3基本调试操作282
12.3.1由调试器启动调试对象282
12.3.2附加到已经在运行的进程282
12.3.3恢复调试对象执行283
12.3.4结束调试284
本节习题284
12.4使用断点284
12.4.1软件断点284
12.4.2硬件断点286
12.4.3管理断点287
12.4.4条件断点288
12.4.5软件断点的原理289
本节习题290
12.5修改被调试进程的状态290
12.5.1修改寄存器的值290
12.5.2修改数据291
12.5.3修改代码292
12.5.4修改下一条指令292
本节习题293
12.6反调试及其应对293
本节习题294
12.7实例讲解295
12.7.1实例一295
12.7.2实例二297
本节习题299
12.8本章小结300
第13章软件知识产权保护技术301
13.1序列号保护301
13.1.1序列号保护的实现原理301
13.1.2序列号保护的案例分析303
本节习题304
13.2警告弹窗304
13.2.1警告弹窗的实现原理304
13.2.2警告窗口的案例分析307
本节习题310
13.3时间限制310
13.3.1时间限制的实现原理310
13.3.2时间限制的案例分析312
本节习题316
13.4功能限制316
13.4.1功能限制的实现原理317
13.4.2功能限制的案例分析318
本节习题320
13.5KeyFile保护321
13.5.1KeyFile保护的实现原理321
13.5.2KeyFile保护的案例分析323
本节习题325
13.6本章小结326
|
內容試閱:
|
不同于C 、Java等高级编程语言,汇编语言是直接面向计算机处理器和内存的低级编程语言。汇编语言本质上是机器指令的助记符语言,汇编语句与二进制指令有一对一的映射关系。汇编语言的编程效率远远低于高级编程语言,主要应用于信息安全领域的逆向分析,是信息安全专业学生的必修课程。在真实的网络攻防场景中,面对没有高级语言源代码的二进制恶意代码,信息安全工程师唯一可以依赖的语言就是汇编语言。
本书将计算机汇编语言与软件逆向分析技术交叉融合,缓解了汇编语言和逆向技术在教学上的脱节问题。本书从汇编语言的角度介绍处理器、操作系统和应用软件的底层设计,通过逆向分析技术让读者进一步深入理解系统和程序的底层运行机制,以软件知识产权保护场景的案例分析展示了汇编语言与逆向技术在信息安全领域的重要性。
本书介绍了目前使用最普遍的Intel IA32处理器及其使用的x86汇编语言。在此感谢南开大学——华为“智能基座”产教融合协同育人基地的支持,使作者有机会学习了国产华为鲲鹏处理器及其使用的功能更强大的ARM汇编语言,对处理器和汇编语言有了更深入的认识,了解到未来的发展方向。
本书逆向技术部分的学习没有采用IDA Pro和OllyDbg作为分析工具,而是选择了更加先进且免费的Binary Ninja静态逆向分析平台和x64dbg动态逆向分析平台。本书的第二作者李旭昇是负责研发Binary Ninja逆向分析工具的工程师之一。Binary Ninja在静态反汇编的基础上提供了可免费使用的C语言伪代码反编译功能,有效提升了逆向分析的效率。OllyDbg已经于2014年停止了软件更新,因此本书的动态逆向分析学习使用了一直在更新和维护的x64dbg。x64dbg是免费开源的,逆向分析功能更加丰富。
本书最后以软件知识产权保护场景的案例分析展示了汇编语言与逆向技术在信息安全领域的重要性,帮助读者加深对日常生活中信息安全问题的认识和理解。“汇编语言与逆向技术”课程是信息安全专业的必修课之一,可为读者打开一扇通往信息安全领域的大门,为进一步学习“软件安全”“系统安全”“漏洞挖掘”“恶意代码分析与防治”等信息安全专业课程打下坚实的基础。
全书共13章,大体上可分为3部分: 第1部分是汇编语言的学习,包括第1~8章,介绍了目前使用最广泛的Intel的IA32处理器及其使用的x86汇编语言,并介绍了更加先进的国产华为鲲鹏处理器体系结构及其使用的ARM汇编语言;第2部分是逆向技术的学习,包括第9~12章,介绍了逆向分析的基础知识,帮助读者认识Windows操作系统使用的PE可执行文件结构,学习高级语言与汇编语言之间的对应关系,使用Binary Ninja静态逆向工具和x64dbg动态逆向分析工具进行二进制代码的逆向分析实战;第3部分是汇编语言与逆向技术的应用,包括第13章,介绍了恶意逆向分析给软件知识产权保护带来的安全威胁,并通过案例分析论述汇编语言和逆向技术在信息安全领域的重要性。
本书的第1~6章由过辰楷编写,第7~9章由邓琮弋编写,第10~12章由李旭昇编写,第13章由王志编写。全书由王志统稿。在本书完稿之际,作者要衷心感谢清华大学出版社计算机与信息分社张民编审,衷心感谢武汉大学计算机学院张焕国教授、彭国军教授,南开大学网络空间安全学院刘哲理教授和华为公司楼佳明老师对本书提出宝贵意见。本书的文字录入和相关资料整理,得到了臧玉杰、张嘉鹏、刘卓航、刘浩通、王乾潞、王天鸿、米迅、车佳瑞、赵慧敏等的帮助,在此谨向他们表示衷心的感谢。
作者自认才疏学浅,更兼时间和精力所限,书中错谬之处在所难免,若蒙读者诸君不吝告知,将不胜感激。
作者2024年7月于天津
|
|