mystery-o-matic/mystery-o-matic.github.io

GitHub: mystery-o-matic/mystery-o-matic.github.io

一个基于 Solidity 智能合约和 Echidna fuzzing 技术自动生成谋杀谜案内容的 Python 工具,支持多语言静态网站输出。

Stars: 123 | Forks: 11

# mystery-⚙️-matic mystery-o-matic 是一个 Python 程序,用于生成 [mystery-o-matic.com](https://mystery-o-matic.com) 的内容。它利用 [fuzzing testing](https://en.wikipedia.org/wiki/Fuzzing) 生成一个待解决的随机 [murder mystery](https://en.wikipedia.org/wiki/Murder_mystery)(谋杀谜案)。一旦谜案生成,它会产生一个包含所有线索(以及用于验证的解答)的静态 html 文件。 mystery-o-matic 支持以下语言: * [英文](https://mystery-o-matic.com/en) * [西班牙文](https://mystery-o-matic.com/es) * [俄文](https://mystery-o-matic.com/ru) ## 截图 或者访问 [mystery-o-matic.com](https://mystery-o-matic.com) 查看在线版本。 ## 安装 请确保满足所有要求。如果您使用的是 Ubuntu: ``` sudo apt-get install libsecp256k1-0 graphviz graphviz-dev ``` 需要 Solidity 0.8.x,因此我们可以为此安装 `solc-select`: ``` pip install solc-select solc-select install 0.8.17 solc-select use 0.8.17 ``` 最后,从此仓库安装该工具: ``` pip install . ``` mystery-o-matic 需要使用 [echidna](https://github.com/crytic/echidna/) 来获取随机谜题提示及其解答,但使用了[一个尚未合并的特定 PR](https://github.com/crytic/echidna/pull/1075)。为了方便,`bin` 文件夹中提供了一个预编译的二进制文件。否则,可以[使用 `stack` 或 `nix` 从源代码编译](https://github.com/crytic/echidna#building-using-stack)。 ## 用法 mystery-o-matic 将始终生成一个新的待解谜案,但根据输出模式(`--mode`)会产生不同的结果: * `html`:生成 mystery-o-matic.com 的本地副本,其中包含案件描述、一些线索和解答。 * `text`:启动一个交互式的谋杀谜案版本,通过特定命令来解决。如果提供了 API key,也可以启动 Telegram bot。 * `latex`:生成案件的 LaTeX 输出。目前仍非常(不完整)。 默认情况下,它将使用 `html` 输出在默认场景中生成一个新的谜案: ``` mystery-o-matic scenarios/simple.template.sol static out ``` 该工具将生成一个静态的 `index.html` 文件,存储在 `out` 目录中。 ### 使用预计算状态进行快速测试 ✅ 在开发或测试网站时,您可以通过将生成的场景保存到 JSON 文件并在稍后重新加载,来避免缓慢的 fuzzing 步骤: - 保存当前生成的状态: ``` mystery-o-matic scenarios/simple.template.sol static out --save-state test_state.json ``` - 重新加载之前保存的状态(跳过 echidna 求解步骤并快速重新生成网站): ``` mystery-o-matic scenarios/simple.template.sol static out --load-state test_state.json ``` 这对于在没有等待求解器的情况下快速迭代模板和输出生成非常有用。 ## 集成 虽然代码是开源的,但我意识到使用或集成他人的代码存在困难。如果您不知道或不想直接运行此代码,但仍有兴趣在您的虚构作品(例如小说、游戏、电影)中使用此工具的输出,请随时[联系我](https://forms.gle/dvA4Wr8LiuHFmDZN7),我可以为您代劳。生成的谜案将如下所示: ``` Characters: * CHAR1 is bob * CHAR2 is carol * CHAR3 is eddie Final Locations: * ROOM3 is kitchen * ROOM2 is dining room * ROOM0 is bedroom * ROOM1 is bathroom Solution: Initial Locations: * CHAR1 was in the ROOM1 * CHAR2 was in the ROOM2 * CHAR3 was in the ROOM3 Actions: 1. takesWeapon($CHAR3) 2. move($CHAR3, $ROOM0) 3. move($CHAR2, $ROOM1) 4. move($CHAR1, $ROOM0) 5. kills($CHAR3, $CHAR1) 6. move($CHAR3, $ROOM1) ``` ## 场景 谜案生成涉及使用 Solidity smart contract。之所以使用它,是因为区块链交易作为操作的性质,但一切都是模拟的,因此不涉及 cryptocurrency。相反,每笔交易代表谋杀谜案中可能的状态变化(例如 Alice 从厨房走到浴室)。如果状态变化违反了任何规则(例如同一个房间内不能超过两个角色),则交易回滚,fuzzing 工具继续探索。 该工具提供了用于创建随机谋杀谜案的单个场景,其中规则被编码在 `scenarios/simple.template.sol` 文件中,但也可以添加其他场景。要添加新场景: * 创建一个名为 `StoryModel` 的 Solidity smart contract * 编码推进故事每一步的规则。线索是使用诸如 `SawWhenLeaving` 和 `SawWhenArriving` 之类的事件生成的,但也可以添加其他事件。 * 添加一个 Echidna boolean 属性 `mystery_not_solved`(当完成谜案的所有步骤时返回 false)
标签:Echidna, Graphviz, HTML, IPv6支持, Python, Solidity, Telegram Bot, Web3安全, 互动小说, 多模态安全, 多语言支持, 安全测试框架, 开源游戏, 文字游戏, 无后门, 智能合约, 每日一题, 游戏生成器, 自定义脚本, 谋杀之谜, 逆向工具, 逻辑推理, 静态网站生成