Esempio n. 1
0
def doInspect(message):

    house_global.device = frida.get_usb_device()

    house_global.onMessageException = ''
    ins_classname = message.get('ins_classname')
    ins_methodname = message.get('ins_methodname')

    if (ins_classname != None) & (ins_methodname != None):
        house_global.inspect_conf['classname'] = ins_classname
        house_global.inspect_conf['methodname'] = ins_methodname

        update_conf()

        house_global.inspect_result = 'Please wait'
        house_global.script_to_load = prepare_script_fragment(
            ins_classname, ins_methodname, "inspect")
        try:
            load_script()
        except Exception as e:
            house_global.inspect_result = "<p><code>[!] Exception: {}</code></p>".format(
                str(e))
            print stylize("Exception caught in doInspect: {}".format(e), Info)
            update_inspect_result = {
                'classname': house_global.inspect_conf["classname"],
                'methodname': house_global.inspect_conf["methodname"],
                'inspect_result': (str(house_global.inspect_result))
            }
            cache_inspect_html()
            socketio.emit('update_inspect_result',
                          update_inspect_result,
                          namespace='/eventBus')
            house_global.onMessageException = ''
Esempio n. 2
0
def genIntercept(message):
    ins_methodindex = message.get('intercept_index')
    if (ins_methodindex != None):
        house_global.inspect_conf['overloadIndex'] = int(ins_methodindex)
    else:
        house_global.inspect_conf['overloadIndex'] = 0
    update_conf()

    with open('./config/intercept_conf.json') as f:
        intercept_conf = f.read()
        try:
            j_intercept = json.loads(intercept_conf)
        except Exception as e:
            raise e

    print stylize("[+]Lets do intercept", Info)
    clazz_name = j_intercept.get("classname")
    methodname = j_intercept.get("methodname")
    overloadIndex = j_intercept.get("overloadIndex")

    if overloadIndex == None:
        overloadIndex = 0
    house_global.intercept_script = prepare_script_fragment(
        clazz_name, methodname, "intercept", overloadIndex)
    socketio.emit('update_intercept_script',
                  {'script': house_global.intercept_script},
                  namespace='/eventBus')
Esempio n. 3
0
def doInspect(message):

    house_global.device = frida.get_usb_device()

    house_global.onMessageException = ''
    ins_classname = message.get('ins_classname')
    ins_methodname = message.get('ins_methodname')

    if (ins_classname != None) & (ins_methodname != None):
        house_global.inspect_conf['classname'] = ins_classname 
        house_global.inspect_conf['methodname'] = ins_methodname

        update_conf()

        house_global.inspect_result = 'Please wait'
        house_global.script_to_load = prepare_script_fragment(ins_classname, ins_methodname, "inspect")
        try:
            load_script()
        except Exception as e:
            house_global.inspect_result = "<p><code>[!] Exception: {}</code></p>".format(str(e))
            print stylize("Exception caught in doInspect: {}".format(e), Info)
            update_inspect_result = {'classname': house_global.inspect_conf["classname"], 'methodname' : house_global.inspect_conf["methodname"], 'inspect_result': (str(house_global.inspect_result))}
            cache_inspect_html()
            socketio.emit('update_inspect_result', update_inspect_result, namespace='/eventBus')
            house_global.onMessageException = ''
