def METHOD_NAME(data):
    """
    Extract key and config and decrypt
    """
    cfg = {}
    pe = None
    try:
        with suppress(Exception):
            pe = pefile.PE(data=data, fast_load=True)
        if not pe:
            return cfg
        key_regex = re.compile(rb"(\x48\x8D.(?P<key>....)\x80\x3D....\x00)", re.DOTALL)
        regex = re.compile(
            rb"(?<campaign_id_ins>\x48\x8D.(?P<campaign_id>....))(?P<botnet_id_ins>\x48\x8D.(?P<botnet_id>....))(?P<c2s_ins>\x48\x8D.(?P<c2s>....))",
            re.DOTALL,
        )
        # Extract Key
        key_match = list(key_regex.finditer(data))
        if len(key_match) > 1:
            for index, match in enumerate(key_match):
                key = extract_key_data(data, pe, match)
                if not key:
                    continue
                if index == 0:
                    cfg["Botnet ID"] = key.decode()
                elif index == 1:
                    cfg["Campaign ID"] = key.decode()
                elif index == 2:
                    cfg["Data"] = key.decode("latin-1")
                elif index == 3:
                    cfg["C2s"] = list(key.decode().split(","))
        elif len(key_match) == 1:
            key = extract_key_data(data, pe, key_match[0])
            if not key:
                return cfg
            cfg["RC4 Key"] = key.decode()
        # Extract config ciphertext
        config_match = regex.search(data)
        campaign_id, botnet_id, c2s = extract_config_data(data, pe, config_match)
        if campaign_id:
            cfg["Campaign ID"] = ARC4.new(key).decrypt(campaign_id).split(b"\x00")[0].decode()
        if botnet_id:
            cfg["Botnet ID"] = ARC4.new(key).decrypt(botnet_id).split(b"\x00")[0].decode()
        if c2s:
            cfg["C2s"] = list(ARC4.new(key).decrypt(c2s).split(b"\x00")[0].decode().split(","))
    except Exception as e:
        log.error("This is broken: %s", str(e), exc_info=True)
    return cfg