Viper2 是一个用于二进制文件(病毒)分析与管理的框架,提供了文件存储、会话管理、项目管理、模块加载、文件标签、文件搜索等功能。该系统通过命令行交互的方式,允许用户对二进制文件进行深入分析,并支持通过插件模块扩展功能。
Viper2 的系统架构主要分为以下几个模块:
数据库设计:
使用 peewee
ORM 框架管理 SQLite 数据库,定义了 File
、Tag
、Note
等模型,存储文件的基本信息和元数据。
文件之间的关系通过外键进行管理,支持文件的父子关系。
class File(BaseModel):
name = CharField()
size = IntegerField()
magic = CharField()
mime = CharField()
md5 = CharField()
crc32 = CharField()
sha1 = CharField()
sha256 = CharField()
sha512 = CharField()
ssdeep = CharField()
created_date = DateTimeField(default=datetime.datetime.now)
parent = ForeignKeyField('self', backref='children', null=True)
文件存储:
文件按照 SHA256 哈希值的前四位进行分目录存储,确保文件存储的均匀分布。
file_dir = os.path.join(project_path, 'files', sha256[0], sha256[1], sha256[2], sha256[3])
会话管理:
通过 Session
类管理用户与文件的交互会话,支持多个会话的切换和管理。
class Session:
def __init__(self):
self.identifier: int
self.file: FileObject
self.created_at = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
模块加载:
支持动态加载外部模块,模块可以通过继承 Module
类来实现自定义功能。
def load_modules(modules_path: str) -> None:
if not modules_path:
return
for _, module_name, ispkg in pkgutil.iter_modules([modules_path]):
module = importlib.import_module(module_name)
for member_name, member_object in inspect.getmembers(module):
if issubclass(member_object, Module) and member_object is not Module:
modules[member_object.cmd] = {'class': member_object, 'description': member_object.description}
命令行交互:
使用 prompt_toolkit
实现命令行交互,支持命令自动补全和历史记录。
class Shell:
def __init__(self, modules_path: str = '') -> None:
self.__running: bool = True
self.__commands: dict = {}
self.__modules_path: str = modules_path
self.__modules: dict = {}
Viper2 适用于以下场景:
Viper2 是一个功能强大的二进制文件(病毒)分析与管理框架,具有灵活的模块化设计和丰富的命令行交互功能。通过数据库和文件存储的结合,系统能够高效地管理大量文件,并支持复杂的文件关系管理。其动态模块加载机制使得系统具有高度的可扩展性,适用于多种二进制文件(病毒)分析场景。
github链接地址:https://github.com/viper-framework/viper2.git