def dump_memory(self, file_path=None, ptr=0, length=0): if ptr == 0: ptr, inp = InputDialog.input_pointer(self._app_window) if ptr > 0: if length == 0: accept, length = InputDialog.input( self._app_window, hint='insert length', placeholder='1024') if not accept: return try: if length.startswith('0x'): length = int(length, 16) else: length = int(length) except: return if file_path is None: r = QFileDialog.getSaveFileName(self._app_window, caption='Save binary dump to file') if len(r) == 0 or len(r[0]) == 0: return file_path = r[0] data = self.read_memory(ptr, length) if data is not None: with open(file_path, 'wb') as f: f.write(data)
def hook_native(self, input=None, pending_args=None): if input is None or not isinstance(input, str): ptr, input = InputDialog.input_pointer(self.app) else: ptr = int(self.app.dwarf_api('evaluatePtr', input), 16) if ptr > 0: self.temporary_input = input self.native_pending_args = pending_args self.app.dwarf_api('hookNative', ptr)
def handle_start(self): ph = '' if self.until_address > 0: ph = hex(self.until_address) address, inp = InputDialog.input_pointer( self.app, input_content=ph, hint='pointer to last instruction') if address > 0: self.until_address = address self.emulator.emulate(self.until_address)
def hook_native(self, input_=None, pending_args=None, own_input=None): if input_ is None or not isinstance(input_, str): ptr, input_ = InputDialog.input_pointer(self._app_window) else: ptr = utils.parse_ptr(self._app_window.dwarf.dwarf_api('evaluatePtr', input_)) if ptr > 0: self.temporary_input = input_ if own_input is not None: self.temporary_input = own_input self.native_pending_args = pending_args self.dwarf_api('hookNative', ptr)
def handle_start(self): ph = '' if self.until_address > 0: ph = hex(self.until_address) address, inp = InputDialog.input_pointer(self.app, input_content=ph, hint='pointer to last instruction') if address > 0: self.until_address = address self.app.console_panel.show_console_tab('emulator') self.emulator.emulate(self.until_address, user_arch=self._uc_user_arch, user_mode=self._uc_user_mode, cs_arch=self._cs_user_arch, cs_mode=self._cs_user_mode)
def handle_start(self): ph = '' if self.until_address > 0: ph = hex(self.until_address) address, inp = InputDialog.input_pointer( self.app, input_content=ph, hint='pointer to last instruction') if address > 0: self.until_address = address err = self.emulator.start(self.until_address) if err > 0: self.until_address = 0 self.console.log('cannot start emulator. err: %d' % err) return
def _create_bookmark(self, index=-1, ptr=''): note = '' if ptr == '': if isinstance(index, int) and index >= 0: ptr = self._bookmarks_model.item(index, 0).text() note = self._bookmarks_model.item(index, 1).text() ptr, _ = InputDialog.input_pointer(parent=self._app_window, input_content=ptr) else: if not isinstance(ptr, int): try: if ptr.startswith('0x'): ptr = int(ptr, 16) else: ptr = int(ptr) except ValueError: ptr = 0 if ptr > 0: ptr = hex(ptr) if self._bookmarks_list.uppercase_hex: ptr = ptr.upper().replace('0X', '0x') index = self._bookmarks_model.findItems(ptr, Qt.MatchExactly) if len(index) > 0: index = index[0].row() note = self._bookmarks_model.item(index, 1).text() else: index = -1 accept, note = InputDialog.input(hint='Insert notes for %s' % ptr, input_content=note) if accept: if index < 0: self.insert_bookmark(ptr, note) else: item = self._bookmarks_model.item(index, 0) item.setText(ptr) item = self._bookmarks_model.item(index, 1) item.setText(note) self.bookmarks[ptr] = note
def _create_bookmark(self, index=-1, ptr=''): note = '' if ptr == '': if isinstance(index, int) and index >= 0: ptr = self._bookmarks_model.item(index, 0).text() note = self._bookmarks_model.item(index, 1).text() ptr, input_ = InputDialog.input_pointer(parent=self._app_window, input_content=ptr) else: try: ptr = int(ptr, 16) except: ptr = 0 if ptr > 0: index = self._bookmarks_model.findItems(hex(ptr), Qt.MatchExactly) if len(index) > 0: index = index[0].row() note = self._bookmarks_model.item(index, 1).text() else: index = -1 accept, note = InputDialog.input(hint='Insert notes for %s' % hex(ptr), input_content=note) if accept: if index < 0: self._bookmarks_model.appendRow( [QStandardItem(hex(ptr)), QStandardItem(note)]) else: item = self._bookmarks_model.item(index, 0) item.setText(hex(ptr)) item = self._bookmarks_model.item(index, 1) item.setText(note) self.bookmarks[hex(ptr)] = note
def add_watcher(self, ptr=None): if ptr is None: ptr, input = InputDialog.input_pointer(self._app_window) if ptr == 0: return return self.dwarf_api('addWatcher', ptr)
def trigger_jump_to(self): ptr = InputDialog.input_pointer(self.app) if ptr > 0: self.read_memory(ptr)
def hook_native(self, inp=None, pending_args=None): ptr = InputDialog.input_pointer(self.app) if ptr > 0: self.app.get_dwarf().hook_native(inp, pending_args, ptr)
def _on_cm_jump_to_address(self): ptr, _ = InputDialog.input_pointer(self._app_window) if ptr > 0: self.read_memory(ptr)
def _on_jump_to(self): ptr, input_ = InputDialog.input_pointer(self._app_window) if ptr > 0: self.read_memory(ptr)