CTF-AdultOtter
题目源代码:
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.13;
contract AdultOtter { bool public solved = false;
function pwn(uint[16] memory code) public { uint[16] memory a; uint[16] memory b;
for (uint i = 0; i < 16; i++) { assert(1337 * i < code[i] && code[i] < 1337 * (i + 1)); }
for (uint i = 0; i < 16; i++) { a[i] = i**i * code[i]; }
for (uint i = 1; i < 16; i++) { b[i] = (2**255 + code[i] - 7 * a[i] + b[i-1]) % 2**64; }
assert(b[15] == 0); solved = true; } }
|
这就是一道计算题,
其实就是使code[15] - 7 i ** i * code[15] + code[14] - 7 i i * code[14] + …… code[1] - 7 *i ** i * code[1]+ b[0] 为2**64倍数即可。
答案:
// SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.13;
interface IAdultOtter { function pwn(uint[16] memory code) external; }
contract Exploit{
function exploit() public { address addr = 0x6D40aCf2EF8F8F99247666AEE922E79CB605DE3B; uint[16] memory DataNumber; DataNumber[0] = 11; DataNumber[1] = 1513; DataNumber[2] = 3859; DataNumber[3] = 5192; DataNumber[4] = 6112; DataNumber[5] = 7966; DataNumber[6] = 9263; DataNumber[7] = 10432; DataNumber[8] = 11709; DataNumber[9] = 13320; DataNumber[10] = 14564; DataNumber[11] = 15480; DataNumber[12] = 16614; DataNumber[13] = 18200; DataNumber[14] = 19485; DataNumber[15] = 21344; IAdultOtter(addr).pwn(DataNumber); }
}
|