Mythril 代码分析
初步了解
文件列表
requirements.txt 本项目的依赖
setup.py
中看项目的大致信息。其中,入口点:
entry_points={"console_scripts": ["myth=mythril.interfaces.cli:main"]},
为:myth
文件 而myth
的入口也就是:mythril
模块/包(也就是文件夹)下面的interfaces
包的cli.py
中的main
函数mythril
包是整个源码文件夹interfaces
是接口文件夹analysis
分析文件夹module
处理漏洞分析的模块
disassembler
反汇编模块
doc
是本项目介绍文档的源文件
大致了解
模块化设计
每个模块可以有一个
__init__.py
用于被导入时的初始化工作analysis/module
package 是用来检测漏洞的base.py
提供DetectionModule
基类,modules 中哥哥漏洞检测模块继承自该基类。loadr.py
的 ModuleLoader 类实现了一个单例模式的 loader,加载基类中的EntryPoint
类和DetectionModule
type(module).__name__
知识点:
type
命令时什么类型,对象的话,就返回类名。__name__
属性返回模块文件名。所有的模块都有一个内置属性
__name__
。一个模块的__name__
的值取决于您如何应用模块。如果 import 一个模块,那么模块name 的值通常为模块文件名,不带路径或者文件扩展名
输入输出
输入
- 如果输入文件中有多个合约,默认检测最后一个,可以指定合约名,和 oyenete 的那个功能类似。
- 还可以通过指定合约地址分析链上合同。
- 指定超时时间、最大深度(二者都有默认)
结果输出
有漏洞的编号,危害程度、合约名、介绍、位置等,挺好的,我们可以学习这个方面 输出类型、方式也值得学习:默认终端,提供参数指定其他方式
类型提示 Typing 模块
Python 增强提议(PEP-484)等,向代码中添加类型信息的标准方法。静态分析,仅仅会在你编程时提示,并不会报错(Pycharm 会提示)
主要内容
- 入口点:
mythril.interfaces.cli.main()
参考文件:
Python init.py 作用详解 Python init.py 作用详解 10.1 构建一个模块的层级包
全面理解 Python 中的类型提示(Type Hints) How should I use the Optional type hint? python typing doc
[command line interface (CLI)](https://searchwindowsserver.techtarget.com/definition/command-line-interface-CLI#:~:text=A%20command%20line%20interface%20(CLI, interfaces%20and%20character%20user%20interfaces.)