Esempio n. 4
0
def onMonitorMessage(message, data):
    house_global.onMessageException = ''

    if message['type'] == 'send':
        if (message.get('payload') != None):
            monitor_log = str(message.get('payload'))
            # monitor_log = u''.join(monitor_log).encode('utf-8').strip()
        else:
            monitor_log = "No message payload.."
    elif message['type'] == 'error':
        if (message.get('description') != None):
            house_global.onMessageException = cgi.escape(
                message.get('description'))
        else:
            house_global.onMessageException = 'No description'
        print(
            stylize(
                "[!]Monitor Error: {}".format(house_global.onMessageException),
                Error))
        socketio.emit(
            'new_error_message',
            {'data': "[!] {}".format(house_global.onMessageException)},
            namespace='/eventBus')
        monitor_log = message.get('payload') if message.get('payload') else ''

    j_monitor_log = json.loads(monitor_log)

    mon_type = j_monitor_log.get("monitor_type")
    args = j_monitor_log.get("arg_dump")
    method = j_monitor_log.get("method_info")
    retval = j_monitor_log.get("retval_dump")
    if args != None:
        args = cgi.escape(args).replace(linebreak, '<br>')
    if method != None:
        method = cgi.escape(method).replace(linebreak, '<br>')
    if retval != None:
        retval = cgi.escape(retval).replace(linebreak, '<br>')
    monitor_entry = {"methodname": method, "args": args, "retval": retval}

    # "types" : ["fileIO", "HTTP", "WEBVIEW", "SQL", "IPC", "MISC", "IGNORE"]
    if (mon_type != None) & (mon_type != "IGNORE"):
        if mon_type == "fileIO":
            house_global.monitor_message['FILEIO'].insert(0, monitor_entry)
        elif mon_type == "SHAREDPREFERENCES":
            house_global.monitor_message['SHAREDPREFERENCES'].insert(
                0, monitor_entry)
        elif mon_type == "HTTP":
            house_global.monitor_message['HTTP'].insert(0, monitor_entry)
        elif mon_type == "WEBVIEW":
            house_global.monitor_message['WEBVIEW'].insert(0, monitor_entry)
        elif mon_type == "SQL":
            house_global.monitor_message['SQL'].insert(0, monitor_entry)
        elif mon_type == "IPC":
            house_global.monitor_message['IPC'].insert(0, monitor_entry)
        else:  # misc
            mon_type = "MISC"
            house_global.monitor_message['MISC'].insert(0, monitor_entry)
    # socketio.emit('update_monitor_message', {'mon_type': mon_type.upper(), 'monitor_message': house_global.monitor_message},namespace='/eventBus')
    house_global.monitor_queue.add(mon_type.upper())
Esempio n. 5
0
def load_intercept_script(message):
    house_global.intercept_script = message.get('script')
    house_global.script_to_load = message.get('script')
    cache_script("intercept_cache", house_global.intercept_script)
    try:
        load_script()
    except Exception as e:
        house_global.intercept_exception = "[!] intercept_exception: {}".format(str(e))
        socketio.emit('new_intercept', {'data': house_global.intercept_exception, 'time': house_global.new_intercept_time}, namespace='/eventBus')
Esempio n. 6
0
def setDevice(id):
    house_global.device = house_global.device_manager.get_device(id)
    print stylize("[+]Changing Device with id {}".format(id), MightBeImportant)
    try:
        socketio.emit('show_selected_device',
                  {'device_list': json.dumps(house_global.device_dict), 'selection': str(house_global.device.id)},
                  namespace='/eventBus')
    except Exception as e:
        raise e
Esempio n. 7
0
def load_intercept_script(message):
    house_global.intercept_script = message.get('script')
    house_global.script_to_load = message.get('script')
    cache_script("intercept_cache", house_global.intercept_script)
    try:
        load_script()
    except Exception as e:
        house_global.intercept_exception = "[!] intercept_exception: {}".format(str(e))
        socketio.emit('new_intercept', {'data': house_global.intercept_exception, 'time': house_global.new_intercept_time}, namespace='/eventBus')
Esempio n. 8
0
def genIntercept(message):
    ins_methodindex = message.get('intercept_index')
    if (ins_methodindex != None):
        house_global.inspect_conf['overloadIndex'] = int(ins_methodindex)
    else:
        house_global.inspect_conf['overloadIndex'] = 0
    update_conf()

    with open('./config/intercept_conf.json') as f:
        intercept_conf = f.read()
        try:
            j_intercept = json.loads(intercept_conf)
        except Exception as e:
            raise e

    print stylize("[+]Lets do intercept",Info)
    clazz_name = j_intercept.get("classname")
    methodname = j_intercept.get("methodname")
    overloadIndex = j_intercept.get("overloadIndex")

    if overloadIndex == None:
        overloadIndex = 0
    house_global.intercept_script = prepare_script_fragment(clazz_name, methodname, "intercept", overloadIndex)
    socketio.emit('update_intercept_script', {'script': house_global.intercept_script}, namespace='/eventBus')
