QWB2019 babybank

反编译看一下

profit函数需要level==0地址后16位为0xb1b1,调用后level1,结果为level=1balance1,结果为balance=1

guess函数需要level==1secret==arg0,调用后level1,结果为level=2balance1,结果为balance=2

func_045C函数可以修改secret,但是要msg.sender==owner,但没找到修改owner的地方,不能利用

transfer函数需要balance==2arg0==2,把当前账号的balance转到指定地址

withdraw函数需要balance==2arg0==2,有call.value函数可以利用callback重入攻击使balance下溢

阅读全文 »

官方sagemath

运行下面指令,启用sagemath容器,自动下载镜像

1
docker run -p8888:8888 sagemath/sagemath sage-jupyter

-p8888:8888是端口映射,前一个是容器端口,后一个是主机端口

复制jupyter地址,直接关掉shell(shell已经卡死),完成

阅读全文 »

ncat指令

1
ncat -klp 10000 -c 'python3 task.py'

k为启用多次连接,l为监听,p为指定端口

注:这里使用ncat而不用nc是因为nc可能会因为安全问题不能适用

阅读全文 »

准备

工具

  1. MetaMask(区块链钱包)

  2. etherscan(区块链浏览器)

  3. remix(智能合约IDE)

  4. Online Solidity Decompiler(在线智能合约反编译器)

    https://ethervm.io/decompile?address=0xabcd&network=ropsten

    address:合约地址,network:网络

  5. VANITY-ETH (可以枚举生成带有指定前缀或后缀的账户)

阅读全文 »

生成序列

LFSR是一种流密码,加密方式

加密方式如下 \[ mask=(c_0,c_1,\dots,c_m)\\ a_n=c_ma_{n-1}+c_{m-1}a_{n-2}+\dots+c_0a_{n-m-1}\ mod\ 2 \] 用矩阵表示有 \[ \begin{pmatrix} &1\\\\ &&1\\\\ &&&\ddots&\\\\ &&&&1\\\\ c_0&c_{1}&\dots&&c_m \end{pmatrix} \begin{pmatrix} a_{n-m-1}\\\\ a_{n-m}\\\\ \vdots\\\\ a_{n-1} \end{pmatrix}= \begin{pmatrix} a_{n-m}\\\\ a_{n-m+1}\\\\ \vdots\\\\ a_{n} \end{pmatrix} \]

阅读全文 »

不平衡RSA指的是p,q的大小相差很大,并且将假定q<p,q的大小为 \(N^\beta\)\(d_p=d\ mod\ p-1\)\(d_p\) 的大小为 \(N^\delta\)

本文将按顺序介绍几种方法来分解满足条件的 \(N\),随着p,q相差越大,即 \(\beta\) 越小,可以利用的 \(d_p\) 的上界也将提高

  1. \(3\beta + 2\delta ≤ 1 − log_N (4).\)
  2. \(3\beta − \beta^2 + 2\delta ≤ 1 − \epsilon.\)
  3. \(\frac{5}{3}\beta +\frac{2}{3}\sqrt{3\beta − 5\beta^2} + \delta ≤ 1 − \epsilon\)

1红色 2蓝色 3绿色

阅读全文 »