All other dialogs can be started from the Main Window Dialog.
After a new dialog is started, the Main window becomes unaccessible until the dialog is closed. The Main Window becomes unaccessible after a new dialog is started. It becomes accessible again after the dialog is closed.
We use these dialogs to query for the path to existing/non-existing files/directors (Standard open/save dialogs), for short error messages and for short confirmation messages.
This dialog is the most important dialog of our application. It opens all other dialogs and processes signals from numerous types of events. Moreover all extern programs are started within this dialog. (window.Window.initWidgetActions, window.Window.initUndoActions)
Its basic skeleton was created in the Qt designer (see GUI/ui/window.ui and GUI/ui_window.py) and the main logic was added in (GUI/window.py).
It consists of 4 tabs, the Main Menu and the Status Bar.
The first tab is responsible for editing recording XMLs and starting Peach in a recording mode. Note, that the most of its widgets start with a "recording" prefix. (xmlmanipulators.recordingXmlManipulator, window.Window.recordingPeachStart)
The second tab is responsible for editing mutators and the "mutable" part inside the datamodel element in fuzzing XMLs. It can also restore last recorded XML ("project dir"/recording-out). (xmlmanipulators.fuzzingXmlManipulator)
The third tab is responsible for editing fuzzing XMLs and starting Peach in a fuzzing mode. Note that the most of its widgets start with a "fuzzing" prefix. (xmlmanipulators.fuzzingXmlManipulator, window.Window.fuzzingPeachStart)
The fourth tab provides user with a dump viewing functionality. It opens the Action View Dialog (Action view dialog) and starts an external debugger program (probably windbg). (dumpreader.dumpTree)
The Main Menu contains :
standard save/open dialogs, (window.Window.projectOpen, window.Window.projectOpenRecent, window.Window.projectSave, window.Window.projectSaveAs)
import/export recoding/fuzzing XMLs dialogs, (window.Window.projectImportRecording, window.Window.projectExportRecording, window.Window.projectImportFuzzing, window.Window.projectImportFuzzing)
the Preferences Dialog, (preferences.preferencesDialog, settings.HotFuzzSettings)
about dialogs (standard Qt dialogs),
the Project Info Dialog, (project.HotFuzzProject.setProjectInfo, project.HotFuzzProject.getProjectInfo)
undo/redo actions (Undo Actions)
We did not want to bother users with annoying message boxes, so the Status Bar is used to display all important messages.
The Main Window also stores informations about the currently opened project. (project.HotFuzzProject, Project info dialog)
Whenever the Main Window is starting, it loads application settings and modifies its internal variables according to these settings. (settings.HotFuzzSettings.loadSettings) Whenever the Main Window is closing, it prompts whether to store unsaved changes to the project (window.Window.querySaveProject) and then it stores its internal variables to the application settings. (settings.HotFuzzSettings.loadSettings)
These settings are stored in a ini format to a system dependent location using the reimplementation of the standard Qt QSettings class. (settings.HotFuzzSettings)
E.g. ~/.config/HotFuzz/HotFuzz GUI.ini
These settings can be restored to defaults or modified in the Preferences Dialog. (Preferences dialog)
An introductory application dialog. This dialog is not started from the Main Window Dialog, but from an application start wrapper (hotfuzzGUI.pyw). It can not be started from the Main Window. When this dialog exits without opening a valid project (project.HotFuzzProject), it closes main window thus causing application to exit.
Its basic skeleton was created in the Qt Designer (see GUI/ui/intro.ui and GUI/ui_intro.py) and the main logic was added in (GUI/intro.py).
It consist of three tabs.
The recent projects tab reads a list of recent projects provided by the Main Window Class (window.Window) and displays some basic informations about these projects (project.HotFuzzProject.getProjectInfo). The max count of the recent projects can be set in the Preferences Dialog. (Preferences dialog)
The new project tab reads project template XML files (GUI/templates/fuzzing/, GUI/templates/recording/, GUI/templates/project/) and displays them in a fuzzing/recording template list. After hitting the Create Button, Qt dialog is opened. A path to a new project can be chosen there. Then these templates are copied to the new project directory. The project XML is modified according to the editable project informations. (intro.introDialog.loadFuzzingTemplates, intro.introDialog.loadRecordingTemplates, Project Files)
The open project tab browses a path to an existing project. If the project XML file is valid, an info is shown (project.HotFuzzProject.getProjectInfo) and the project can be opened by the Open Button.
This dialog is responsible for updating Main Window variables, which represent current application settings. The application settings themselves is updated when the Main Window exits. However pressing the Restore Defaults Button causes that the application clears its settings, thus restoring the state, which was present during the first start of the application. (Application settings)
Its basic skeleton was created in the Qt Designer (see GUI/ui/preferences.ui and GUI/ui_preferences.py) and the main logic was added in (GUI/preferences.py).
This dialog can be triggered only through the Main Menu or by pressing a corresponding shortcut.
The New Project Dialog is very similar to the new project part of the Intro Dialog. The code is more or less the same. (Intro dialog)
It reads project template XML files (GUI/templates/fuzzing/, GUI/templates/recording/, GUI/templates/project/) and places them into a fuzzing/recording template list. After hitting the Create button, a Qt dialog is opened. A path to a new project can be chosen there. Then these templates are copied to the new project directory. The project XML is modified according to the editable project informations. (intro.introDialog.loadFuzzingTemplates, intro.introDialog.loadRecordingTemplates, Project Files)
Its basic skeleton was created in the Qt Designer (see GUI/ui/projectnew.ui and GUI/ui_projectnew.py) and the main logic was added in (GUI/projectnew.py).
This dialog can be triggered only through the Main Menu or by pressing a corresponding shortcut.
The Recent Project Dialog is very similar to the recent project part of the intro dialog. The code is more or less the same. (Intro dialog)
It reads a list of recent projects provided by the Main Window Class (window.Window) and displays some basic informations about these projects (project.HotFuzzProject.getProjectInfo). The max count of the recent projects can be set in the Preferences Dialog. (Preferences dialog)
Its basic skeleton was created in the Qt designer (see GUI/ui/projectrecent.ui and GUI/ui_projectrecent.py) and the main logic was added in (GUI/projectrecent.py).
This dialog can be triggered only through the Main Menu or by pressing a corresponding shortcut.
This is a very simple dialog, which just modifies the informations about the currently opened project. The project structure itself is the one of a Main Windows variables. (window.Window.project, project.HotFuzzProject.setProjectInfo, project.HotFuzzProject.getProjectInfo)
Its basic skeleton was created in the Qt Designer (see GUI/ui/projectinfo.ui and GUI/ui_projectinfo.py) and the main logic was added in (GUI/projectinfo.py).
This dialog can be triggered only through the Main Menu or by pressing a corresponding shortcut.
The purpose of this dialog is to show users the communication between a server and a client before the program crashed. It can open parts of the communication in an external text editor. (Dump files)
Its basic skeleton was created in the Qt Designer (see GUI/ui/actionview.ui and GUI/ui_actionview.py) and the main logic was added in (GUI/actionview.py).
This dialog can be triggered only through the dump tab of the Main Window.