def invoke(self, arg, from_tty): args = UdkCommandHelper.checkParameterEx(arg, 0, 2) if args == None: return if len(args) < 2: subindex = 0 else: try: subindex = int(args[1], 16) except: print(ARGUMENT_INVALID_SUBINDEX) return if len(args) < 1: index = 1 else: try: index = int(args[0], 16) except: print(ARGUMENT_INVALID_INDEX) return response = UdkCommandHelper.sendUdkExtensionPacket("cpuid,%08x,%08x" % (index, subindex)) try: print(CPUID_INPUT % (index, subindex)) (eax, ebx, ecx, edx) = [int(v, 16) for v in response.split(",")] print(CPUID_OUTPUT % (eax, ebx, ecx, edx)) except Exception: print(FAILED_TO_EXECUTE_COMMAND % response)
def WriteRegister(Name, Value): response = UdkCommandHelper.sendPacket( "P%x=%s" % (_RegisterIndex(Name), UdkCommandHelper.list_to_string(Value))) if response == "OK": UdkCommandHelper.executeCommand("flushregs") return response == "OK"
def WriteRegister(Name, Value): response = UdkCommandHelper.sendPacket( "P%x=%s" % (_RegisterIndex(Name), UdkCommandHelper.list_to_string(Value)) ) if response == "OK": UdkCommandHelper.executeCommand("flushregs") return response == "OK"
def _query(self): image_info = [] response = UdkCommandHelper.sendUdkExtensionPacket("fmodules") while response != "l": image_info.append(response.split(";")) response = UdkCommandHelper.sendUdkExtensionPacket("smodules") return image_info
def SearchSignature(Address, Length, Alignment, Positive, Signature): response = UdkCommandHelper.sendUdkExtensionPacket( "search,%x,%x,%x,%x,%s" % (Address, Length, Alignment, Positive, UdkCommandHelper.list_to_string(Signature))) if response == "": return None else: return int(response, 16)
def invoke(self, arg, from_tty): self.dont_repeat() args = UdkCommandHelper.checkParameter(arg, 0) if args == None: return for line in UdkCommandHelper.executeCommand("signal SIGKILL"): print(line)
def WriteIo(Address, Size, Value): response = UdkCommandHelper.sendUdkExtensionPacket( "IO%x,%x:%s" % (Address, Size, UdkCommandHelper.long_to_string(Value, Size))) if response != "OK": return False else: return True
def invoke(self, arg, from_tty): self.dont_repeat() args = UdkCommandHelper.checkParameter(arg, 1) if args != None: if args[0] not in ["on", "off"]: print(ARGUMENT_ON_OFF_EXPECTED) return UdkCommandHelper.sendUdkExtensionPacket("bootscriptentrybreak:%s" % args[0])
def invoke(self, arg, from_tty): args = UdkCommandHelper.checkParameter(arg, 0) if args != None: response = UdkCommandHelper.sendUdkExtensionPacket("exception") if response != "": (vector, error_code) = response.split(";") vector = int(vector, 16) error_code = int(error_code, 16) print(EXCEPTION_INFO % (vector, error_code))
def SearchSignature(Address, Length, Alignment, Positive, Signature): response = UdkCommandHelper.sendUdkExtensionPacket( "search,%x,%x,%x,%x,%s" % ( Address, Length, Alignment, Positive, UdkCommandHelper.list_to_string(Signature) ) ) if response == "": return None else: return int(response, 16)
def invoke(self, arg, from_tty): self.dont_repeat() args = UdkCommandHelper.checkParameter(arg, 0) if args == None: return response = UdkCommandHelper.sendUdkExtensionPacket("arch") valid_architectures = ['i386', 'i386:x86-64'] if response in valid_architectures: UdkCommandHelper.executeCommand( "set architecture {}".format(response))
def ReadMsr(Index): response = UdkCommandHelper.sendUdkExtensionPacket("msr%x" % Index) m = re.match('E([0-9A-Fa-f]+)', response) if m != None: return None else: return int(response, 16)
def WriteMsr(Index, Value): response = UdkCommandHelper.sendUdkExtensionPacket("MSR%x=%x" % (Index, Value)) if response != "OK": return False else: return True
def invoke(self, arg, from_tty): self.dont_repeat() args = UdkCommandHelper.checkParameter(arg, 0) if args == None: return response = UdkCommandHelper.sendUdkExtensionPacket("fmodules") while response != "l": (image_entry, image_base, image_name) = response.split(";") response = UdkCommandHelper.sendUdkExtensionPacket("smodules") pe_sig = UdkCommandHelper.executeCommand("x/hx %s" % image_base)[0].split()[1] if pe_sig in ["0x5a4d", "0x5a56"]: print(LOADING_SYMBOL_FOR_MODULE % (image_base, image_name)) self._imageloader.loadsymbol(int(image_entry, 16), False, False) else: print(SKIPPING_SYMBOL_FOR_MODULE % (image_base, image_name))
def invoke(self, arg, from_tty): args = UdkCommandHelper.checkParameter(arg, 2) if args == None: return try: (port, size) = self.parse_port(args) except: return response = UdkCommandHelper.sendUdkExtensionPacket("Z5,%x,%x" % (port, size)) if response != "OK": print(FAILED_TO_EXECUTE_COMMAND % response) else: self._num_watchpoints += 1 self._watchpoints[self._num_watchpoints] = (port, size) print(IO_WATCH_POINT_INFO % (self._num_watchpoints, port, size))
def invoke(self, arg, from_tty): self.dont_repeat() args = UdkCommandHelper.checkParameter(arg, 1) if args == None: return if args[0] not in ["on", "off"]: print(ARGUMENT_ON_OFF_EXPECTED) return UdkCommandHelper._debugMode = (args[0] == "on")
def delete(self, arg): args = UdkCommandHelper.checkParameterEx(arg, 0, 1) if args == None: return if len(args) == 1: try: args[0] = int(args[0], 10) except: args[0] = 0 if args[0] == 0: print(ARGUMENT_MUST_BE_NUMBER_1_BASED) return for index, (port, size) in list(self._watchpoints.items()): if len(args) == 0 or args[0] == index: response = UdkCommandHelper.sendUdkExtensionPacket( "z5,%x,%x" % (port, size)) if response != "OK": print(FAILED_TO_EXECUTE_COMMAND % response) else: del self._watchpoints[index]
def invoke(self, arg, from_tty): args = UdkCommandHelper.checkParameterEx(arg, 0, 1) if args != None: self.dont_repeat() if len(args) == 0: cur = gdb.selected_frame().pc() else: try: cur = int(args[0], 16) except: print(ARGUMENT_HEX_EXPECTED) return print(LOADING_SYMBOL % cur) self._imageloader.loadsymbol(cur, True)
def invoke(self, arg, from_tty): self.dont_repeat() args = list( map(str.lower, UdkCommandHelper.checkParameterEx(arg, 0, 0xffffffff))) if args == None: return print("ENTRY\tBASE\tNAME") print("====================================") for (image_entry, image_base, image_name) in self._query(): if len(args) == 0 or image_name.lower() in args: print("%s\t%s\t%s" % (image_entry, image_base, image_name)) print("")
def invoke(self, arg, from_tty): args = UdkCommandHelper.checkParameterEx(arg, 1, 2) if args != None: if len(args) == 1: index = int(args[0], 16) value = UdkExtension.ReadMsr(index) if value == None: print(FAILED_TO_EXECUTE_COMMAND % response) else: print("%016x" % value) else: index = int(args[0], 16) value = int(args[1], 16) if not UdkExtension.WriteMsr(index, value): print(FAILED_TO_EXECUTE_COMMAND % response)
def invoke(self, arg, from_tty): args = UdkCommandHelper.checkParameterEx(arg, 2, 3) if args == None: return try: (port, size) = self.parse_port(args) except: return if len(args) == 2: value = UdkExtension.ReadIo(port, size) print("%0*x" % (size * 2, value)) else: value = int(args[2], 16) if not UdkExtension.WriteIo(port, size, value): print(FAILED_TO_EXECUTE_COMMAND % response)
def list(self, arg): args = UdkCommandHelper.checkParameterEx(arg, 0, 1) if args == None: return if len(args) == 1: try: args[0] = int(args[0], 10) except: args[0] = 0 if args[0] == 0: print(ARGUMENT_MUST_BE_NUMBER_1_BASED) return print("Num\tPort\tSize") for index, (port, size) in list(self._watchpoints.items()): if len(args) == 0 or args[0] == index: print("%d\t0x%x\t%d" % (index, port, size))
def loadsymbol(self, cur, force=False, display=True): if force and self._issymbolpresent(cur): self._removesymbol(cur) if not self._issymbolpresent(cur): debug_info = UdkCommandHelper.getTargetDebugInfo(cur) if (debug_info != None): (debug_link, image_addr, section_info) = debug_info if debug_link.endswith(".pdb"): print(UNSUPPORTED_DEBUG_INFORMATION) return False if debug_link == "" or \ ".text" not in section_info or ".data" not in section_info: print(MISSING_DEBUG_INFORMATION) return False # Mach-O uses segment loading cmd = "add-symbol-file %s 0x%x" % (debug_link, section_info['.text']) # for section_name, section_addr in list(section_info.items()): # if section_name not in [".debug", ".gnu_deb", ".reloc", ".text"]: # cmd += " -s %s 0x%x" % (section_name, section_addr) # try: # if display: # gdb.execute(cmd) # else: # UdkCommandHelper.executeCommand(cmd) # except RuntimeError as e: # if str(e).find("No such file or directory") != -1: # print(FAILED_TO_FIND_SYMBOL_FILE) # return False # except Exception: # print(FAILED_TO_LOAD_SYMBOL) # return False self._addsymbol(section_info[".text"], section_info[".data"]) return True else: print(FAILED_TO_FIND_DEBUG_INFORMATION) return False else: return True
def _RegisterIndex(Name): response = UdkCommandHelper.sendUdkExtensionPacket("arch") if response == "use64": regs = [ #0 1 2 3 4 5 6 7 8 9 A B C D E F 'rax', 'rbx', 'rcx', 'rdx', 'rsi', 'rdi', 'rbp', 'rsp', 'r8', 'r9', 'r10', 'r11', 'r12', 'r13', 'r14', 'r15', 'rip', 'eflags','cs', 'ss', 'ds', 'es', 'fs', 'gs', 'st0', 'st1', 'st2', 'st3', 'st4', 'st5', 'st6', 'st7', 'fctrl','fstat', 'ftag', 'fiseg','fioff','foseg','fooff','fop', 'xmm0', 'xmm1', 'xmm2','xmm3','xmm4','xmm5','xmm6','xmm7', 'xmm8', 'xmm9', 'xmm10','xmm11','xmm12','xmm13','xmm14','xmm15','mxcsr','orig_rax']; elif response == "use32": regs = [ 'eax', 'ecx', 'edx', 'ebx', 'esp', 'ebp', 'esi', 'edi', 'eip', 'eflags','cs', 'ss', 'ds', 'es', 'fs', 'gs', 'st0', 'st1', 'st2', 'st3', 'st4', 'st5', 'st6', 'st7', 'fctrl','fstat', 'ftag','fiseg','fioff','foseg','fooff','fop', 'xmm0', 'xmm1', 'xmm2', 'xmm3', 'xmm4', 'xmm5', 'xmm6', 'xmm7', 'mxcsr','orig_eax']; else: return None index = 0 for r in regs: if r == Name: return index index += 1 return None
def invoke(self, arg, from_tty): self.dont_repeat() args = UdkCommandHelper.checkParameterEx(arg, 1, 0xffffffff) if args == None: return Help = False Time = False if args[0] == '/h': Help = True del args[0] elif args[0] == '/t': Time = True del args[0] if '.' in args[0]: (module, function) = args[0].split('.') else: (module, function) = (args[0], "invoke") module = self._import(module) try: function = module.__dict__[function] except: print(FAILED_TO_LOCATE_FUNCTION % (function, module.__name__)) return if Help: print(function.__doc__) return else: Start = datetime.datetime.now() try: function(" ".join(args[1:])) except: traceback.print_exc() if Time: print(EXECUTION_TIME % (str(datetime.datetime.now() - Start)))
def ReadRegister(Name): response = UdkCommandHelper.sendPacket("p%x" % _RegisterIndex(Name)) return UdkCommandHelper.string_to_list(response)
def ReadIo(Address, Size): return UdkCommandHelper.string_to_long( UdkCommandHelper.sendUdkExtensionPacket("io%x,%x" % (Address, Size)))
def GetArch(): response = UdkCommandHelper.sendUdkExtensionPacket("arch") if response == "use32": return 1 else: return 2
def ReadMemory(Address, Width, Count): response = UdkCommandHelper.sendUdkExtensionPacket("mmio%x,%x,%x" % (Address, Width, Count)) return UdkCommandHelper.string_to_list(response, Width)
def WriteMemory(Address, Width, Value): response = UdkCommandHelper.sendUdkExtensionPacket( "MMIO%x,%x,%x:%s" % (Address, Width, len(Value), UdkCommandHelper.list_to_string(Value, Width))) return response == "OK"
def _RegisterIndex(Name): response = UdkCommandHelper.sendUdkExtensionPacket("arch") if response == "use64": regs = [ #0 1 2 3 4 5 6 7 8 9 A B C D E F 'rax', 'rbx', 'rcx', 'rdx', 'rsi', 'rdi', 'rbp', 'rsp', 'r8', 'r9', 'r10', 'r11', 'r12', 'r13', 'r14', 'r15', 'rip', 'eflags', 'cs', 'ss', 'ds', 'es', 'fs', 'gs', 'st0', 'st1', 'st2', 'st3', 'st4', 'st5', 'st6', 'st7', 'fctrl', 'fstat', 'ftag', 'fiseg', 'fioff', 'foseg', 'fooff', 'fop', 'xmm0', 'xmm1', 'xmm2', 'xmm3', 'xmm4', 'xmm5', 'xmm6', 'xmm7', 'xmm8', 'xmm9', 'xmm10', 'xmm11', 'xmm12', 'xmm13', 'xmm14', 'xmm15', 'mxcsr', 'orig_rax' ] elif response == "use32": regs = [ 'eax', 'ecx', 'edx', 'ebx', 'esp', 'ebp', 'esi', 'edi', 'eip', 'eflags', 'cs', 'ss', 'ds', 'es', 'fs', 'gs', 'st0', 'st1', 'st2', 'st3', 'st4', 'st5', 'st6', 'st7', 'fctrl', 'fstat', 'ftag', 'fiseg', 'fioff', 'foseg', 'fooff', 'fop', 'xmm0', 'xmm1', 'xmm2', 'xmm3', 'xmm4', 'xmm5', 'xmm6', 'xmm7', 'mxcsr', 'orig_eax' ] else: return None index = 0 for r in regs: if r == Name: return index index += 1 return None
def WriteIo(Address, Size, Value): response = UdkCommandHelper.sendUdkExtensionPacket("IO%x,%x:%s" % (Address, Size, UdkCommandHelper.long_to_string(Value, Size))) if response != "OK": return False else: return True
def invoke(self, arg, from_tty): self.dont_repeat() args = UdkCommandHelper.checkParameter(arg, 0) if args == None: return Edk2StopHandler2(None)
def ReadMemory(Address, Width, Count): response = UdkCommandHelper.sendUdkExtensionPacket( "mmio%x,%x,%x" % (Address, Width, Count) ) return UdkCommandHelper.string_to_list(response, Width)
def WriteMemory(Address, Width, Value): response = UdkCommandHelper.sendUdkExtensionPacket( "MMIO%x,%x,%x:%s" % (Address, Width, len(Value), UdkCommandHelper.list_to_string(Value, Width)) ) return response == "OK"
def ReadIo(Address, Size): return UdkCommandHelper.string_to_long( UdkCommandHelper.sendUdkExtensionPacket("io%x,%x" % (Address, Size)) );
def Edk2StopHandler2(event): gdb.execute("refresharch") if not UdkCommandHelper.supportExpat(): gdb.execute("loadthis") gdb.execute("info exception")