
🦆 Malduck은 악성코드 분석 여정에서 여러분의 오리 친구입니다.
Malduck은 악성코드 분석 여정에서 당신의 오리 동반자입니다. 주로 Roach 프로젝트를 기반으로 하며, Maciej Kotowicz가 만든 mlib 라이브러리에서 많은 개념을 가져왔습니다. 포크의 목적은 Roach를 Cuckoo Sandbox 프로젝트로부터 독립시키면서도 내부 procmem 형식을 계속 지원하는 것이었습니다.
Malduck은 CERT.pl 코드베이스에서 비롯된 많은 개선 사항을 제공하여 악성코드 분석을 위해 작성된 스크립트를 훨씬 더 짧고 강력하게 만듭니다.
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
# Headerless compressed buffer
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:
# operations on the DWORD type produce a dword, so a result
# is also a 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")
다음을 실행하여 설치하세요.
pip install malduck
더 많은 문서는 readthedocs에서 찾을 수 있습니다.
