互联网
类型
可以朗读
语音朗读
112千字
字数
2024-08-01
发行日期
展开全部
主编推荐语
本书介绍Solidity、web3基础和漏洞原理的相关内容。
内容简介
本书从环境介绍,Solidity、web3基础和漏洞原理及利用方面,详细地介绍智能合约相关漏洞知识。
其中,第一部分介绍了Remix IDE、Metamask 以及geth等环境的安装和使用方法;第二部分介绍了solidity语言的基础知识与基本语法,以及web3的使用方法;第三部分重点讲解了智能合约常见漏洞的基本原理及其攻击方式,同时还增加了Ethernaut通关游戏的部分内容,以此来加深对漏洞原理的理解。
目录
- 版权信息
- 内容简介
- 序
- 前言
- 第0章 初探区块链与智能合约
- 关于区块链
- 区块链定义
- 区块链技术
- 区块链层级结构
- 区块链的优点
- 关于智能合约
- 以太坊
- 第1章 环境准备
- 1.1 使用npm安装Remix IDE
- 1.2 使用docker安装Remix IDE
- 1.3 使用docker安装geth
- 1.4 本章总结
- 第2章 Remix环境介绍和使用方法
- 2.1 Remix环境的使用方法1
- 部署学习
- 2.2 Remix环境的使用方法2
- 2.2.1 部署学习
- 2.2.2 构造函数
- 2.2.3 初始化合约余额
- 2.3 Remix环境的使用方法3
- Remix搭配MetaMask
- 2.4 本章总结
- 第3章 MetaMask的使用方法
- 3.1 安装MetaMask
- 3.2 获取测试币
- 3.3 MetaMask Api的使用方法
- 3.4 本章总结
- 第4章 geth的使用方法
- 4.1 geth基础命令
- 子命令的使用方法
- 4.2 console的基础命令
- 4.2.1 console中web3对象的命令
- 4.2.2 console中的挖矿
- 4.3 geth启动节点
- 4.3.1 启动节点
- 4.3.2 测试节点
- 4.3.3 启动参数说明
- 4.3.4 关于RPC
- 4.3.5 连接节点
- 4.3.6 新建用户
- 4.3.7 开始挖矿
- 4.3.8 测试转账
- 4.4 部署智能合约1
- 4.4.1 使用容器提供例子
- 4.4.2 重新编译
- 4.5 调用智能合约1
- 4.6 geth从头搭建私链
- 4.6.1 创建目录
- 4.6.2 启动私链节点
- 4.7 部署智能合约2
- 4.8 调用智能合约2
- 4.9 geth的新版本
- 4.10 本章总结
- 第5章 Solidity语言基础
- 5.1 创建合约
- 5.2 合约接口
- 5.3 变量类型
- 5.4 变量修饰
- 5.5 类型转换
- 5.6 数学运算
- 5.7 字符串比较
- 5.8 结构体
- 5.9 普通数组
- 5.10 函数定义及修饰
- 5.11 构造函数
- 5.12 函数返回值
- 5.13 自毁函数
- 5.14 fallback函数
- 5.15 receive函数
- 5.16 msg全局变量和tx全局变量
- 5.16.1 msg全局变量
- 5.16.2 tx全局变量
- 5.17 创建事件
- 5.18 循环结构
- 5.19 以太币单位
- 5.20 转账函数
- 5.21 本章总结
- 第6章 Solidity数据存储
- 6.1 存储中的状态变量存储结构
- 6.2 紧凑存储
- 6.3 动态大小数据存储
- 6.3.1 动态String
- 6.3.2 关于length*2问题
- 6.4 动态数组存储
- 6.5 字典mapping存储
- 6.6 本章总结
- 第7章 web3.js和web3.py
- 7.1 web3.js
- 7.2 web3.js配合MetaMask使用
- 7.2.1 异步请求方式1
- 7.2.2 异步请求方式2
- 7.2.3 异步请求方式3
- 7.3 常用函数
- 7.3.1 hash函数
- 7.3.2 与地址相关
- 7.3.3 单位转换
- 7.3.4 字符串转换
- 7.3.5 账户和余额
- 7.3.6 获取插槽数据
- 7.3.7 获取区块信息
- 7.3.8 获取交易信息
- 7.3.9 交易签名和发送
- 7.3.10 ABI签名和编码
- 7.4 web3.js连接节点
- 7.5 web3.js部署合约
- 7.6 web3.js合约交互
- 7.6.1 实例化合约对象
- 7.6.2 web3.js call调用
- 7.6.3 web3.js send调用
- 7.7 web3.py
- 7.8 web3.py部署合约
- 7.9 web3.py合约交互
- 7.10 本章总结
- 第8章 利用漏洞
- 8.1 关于call函数
- 8.1.1 函数选择器(函数签名)
- 8.1.2 call函数无参数调用
- 8.1.3 call函数有参数调用
- 8.1.4 call函数调用其他合约
- 8.2 漏洞场景
- 8.3 代码分析
- 8.4 漏洞复现
- 8.5 本章总结
- 第9章 重入漏洞
- 9.1 关于重入漏洞
- 9.2 关于fallback函数
- 9.3 攻击场景
- 9.4 漏洞场景
- 9.5 攻击演示
- 9.6 本章总结
- 第10章 整型溢出漏洞
- 10.1 溢出原理
- 10.2 溢出场景
- 10.2.1 加法溢出
- 10.2.2 减法溢出
- 10.3 案例分析
- 10.3.1 BEC合约代码片段
- 10.3.2 代码分析
- 10.4 攻击模拟
- 10.5 本章总结
- 第11章 访问控制漏洞
- 11.1 关于访问控制漏洞
- 11.1.1 代码层面的可见性
- 11.1.2 逻辑层面的权限约束
- 11.2 漏洞场景1
- 11.2.1 漏洞场景分析
- 11.2.2 漏洞场景演示
- 11.2.3 规避建议
- 11.3 漏洞场景2
- 11.3.1 漏洞场景分析
- 11.3.2 漏洞场景演示
- 11.3.3 规避建议
- 11.4 漏洞场景3
- 11.4.1 tx.origin全局变量和msg.sender全局变量
- 11.4.2 漏洞场景分析
- 11.4.3 漏洞场景演示
- 11.4.4 规避建议
- 11.5 本章总结
- 第12章 未检查返回值
- 12.1 低级别调用函数
- 12.2 低级别调用中产生异常的原因
- 12.3 低级别函数与普通函数调用的区别
- 12.4 漏洞场景
- 12.4.1 关于send函数
- 12.4.2 漏洞场景分析
- 12.4.3 漏洞场景演示
- 12.5 真实案例
- 12.6 漏洞预防
- 第13章 可预测随机值
- 13.1 随机数生成
- 13.1.1 区块变量作为熵源的PRNG
- 13.1.2 区块变量测试
- 13.2 漏洞场景
- 13.2.1 漏洞场景分析
- 13.2.2 漏洞场景演示
- 13.3 漏洞修复
- 第14章 时间控制漏洞
- 14.1 关于block.timestamp
- 14.2 以太坊中时间戳的合理要求
- 14.3 漏洞场景1
- 14.3.1 漏洞场景分析
- 14.3.2 漏洞场景演示
- 14.3.3 另外攻击姿势
- 14.4 漏洞场景2
- 14.5 本章总结
- 第15章 抢先交易漏洞
- 15.1 关于抢先交易漏洞
- 15.2 满足“抢先交易”的条件
- 15.3 决定交易顺序的原则
- 15.3.1 手续费高低原则
- 15.3.2 先进先出原则
- 15.3.3 共识节点排序原则
- 15.4 交易池
- 15.5 攻击流程
- 15.6 漏洞场景分析
- 15.7 漏洞场景演示
- 15.7.1 本地搭建私链
- 15.7.2 错误不期而遇
- 15.7.3 改用geth
- 15.7.4 部署合约
- 15.7.5 攻击演示
- 15.7.6 小结
- 15.8 本章总结
- 第16章 短地址攻击漏洞
- 16.1 关于短地址攻击漏洞
- 16.2 漏洞场景分析
- 16.3 攻击者地址的生成
- 16.4 漏洞场景演示
- 16.5 本章总结
- 第17章 拒绝服务漏洞
- 17.1 关于拒绝服务漏洞
- 17.2 漏洞场景1
- 17.2.1 漏洞场景演示
- 17.2.2 selfdestruct函数
- 17.3 漏洞场景2
- 17.3.1 所有者丢失
- 17.3.2 漏洞场景演示
- 17.4 漏洞场景3
- 17.5 漏洞场景4
- 17.5.1 非预期异常
- 17.5.2 攻击payload
- 17.5.3 漏洞场景演示
- 17.6 本章总结
- 第18章 账户及账户生成
- 18.1 以太坊账户
- 18.2 以太坊地址
- 18.3 外部账户的生成
- 18.4 特定外部账户的生成
- 18.5 合约账户的生成
- 18.6 Create2
- 18.6.1 关于Create2
- 18.6.2 Create code
- 18.6.3 Factory合约
- 18.7 本章总结
- 第19章 Ethernaut
- 19.1 关于Ethernaut
- 19.2 环境准备
- 19.2.1 Hello Ethernaut
- 19.2.2 安装MetaMask插件
- 19.2.3 测试网络的选择
- 19.2.4 控制台的使用
- 19.3 本章总结
- 第20章 Ethernaut Level 1
- 20.1 Level 1 Fallback
- 20.2 源码分析
- 20.2.1 fallback函数
- 20.2.2 攻击过程
- 20.3 闯关尝试
- 20.4 本章总结
- 第21章 Ethernaut Level 2~5
- 21.1 Level 2 Fallout
- 21.1.1 关卡源码
- 21.1.2 源码分析
- 21.1.3 闯关尝试
- 21.2 Level 3 CoinFlip
- 21.2.1 关卡源码
- 21.2.2 源码分析
- 21.2.3 闯关尝试
- 21.2.4 攻击payload
- 21.2.5 问题总结
- 21.3 Level 4 Telephone
- 21.3.1 关卡源码
- 21.3.2 源码分析
- 21.3.3 攻击payload
- 21.3.4 闯关尝试
- 21.4 Level 5 Token
- 21.4.1 关卡源码
- 21.4.2 源码分析
- 21.4.3 闯关尝试
- 21.5 本章总结
- 第22章 Ethernaut Level 6~9
- 22.1 Level 6 Delegation
- 22.1.1 关卡源码
- 22.1.2 源码分析
- 22.1.3 闯关尝试
- 22.1.4 另谋出路
- 22.2 Level 7 Force
- 22.2.1 关卡源码
- 22.2.2 源码分析
- 22.2.3 攻击payload
- 22.2.4 闯关尝试
- 22.3 Leval 8 Vault
- 22.3.1 关卡源码
- 22.3.2 源码分析
- 22.3.3 闯关尝试
- 22.4 Level 9 King
- 22.4.1 关卡源码
- 22.4.2 源码分析
- 22.4.3 攻击payload
- 22.4.4 闯关尝试
- 22.5 本章总结
- 第23章 Ethernaut Level 10~13
- 23.1 Level 10 Reentrance
- 23.1.1 关卡源码
- 23.1.2 源码分析
- 23.1.3 关于重入漏洞
- 23.1.4 攻击payload
- 23.1.5 闯关尝试
- 23.2 Level 11 Elevator
- 23.2.1 关卡源码
- 23.2.2 源码分析
- 23.2.3 攻击payload
- 23.2.4 闯关尝试
- 23.3 Level 12 Privacy
- 23.3.1 关卡源码
- 23.3.2 源码分析
- 23.3.3 闯关尝试
- 23.4 Level 13 GatekeeperOne
- 23.4.1 关卡源码
- 23.4.2 源码分析
- 23.4.3 攻击payload
- 23.4.4 闯关尝试
- 23.5 本章总结
- 第24章 Ethernaut Level 14~17
- 24.1 Level 14 GatekeeperTwo
- 24.1.1 关卡源码
- 24.1.2 源码分析
- 24.1.3 攻击payload
- 24.1.4 闯关尝试
- 24.2 Level 15 NaughtCoin
- 24.2.1 关卡源码
- 24.2.2 源码分析
- 24.2.3 闯关尝试
- 24.3 Level 16 Preservation
- 24.3.1 关卡源码
- 24.3.2 源码分析
- 24.3.3 攻击payload
- 24.3.4 闯关尝试
- 24.4 Level 17 Recovery
- 24.4.1 关卡源码
- 24.4.2 源码分析
- 24.4.3 闯关尝试
- 24.5 本章总结
- 第25章 Ethernaut Level 18~20
- 25.1 Level 18 MagicNumber
- 25.1.1 关卡源码
- 25.1.2 源码分析
- 25.1.3 闯关尝试
- 25.2 Level 19 AlienCodex
- 25.2.1 关卡源码
- 25.2.2 源码分析
- 25.2.3 闯关尝试
- 25.3 Level 20 Denial
- 25.3.1 关卡源码
- 25.3.2 源码分析
- 25.3.3 payload
- 25.3.4 闯关尝试
- 25.4 本章总结
- 第26章 通用payload
展开全部
出版方
电子工业出版社
电子工业出版社成立于1982年10月,是国务院独资、工信部直属的中央级科技与教育出版社,是专业的信息技术知识集成和服务提供商。经过三十多年的建设与发展,已成为一家以科技和教育出版、期刊、网络、行业支撑服务、数字出版、软件研发、软科学研究、职业培训和教育为核心业务的现代知识服务集团。出版物内容涵盖了电子信息技术的各个分支及工业技术、经济管理、科普与少儿、社科人文等领域,综合出版能力位居全国出版行业前列。