Example #1
0
    def build_left_column(self):
        splitter = QSplitter()
        splitter.setOrientation(Qt.Vertical)

        self.hooks_panel = HooksPanel(self)
        splitter.addWidget(self.hooks_panel)

        self.contexts_panel = ContextsPanel(self, 0, 3)
        splitter.addWidget(self.contexts_panel)

        self.vars_panel = VarsPanel(self)
        splitter.addWidget(self.vars_panel)

        return splitter
Example #2
0
    def build_left_column(self):
        splitter = QSplitter()
        splitter.setHandleWidth(1)
        splitter.setOrientation(Qt.Vertical)
        splitter.setContentsMargins(0, 0, 0, 0)

        from ui.panel_hooks import HooksPanel
        self.hooks_panel = HooksPanel(self.app)
        splitter.addWidget(self.hooks_panel)

        from ui.panel_watchers import WatchersPanel
        self.watchers_panel = WatchersPanel(self.app)
        splitter.addWidget(self.watchers_panel)

        return splitter
Example #3
0
    def build_left_column(self):
        splitter = QSplitter()
        splitter.setHandleWidth(1)
        splitter.setOrientation(Qt.Vertical)
        splitter.setContentsMargins(0, 0, 0, 0)

        self.hooks_panel = HooksPanel(self.app)
        splitter.addWidget(self.hooks_panel)

        self.contexts_panel = ContextsPanel(self.app)
        splitter.addWidget(self.contexts_panel)

        self.backtrace_panel = BacktracePanel(self.app)
        splitter.addWidget(self.backtrace_panel)

        return splitter