Esempio n. 9
0
def getDevice():
    try:
        print stylize("[+] Trying to get device..", Info)
        house_global.device_dict = {}
        house_global.device_manager = frida.get_device_manager()
        device_list = house_global.device_manager.enumerate_devices()
        if len(device_list) != 0:
            remote_device_list = []
            for dv in device_list:
                if (str(dv.id) != 'local') & (str(dv.id) != 'tcp'):
                    remote_device_list.append(dv)
        if len(remote_device_list) == 1:
            house_global.device = remote_device_list[0]
            socketio.emit('update_device',
                          {'data': cgi.escape(str(house_global.device))},
                          namespace='/eventBus')
        elif len(remote_device_list) > 1:
            for dv in remote_device_list:
                house_global.device_dict[str(dv.id)] = str(dv)
            # Interact with user to select device
            # IPython.embed()
            if house_global.device == None:
                socketio.emit(
                    'select_device',
                    {'device_list': json.dumps(house_global.device_dict)},
                    namespace='/eventBus')
            else:
                socketio.emit(
                    'show_selected_device', {
                        'device_list': json.dumps(house_global.device_dict),
                        'selection': str(house_global.device.id)
                    },
                    namespace='/eventBus')
        else:
            raise Exception("No device Found!")
        # return str(house_global.device)
    except Exception as e:
        house_global.device = None
        socketio.emit('update_device',
                      {'data': cgi.escape(str(house_global.device))},
                      namespace='/eventBus')
        print stylize(str(e), Error)
