Ethernaut 笔记

简介 最近从 Ethernaut 学习到了很多,抛开那些比较基础的,记录一些 ECDSA 相关的 以下公式中小写字母代表一个值,大写字母代表一个点,除了 N 是曲线的 order 我们知道 ECDSA 依赖于椭圆曲线上的离散对数问题,对于私钥 privkey,公钥 PubKey 是椭圆曲线上的一个点并且有 $\text{PubKey} = \text{privkey} \cdot G$,其中 G 是椭圆曲线的生成元,正是因为椭圆曲线上的离散对数问题,已知 PubKey 和 G 求 privkey 是困难的,才让数字签名得以可能 Sign 签名公式 $$ s = k^{-1} \cdot (h + r \cdot \text{privkey})\mod{N} $$k 是随机数,RFC6979 提供了生成方法,不建议真的随机生成,因为重用会导致私钥泄漏,后续会提到 h 是要被签名的 hash 值 r 是 k * G 这个点的 x 轴坐标 计算出 s 后,和 r 共同构成签名 (r, s),但在签名恢复的过程还会产生歧义,有两种结果,所以还要引入一个 v 来确认是哪一个结果,后续会提到 1import hashlib 2from eth_hash.auto import keccak 3from ecdsa import SECP256k1 4from ecdsa.rfc6979 import generate_k 5 6CURVE = SECP256k1 7N = CURVE.order 8G = CURVE.generator 9 10priv_key = 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 11 12h = keccak(b'hello') 13print(f'hash: 0x{h.hex()}') 14 15h_int = int.from_bytes(h, 'big') 16 17# random k, important 18k = generate_k( 19 order=N, 20 secexp=priv_key, 21 hash_func=hashlib.sha256, 22 data=h, 23) 24 25R = k * G 26r = R.x() % N 27k_inv = pow(k, -1, N) 28 29# s = k^-1 * (h + r * pk) 30s = (k_inv * (h_int + r * priv_key)) % N 31 32print(f'sig : 0x{r.to_bytes(32, 'big').hex()}{s.to_bytes(32, 'big').hex()}') 33print(f'r : 0x{r.to_bytes(32, 'big').hex()}') 34print(f's : 0x{s.to_bytes(32, 'big').hex()}') Recover 签名恢复公式,即从签名 (r, s) 中恢复出公钥 Pub ...

December 1, 2025 · 6 min · 🦉

proxychains4 在 macOS 上无法正常工作的问题小记

安装了 proxychains-ng 来强制特定程序走代理,发现在 macOS 上有时可以正常工作有时不行 经查询是 macOS SIP 的问题 因为 proxychains4 的工作原理是替换子程序的动态链接库来强制走代理,而 macOS SIP 为了安全考虑会阻止所有内置 executable 被替换动态链接库,以至 proxychains4 对所有内置 executable 无法正常工作,比如 /usr/bin/ 下的所有 解决方法,使用 Homebrew 安装的版本就好,通过 Homebrew 安装的程序就没有 SIP 保护 (实在只能用内置就只好关闭 SIP 了 如果 /usr/bin 和 /opt/homebrew/bin 下都有某个程序,可通过调整 PATH 里 /opt/homebrew/bin 的位置来调整优先级 特例,通过 Homebrew 安装的 curl 在 /opt/homebrew/opt/curl/bin 1export PATH=/opt/homebrew/bin:/usr/bin:$PATH

July 4, 2025 · 1 min · 🦉

博客在手机端的应用模式适配

以下场景仅在 iOS 端完成测试 电脑上打开博客当然很友好啦 但是在手机端打开,保存书签到桌面,就有很神奇的体验了 其他书签比如 Grafana, UptimeKuma 之类的,打开都是全屏模式,体验非常丝滑 唯独自己博客的书签,点击后会跳转去 Safari 打开,令人疑惑 简单搜索了一下还是找到了原因以及解决方案 Safari docs 原来可以通过 meta tag 来调整,还好使用的 hugo 主题简单,可以使用 layouts/partials/extend_head.html 覆盖默认来自定义一些 html head ( 居然有一天会查阅 Safari 的文档

June 23, 2025 · 1 min · 🦉

使用 GitHub Copilot 提升代码编写效率

本文由 AI 生成 GitHub Copilot 推出了编程助手功能,可以直接在 GitHub Issues 中 assign 给 @copilot,它会自动分析问题并创建 PR 来解决。 注意:使用 GitHub Copilot 编程助手功能需要 Copilot Pro+ 订阅。 主要功能 GitHub Copilot 编程助手能够: 自动分析 GitHub Issues 中描述的问题 理解代码库的结构和上下文 生成完整的代码解决方案 自动创建 Pull Request 并提交修改 使用方法 创建或找到一个 Issue Assign 给 @copilot 等待 Copilot 分析和处理 检查自动创建的 PR 总结 通过 Issue assign 功能,GitHub Copilot 实现了从问题描述到代码实现的自动化流程,提升开发效率。

June 6, 2025 · 1 min · 🦉

Crypto Scam

简介 每年都有很多很多人因为各种骗局而损失惨重,这里主要讨论一些最近比较常见的骗局。 各大种类 Crypto Drainers ( the most common link 表现形式 通常是是模仿官方的网页布局和风格,页面内容就是领取空投之类的。 一种是点击按钮就会连接钱包弹出签名。 link 另一种是连接钱包的时候提示连接失败或者繁忙,然后让自己填助记词或者私钥上去,就很直接… 传播方式,会在哪里看到 推特的评论区,是最常见的,通常会取一个和官方很像的名字头像,链接也是和官方网页很像的。 link link 链上发名字里带链接的币,批量转给各个地址。 link link 因为各大浏览器,钱包,追踪 ERC20 代币都是根据 ERC20 的 Transfer 事件来的。所以钓鱼方只要在合约上不断触发 Transfer 事件就可以伪造出很多转账记录,任意地址转到任意地址都可以。 1function airdrop(address[] calldata _to, uint256 _value) public { 2 for (uint256 i = 0; i < _to.length; i++) { 3 emit Transfer(address(0x0), _to[i], _value); 4 } 5} 比较常见的 from 地址就是各大交易所热钱包,各种 Deployer 之类的。上图就是 uniswap v4 pool manager,都是为了骗取信任。 ...

February 28, 2025 · 18 min · 🦉