
🦆 Malduck est votre compagnon ducky dans les voyages d'analyse de malware
Malduck est votre compagnon canard dans les voyages d'analyse de malwares. Il est principalement basé sur le projet Roach, qui dérive de nombreux concepts de la bibliothèque mlib créée par Maciej Kotowicz. Le but du fork était de rendre Roach indépendant du projet Cuckoo Sandbox, tout en continuant à supporter son format interne procmem.
Malduck fournit de nombreuses améliorations issues de la base de code de CERT.pl, rendant les scripts écrits à des fins d'analyse de malwares beaucoup plus courts et plus puissants.
from malduck import aes
key = b'A'*16
iv = b'B'*16
plaintext = b'data'*16
ciphertext = aes.cbc.encrypt(key, iv, plaintext)
from malduck import serpent
key = b'a'*16
iv = b'b'*16
plaintext = b'data'*16
ciphertext = serpent.cbc.encrypt(key, plaintext, iv)
from malduck import aplib
# Tampon compressé sans en-tête
aplib(b'T\x00he quick\xecb\x0erown\xcef\xaex\x80jumps\xed\xe4veur`t?lazy\xead\xfeg\xc0\x00')
from malduck import DWORD
def sdbm_hash(name: bytes) -> int:
hh = 0
for c in name:
# les opérations sur le type DWORD produisent un dword, donc le résultat
# est également un DWORD.
hh = DWORD(c) + (hh << 6) + (hh << 16) - hh
return int(hh)
from malduck import Extractor
class Citadel(Extractor):
family = "citadel"
yara_rules = ("citadel",)
overrides = ("zeus",)
@Extractor.string("briankerbs")
def citadel_found(self, p, addr, match):
log.info('[+] `Coded by Brian Krebs` str @ %X' % addr)
return True
@Extractor.string
def cit_login(self, p, addr, match):
log.info('[+] Found login_key xor @ %X' % addr)
hit = p.uint32v(addr + 4)
print(hex(hit))
if p.is_addr(hit):
return {'login_key': p.asciiz(hit)}
hit = p.uint32v(addr + 5)
print(hex(hit))
if p.is_addr(hit):
return {'login_key': p.asciiz(hit)}
from malduck import procmempe
with procmempe.from_file("notepad.exe", image=True) as p:
resource_data = p.pe.resource("NPENCODINGDIALOG")
Installez-le en exécutant
pip install malduck
Plus de documentation est disponible sur readthedocs.