Esempio n. 10
0
def onMessage(message, data):
    house_global.onMessageException = ''

    if message['type'] == 'send':
        if (message.get('payload') != None):
            info = message.get('payload')
            info = u''.join(info).encode('utf-8').strip()
        else:
            info = "No message payload.."
    elif message['type'] == 'error':
        if (message.get('description') != None):
            house_global.onMessageException = cgi.escape(
                message.get('description'))
        else:
            house_global.onMessageException = 'No description'
        print stylize("[!]Error: {}".format(house_global.onMessageException),
                      Error)
        socketio.emit(
            'new_error_message',
            {'data': "[!] {}".format(house_global.onMessageException)},
            namespace='/eventBus')
        info = message.get('payload') if message.get('payload') else ''

    if "t3llm3mor3ab0ut1t" in info:
        env_info = info.replace("t3llm3mor3ab0ut1t", '')
        j_env_info = json.loads(env_info)

        if j_env_info.get("packageCodePath") != None:
            with open("./config/env_conf.json", 'w') as f:
                json.dump(j_env_info, f)
        socketio.emit('update_env_info', {'data': env_info},
                      namespace='/eventBus')

        # env stuff
    if "-hoo00ook-" in info:
        info = info.replace("-hoo00ook-", '')

        j_info = json.loads(info)
        args = j_info.get("arg_dump")
        method = j_info.get("method_info")
        retval = j_info.get("retval_dump")

        if args != None:
            args = args.replace(linebreak, '<br>')

        info_dict = {"methodname": method, "args": args, "retval": retval}
        house_global.messages.insert(0, info_dict)

        socketio.emit('new_hook_message', {'data': json.dumps(info_dict)},
                      namespace='/eventBus')

    if "-enumMmMmMmMm-" in info:
        enum_msg = info.replace('undefined', '').replace("-enumMmMmMmMm-", '')
        house_global.enum_messages.insert(0, enum_msg)
        socketio.emit("update_enum_messages", namespace='/eventBus')

    if "-t1m3f0rm1tm-" in info:
        intercept_msg = info.replace("-t1m3f0rm1tm-", '')

        if "-what1sth3t1m3n0w-" in intercept_msg:
            house_global.new_intercept_msg = intercept_msg.split(
                "-what1sth3t1m3n0w-")[0]
            house_global.new_intercept_time = intercept_msg.split(
                "-what1sth3t1m3n0w-")[1]
        else:
            house_global.new_intercept_msg = intercept_msg

        socketio.emit('new_intercept', {
            'data': house_global.new_intercept_msg,
            'time': house_global.new_intercept_time
        },
                      namespace='/eventBus')

    if "-whatisth1smeth0d-" in info:
        inspect_info = info.replace("-whatisth1smeth0d-", '')

        j_inspect = json.loads(inspect_info)
        overload_info = j_inspect['methodInfo']

        overload_count = len(overload_info)

        inspect_class_name = house_global.inspect_conf["classname"]
        inspect_method_name = house_global.inspect_conf["methodname"]
        html_output = ""

        if overload_count > 1:
            html_output = "<p><code>{}</code></p>".format(
                cgi.escape(inspect_class_name) + '.' +
                cgi.escape(inspect_method_name))
            html_output += """
            <form action='/inspect' method='POST'>
              <div class="form-row align-items-center">
                <div class="col-auto my-1">
                  <label class="mr-sm-2"> Overloads: </label>
                  <select class="custom-select mr-sm-2" id="indexSelect">
            """
            for i in xrange(overload_count):
                html_output += """
                <option value={}><code>{}</code></option>
                """.format(
                    str(i),
                    cgi.escape(str(json.dumps(overload_info[i]))).replace(
                        "\\\"", ""))

            html_output += """
            </select>
                </div>
              </div>
            </form>
            <div class="col-auto my-1">
                <button class="btn btn-success" onclick="genIntercept()">Generate Script</button>
                <button class="btn btn-primary" class="btn btn-primary" data-toggle="modal" data-target="#intercept_history" onclick="get_intercept_history();">History Scripts</button>
            </div>
            """

        elif overload_count == 1:
            html_output = """
            <p><code>{}</code></p>
            <div class="radio">
              <label><input type="radio" name="optradio"><code>{}</code></label>
            </div>
            <div class="col-auto my-1">
                <button class="btn btn-success" onclick="genIntercept()">Generate Script</button>
                <button class="btn btn-primary" class="btn btn-primary" data-toggle="modal" data-target="#intercept_history" onclick="get_intercept_history();">History Scripts</button>
            </div>
            """.format(
                cgi.escape(inspect_class_name) + '.' +
                cgi.escape(inspect_method_name), str(overload_info[0]))
        else:
            html_output = "No such function you fool"

        house_global.inspect_result = html_output
        cache_inspect_html()
        update_inspect_result = {
            'classname': house_global.inspect_conf["classname"],
            'methodname': house_global.inspect_conf["methodname"],
            'inspect_result': house_global.inspect_result
        }
        socketio.emit('update_inspect_result',
                      update_inspect_result,
                      namespace='/eventBus')

    if "-can1hav3ash3ll-" in info:
        house_global.new_repl_msg = info.replace("-can1hav3ash3ll-", '')
        socketio.emit('new_repl', {
            'data': house_global.new_repl_msg,
            'time': house_global.new_repl_time
        },
                      namespace='/eventBus')
Esempio n. 11
0
def clear_hook_msg():
    house_global.messages = []
    socketio.emit("clear_hook_msg")
