关于solidity漏洞的基础知识
关于solidity漏洞的基础知识精度的计算这个错误常常出现于计算过程当中,使用了先除后乘,就会导致精度的计算错误,比如
interest = principal / 3_333 * 10_000;
如果本金小于3_333,那么就会计算的利息为零如果按一下的例子计算
interest = principal * 10_000 / 3_333;
那么就不会出现这种的错误,因为使先扩大的精度,再除的话,就能避免精度的损失个人也是通过近几次的审计报告发现,大家都是很注意计算的地方
函数变量不用同一个变量声明这是我再审计报告中,第一次了解到这个问题,但是学过Java的都知道,成员变量和方法的变量冲突的话就会使用this来区分,而我们solidity没有这种说法,所以只能用不同的命名来表示,比如
address owner;function change owner(address owner) internal{ require(owner == msg.sender,"NOT CHANGE"); owner = owner;}
在这个函数 ...
codeHawks-2024-11-twentyone 审计报告
twentyone 审计报告我自己这次犯了一个重大错误。就是没有真正的理解题目意思。导致全是找的破环游戏规则(可以任意查看手牌的错误。其实是游戏这么设定是合理的)然后这次就不放我的报告的了。因为都是public惹得祸。让我以为这次的首飞就是只有权限的问题,那就看看正确的漏洞出处
计算玩家和庄家的手牌不一致 (高)其实这个问题应该是最简单的。因为从下面代码就能显而易见
//playerHand if (cardValue == 0 || cardValue >= 10) { playerTotal += 10; } else { playerTotal += cardValue; }//dealerHand if (cardValue >= 10) { dealerTotal += 10; } else { ...
CTF-Storage
CTF-Storeage题目代码又俩个:
pragma solidity ^0.8.0;import "./StorageSlot.sol";contract Storage1 { uint256 public constant VERSION = 1; address public aaaaa; address public admin; bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE"); mapping(address => uint256) public gasDeposits; event SendFlag(); event SetLogicContract(bytes32 key, address oldAddress, address newAddress); event DepositedGas(address account, uint256 amount); event Wit ...
CTF-LostAssert
CTF-LostAssert这道题我感觉属于签到题了。就是分清包装代币,s代币,原生代币的关系
题目源码:
//SPDX-License-Identifier:MITpragma solidity ^0.8.26;import "@openzeppelin/contracts/token/ERC20/ERC20.sol";import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";import {IERC20Permit, ERC20Permit} from "@openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol";// 普通的ERC20代币contract MockWETH is ERC20("Wrapped ETH", "WETH") { event Deposit(address indexed ...
Java课程设计_数据库代码
title: Java课程设计代码date: 2024-12-02 03:03:51tags: java数据库设计代码//创建数据库create database Student;use student;//创建学生信息表create table student( stuid1 char(20) unique comment '学号', name char(20) comment '姓名', telenumber int comment '电话号码', qqmail char(20) comment '邮箱', classnumber char (20) comment '班级')comment'学生信息表';//插入学生信息insert into student (stuid1,name,telenumber,qqmail,classnumber ) values ('2023131051' ,' ...
Java课程设计代码
Java代码import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JPasswordField;import javax.swing.JTextField;import javax.swing.*;import java.awt.*;import java.sql.*;import java.util.List;import java.util.ArrayList;import javax.swing.table.DefaultTableModel;import org.jfree.chart.*;import org.jfree.chart.plot.*;import org.jfree.data.category.DefaultCategoryDataset;import java.io.*;import java.text.DecimalFormat;// 主类public class s ...
CTF-OwnerBuy
CTF-OwnerBuy题目源码有很多文件。就看一个最关键的
// 0.5.1-c8a2// Enable optimizationpragma solidity ^0.5.0;import "./contracts/ERC20.sol";import "./contracts/IERC20.sol";import "./contracts/ERC20Detailed.sol";interface Changing { function isOwner(address) external returns (bool);}contract Ownable { address public _owner; address public _previousOwner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); ...
CTF-Merkle
CTF-Merkle题目原代码:
// SPDX-License-Identifier: GPL-3.0pragma solidity ^0.8.13;library MerkleProof { function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) { return processProof(proof, leaf) == root; } function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofEleme ...
CTF-SVip
CTF-SVip首先先看题目代码
// pragma solidity 0.4.24; //这是原来的版本,很奇怪不知道为啥无法在foundry编译,所以换成以下版本pragma solidity ^0.8.13;contract SVip { // 一个地址记录一个分数 mapping(address => uint) public points; // 查看某地址是不是超级VIP mapping(address => bool) public isSuperVip; uint256 public numOfFree; // 用户成为超级VIP需要999分数 function promotionSVip() public { require(points[msg.sender] >= 999, "Sorry, you don't have enough points"); isSuperVip[msg.sender] = true; ...