CTF-freebie
CTF-freebie 题目源码点击
这道题,怎么说,和昨天写的那个CTF-tasty-stake的漏洞原理一样
看到这段代码,经典的委托调用,只不过这次又是不实现它
function deposit( uint256 farmDeposit, address payable from, address to ) external returns (uint256 shares) { require(farmDeposit > 0, "deposits must be nonzero"); require(to != address(0) && to != address(this), "to"); require(from != address(0) && from != address(this), "from"); shares = farmDeposit; ...
CTF-tasty-stake
CTF-tasty-stake题目源码点击
题目要求: 有个TastyStaking 合约,该合约允许您质押 STEAK 以种植 BUTTER 代币。您的任务是从质押合约中耗尽所有 STEAK 代币。
首先这个合约是个单合约,实现的功能的挺多的,阅读了很久,看了一下它的提示:所有输入都经过了适当的验证吗?
看来又是参数有问题,来到合约最后,migrateStake合约实现的代币质押的转移
function migrateStake(address oldStaking, uint256 amount) external { TastyStaking(oldStaking).migrateWithdraw(msg.sender, amount); _applyStake(msg.sender, amount); }
但是关键来了。对于这个oldStaking,这个函数并没有有什么检查举动,回想前几天刚做的Safu Valut题,和它有点类似,都是没有对外部调用进行一个检查,那么这个题旧很好的解决了
攻击合约:
contract Att ...
CTF-safu-wallet
CTF-safu-wallet题目源码点击。
题目要求:这是一个多签名钱包,已经有一位顾客存入钱,然后你要将它的钱永远困住在这个钱包里
首先看到合约代码:很清晰的辨别了,SafuWallet合约是代理合约,SafuWalletLibrary合约是逻辑合约,这样分开,就好理解了对于多签名钱包,我的理解就是,不止一个管理员,至少要俩个管理员就可以管理这个钱包了。
逻辑合约里有kill函数,如果能调用,这应该是最便捷的解题方式了
function kill(address _to) onlymanyowners(sha3(msg.data)) external { suicide(_to); }
很遗憾的是,有个onlymanyowners限制,这也就是多签名钱包的魅力了吧。
看到代理合约中,构造函数还是有点东西。
constructor(address[] memory _owners, uint _required, uint _daylimit) { bytes memory data = abi.encodeWithSignature( ...
CTF-free-Lunch
CTF-free-Lunch题目来源:点击
首先这个代币只有一个合约,还是容易理解。如果对unswap V2有了解的话,会更好的理解合约。发现漏洞。要了解流动池点击,
题目要求是:我们初始有俩个代币,让我们通过这个SafuMaker合约后,翻倍50,并且要耗尽这个合约的资金。
攻击流程(这道题没有思路,或者是说对流动性的了解太少了,看了测试合约,发现这个思路真的让我茅舍顿开,或者是,题目还是做少了):
添加流动性并获得 LP 代币:
攻击者首先向 SAFU-USDC 流动性池添加流动性,例如存入 10 USDC 和 10 SAFU。这一步使得攻击者获得相应数量的 LP 代币,代表他们在流动性池中的份额。
创建新流动性池:
攻击者使用获得的 LP 代币与 SAFU 代币创建一个新的流动性池。这一步增加了攻击者的流动性控制能力。
转移 LP 代币并进行转换:
攻击者将 10% 的新流动性池的 LP 代币转移到 safuMaker 合约,并调用其 convert 方法。这通常会激活一些机制,例如将 LP 代币转换为 SAFU 代币或其他奖励。
代币交换:
攻击者使用路由合约执行 ...
CTF-game-assets
CTF-game-asserts题目源码:点击
题目说明:GG labs 刚刚发布了他们的 nOtApOnZi 游戏,该游戏允许将多个 WLed NFT 用作游戏内物品。为了集成多个 ERC721 代币,他们有一个包装合约 (ERC1155) 来包装 NFT,允许它们在游戏中使用。用户也可以在使用完 NFT 后解包它们。您的任务是将用户的 NFT 困在包装合约中并使他们无法挽回,从而使用户感到悲伤
这个一实现了游戏里的资产转化,首先AssetHolder合约中,就是资产的说明,具体实现有点多,这里就不深究了,AssetWrapper合约就是我们重点要说的了,他是一个包装合约,因为这个游戏使用的ERC1155代币规则,所以在进行包装的时候,要对用户进行返回代币是,就会触发一个隐藏的接受函数,
function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, byte ...
ERC1155
ERC1155多代币标准
简介用于多种代币管理的合约标准接口。 单个部署的合约可以包括同质化代币、非同质化代币或其他配置(如半同质化代币)的任何组合。
多代币标准是什么?
它的目的很单纯,就是创建一个智能合约接口,可以代表和控制任何数量的同质化和非同质化代币类型。 这样一来,ERC-1155 代币就具有与 ERC-20 和 ERC-721 代币相同的功能,甚至可以同时使用这两者的功能。 它改进了 ERC-20 和 ERC-721 标准的功能,提升了效率并纠正了实现中的明显错误。
功能批量传输通过一次合约调用传输多种资产
就是不单是一种代币可以传输,很多种代币都可以传输
来看看,他与ERC20传输合约的比较
// ERC-20function transferFrom(address from, address to, uint256 value) external returns (bool);// ERC-1155function safeBatchTransferFrom( address _from, address _to, uint256[] calldat ...
java_学生管理系统
前言最近要做个一java的学生管理系统,要一段很长时间,还是从零开始,所以就记个笔记,记录一下自己的学习知识,感觉和之前学的网页面有一些知识的关联。
采用一个java+Swing的框架,
SwingSwing 是一个为Java设计的GUI工具包。
GUI(图形用户界面)为程序提供图形界面,它最初的设计目的是为程序员构建一个通用的 GUI,使其能够在所有的平台上运行,但 Java 1.0 中基础类 AWT(抽象窗口工具箱)并没有达到这个要求,于是 Swing 出现了,它是 AWT 组件的增强组件,但是它又不能完全替代 AWT 组件,这两种组件需要同时出现在一个图形用户界面中。
Swing包括了图形用户界面(GUI)器件如:文本框,按钮,分隔窗格和表。
Swing提供许多比AWT更好的屏幕显示元素。它们用纯Java写成,所以同Java本身一样可以跨平台运行,这一点不像AWT。它们是JFC的一部分。它们支持可更换的面板和主题(各种操作系统默认的特有主题),然而不是真的使用原生平台提供的设备,而是仅仅在表面上模仿它们。这意味着你可以在任意平台上使用JAVA支持的任意面板。轻量级组件的缺点则是执 ...
CTF-SafuVault
CTF-SafuVault这个题的源代码这里
题目要求就是:获得不少于保险库的90%代币
还是先阅读代码,合约SafeVault,是一个安全的收益金库,用于用户存入代币,然后金库会调用策略合约 SafuVault的deposit函数将存入的代币进行投资,用户通过withdraw函数提取它们的代币,其中还有个depositFor函数,允许其他用户为其他人存款,这个收益合约看起来还是功能挺齐全的。而收益生成合约 SafuStrategy,就是来管理存入金库的资金,要想获得资金的话,还是的同通过金库合约,反复查看这个合约的,开始时并没有发现获得资金的方法,查看了提示:所有外部功能都得到妥善保护吗?又去看了金库合约的函数,发现deposit和depositFor函数修饰限定不一样,具体看一下代码:
function deposit(uint256 _amount) public nonReentrant { strategy.beforeDeposit(); uint256 _pool = balance(); want().safeTran ...
EIP-1559
EIP-1559在做solidity自我检测的时候,第一次,了解到这个协议,就来做个学习笔记
含义首先它是由V神和Ethhub_io创始人Eric Conner于2019年3月联合提出的以太坊交易手续费机制改进提案。这个提案的主要内容就是对向矿工的支付的gas方式做出了改变,它将gas费分为俩部分:基础费(basefee)+矿工小费
基础费(basefee)就是以太坊网络根据交易需求和区块大小动态调整的。BASEFEE的计算方式是通过一个名为“基础费用追踪器”的算法来实现的。该算法会根据当前区块的交易需求和区块大小来动态调整BASEFEE,以确保交易能够在合理的时间内得到确认。
EIP-1559协议的核心思想其实有两块:第一块是变更燃料费价格的定价方式,降低整体的燃料费价格,以利于以太坊生态中的各种应用的发展。第二块是原来的以太坊网络中的燃料费全部是矿工的收入,在EIP-1559协议实施后,燃料费的一部分将燃烧掉,不再作为矿工的收入。
作用降低以太坊的矿工费用,维持以太坊网络的稳定
solidityqestion答案
自查最近发现个关于solidity面试的问题网站,正好之前又重新温习了solidity的,所以就来做一下点击查看面试问题网站
容易1,私有、内部、公共和外部函数之间有什么区别?
private表示只能在合同内部调用其他函数。 internal类似于私有关键字,但也可由继承当前合同的合同调用。 external只能在合同外部调用。 public可在任何地方被调用,无论是内部还是外部。
2,智能合约大约可以有多大?
24KB
3,create 和 create2 有什么区别?
首先它们都是Solidity中重要的操作码,都是用来部署合约的,区别就是,create是通过对发送者地址和nonce值进行哈希运算计算新合约的地址的,keccak256(rlp.encode(deployingAddress, nonce))。而create2更为复杂,它使用是通过一个公式计算新合约的地址的,这个公式包括,发送者地址,随机数,salt,字节码等参数,keccak256(0xff ++ deployingAddr ++ salt ++ keccak256(bytecode)),它也有个优点,可 ...