Esempio n. 12
0
def onMessage(message,data):
    house_global.onMessageException = ''

    if message['type'] == 'send':
        if(message.get('payload') != None):
            info = message.get('payload')
            info = u''.join(info).encode('utf-8').strip()
        else:
            info = "No message payload.."
    elif message['type'] == 'error':
        if(message.get('description') != None):
            house_global.onMessageException = cgi.escape(message.get('description'))
        else:
            house_global.onMessageException = 'No description'
        print stylize("[!]Error: {}".format(house_global.onMessageException), Error)
        socketio.emit('new_error_message',
                              {'data': "[!] {}".format(house_global.onMessageException)},
                              namespace='/eventBus')
        info = message.get('payload') if message.get('payload') else ''

    if "t3llm3mor3ab0ut1t" in info:
        env_info = info.replace("t3llm3mor3ab0ut1t",'')
        j_env_info = json.loads(env_info)

        if j_env_info.get("packageCodePath") != None:
            with open("./config/env_conf.json",'w') as f:
                json.dump(j_env_info,f)
        socketio.emit('update_env_info',
                              {'data': env_info},
                              namespace='/eventBus')

        # env stuff
    if "-hoo00ook-" in info:
        info = info.replace("-hoo00ook-",'')
        
        j_info = json.loads(info)
        args = j_info.get("arg_dump")
        method = j_info.get("method_info")
        retval = j_info.get("retval_dump")

        if args != None:
            args = args.replace(linebreak,'<br>')

        info_dict = {"methodname":method,"args":args,"retval":retval}
        house_global.messages.insert(0,info_dict)

        socketio.emit('new_hook_message',
                              {'data': json.dumps(info_dict)},
                              namespace='/eventBus')

    if "-enumMmMmMmMm-" in info:
        enum_msg = info.replace('undefined','').replace("-enumMmMmMmMm-",'')
        house_global.enum_messages.insert(0, enum_msg)
        socketio.emit("update_enum_messages",namespace='/eventBus')

    if "-t1m3f0rm1tm-" in info:
        intercept_msg = info.replace("-t1m3f0rm1tm-",'')

        if "-what1sth3t1m3n0w-" in intercept_msg:
            house_global.new_intercept_msg = intercept_msg.split("-what1sth3t1m3n0w-")[0]
            house_global.new_intercept_time = intercept_msg.split("-what1sth3t1m3n0w-")[1]
        else:
            house_global.new_intercept_msg = intercept_msg

        socketio.emit('new_intercept', {'data': house_global.new_intercept_msg, 'time': house_global.new_intercept_time}, namespace='/eventBus')

    if "-whatisth1smeth0d-" in info:
        inspect_info = info.replace("-whatisth1smeth0d-",'')

        j_inspect = json.loads(inspect_info)
        overload_info = j_inspect['methodInfo']

        overload_count = len(overload_info)

        inspect_class_name = house_global.inspect_conf["classname"]
        inspect_method_name = house_global.inspect_conf["methodname"]
        html_output = ""
        
        if overload_count > 1:
            html_output = "<p><code>{}</code></p>".format(cgi.escape(inspect_class_name) + '.' + cgi.escape(inspect_method_name))
            html_output += """
            <form action='/inspect' method='POST'>
              <div class="form-row align-items-center">
                <div class="col-auto my-1">
                  <label class="mr-sm-2"> Overloads: </label>
                  <select class="custom-select mr-sm-2" id="indexSelect">
            """
            for i in xrange(overload_count):
                html_output += """
                <option value={}><code>{}</code></option>
                """.format(str(i),cgi.escape(str(json.dumps(overload_info[i]))).replace("\\\"",""))

            html_output += """
            </select>
                </div>
              </div>
            </form>
            <div class="col-auto my-1">
                <button class="btn btn-success" onclick="genIntercept()">Generate Script</button>
                <button class="btn btn-primary" class="btn btn-primary" data-toggle="modal" data-target="#intercept_history" onclick="get_intercept_history();">History Scripts</button>
            </div>
            """

        elif overload_count == 1:
            html_output = """
            <p><code>{}</code></p>
            <div class="radio">
              <label><input type="radio" name="optradio"><code>{}</code></label>
            </div>
            <div class="col-auto my-1">
                <button class="btn btn-success" onclick="genIntercept()">Generate Script</button>
                <button class="btn btn-primary" class="btn btn-primary" data-toggle="modal" data-target="#intercept_history" onclick="get_intercept_history();">History Scripts</button>
            </div>
            """.format(cgi.escape(inspect_class_name) + '.' + cgi.escape(inspect_method_name), str(overload_info[0]))
        else:
            html_output = "No such function you fool"

        house_global.inspect_result = html_output
        cache_inspect_html()
        update_inspect_result = {'classname': house_global.inspect_conf["classname"], 'methodname' : house_global.inspect_conf["methodname"], 'inspect_result': house_global.inspect_result}
        socketio.emit('update_inspect_result', update_inspect_result, namespace='/eventBus')


    if "-can1hav3ash3ll-" in info:
        house_global.new_repl_msg = info.replace("-can1hav3ash3ll-",'')
        socketio.emit('new_repl',
                      {'data': house_global.new_repl_msg, 'time': house_global.new_repl_time},
                      namespace='/eventBus')        
Esempio n. 13
0
def clear_hook_msg():
    house_global.messages = []
    socketio.emit("clear_hook_msg")