Example #4
0
    def _create_ui_elem(self, elem):
        if not isinstance(elem, str):
            return

        if elem not in self._ui_elems:
            self._ui_elems.append(elem)

        if elem == 'watchers':
            from ui.panel_watchers import WatchersPanel
            self.watchers_dwidget = QDockWidget('Watchers', self)
            self.watchers_panel = WatchersPanel(self)
            # dont respond to dblclick mem cant be shown
            # self.watchers_panel.onItemDoubleClicked.connect(
            #    self._on_watcher_clicked)
            self.watchers_panel.onItemRemoved.connect(
                self._on_watcher_removeditem)
            self.watchers_panel.onItemAdded.connect(self._on_watcher_added)
            self.watchers_dwidget.setWidget(self.watchers_panel)
            self.watchers_dwidget.setObjectName('WatchersPanel')
            self.addDockWidget(Qt.LeftDockWidgetArea, self.watchers_dwidget)
            self.view_menu.addAction(self.watchers_dwidget.toggleViewAction())
        elif elem == 'hooks':
            from ui.panel_hooks import HooksPanel
            self.hooks_dwiget = QDockWidget('Breakpoints', self)
            self.hooks_panel = HooksPanel(self)
            self.hooks_panel.onShowMemoryRequest.connect(
                self._on_watcher_clicked)
            self.hooks_panel.onHookRemoved.connect(self._on_hook_removed)
            self.hooks_dwiget.setWidget(self.hooks_panel)
            self.hooks_dwiget.setObjectName('HooksPanel')
            self.addDockWidget(Qt.LeftDockWidgetArea, self.hooks_dwiget)
            self.view_menu.addAction(self.hooks_dwiget.toggleViewAction())
        elif elem == 'bookmarks':
            from ui.panel_bookmarks import BookmarksPanel
            self.bookmarks_dwiget = QDockWidget('Boomarks', self)
            self.bookmarks_panel = BookmarksPanel(self)
            self.bookmarks_panel.onShowMemoryRequest.connect(
                self._on_watcher_clicked)
            self.bookmarks_dwiget.setWidget(self.bookmarks_panel)
            self.bookmarks_dwiget.setObjectName('BookmarksPanel')
            self.addDockWidget(Qt.LeftDockWidgetArea, self.bookmarks_dwiget)
            self.view_menu.addAction(self.bookmarks_dwiget.toggleViewAction())
        elif elem == 'registers':
            from ui.panel_context import ContextPanel
            self.registers_dock = QDockWidget('Context', self)
            self.context_panel = ContextPanel(self)
            self.registers_dock.setWidget(self.context_panel)
            self.registers_dock.setObjectName('ContextsPanel')
            self.addDockWidget(Qt.RightDockWidgetArea, self.registers_dock)
            self.view_menu.addAction(self.registers_dock.toggleViewAction())
        elif elem == 'memory':
            from ui.panel_memory import MemoryPanel
            self.memory_panel = MemoryPanel(self)
            self.memory_panel.onShowDisassembly.connect(
                self._disassemble_range)
            self.memory_panel.dataChanged.connect(self._on_memory_modified)
            self.memory_panel.statusChanged.connect(self.set_status_text)
            self.main_tabs.addTab(self.memory_panel, 'Memory')
        elif elem == 'jvm-debugger':
            from ui.panel_java_explorer import JavaExplorerPanel
            self.java_explorer_panel = JavaExplorerPanel(self)
            self.main_tabs.addTab(self.java_explorer_panel, 'JVM debugger')
            self.main_tabs.tabBar().moveTab(
                self.main_tabs.indexOf(self.java_explorer_panel), 1)
        elif elem == 'jvm-inspector':
            from ui.panel_java_inspector import JavaInspector
            self.java_inspector_panel = JavaInspector(self)
            self.main_tabs.addTab(self.java_inspector_panel, 'JVM inspector')
        elif elem == 'console':
            from ui.panel_console import ConsolePanel
            self.console_dock = QDockWidget('Console', self)
            self.console_panel = ConsolePanel(self)
            self.dwarf.onLogToConsole.connect(self._log_js_output)
            self.console_dock.setWidget(self.console_panel)
            self.console_dock.setObjectName('ConsolePanel')
            self.addDockWidget(Qt.BottomDockWidgetArea, self.console_dock)
            self.view_menu.addAction(self.console_dock.toggleViewAction())
        elif elem == 'backtrace':
            from ui.panel_backtrace import BacktracePanel
            self.backtrace_dock = QDockWidget('Backtrace', self)
            self.backtrace_panel = BacktracePanel(self)
            self.backtrace_dock.setWidget(self.backtrace_panel)
            self.backtrace_dock.setObjectName('BacktracePanel')
            self.backtrace_panel.onShowMemoryRequest.connect(
                self._on_watcher_clicked)
            self.addDockWidget(Qt.RightDockWidgetArea, self.backtrace_dock)
            self.view_menu.addAction(self.backtrace_dock.toggleViewAction())
        elif elem == 'threads':
            from ui.panel_contexts_list import ContextsListPanel
            self.threads_dock = QDockWidget('Threads', self)
            self.contexts_list_panel = ContextsListPanel(self)
            self.dwarf.onThreadResumed.connect(
                self.contexts_list_panel.resume_tid)
            self.contexts_list_panel.onItemDoubleClicked.connect(
                self._manually_apply_context)
            self.threads_dock.setWidget(self.contexts_list_panel)
            self.threads_dock.setObjectName('ThreadPanel')
            self.addDockWidget(Qt.RightDockWidgetArea, self.threads_dock)
            self.view_menu.addAction(self.threads_dock.toggleViewAction())
        elif elem == 'modules':
            from ui.panel_modules import ModulesPanel
            self.modules_panel = ModulesPanel(self)
            self.modules_panel.onModuleSelected.connect(
                self._on_module_dblclicked)
            self.modules_panel.onModuleFuncSelected.connect(
                self._on_modulefunc_dblclicked)
            self.modules_panel.onAddHook.connect(self._on_addmodule_hook)
            self.modules_panel.onDumpBinary.connect(self._on_dumpmodule)
            self.main_tabs.addTab(self.modules_panel, 'Modules')
        elif elem == 'ranges':
            from ui.panel_ranges import RangesPanel
            self.ranges_panel = RangesPanel(self)
            self.ranges_panel.onItemDoubleClicked.connect(
                self._range_dblclicked)
            self.ranges_panel.onDumpBinary.connect(self._on_dumpmodule)
            # connect to watcherpanel func
            self.ranges_panel.onAddWatcher.connect(
                self.watchers_panel.do_addwatcher_dlg)
            self.main_tabs.addTab(self.ranges_panel, 'Ranges')
        elif elem == 'search':
            from ui.panel_search import SearchPanel
            self.search_panel = SearchPanel(self)
            self.search_panel.onShowMemoryRequest.connect(
                self._on_watcher_clicked)
            self.main_tabs.addTab(self.search_panel, 'Search')
        elif elem == 'data':
            from ui.panel_data import DataPanel
            self.data_panel = DataPanel(self)
            self.main_tabs.addTab(self.data_panel, 'Data')
        elif elem == 'trace':
            from ui.panel_trace import TracePanel
            self.trace_panel = TracePanel(self)
            self.main_tabs.addTab(self.trace_panel, 'Trace')
        elif elem == 'disassembly':
            from ui.widgets.disasm_view import DisassemblyView
            self.asm_panel = DisassemblyView(self)
            self.asm_panel.onShowMemoryRequest.connect(self._on_disasm_showmem)
            self.main_tabs.addTab(self.asm_panel, 'Disassembly')
        elif elem == 'emulator':
            from ui.panel_emulator import EmulatorPanel
            self.emulator_panel = EmulatorPanel(self)
            self.main_tabs.addTab(self.emulator_panel, 'Emulator')
        elif elem == 'java-trace':
            from ui.panel_java_trace import JavaTracePanel
            self.java_trace_panel = JavaTracePanel(self)
            self.main_tabs.addTab(self.java_trace_panel, 'JVM tracer')
        elif elem == 'smali':
            from ui.panel_smali import SmaliPanel
            self.smali_panel = SmaliPanel()
            self.main_tabs.addTab(self.smali_panel, 'Smali')
        else:
            print('no handler for elem: ' + elem)

        # make tabs unclosable and sort
        self._handle_tab_change()

        # TODO: remove add @2x
        for item in self.findChildren(QDockWidget):
            if item:
                if 'darwin' in sys.platform:
                    item.setStyleSheet(
                        'QDockWidget::title { padding-left:-30px; } QDockWidget::close-button, QDockWidget::float-button  { width: 10px; height:10px }'
                    )
