使用 Etherscan.io API 在以太坊网络上搜索和提取 blob 文件。

EtherBlob Explorer 是一款面向研究人员、分析师、CTF 玩家或任何充满好奇、希望在以太坊区块链网络上搜索各种文件或有意义的人工提供数据的工具。它能在用户指定的区块 ID 范围或 UNIX 时间戳内,在 5 个可用网络(MainNet、Görli、Kovan、Rinkeby 和 Ropsten)中的任意一个上进行搜索。
关于真实案例,你可以阅读 2017 年进行的这个实验。区块链的不可变性确实是一把双刃剑。
运行以下命令:
$ pip install git+https://github.com/litneet64/etherblob-explorer.git
现在即可从命令行使用,下面是一些常见用法示例!
在以下五个以太坊网络中的任意一个上搜索:
该工具可以在以下位置进行搜索,可以单独使用或在同一次运行中组合使用:
binwalk 收集所有数据后重新检查)。[*] 在以太坊网络上,将数据存储在“to”地址上是可能的,因为向没有关联账户密钥的地址发送交易不会进行验证。这意味着你可以向任意地址发起交易,通过多个 20 字节大小的交易来构建有效载荷(这种情况非常罕见,但某些 CTF 挑战也是如此)。
所有这些方法可以单独使用或任意组合使用:
binwalk 搜索数据中嵌入的文件。file 通过文件头和魔数进行搜索(默认方法)。重要提示:此处显示的顺序在内部用于丢弃其他方法的搜索(例如,如果通过 embedded files 找到了文件,则不会尝试使用 file headers、ascii string dump 或 entropy 进行搜索),因为如果先前的方法已经成功,则不太可能再有其他有意义的发现。
-h)!.api-key),区块 ID 范围(包含两端)为:$ etherblob 4081599 4081600
$ etherblob -K api.key 3134050 3145570 -M -H --network goerli
$ etherblob 4081599 4081600 --blocks --transactions -D extracted/
Jan 25 2021 19:00:00 到 Jan 26 2021 19:00:00 内的 'to' 地址中搜索:$ etherblob -t 1611601200 1611687600 --addresses
$ etherblob 3911697 3912697 -S --contracts -C 4
$ etherblob 4081599 4081600 --encrypted
$ etherblob 3911697 3912697 -E 4.0 5.0 -s
$ etherblob -t 1608836400 1608922800 --blocks --transactions --strings
$ etherblob 4081599 4081600 -U -S -M -H --blocks --transactions --addresses --contracts
关于高级用例及其发现的更多说明,请参见 wiki!
usage: etherblob [-h] [--transactions] [--blocks] [--addresses] [--contracts]
[--network {main,goerli,kovan,rinkeby,ropsten}] [-H] [-M] [-U] [-E CUSTOM_ENTROPY CUSTOM_ENTROPY]
[--encrypted] [-S] [-C CONTRACT_POSITION] [-t] [-K API_KEY_PATH] [-k API_KEY] [-D OUTPUT_DIR]
[-o OUT_LOG] [-s] [-i [IGNORED_FMT [IGNORED_FMT ...]]] [--version]
start_block end_block
在以太坊网络上搜索和提取 blob 文件的工具。
位置参数:
start_block 起始区块 ID 范围。
end_block 结束区块 ID 范围。
可选参数:
-h, --help 显示此帮助信息并退出。
--transactions 在交易输入中搜索 blob 文件。默认搜索模式。
--blocks 在区块输入中搜索 blob 文件。如果启用,则交易输入检查会被禁用,除非明确启用。
--addresses 在交易的 'to' 地址中搜索 blob 文件,因为在以太坊上任何人都可以向任意地址发起交易,即使该地址没有关联的所有者(仍不常见)。如果启用,则交易输入检查会被禁用,除非明确启用。
--contracts 在合约存储中搜索 blob 文件。如果启用,则交易输入检查会被禁用,除非明确启用。
--network {main,goerli,kovan,rinkeby,ropsten}, -N {main,goerli,kovan,rinkeby,ropsten}
选择要搜索的区块链网络。可选网络有 Main、Goerli (Görli)、Kovan、Rinkeby 和 Ropsten。默认网络为 MainNet。不区分大小写。
-H, --file-header 如果启用,则通过数据(来自区块、交易或地址)中的魔数/文件头搜索文件格式。默认启用,除非同时启用其他方法。
-M, --embedded 如果启用,则通过 binwalk 在数据(区块、交易、地址)中搜索嵌入式文件。默认禁用,因为解析时间更长。
-U, --unicode 如果启用,则尝试搜索并转储包含 UTF-8 文本的文件,使用香农熵(3.5 到 5.0)从采集的数据(区块、交易、地址)中提取,前提是该数据中未首先找到其他可识别文件。会产生大量误报。
-E CUSTOM_ENTROPY CUSTOM_ENTROPY, --custom-entropy CUSTOM_ENTROPY CUSTOM_ENTROPY
定义自己的熵范围(最小和最大),用于在采集的数据中搜索文件/数据。
--encrypted 如果启用,则尝试搜索并转储通过不同搜索方法(区块、交易、地址)找到的加密/压缩数据,使用香农熵(7.0 到 8.0),前提是该数据中未首先找到其他可识别文件。
-S, --strings 如果启用,则尝试搜索并转储 ASCII 字符串到文件中,从采集的数据(区块、交易、地址)中提取,前提是该数据中未首先找到其他可识别文件。
-C CONTRACT_POSITION, --contract-position CONTRACT_POSITION
搜索合约数据,直到其存储数组的第 (N-1) 个位置。每个位置包含 32 字节数据。从 0 开始计数,如果没有指定自定义位置,默认位置为第 15 个位置(共 16 个索引)。
-t, --timestamps 如果启用,则起始和结束区块 ID 将被解释为 UNIX 时间戳,然后解析为对应时间最接近的已提交区块。
-K API_KEY_PATH, --api-key-path API_KEY_PATH
包含 Etherscan API 密钥的文件路径,用于查询。默认搜索位置为 '.api-key'。
-k API_KEY, --api-key API_KEY
作为参数的 Etherscan API 密钥。如果提供,则忽略 '--api-key-path'。
-D OUTPUT_DIR, --output-dir OUTPUT_DIR
提取文件的输出目录。默认为 'ext_{起始区块}-{结束区块}'。
-o OUT_LOG, --out-log OUT_LOG
日志的输出文件。默认为 'etherblob_{起始区块}-{结束区块}.log'。
-s, --save-transactions
如果启用,所有交易及其信息将存储在文件 'transactions_{起始区块}-{结束区块}.txt' 中。
-i [IGNORED_FMT [IGNORED_FMT ...]], --ignored-fmt [IGNORED_FMT [IGNORED_FMT ...]]
忽略提取的文件格式。默认忽略的常见文件格式为 'ISO-8859 text' 和 'Non-ISO extended-ASCII text'。'data' 文件格式始终被忽略。接受文件格式子串,不区分大小写匹配。'*' 为通配符,忽略所有文件格式。
--version 显示程序版本号并退出。
官方 GitHub 仓库:'https://github.com/litneet64/etherblob-explorer'