citadel/citadel.py (23 lines of code) (raw):

import logging from malduck.extractor import Extractor from malduck.procmem import ProcessMemory from malduck.yara import YaraRuleMatch from ..utils import Config, get_rule_metadata logger = logging.getLogger(__name__) class Citadel(Extractor): family: str = "citadel" yara_rules: tuple = ("citadel",) overrides: list = ["zeus"] @Extractor.extractor("briankrebs") def citadel_found(self, p: ProcessMemory, addr: int) -> dict: logger.info("[+] `Coded by Brian Krebs` str @ %X" % addr) return {"family": self.family} @Extractor.rule def citadel(self, p: ProcessMemory, match: YaraRuleMatch) -> Config | bool: _info: Config = get_rule_metadata(match) return _info @Extractor.extractor def cit_salt(self, p: ProcessMemory, addr: int) -> dict: salt = p.uint32v(addr - 8) logger.info("[+] Found salt @ %X - %x" % (addr, salt)) return {self.family: {"salt": salt}}