Example #5
0
 def _create_ui_elem(self, elem):
     if elem == 'watchers':
         from ui.panel_watchers import WatchersPanel
         self.watchers_dwidget = QDockWidget('Watchers', self)
         self.watchers_panel = WatchersPanel(self)
         # dont respond to dblclick mem cant be shown
         # self.watchers_panel.onItemDoubleClicked.connect(
         #    self._on_watcher_clicked)
         self.watchers_panel.onItemRemoved.connect(
             self._on_watcher_removeditem)
         self.watchers_panel.onItemAdded.connect(self._on_watcher_added)
         self.watchers_dwidget.setWidget(self.watchers_panel)
         self.watchers_dwidget.setObjectName('WatchersPanel')
         self.addDockWidget(Qt.LeftDockWidgetArea, self.watchers_dwidget)
         self.view_menu.addAction(self.watchers_dwidget.toggleViewAction())
     elif elem == 'hooks':
         from ui.panel_hooks import HooksPanel
         self.hooks_dwiget = QDockWidget('Hooks', self)
         self.hooks_panel = HooksPanel(self)
         self.hooks_panel.onShowMemoryRequest.connect(
             self._on_watcher_clicked)
         self.hooks_panel.onHookRemoved.connect(self._on_hook_removed)
         self.hooks_dwiget.setWidget(self.hooks_panel)
         self.hooks_dwiget.setObjectName('HooksPanel')
         self.addDockWidget(Qt.LeftDockWidgetArea, self.hooks_dwiget)
         self.view_menu.addAction(self.hooks_dwiget.toggleViewAction())
     elif elem == 'registers':
         from ui.panel_context import ContextPanel
         self.registers_dock = QDockWidget('Context', self)
         self.context_panel = ContextPanel(self)
         self.registers_dock.setWidget(self.context_panel)
         self.registers_dock.setObjectName('ContextsPanel')
         self.addDockWidget(Qt.RightDockWidgetArea, self.registers_dock)
         self.view_menu.addAction(self.registers_dock.toggleViewAction())
     elif elem == 'memory':
         from ui.panel_memory import MemoryPanel
         self.memory_panel = MemoryPanel(self)
         self.memory_panel.onShowDisassembly.connect(
             self._disassemble_range)
         self.memory_panel.dataChanged.connect(self._on_memory_modified)
         self.memory_panel.statusChanged.connect(self.set_status_text)
         self.main_tabs.addTab(self.memory_panel, 'Memory')
     elif elem == 'javaexplorer':
         from ui.panel_java_explorer import JavaExplorerPanel
         self.java_explorer_panel = JavaExplorerPanel(self)
         self.main_tabs.addTab(self.java_explorer_panel, 'JavaExplorer')
     elif elem == 'java-inspector':
         from ui.panel_java_inspector import JavaInspector
         self.java_inspector_panel = JavaInspector(self)
         self.main_tabs.addTab(self.java_inspector_panel, 'Java Inspector')
     elif elem == 'console':
         from ui.panel_console import ConsolePanel
         self.console_dock = QDockWidget('Console', self)
         self.console_panel = ConsolePanel(self)
         self.dwarf.onLogToConsole.connect(self._log_js_output)
         self.console_dock.setWidget(self.console_panel)
         self.console_dock.setObjectName('ConsolePanel')
         self.addDockWidget(Qt.BottomDockWidgetArea, self.console_dock)
         self.view_menu.addAction(self.console_dock.toggleViewAction())
     elif elem == 'backtrace':
         from ui.panel_backtrace import BacktracePanel
         self.backtrace_panel = BacktracePanel(self)
         # splitter.addWidget(self.backtrace_panel)
     elif elem == 'threads':
         from ui.panel_contexts_list import ContextsListPanel
         self.threads_dock = QDockWidget('Threads', self)
         self.contexts_list_panel = ContextsListPanel(self)
         self.dwarf.onThreadResumed.connect(
             self.contexts_list_panel.resume_tid)
         self.contexts_list_panel.onItemDoubleClicked.connect(
             self._apply_context)
         self.threads_dock.setWidget(self.contexts_list_panel)
         self.threads_dock.setObjectName('ThreadPanel')
         self.addDockWidget(Qt.RightDockWidgetArea, self.threads_dock)
         self.view_menu.addAction(self.threads_dock.toggleViewAction())
     elif elem == 'modules':
         from ui.panel_modules import ModulesPanel
         self.modules_panel = ModulesPanel(self)
         self.modules_panel.onModuleSelected.connect(
             self._on_module_dblclicked)
         self.modules_panel.onModuleFuncSelected.connect(
             self._on_modulefunc_dblclicked)
         self.modules_panel.onAddHook.connect(self._on_addmodule_hook)
         self.modules_panel.onDumpBinary.connect(self._on_dumpmodule)
         self.main_tabs.addTab(self.modules_panel, 'Modules')
     elif elem == 'ranges':
         from ui.panel_ranges import RangesPanel
         self.ranges_panel = RangesPanel(self)
         self.ranges_panel.onItemDoubleClicked.connect(
             self._range_dblclicked)
         self.ranges_panel.onDumpBinary.connect(self._on_dumpmodule)
         # connect to watcherpanel func
         self.ranges_panel.onAddWatcher.connect(
             self.watchers_panel.do_addwatcher_dlg)
         self.main_tabs.addTab(self.ranges_panel, 'Ranges')
     elif elem == 'data':
         from ui.panel_data import DataPanel
         self.data_panel = DataPanel(self)
         self.main_tabs.addTab(self.data_panel, 'Data')
     elif elem == 'trace':
         from ui.panel_trace import TracePanel
         self.trace_panel = TracePanel(self)
         self.main_tabs.addTab(self.trace_panel, 'Trace')
     elif elem == 'disassembly':
         from ui.disasm_view import DisassemblyView
         self.asm_panel = DisassemblyView(self)
         self.asm_panel.onShowMemoryRequest.connect(self._on_disasm_showmem)
         self.main_tabs.addTab(self.asm_panel, 'Disassembly')
     elif elem == 'emulator':
         from ui.panel_emulator import EmulatorPanel
         self.emulator_panel = EmulatorPanel(self)
         self.main_tabs.addTab(self.emulator_panel, 'Emulator')
     elif elem == 'java-trace':
         from ui.panel_java_trace import JavaTracePanel
         self.java_trace_panel = JavaTracePanel(self)
         self.main_tabs.addTab(self.java_trace_panel, 'Java-Trace')
     elif elem == 'smali':
         from ui.panel_smali import SmaliPanel
         self.smali_panel = SmaliPanel()
         self.main_tabs.addTab(self.smali_panel, 'Smali')
     else:
         print('no handler for elem: ' + elem)