加密与解密(第4版) PDF 高清版

  • 更新时间:
  • 7697人关注
  • 点击下载

给大家带来的一篇关于信息安全相关的电子书资源,介绍了关于加密、解密方面的内容,本书是由电子工业出版社出版,格式为PDF,资源大小176.1 MB,段钢编写,目前豆瓣、亚马逊、当当、京东等电子书综合评分为:9.3分

资源详情相关推荐
加密与解密(第4版)
  • 出版社:电子工业出版社
  • 作者:段钢
  • 大小:176.1 MB
  • 类别:信息安全
  • 热度:597
  • 改变未来的九大算法
  • SEM长尾搜索营销策略解密
  • PPT动画传奇:解密专业演示动画特效
  • 安全简史:从隐私保护到量子密码
  • March高等有机化学:反应、机理与结构
  • 加密与解密

    加密与解密

    内容介绍

    本书以软件逆向为切入点,讲述了软件安全领域相关的基础知识和技能。读者阅读本书后,很容易就能在逆向分析、漏洞分析、安全编程、病毒分析等领域进行扩展。这些知识点的相互关联,将促使读者开阔思路,融会贯通,领悟更多的学习方法,提升自身的学习能力。本书适合安全技术相关工作者、对逆向调试技术感兴趣的人、对软件保护感兴趣的软件开发人员、相关专业在校学生及关注个人信息安全、计算机安全技术并想了解技术内幕的读者阅读。

    目录

    • 基础篇
    • 第1章 基础知识 2
    • 1.1 什么是加密与解密 2
    • 1.1.1 软件的加密与解密 2
    • 1.1.2 软件逆向工程 2
    • 1.1.3 逆向分析技术 3
    • 1.2 文本字符 4
    • 1.2.1 ASCII与Unicode字符集 4
    • 1.2.2 字节存储顺序 6
    • 1.3 Windows操作系统 6
    • 1.3.1 Win32 API函数 6
    • 1.3.2 WOW64 9
    • 1.3.3 Windows消息机制 9
    • 1.3.4 虚拟内存 11
    • 调试篇
    • 第2章 动态分析技术 14
    • 2.1 OllyDbg调试器 14
    • 2.1.1 OllyDbg的界面 14
    • 2.1.2 OllyDbg的配置 15
    • 2.1.3 基本操作 16
    • 2.1.4 常用断点 27
    • 2.1.5 插件 35
    • 2.1.6 Run trace 36
    • 2.1.7 Hit trace 37
    • 2.1.8 调试符号 37
    • 2.1.9 加载程序 39
    • 2.1.10 OllyDbg的常见问题 40
    • 2.2 x64dbg调试器 42
    • 2.3 MDebug调试器 44
    • 2.3.1 MDebug的界面 44
    • 2.3.2 表达式 45
    • 2.3.3 调试 45
    • 2.3.4 断点 46
    • 2.3.5 MDebug的其他功能 47
    • 2.4 WinDbg调试器 47
    • 2.4.1 WinDbg的安装与配置 47
    • 2.4.2 调试过程 51
    • 2.4.3 断点命令 51
    • 2.4.4 栈窗口 53
    • 2.4.5 内存命令 55
    • 2.4.6 脚本 56
    • 2.4.7 调试功能扩展 58
    • 2.4.8 小结 59
    • 第3章 静态分析技术 60
    • 3.1 文件类型分析 60
    • 3.2 反汇编引擎 61
    • 3.2.1 OllyDbg的ODDisasm 61
    • 3.2.2 BeaEngine 61
    • 3.2.3 Udis86 61
    • 3.2.4 Capstone 62
    • 3.2.5 AsmJit 63
    • 3.2.6 Keystone 64
    • 3.2.7 小结 64
    • 3.3 静态反汇编 65
    • 3.3.1 IDA Pro简介 65
    • 3.3.2 IDA的配置 66
    • 3.3.3 IDA主窗口 68
    • 3.3.4 交叉参考 69
    • 3.3.5 参考重命名 70
    • 3.3.6 标签的用法 71
    • 3.3.7 格式化指令操作数 71
    • 3.3.8 函数的操作 72
    • 3.3.9 代码和数据转换 72
    • 3.3.10 字符串 73
    • 3.3.11 数组 74
    • 3.3.12 结构体 75
    • 3.3.13 枚举类型 79
    • 3.3.14 变量 80
    • 3.3.15 FLIRT 81
    • 3.3.16 IDC脚本 82
    • 3.3.17 插件 86
    • 3.3.18 IDA调试器 87
    • 3.3.19 远程调试 90
    • 3.3.20 其他功能 93
    • 3.3.21 小结 94
    • 3.4 十六进制工具 94
    • 3.5 静态分析技术应用实例 97
    • 3.5.1 解密初步 97
    • 3.5.2 逆向工程初步 99
    • 解密篇
    • 第4章 逆向分析技术 102
    • 4.1 32位软件逆向技术 102
    • 4.1.1 启动函数 102
    • 4.1.2 函数 103
    • 4.1.3 数据结构 111
    • 4.1.4 虚函数 115
    • 4.1.5 控制语句 117
    • 4.1.6 循环语句 124
    • 4.1.7 数学运算符 125
    • 4.1.8 文本字符串 128
    • 4.1.9 指令修改技巧 130
    • 4.2 64位软件逆向技术 131
    • 4.2.1 寄存器 131
    • 4.2.2 函数 132
    • 4.2.3 数据结构 142
    • 4.2.4 控制语句 145
    • 4.2.5 循环语句 154
    • 4.2.6 数学运算符 158
    • 4.2.7 虚函数 169
    • 4.2.8 小结 193
    • 第5章 演示版保护技术 194
    • 5.1 序列号保护方式 194
    • 5.1.1 序列号保护机制 194
    • 5.1.2 如何攻击序列号保护机制 195
    • 5.1.3 字符串比较形式 197
    • 5.1.4 制作注册机 198
    • 5.2 警告窗口 203
    • 5.3 时间限制 205
    • 5.3.1 计时器 205
    • 5.3.2 时间限制 205
    • 5.3.3 拆解时间限制保护 206
    • 5.4 菜单功能限制 207
    • 5.4.1 相关函数 207
    • 5.4.2 拆解菜单限制保护 208
    • 5.5 KeyFile保护 208
    • 5.5.1 相关API函数 208
    • 5.5.2 拆解KeyFile保护 209
    • 5.6 网络验证 213
    • 5.6.1 相关函数 214
    • 5.6.2 破解网络验证的一般思路 214
    • 5.7 光盘检测 219
    • 5.7.1 相关函数 219
    • 5.7.2 拆解光盘保护 220
    • 5.8 只运行1个实例 221
    • 5.8.1 实现方法 221
    • 5.8.2 实例 222
    • 5.9 常用断点设置技巧 222
    • 第6章 加密算法 223
    • 6.1 单向散列算法 223
    • 6.1.1 MD5算法 223
    • 6.1.2 SHA算法 227
    • 6.1.3 SM3密码杂凑算法 231
    • 6.1.4 小结 231
    • 6.2 对称加密算法 231
    • 6.2.1 RC4流密码 231
    • 6.2.2 TEA算法 233
    • 6.2.3 IDEA算法 236
    • 6.2.4 BlowFish算法 243
    • 6.2.5 AES算法 246
    • 6.2.6 SM4分组密码算法 259
    • 6.2.7 小结 259
    • 6.3 公开密钥加密算法 259
    • 6.3.1 RSA算法 260
    • 6.3.2 ElGamal公钥算法 264
    • 6.3.3 DSA数字签名算法 270
    • 6.3.4 椭圆曲线密码编码学 272
    • 6.3.5 SM2算法 279
    • 6.4 其他算法 279
    • 6.4.1 CRC32算法 279
    • 6.4.2 Base64编码 280
    • 6.5 常见的加密库接口及其识别 281
    • 6.5.1 Miracl大数运算库 281
    • 6.5.2 FGInt 283
    • 6.5.3 其他加密算法库介绍 284
    • 6.6 加密算法在软件保护中的应用 285
    • 系统篇
    • 第7章 Windows内核基础 290
    • 7.1 内核理论基础 290
    • 7.1.1 权限级别 290
    • 7.1.2 内存空间布局 291
    • 7.1.3 Windows与内核启动过程 292
    • 7.1.4 Windows R3与R0通信 294
    • 7.1.5 内核函数 296
    • 7.1.6 内核驱动模块 297
    • 7.2 内核重要数据结构 298
    • 7.2.1 内核对象 298
    • 7.2.2 SSDT 300
    • 7.2.3 TEB 302
    • 7.2.4 PEB 304
    • 7.3 内核调试基础 306
    • 7.3.1 使用WinDbg搭建双机调试环境 306
    • 7.3.2 加载内核驱动并设置符号表 308
    • 7.3.3 SSDT与Shadow SSDT的查看 311
    • 第8章 Windows下的异常处理 313
    • 8.1 异常处理的基本概念 313
    • 8.1.1 异常列表 313
    • 8.1.2 异常处理的基本过程 314
    • 8.2 SEH的概念及基本知识 319
    • 8.2.1 SEH的相关数据结构 319
    • 8.2.2 SEH处理程序的安装和卸载 320
    • 8.2.3 SEH实例跟踪 321
    • 8.3 SEH异常处理程序原理及设计 325
    • 8.3.1 异常分发的详细过程 325
    • 8.3.2 线程异常处理 330
    • 8.3.3 异常处理的栈展开 336
    • 8.3.4 MSC编译器对线程异常处理的增强 342
    • 8.3.5 顶层异常处理 349
    • 8.3.6 异常处理程序的安全性 357
    • 8.4 向量化异常处理 361
    • 8.4.1 向量化异常处理的使用 361
    • 8.4.2 VEH与SEH的异同 362
    • 8.4.3 向量化异常处理的新内容 363
    • 8.5 x64平台上的异常处理 363
    • 8.5.1 原生x64程序的异常分发 364
    • 8.5.2 WOW64下的异常分发 366
    • 8.6 异常处理程序设计中的注意事项 367
    • 8.7 异常处理的实际应用 368
    • 8.7.1 使用SEH对用户输入进行验证 368
    • 8.7.2 SEH在加密与解密中的应用 369
    • 8.7.3 用VEH实现API Hook 371
    • 8.8 本章小结 371
    • 第9章 Win32调试API 372
    • 9.1 调试相关函数简要说明 372
    • 9.2 调试事件 375
    • 9.3 创建并跟踪进程 377
    • 9.4 调试循环体 378
    • 9.5 处理调试事件 379
    • 9.6 线程环境 380
    • 9.7 将代码注入进程 382
    • 第10章 VT技术 384
    • 10.1 硬件虚拟化的基本概念 384
    • 10.1.1 概述 384
    • 10.1.2 相关结构和汇编指令 385
    • 10.1.3 EPT机制 388
    • 10.2 VT技术的应用 389
    • 10.2.1 编译运行ShadowWalker 389
    • 10.2.2 分析Hypervisor 390
    • 10.2.3 检测VT支持情况 392
    • 10.2.4 VMCS的配置 393
    • 10.2.5 EPT的配置 396
    • 10.2.6 开启VT 399
    • 10.2.7 内存隐藏的实现 399
    • 10.3 VT调试方法 401
    • 第11章 PE文件格式 404
    • 11.1 PE的基本概念 405
    • 11.1.1 基地址 405
    • 11.1.2 虚拟地址 406
    • 11.1.3 相对虚拟地址 406
    • 11.1.4 文件偏移地址 407
    • 11.2 MS-DOS头部 407
    • 11.3 PE文件头 408
    • 11.3.1 Signature字段 408
    • 11.3.2 IMAGE_FILE_HEADER结构 409
    • 11.3.3 IMAGE_OPTIONAL_HEADER结构 410
    • 11.4 区块 415
    • 11.4.1 区块表 415
    • 11.4.2 常见区块与区块合并 417
    • 11.4.3 区块的对齐值 419
    • 11.4.4 文件偏移与虚拟地址的转换 419
    • 11.5 输入表 421
    • 11.5.1 输入函数的调用 421
    • 11.5.2 输入表的结构 422
    • 11.5.3 输入地址表 424
    • 11.5.4 输入表实例分析 424
    • 11.6 绑定输入 428
    • 11.7 输出表 429
    • 11.7.1 输出表的结构 430
    • 11.7.2 输出表实例分析 431
    • 11.8 基址重定位 432
    • 11.8.1 基址重定位的概念 432
    • 11.8.2 基址重定位表的结构 433
    • 11.8.3 基址重定位表实例分析 434
    • 11.9 资源 435
    • 11.9.1 资源结构 435
    • 11.9.2 资源结构实例分析 438
    • 11.9.3 资源编辑工具 440
    • 11.10 TLS初始化 440
    • 11.11 调试目录 441
    • 11.12 延迟载入数据 441
    • 11.13 程序异常数据 442
    • 11.14 .NET头部 442
    • 11.15 编写PE分析工具 443
    • 11.15.1 检查文件格式 443
    • 11.15.2 读取FileHeader和OptionalHeader的内容 444
    • 11.15.3 得到数据目录表信息 445
    • 11.15.4 得到区块表信息 446
    • 11.15.5 得到输出表信息 447
    • 11.15.6 得到输入表信息 448
    • 第12章 注入技术 450
    • 12.1 DLL注入方法 450
    • 12.1.1 通过干预输入表处理过程加载目标DLL 450
    • 12.1.2 改变程序运行流程使其主动加载目标DLL 466
    • 12.1.3 利用系统机制加载DLL 484
    • 12.2 DLL注入的应用 491
    • 12.3 DLL注入的防范 491
    • 12.3.1 驱动层防范 491
    • 12.3.2 应用层防范 493
    • 第13章 Hook技术 497
    • 13.1 Hook概述 497
    • 13.1.1 IAT Hook篡改MessageBox消息 497
    • 13.1.2 Inline Hook篡改指定MessageBox消息 499
    • 13.2 Hook的分类 500
    • 13.2.1 Address Hook 501
    • 13.2.2 Inline Hook 511
    • 13.2.3 基于异常处理的Hook 513
    • 13.2.4 不是Hook的Hook 514
    • 13.3 Hook位置的挑选 515
    • 13.4 Hook的典型过程 519
    • 13.4.1 Address Hook的实施过程 519
    • 13.4.2 Inline Hook的实施过程 526
    • 13.4.3 基于异常处理的Hook实施过程 529
    • 13.4.4 二次Hook的注意事项 532
    • 13.4.5 通用Hook引擎的实现 533
    • 13.5 Detour函数的典型用法 533
    • 13.6 Hook中的注意事项 536
    • 13.7 Hook在x64平台上的新问题 541
    • 13.8 Hook技术的应用 543
    • 13.9 Hook的检测、恢复与对抗 544
    • 13.9.1 Hook的检
    展开阅读
    精选笔记:PHP中使用OpenSSL生成证书及加密解密

    7小时9分钟前回答

    依赖于OpenSSL扩展

    /*加密解密*/
    function authcode($string, $operation = 'E') {
      $ssl_public = file_get_contents(DATA_PATH."/conf/cert_public.key");
      $ssl_private = file_get_contents(DATA_PATH."/conf/cert_private.pem");
      $pi_key = openssl_pkey_get_private($ssl_private);//这个函数可用来判断私钥是否是可用的,可用返回资源id Resource id
      $pu_key = openssl_pkey_get_public($ssl_public);//这个函数可用来判断公钥是否是可用的
      if(false == ($pi_key || $pu_key)) return '证书错误';
      $data = "";
      if($operation=='D'){
        openssl_private_decrypt(base64_decode($string),$data,$pi_key);//私钥解密
      }else{
        openssl_public_encrypt($string,$data,$pu_key);//公钥加密
        $data = base64_encode($data);
      }
      return $data;
    }
    /*生成证书*/
    function exportOpenSSLFile(){
      $config = array(
        "digest_alg"    => "sha512",
        "private_key_bits" => 4096,           //字节数  512 1024 2048  4096 等
        "private_key_type" => OPENSSL_KEYTYPE_RSA,   //加密类型
      );
      $res = openssl_pkey_new($config);
      if($res == false) return false;
      openssl_pkey_export($res, $private_key);
      $public_key = openssl_pkey_get_details($res);
      $public_key = $public_key["key"];
      file_put_contents(DATA_PATH."/conf/cert_public.key",$public_key);
      file_put_contents(DATA_PATH."/conf/cert_private.pem",$private_key);
      openssl_free_key($res);
    }

    更多关于OpenSS的文章可以查看下面的相关文章

    展开阅读

    资源下载

    相关资源

    学习笔记

    1小时4分钟前回答

    NodeJS加密解密及node-rsa加密解密用法详解

    要用nodejs开发接口,实现远程调用,如果裸奔太危险了,就在网上找了一下nodejs的加密,感觉node-rsa挺不错的,下面来总结一下简单的rsa加密解密用法 初始化环境 新建一个文件夹 node-rsa-demo , 终端进入,运行下面命令初始化 cd node-rsa-demonpm init # 一路回车即可npm install --save node-rsa 生成公钥私钥 在 node-rsa-demo 下新建一个文件 index.js 写上如下代码 var NodeRSA = require('node-rsa')var fs = require('fs')function generator() { var key = new NodeRSA({ b: 512 }) key.setOptions({ encryptionScheme: 'pkcs1' }) var privatePem = key.exportKey('pkcs1-private-pem') var publicPem = key.exportKey('pkcs1-public-pem') fs.writeFile('./pem/public.pem', publicPem, (err) = { if (err) throw err console.log(……

    16小时54分钟前回答

    Javascript实现base64的加密解密方法示例

    这几天使用PHP向前端传值的时候,遇到一个问题,要将代码传过去赋值。如果使用urlencode()和urldecode()函数,就会出现js无法解码的情况,因为php和js的相关函数算法不一致。于是准备使用通用的base64加密解密。 base64 加密解密 下方是base64用javascript写出来的函数和方法。 //1.加密解密方法使用://1.加密 var str = '124中文内容'; var base = new Base64(); var result = base.encode(str); //document.write(result); //2.解密 var result2 = base.decode(result); document.write(result2); //2.加密、解密算法封装:function Base64() { // private property _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; // public method for encoding this.encode = function (input) { var o……