def createMainWindow(): # Create window frame = JFrame('Epiphany Core Visualisation', defaultCloseOperation=JFrame.EXIT_ON_CLOSE, size=(660, 675)) # Main layout mainLayout = JPanel() frame.add(mainLayout) # Title #title = JLabel('hello', JLabel.CENTER) #mainLayout.add(title) # Cores corepanel = JPanel(GridLayout(8, 8)) global cores cores = [] for i in range(0, 64): core = JPanel(GridLayout(2, 1)) core.setPreferredSize(Dimension(80, 80)) corename = '(' + str(i % 8) + ',' + str(i / 8) + ')' namelabel = JLabel(corename, JLabel.CENTER) namelabel.setFont(Font("Dialog", Font.PLAIN, 18)) portname = str(i + MINPORT) portlabel = JLabel(portname, JLabel.CENTER) portlabel.setFont(Font("Dialog", Font.PLAIN, 16)) core.add(namelabel) core.add(portlabel) core.setBackground(Color.BLACK) corepanel.add(core) cores.append(core) mainLayout.add(corepanel) frame.visible = True
class TitlePanel(JPanel): def __init__(self, extender): # Initialize self super(TitlePanel, self).__init__() self.extender = extender self.setLayout(GridLayout(2, 1)) # Create children self.title = JLabel('Tracer') self.subtitle = JPanel() self.label = JLabel('Allows you to trace where inputs are reflected back to the user. Click "Start" to analyze the current site map.') # Configure children self.title.setFont(Fonts.Heading) self.title.setForeground(Colors.Orange) self.subtitle.layout.hgap = 0 # Add children self.add(self.title) self.add(self.subtitle) self.subtitle.add(self.label) def refresh(self): pass def registerExtenderCallbacks(self, callbacks): pass
class ActionsPanel(JPanel): def __init__(self, extender): # Initialize self super(ActionsPanel, self).__init__() self.extender = extender self.setLayout(GridLayout(2, 1)) # Create children self.title = JLabel('Actions') self.actions = JPanel(GridLayout(1, 3)) self.start = JButton('Start') self.info = JButton('Info') # Configure children self.title.setFont(Fonts.Heading) self.title.setForeground(Colors.Orange) self.actions.layout.vgap = 0 self.actions.layout.hgap = 0 self.start.addActionListener(StartActionListener(extender)) self.info.addActionListener(InfoActionListener(extender)) # Add children self.add(self.title) self.add(self.actions) self.actions.add(self.start) self.actions.add(self.info) def refresh(self): pass def registerExtenderCallbacks(self, callbacks): pass
def __init__(self, program): self.setLayout(BorderLayout()) title = JLabel(program.title) title.setFont(Font("Arial", Font.BOLD, 28)) title.setHorizontalAlignment(JLabel.CENTER) title.setVerticalAlignment(JLabel.CENTER) title.setBorder(createEmptyBorder(15, 5, 15, 5)) if not program.public: lbl = JLabel("Private") lbl.setFont(Font("Arial", Font.BOLD, 20)) lbl.setForeground(Color(0xFF2424)) lbl.setBorder(createEmptyBorder(15, 15, 15, 15)) leftbox = lbl else: leftbox = Box.createHorizontalGlue() btnbox = TitleBtnBox(program) btnbox.setBorder(createEmptyBorder(5, 5, 5, 5)) self.add(leftbox, BorderLayout.LINE_START) self.add(title, BorderLayout.CENTER) self.add(btnbox, BorderLayout.LINE_END) same_size(leftbox, btnbox) self.setMaximumSize(Dimension(99999, self.getPreferredSize().height))
def draw(self): """ init Save/Restore """ exportLabel = JLabel("Export:") exportLabel.setBounds(10, 10, 100, 30) labelFont = exportLabel.getFont() boldFont = Font(labelFont.getFontName(), Font.BOLD, labelFont.getSize()) exportLabel.setFont(boldFont) exportLType = JLabel("File Type:") exportLType.setBounds(10, 50, 100, 30) exportFileTypes = ["HTML", "CSV"] self.exportType = JComboBox(exportFileTypes) self.exportType.setBounds(100, 50, 200, 30) exportES = ["All Statuses", "As table filter", self._extender.BYPASSSED_STR, self._extender.IS_ENFORCED_STR, self._extender.ENFORCED_STR] self.exportES = JComboBox(exportES) self.exportES.setBounds(100, 90, 200, 30) exportLES = JLabel("Statuses:") exportLES.setBounds(10, 90, 100, 30) self.exportButton = JButton("Export", actionPerformed=self.export) self.exportButton.setBounds(390, 50, 100, 30) saveRestoreLabel = JLabel("Save / Restore:") saveRestoreLabel.setBounds(10, 250, 100, 30) saveRestoreLabel.setFont(boldFont) self.saveStateButton = JButton("Save state", actionPerformed=self.saveStateAction) self.saveStateButton.setBounds(10, 200, 100, 30) self.restoreStateButton = JButton("Restore state", actionPerformed=self.restoreStateAction) self.restoreStateButton.setBounds(390, 200, 100, 30) self._extender.exportPnl = JPanel() exportPnl = self._extender.exportPnl exportPnl.setLayout(None) exportPnl.setBounds(0, 0, 1000, 1000) exportPnl.add(exportLabel) exportPnl.add(exportLType) exportPnl.add(self.exportType) exportPnl.add(exportLES) exportPnl.add(self.exportES) exportPnl.add(self.exportButton) exportPnl.add(saveRestoreLabel) exportPnl.add(self.saveStateButton) exportPnl.add(self.restoreStateButton)
def __init__(self): TrafficMod.__init__(self) self.setLayout(BorderLayout()) settings_panel = JPanel() # settings_panel.setBorder(LineBorder(Color.RED)) layout = GroupLayout(settings_panel) layout.setAutoCreateGaps(True) layout.setAutoCreateContainerGaps(True) settings_panel.setLayout(layout) self.add(settings_panel) # Horizontal group horizontal = layout.createParallelGroup() layout.setHorizontalGroup( layout.createSequentialGroup().addGroup(horizontal)) self.horizontal_layout = horizontal # Vertical group vertical = layout.createSequentialGroup() layout.setVerticalGroup(vertical) self.vertical_layout = vertical # Main title, label only main_title = JLabel(self.title) main_title.setFont(get_title_font(main_title)) horizontal.addGroup( layout.createSequentialGroup().addComponent(main_title)) vertical.addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent(main_title)) # Profile name name_lbl = JLabel("Profile Name") name_lbl.setToolTipText("The name of this profile") horizontal.addGroup( layout.createSequentialGroup().addComponent(name_lbl).addComponent( self.name_textfield)) vertical.addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( name_lbl).addComponent(self.name_textfield)) # Profile description descr_lbl = JLabel("Description") horizontal.addGroup(layout.createSequentialGroup().addComponent( descr_lbl).addComponent(self.descr_textarea)) vertical.addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( descr_lbl).addComponent(self.descr_textarea)) layout.linkSize(SwingConstants.HORIZONTAL, name_lbl, descr_lbl)
def __init__(self): TrafficMod.__init__(self) self.setLayout(FlowLayout(FlowLayout.LEADING)) settings_panel = JPanel() layout = GroupLayout(settings_panel) layout.setAutoCreateGaps(True) layout.setAutoCreateContainerGaps(True) settings_panel.setLayout(layout) self.add(settings_panel) # Horizontal group horizontal = layout.createParallelGroup() layout.setHorizontalGroup( layout.createSequentialGroup().addGroup(horizontal)) # Vertical group vertical = layout.createSequentialGroup() layout.setVerticalGroup(vertical) # Main title, label only main_title = JLabel(self.title) main_title.setFont(Font(main_title.getFont().getName(), Font.BOLD, 14)) horizontal.addGroup( layout.createSequentialGroup().addComponent(main_title)) vertical.addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent(main_title)) # Duplicate percentage percent_lbl = JLabel("Duplicate %") horizontal.addGroup(layout.createSequentialGroup().addComponent( percent_lbl).addComponent(self.duplicate_percent)) vertical.addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( percent_lbl).addComponent(self.duplicate_percent)) # Duplicate percentage correlation corr_lbl = JLabel("Correlation %") horizontal.addGroup( layout.createSequentialGroup().addComponent(corr_lbl).addComponent( self.duplicate_percent_correlation)) vertical.addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( corr_lbl).addComponent(self.duplicate_percent_correlation)) layout.linkSize(SwingConstants.HORIZONTAL, corr_lbl, percent_lbl)
def init_ui(self): self.setTitle("QDisc Edit Profile") self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setLocation(250, 100) self.setSize(1024, 400) # self.setExtendedState(JFrame.MAXIMIZED_BOTH) main_panel = JPanel() main_panel.setLayout(BorderLayout()) self.setContentPane(main_panel) # Build the config dialog first, so it can be attached to the Edit button config_dialog = JPanel() config_dialog.setLayout(BorderLayout()) self.build_panels(config_dialog) def show_config_dialog(event): result = JOptionPane.showConfirmDialog( self, config_dialog, "Edit Profile", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE) if result == 0: print "Will save results" top_panel = JPanel() top_panel.setLayout(FlowLayout(FlowLayout.LEADING)) title_lbl = JLabel("TODO Set title") title_lbl.setFont(ui_components.get_title_font(title_lbl)) top_panel.add(title_lbl) main_panel.add(top_panel, BorderLayout.PAGE_START) self.profile_table = self.initProfilesTable() scrollPane = JScrollPane(self.profile_table) main_panel.add(scrollPane, BorderLayout.CENTER) # self.profile_list.setCellRenderer(ui_components.FilterRenderer()) buttons_panel = JPanel() buttons_panel.setLayout(FlowLayout(FlowLayout.LEADING)) main_panel.add(buttons_panel, BorderLayout.PAGE_END) edit_profile_btn = JButton("Edit", actionPerformed=show_config_dialog) buttons_panel.add(edit_profile_btn) # status_panel = self.build_status_panel(b) # main_panel.add(status_panel, BorderLayout.PAGE_END) self.setVisible(True)
def addDetails(self): jf0 = JFrame() jf0.setTitle("Add Issue"); jf0.setLayout(None); txtEnterIssue = JTextField(); txtEnterIssue.setName("Enter Issue Name"); txtEnterIssue.setToolTipText("Enter Issue Name Here"); txtEnterIssue.setBounds(182, 58, 473, 40); jf0.add(txtEnterIssue); txtEnterIssue.setColumns(10); btnNewButton = JButton("Add"); btnNewButton.setBounds(322, 178, 139, 41); jf0.add(btnNewButton); comboBox = JComboBox(); comboBox.setMaximumRowCount(20); comboBox.setEditable(True); comboBox.setToolTipText("Objective Name"); comboBox.setBounds(182, 125, 473, 40); jf0.add(comboBox); lblNewLabel = JLabel("Issue Name Here"); lblNewLabel.setFont(Font("Tahoma", Font.PLAIN, 16)); lblNewLabel.setBounds(25, 58, 130, 40); jf0.add(lblNewLabel); lblNewLabel_1 = JLabel("Objective Name"); lblNewLabel_1.setFont(Font("Tahoma", Font.PLAIN, 16)); lblNewLabel_1.setBounds(25, 125, 130, 40); jf0.add(lblNewLabel_1); jf0.setVisible(True) jf0.setBounds(400, 300, 700, 300) jf0.EXIT_ON_CLOSE txtEnterIssue.addKeyListener(self)
def createMainWindow(): # Create window frame = JFrame('Epiphany Core Visualisation', defaultCloseOperation = JFrame.EXIT_ON_CLOSE, size = (660,675) ) # Main layout mainLayout = JPanel() frame.add(mainLayout) # Title #title = JLabel('hello', JLabel.CENTER) #mainLayout.add(title) # Cores corepanel = JPanel(GridLayout(8,8)) global cores cores = [] for i in range(0,64): core = JPanel(GridLayout(2,1)) core.setPreferredSize(Dimension(80,80)) corename = '(' + str(i%8) + ',' + str(i/8) + ')' namelabel = JLabel(corename, JLabel.CENTER) namelabel.setFont(Font("Dialog", Font.PLAIN, 18)) portname = str(i+MINPORT) portlabel = JLabel(portname, JLabel.CENTER) portlabel.setFont(Font("Dialog", Font.PLAIN, 16)) core.add(namelabel) core.add(portlabel) core.setBackground(Color.BLACK) corepanel.add(core) cores.append(core) mainLayout.add(corepanel) frame.visible = True
class CustomTab(ITab): URL_NON_ENCODE_IDX = 0 URL_ENCODE_IDX = 1 def remove_element(self, evt): for item in self.cbList.getSelectedIndices()[::-1]: self.listModel.remove(item) def add_element(self, evt): self.listModel.addElement(self.cbText.getText()) self.cbText.setText("") def add_file(self, evt): fc = JFileChooser() ret = fc.showOpenDialog(self.tab) if ret == JFileChooser.APPROVE_OPTION: with open(fc.getSelectedFile().getCanonicalPath()) as fd: for line in fd: self.listModel.addElement(line) def clear_elements(self, evt): self.listModel.removeAllElements() def paste_elements(self, evt): data = getDefaultToolkit().getSystemClipboard().getData( DataFlavor.stringFlavor) for payload in StringIO.StringIO(data): if payload and not payload.isspace(): self.listModel.addElement(payload) def getOOBList(self): return self.listModel.toArray() def getURLEncoding(self): idx = self.cbDropDown.getSelectedIndex() if idx == self.URL_NON_ENCODE_IDX: return URLEncoding.NoEncoding elif idx == self.URL_ENCODE_IDX: return URLEncoding.Encoding else: return URLEncoding.Both def getTabCaption(self): return ("OOB") def getUiComponent(self): return self.tab def __init__(self): self.listModel = DefaultListModel() self.cbTitle = JLabel("Out-of-band Payloads") self.cbTitle.setFont(self.cbTitle.getFont().deriveFont(14.0)) self.cbTitle.setFont(self.cbTitle.getFont().deriveFont(Font.BOLD)) self.cbSubTitle = JLabel( "Add payloads to active scanner that interact " "with out-of-band services (e.g., XSSHunter)") self.cbSubTitle.setFont(self.cbSubTitle.getFont().deriveFont(12.0)) self.cbList = JList(self.listModel) self.cbList.setCellRenderer(ListRenderer()) self.cbList.setVisibleRowCount(10) self.listScrollPane = JScrollPane(self.cbList) self.cbText = JTextField(actionPerformed=self.add_element) self.cbRemoveButton = JButton("Remove", actionPerformed=self.remove_element) self.cbLoadButton = JButton("Load...", actionPerformed=self.add_file) self.cbPasteButton = JButton("Paste", actionPerformed=self.paste_elements) self.cbClearButton = JButton("Clear", actionPerformed=self.clear_elements) self.cbAddButton = JButton("Add", actionPerformed=self.add_element) self.cbDropDownLabel = JLabel("Payload Encoding: ") self.cbDropDown = JComboBox() self.cbDropDown.addItem("Non URL Encoded") self.cbDropDown.addItem("URL Encoded") self.cbDropDown.addItem("Both (two requests per payload)") self.grpOOB = JPanel() grpLayout = GroupLayout(self.grpOOB) self.grpOOB.setLayout(grpLayout) grpLayout.linkSize(SwingConstants.HORIZONTAL, self.cbRemoveButton, self.cbLoadButton, self.cbPasteButton, self.cbClearButton, self.cbAddButton) grpLayout.setAutoCreateGaps(True) grpLayout.setAutoCreateContainerGaps(True) grpLayout.setHorizontalGroup( grpLayout.createSequentialGroup().addGroup( grpLayout.createParallelGroup().addComponent( self.cbTitle).addGroup( grpLayout.createParallelGroup().addComponent( self.cbRemoveButton).addComponent( self.cbLoadButton).addComponent( self.cbPasteButton).addComponent( self.cbClearButton)).addComponent( self.cbAddButton). addComponent(self.cbDropDownLabel)).addGroup( grpLayout.createParallelGroup().addComponent( self.cbSubTitle).addComponent( self.listScrollPane).addComponent( self.cbText).addComponent(self.cbDropDown))) grpLayout.setVerticalGroup(grpLayout.createSequentialGroup().addGroup( grpLayout.createParallelGroup().addComponent(self.cbTitle) ).addGroup(grpLayout.createParallelGroup().addComponent( self.cbSubTitle)).addGroup( grpLayout.createParallelGroup().addGroup( grpLayout.createSequentialGroup().addComponent( self.cbPasteButton).addComponent( self.cbLoadButton).addComponent( self.cbRemoveButton).addComponent( self.cbClearButton)).addComponent( self.listScrollPane) ).addGroup(grpLayout.createParallelGroup().addComponent( self.cbAddButton).addComponent(self.cbText)).addGroup( grpLayout.createParallelGroup().addComponent( self.cbDropDownLabel).addComponent(self.cbDropDown))) # Tab Layout self.tab = JPanel() tabLayout = GroupLayout(self.tab) self.tab.setLayout(tabLayout) tabLayout.setAutoCreateGaps(True) tabLayout.setAutoCreateContainerGaps(True) tabLayout.setHorizontalGroup( tabLayout.createSequentialGroup().addGroup( tabLayout.createParallelGroup().addComponent( self.grpOOB, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE))) tabLayout.setVerticalGroup(tabLayout.createSequentialGroup().addGroup( tabLayout.createParallelGroup().addComponent( self.grpOOB, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)))
class ConfigurationController(IMessageEditorController): def __init__(self, parent): self._parent = parent def getMainComponent(self): self._mainPanel = JPanel() #self._mainPanel.setLayout(BoxLayout(self._mainPanel, BoxLayout.Y_AXIS)) self._mainPanel.setLayout(BorderLayout()) self._titlePanel = JPanel(GridLayout(0, 1)) self._titlePanel.setBorder(EmptyBorder(10, 20, 10, 10)) self._titleText = JLabel("Mode configuration") self._titleText.setForeground(COLOR_BURP_TITLE_ORANGE) self._titleText.setFont(self._titleText.getFont().deriveFont(16.0)) self._titleSubtitleText = JTextArea("Select a mode that works best for the type of exploit you are dealing with.") self._titleSubtitleText.setEditable(False) self._titleSubtitleText.setLineWrap(True) self._titleSubtitleText.setWrapStyleWord(True) self._titleSubtitleText.setHighlighter(None) self._titleSubtitleText.setBorder(None) #Local File Inclusion (LFI): Explore files #Command injection (visual): Shell #Command injection (blind): Shell modes = ['Select mode...', 'Local File Inclusion (LFI) - Discover files', 'OS Command injection (visual) - Shell'] self._cboModes = JComboBox(modes) self._cboModes.addActionListener(self.cboModesChanged()) self._titlePanel.add(self._titleText) self._titlePanel.add(self._titleSubtitleText) self._titlePanel.add(self._cboModes) self._mainPanel.add(self._titlePanel, BorderLayout.NORTH) self._switchPanel = JPanel() self._switchPanel.setLayout(BoxLayout(self._switchPanel, BoxLayout.Y_AXIS)) self._switchPanel.setBorder(EmptyBorder(5, 30, 10, 10)) self._outputCompleteResponseSwitch = JCheckBox("Use full response (not only the response body)") self._outputCompleteResponseSwitch.setSelected(True) self._outputCompleteResponseSwitch.addItemListener(self.OutputCompleteResponseSwitchListener()) self._switchPanel.add(self._outputCompleteResponseSwitch) self._urlEncodeSwitch = JCheckBox("Use url encode") self._urlEncodeSwitch.setSelected(True) self._urlEncodeSwitch.addItemListener(self.UrlEncodeSwitchListener()) self._switchPanel.add(self._urlEncodeSwitch) self._outputIsolatorSwitch = JCheckBox("Use output isolator") self._outputIsolatorSwitch.setSelected(False) self._outputIsolatorSwitch.addItemListener(self.OutputIsolatorSwitchListener()) self._switchPanel.add(self._outputIsolatorSwitch) self._removeSpacesSwitch = JCheckBox("Remove leading and trailing spaces") self._removeSpacesSwitch.setSelected(False) self._removeSpacesSwitch.addItemListener(self.SpacesSwitch()) self._switchPanel.add(self._removeSpacesSwitch) self._removeHtmlTagsSwitch = JCheckBox("Remove html-tags (regex '<.*?>')") self._removeHtmlTagsSwitch.setSelected(False) self._removeHtmlTagsSwitch.addItemListener(self.HtmlTagsSwitch()) self._switchPanel.add(self._removeHtmlTagsSwitch) self._tabCompletionSwitch = JCheckBox("Use tab-completion") self._tabCompletionSwitch.setSelected(False) self._tabCompletionSwitch.addItemListener(self.TabCompletionSwitchListener()) self._switchPanel.add(self._tabCompletionSwitch) self._virtualPersistenceSwitch = JCheckBox("Use virtual persistence") self._virtualPersistenceSwitch.setSelected(False) self._virtualPersistenceSwitch.addItemListener(self.VirtualPersistenceSwitchListener()) self._switchPanel.add(self._virtualPersistenceSwitch) self._wafSwitch = JCheckBox("WAF: Prepend each non-whitespace character (regex '\\w') with '\\'") self._wafSwitch.setSelected(False) self._wafSwitch.addItemListener(self.WafSwitch()) self._switchPanel.add(self._wafSwitch) self._mainPanel.add(self._switchPanel, BorderLayout.CENTER) return self._mainPanel class cboModesChanged(ActionListener): def actionPerformed(self, e): cboModes = e.getSource() mode = cboModes.getSelectedItem() if mode == 'Local File Inclusion (LFI) - Discover files': #Disable output isolator Utils.shellController._outputIsolator = None Utils.outputIsolator = None Utils._outputIsolator = None Utils.configurationController._outputIsolatorSwitch.setSelected(False) Utils.configurationController._outputIsolatorSwitch.setEnabled(False) #Disable remove leading and trailing spaces Utils.shellController._removeSpaces = False Utils.configurationController._removeSpacesSwitch.setSelected(False) Utils.configurationController._removeSpacesSwitch.setEnabled(False) #Disable remove html tags Utils.shellController._removeHtmlTags = False Utils.configurationController._removeHtmlTagsSwitch.setSelected(False) Utils.configurationController._removeHtmlTagsSwitch.setEnabled(False) #Disable tab-completion Utils.shellController._tabCompletion = False Utils.configurationController._tabCompletionSwitch.setSelected(False) Utils.configurationController._tabCompletionSwitch.setEnabled(False) #Disable virtual peristence Utils.shellController._virtualPersistence = False Utils.configurationController._virtualPersistenceSwitch.setSelected(False) Utils.configurationController._virtualPersistenceSwitch.setEnabled(False) #Disable WAF Utils.shellController._waf = False Utils.configurationController._wafSwitch.setSelected(False) Utils.configurationController._wafSwitch.setEnabled(False) if mode == 'OS Command injection (visual) - Shell' or mode == 'Select mode...': Utils.configurationController._outputIsolatorSwitch.setEnabled(True) Utils.configurationController._removeSpacesSwitch.setEnabled(True) Utils.configurationController._removeHtmlTagsSwitch.setEnabled(True) Utils.configurationController._tabCompletionSwitch.setEnabled(True) Utils.configurationController._virtualPersistenceSwitch.setEnabled(True) Utils.configurationController._wafSwitch.setEnabled(True) class OutputIsolatorSwitchListener(ItemListener): def itemStateChanged(self, e): if e.getStateChange() == ItemEvent.SELECTED: Utils.out("selected") isolator = ["3535start3535", "3535end3535"] Utils.shellController._outputIsolator = isolator Utils.outputIsolator = isolator Utils._outputIsolator = isolator elif e.getStateChange() == ItemEvent.DESELECTED: #TODO If deselected, Virtual persistence should be disabled: unless the body only returns # the command and nothing else, it's near impossible to warrant virtual persistence. # One possibility I have, is to also allow to define positions in the response tab and filter # out the command response like that (without using the outputisolators) Utils.out("deselected") Utils.shellController._outputIsolator = None Utils.outputIsolator = None Utils._outputIsolator = None class SpacesSwitch(ItemListener): def itemStateChanged(self, e): if e.getStateChange() == ItemEvent.SELECTED: Utils.shellController._removeSpaces = True elif e.getStateChange() == ItemEvent.DESELECTED: Utils.shellController._removeSpaces = False class HtmlTagsSwitch(ItemListener): def itemStateChanged(self, e): if e.getStateChange() == ItemEvent.SELECTED: Utils.shellController._removeHtmlTags = True elif e.getStateChange() == ItemEvent.DESELECTED: Utils.shellController._removeHtmlTags = False class TabCompletionSwitchListener(ItemListener): def itemStateChanged(self, e): if e.getStateChange() == ItemEvent.SELECTED: Utils.shellController._tabCompletion = True elif e.getStateChange() == ItemEvent.DESELECTED: Utils.shellController._tabCompletion = False class VirtualPersistenceSwitchListener(ItemListener): def itemStateChanged(self, e): if e.getStateChange() == ItemEvent.SELECTED: Utils.shellController._virtualPersistence = True elif e.getStateChange() == ItemEvent.DESELECTED: Utils.consoleController.setPwd(None) Utils.shellController._virtualPersistence = False class UrlEncodeSwitchListener(ItemListener): def itemStateChanged(self, e): if e.getStateChange() == ItemEvent.SELECTED: Utils.shellController._urlEncode = True elif e.getStateChange() == ItemEvent.DESELECTED: Utils.shellController._urlEncode = False class OutputCompleteResponseSwitchListener(ItemListener): def itemStateChanged(self, e): if e.getStateChange() == ItemEvent.SELECTED: Utils.shellController._outputCompleteResponse = True elif e.getStateChange() == ItemEvent.DESELECTED: Utils.shellController._outputCompleteResponse = False class WafSwitch(ItemListener): def itemStateChanged(self, e): if e.getStateChange() == ItemEvent.SELECTED: Utils.shellController._waf = True elif e.getStateChange() == ItemEvent.DESELECTED: Utils.shellController._waf = False
class BurpExtender(IBurpExtender, IExtensionStateListener, IHttpListener, ITab, FocusListener, ActionListener, MouseAdapter): _version = "0.2" _name = "PyRules" _varsStorage = _name + "_vars" _scriptStorage = _name + "_script" _enabled = 0 _vars = {} def registerExtenderCallbacks(self, callbacks): print "Load:" + self._name + " " + self._version self.callbacks = callbacks self.helpers = callbacks.helpers #Create Tab layout self.jVarsPane = JTextPane() self.jVarsPane.setFont(Font('Monospaced', Font.PLAIN, 11)) self.jVarsPane.addFocusListener(self) self.jMenuPanel = JPanel() self.jLeftUpPanel = JPanel() self.jEnable = JCheckBox() self.jEnable.setFont(Font('Monospaced', Font.BOLD, 11)) self.jEnable.setForeground(Color(0, 0, 204)) self.jEnable.setText(self._name) self.jEnable.addActionListener(self) self.jDocs = JLabel() self.jDocs.setFont(Font('Monospaced', Font.PLAIN, 11)) self.jDocs.setForeground(Color(51, 102, 255)) self.jDocs.setText(Strings.docs_titel) self.jDocs.setToolTipText(Strings.docs_tooltip) self.jDocs.addMouseListener(self) self.jConsoleText = JTextArea() self.jConsoleText.setFont(Font('Monospaced', Font.PLAIN, 10)) self.jConsoleText.setBackground(Color(244, 246, 247)) self.jConsoleText.setEditable(0) self.jConsoleText.setWrapStyleWord(1) self.jConsoleText.setRows(10) self.jScrollConsolePane = JScrollPane() self.jScrollConsolePane.setViewportView(self.jConsoleText) #set initial text self.jConsoleText.setText(Strings.console_disable) self.jMenuPanelLayout = GroupLayout(self.jMenuPanel) self.jMenuPanel.setLayout(self.jMenuPanelLayout) self.jMenuPanelLayout.setHorizontalGroup( self.jMenuPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addGroup( self.jMenuPanelLayout.createSequentialGroup().addComponent( self.jEnable).addPreferredGap( LayoutStyle.ComponentPlacement.RELATED, 205, 32767).addComponent(self.jDocs))) self.jMenuPanelLayout.setVerticalGroup( self.jMenuPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addGroup( self.jMenuPanelLayout.createSequentialGroup().addGroup( self.jMenuPanelLayout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.jEnable).addComponent(self.jDocs)).addGap( 0, 7, 32767))) self.jConsolePane = JPanel() self.jConsoleLayout = GroupLayout(self.jConsolePane) self.jConsolePane.setLayout(self.jConsoleLayout) self.jConsoleLayout.setHorizontalGroup( self.jConsoleLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( self.jScrollConsolePane)) self.jConsoleLayout.setVerticalGroup( self.jConsoleLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addGroup( GroupLayout.Alignment.TRAILING, self.jConsoleLayout.createSequentialGroup().addComponent( self.jScrollConsolePane, GroupLayout.DEFAULT_SIZE, 154, 32767).addContainerGap())) self.jLeftUpPanelLayout = GroupLayout(self.jLeftUpPanel) self.jLeftUpPanel.setLayout(self.jLeftUpPanelLayout) self.jLeftUpPanelLayout.setHorizontalGroup( self.jLeftUpPanelLayout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( self.jConsolePane, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, 32767).addComponent(self.jMenuPanel, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) self.jLeftUpPanelLayout.setVerticalGroup( self.jLeftUpPanelLayout. createParallelGroup(GroupLayout.Alignment.LEADING).addGroup( GroupLayout.Alignment.TRAILING, self.jLeftUpPanelLayout.createSequentialGroup().addComponent( self.jMenuPanel, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE).addPreferredGap( LayoutStyle.ComponentPlacement.RELATED).addComponent( self.jConsolePane, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, 32767))) self.jScrollpaneLeftDown = JScrollPane() self.jScrollpaneLeftDown.setViewportView(self.jVarsPane) self.jSplitPaneLeft = JSplitPane(JSplitPane.VERTICAL_SPLIT, self.jLeftUpPanel, self.jScrollpaneLeftDown) self.jSplitPaneLeft.setDividerLocation(300) self.jScriptPane = JTextPane() self.jScriptPane.setFont(Font('Monospaced', Font.PLAIN, 11)) self.jScriptPane.addMouseListener(self) self.JScrollPaneRight = JScrollPane() self.JScrollPaneRight.setViewportView(self.jScriptPane) self.jSplitPane = JSplitPane(JSplitPane.HORIZONTAL_SPLIT, self.jSplitPaneLeft, self.JScrollPaneRight) self.jSplitPane.setDividerLocation(400) #Load saved saved settings ##Load vars vars = callbacks.loadExtensionSetting(self._varsStorage) if vars: vars = base64.b64decode(vars) else: # try to load the example try: with open("examples/Simple-CSRF-vars.py") as fvars: vars = fvars.read() # load the default text except: vars = Strings.vars ## initiate the persistant variables locals_ = {} try: exec(vars, {}, locals_) except Exception as e: print e self._vars = locals_ ## update the vars screen self.jVarsPane.document.insertString(self.jVarsPane.document.length, vars, SimpleAttributeSet()) ##Load script script = callbacks.loadExtensionSetting(self._scriptStorage) if script: script = base64.b64decode(script) else: # try to load the example try: with open("examples/Simple-CSRF-script.py") as fscript: script = fscript.read() # load the default text except: script = Strings.script ## compile the rules self._script = script self._code = '' try: self._code = compile(script, '<string>', 'exec') except Exception as e: print( '{}\nReload extension after you correct the error.'.format(e)) ## update the rules screen self.jScriptPane.document.insertString( self.jScriptPane.document.length, script, SimpleAttributeSet()) #Register Extension callbacks.customizeUiComponent(self.getUiComponent()) callbacks.addSuiteTab(self) callbacks.registerExtensionStateListener(self) callbacks.registerHttpListener(self) self.jScriptPane.requestFocus() def getUiComponent(self): return self.jSplitPane def getTabCaption(self): return self._name def actionPerformed(self, event): #Check box was clicked if self.jEnable == event.getSource(): if self._enabled == 1: self._enabled = 0 # console content shows help self.jConsoleText.setText(Strings.console_disable) else: self._enabled = 1 # console content displays the current persistent variable state self.jConsoleText.setText(Strings.console_state) self.jConsoleText.append(pformat(self._vars)) self.jConsoleText.append(Strings.extra_line) self.jConsoleText.append(Strings.console_log) return def mouseClicked(self, event): if event.source == self.jDocs: uri = URI.create("https://github.com/DanNegrea/PyRules") if uri and Desktop.isDesktopSupported() and Desktop.getDesktop( ).isSupported(Desktop.Action.BROWSE): Desktop.getDesktop().browse(uri) return def focusGained(self, event): if self.jConsolePane == event.getSource(): pass #print "Status pane gained focus" #debug return def focusLost(self, event): #Reinitialize the persistent values if self.jVarsPane == event.getSource(): # get the text from the pane end = self.jVarsPane.document.length vars = self.jVarsPane.document.getText(0, end) # compute the new values locals_ = {} exec(vars, {}, locals_) self._vars = locals_ # display the new result in console self.jConsoleText.append(Strings.console_state) self.jConsoleText.append(pformat(self._vars)) self.jConsoleText.append(Strings.extra_line) self.jConsoleText.append(Strings.console_log) # scroll to bottom verticalScrollBar = self.jScrollConsolePane.getVerticalScrollBar() verticalScrollBar.setValue(verticalScrollBar.getMaximum()) return def extensionUnloaded(self): try: #Save the latestest vars and script text ## save vars end = self.jVarsPane.document.length vars = self.jVarsPane.document.getText(0, end) vars = base64.b64encode(vars) self.callbacks.saveExtensionSetting(self._varsStorage, vars) ## save script/rules end = self.jScriptPane.document.length script = self.jScriptPane.document.getText(0, end) script = base64.b64encode(script) self.callbacks.saveExtensionSetting(self._scriptStorage, script) except Exception: traceback.print_exc(file=self.callbacks.getStderr()) print "Unloaded" #debug return def processHttpMessage(self, toolFlag, messageIsRequest, messageInfo): if self._enabled == 0: return try: locals_ = { 'extender': self, 'callbacks': self.callbacks, 'helpers': self.helpers, 'toolFlag': toolFlag, 'messageIsRequest': messageIsRequest, 'messageInfo': messageInfo, 'log': self.log } # add the _vars as gloval variables locals_ = dict(locals_, **self._vars) # execute the script/rules try: exec(self.getCode, {}, locals_) # catch exit() call inside the rule except SystemExit: pass # update the persistant variables by searching the local variables with the same name for key in self._vars: # assumption self._vars dictionary is smaller than locals_ if key in locals_: self._vars[key] = locals_[key] except Exception: traceback.print_exc(file=self.callbacks.getStderr()) return #Returns the compiled script @property def getCode(self): end = self.jScriptPane.document.length script = self.jScriptPane.document.getText(0, end) # if the script hasn't changed return the already compile text if script == self._script: return self._code self._script = script # compile, store and return the result self._code = compile(script, '<string>', 'exec') return self._code #Log the information into the console screen def log(self, obj): # if string just append. else use pformat from pprint if isinstance(obj, str): self.jConsoleText.append(obj + "\n") else: self.jConsoleText.append(pformat(obj) + "\n") # scroll to bottom verticalScrollBar = self.jScrollConsolePane.getVerticalScrollBar() verticalScrollBar.setValue(verticalScrollBar.getMaximum()) return
class ProjectIngestSettingsPanel(IngestModuleIngestJobSettingsPanel): def __init__(self, settings): self.local_settings = settings self.initComponents() self.customizeComponents() def initComponents(self): self.apps_checkboxes_list = [] self.setLayout(BoxLayout(self, BoxLayout.PAGE_AXIS)) self.setPreferredSize(Dimension(300, 0)) # title self.p_title = SettingsUtils.createPanel() self.lb_title = JLabel("Forensic Analysis for Mobile Apps") self.lb_title.setFont(self.lb_title.getFont().deriveFont( Font.BOLD, 15)) self.p_title.add(self.lb_title) self.add(self.p_title) # end of title # info menu self.p_info = SettingsUtils.createPanel() self.p_info.setPreferredSize(Dimension(300, 20)) self.lb_info = SettingsUtils.createInfoLabel("") self.lb_info2 = SettingsUtils.createInfoLabel("") self.sp2 = SettingsUtils.createSeparators(1) self.p_method = SettingsUtils.createPanel() self.bg_method = ButtonGroup() autopsy_version = PsyUtils.get_autopsy_version() if ((autopsy_version["major"] == 4 and autopsy_version["minor"] <= 17) or autopsy_version["major"] < 4): self.p_info.add(self.lb_info) self.p_info.add(self.lb_info2, BorderLayout.SOUTH) self.rb_selectedDatasource = SettingsUtils.createRadioButton( "Analyze selected datasource", "method_datasource", self.onMethodChange) self.bg_method.add(self.rb_selectedDatasource) # self.rb_importReportFile = SettingsUtils.createRadioButton("Import previous generated report file","method_importfile" ,self.onMethodChange) self.rb_liveExtraction = SettingsUtils.createRadioButton( "Live extraction with ADB", "method_adb", self.onMethodChange) self.rb_selectedDatasource.setSelected(True) #self.bg_method.add(self.rb_importReportFile) self.bg_method.add(self.rb_liveExtraction) self.p_method.add(JLabel("Analysis method")) self.p_method.add(self.rb_selectedDatasource) self.p_method.add(self.rb_liveExtraction) else: self.p_info.add( SettingsUtils.createInfoLabel( "It will analyze the data source with previously selected method and index the forensic artifacts." )) self.add(self.p_method) self.p_apps = SettingsUtils.createPanel(True) sorted_items = OrderedDict(sorted(Utils.get_all_packages().items())) for app, app_id in sorted_items.iteritems(): #(app, app_id) checkbox = SettingsUtils.addApplicationCheckbox( app, app_id, self.getSelectedApps) self.add(checkbox) self.apps_checkboxes_list.append(checkbox) self.p_apps.add(checkbox) self.add(self.p_apps) self.add(self.p_info) # end of checkboxes menu def customizeComponents(self): self.onMethodChange("") #initialize method option self.getSelectedApps("") #initialize selected apps def onMethodChange(self, event): self.method = self.getMethod() self.local_settings.setSetting("method", self.method) if self.method == "method_adb": self.lb_info.setText( "This method is used when there is no data source but you have the device." ) self.lb_info2.setText( "It will extract the content of the selected applications from the device, analyze and index the forensic artifacts." ) self.toggleCheckboxes(True) else: self.lb_info.setText( "This method is used when the application data has already been collected." ) self.lb_info2.setText( "It will analyze the data source previously added to the data source and index the forensic artifacts." ) self.toggleCheckboxes(False) def getSettings(self): return self.local_settings def getMethod(self): selection = self.bg_method.getSelection() if not selection: return None return selection.getActionCommand() def getSelectedApps(self, event): selected_apps = [] for cb_app in self.apps_checkboxes_list: if cb_app.isSelected(): selected_apps.append(cb_app.getActionCommand()) self.local_settings.setSetting("apps", json.dumps(selected_apps)) def toggleCheckboxes(self, visible): for cb_app in self.apps_checkboxes_list: cb_app.setVisible(visible)
class SourceCellRenderer(TreeCellRenderer): def __init__(self,tree,mapContext): self.tree = tree self.mapContext = mapContext ## Group self.lblFolder = JLabel() self.lblFolder.setBackground(Color(222,227,233)) #.BLUE.brighter()) self.lblFolder.setOpaque(True) self.lblFolder.setText("plddddddddddddddddddddddddddddddddddddddddddddddddddddddd") ### Folder self.pnlFolder = JPanel() self.pnlFolder.setOpaque(False) self.pnlFolder.setLayout(FlowLayout(FlowLayout.LEFT)) self.lblGroup = JLabel() #self.lblGroup.setBackground(Color(222,227,233)) #.BLUE.brighter()) #self.lblGroup.setOpaque(True) self.lblGroup.setText("plddddddddddddddddddddddddddddddddddddddddddddddddddddddd") self.lblGroupPreferredSize = self.lblGroup.getPreferredSize() self.lblGroupIcon = JLabel() self.pnlFolder.add(self.lblGroupIcon) self.pnlFolder.add(self.lblGroup) #self.lblGroup.setBorder( # BorderFactory.createLineBorder(Color(222,227,233).darker(),1) #) #self.lblGroupPreferredSize.setSize(30,200)#self.lblGroupPreferredSize.getHeight()+4, self.lblGroupPreferredSize.getWidth()) ### LAYER self.pnlLayer = JPanel() self.pnlLayer.setOpaque(False) #self.pnlLayer.setBorder(EmptyBorder(2,2,2,2)) self.pnlLayer.setLayout(FlowLayout(FlowLayout.LEFT)) self.chkLayerVisibility = JCheckBox() self.chkLayerVisibility.setOpaque(False) self.pnlLayer.add(self.chkLayerVisibility) self.lblLayerIcon = JLabel() self.lblLayerName = JLabel() self.pnlLayer.add(self.lblLayerIcon) self.pnlLayer.add(self.lblLayerName) #self.tree.setRowHeight(int(self.pnlLayer.getPreferredSize().getHeight())) #+2 self.tree.setRowHeight(int(self.pnlFolder.getPreferredSize().getHeight())) self.lblUnknown = JLabel() def getTreeCellRendererComponent(self, tree, value, selected, expanded, leaf, row, hasFocus): uo = value.getUserObject() if isinstance(uo, DataFolder): #self.lblFolder.setText(uo.getName()) text = "[" + str(value.getChildCount()) +"] " + uo.getName() self.lblFolder.setText(text) self.lblFolder.setPreferredSize(self.lblGroupPreferredSize) if uo.getIcon()!=None: self.lblGroupIcon.setIcon(uo.getIcon()) else: self.lblGroupIcon.setIcon(getIconByName("librarybrowser-folder")) #icon-folder-open")) return self.lblFolder if isinstance(uo, DataGroup): self.lblGroup.setText(uo.getName()) self.lblGroup.setPreferredSize(self.lblGroupPreferredSize) if uo.getIcon()!=None: self.lblGroupIcon.setIcon(uo.getIcon()) else: #import pdb #pdb.set_trace() self.lblGroupIcon.setIcon(getIconByName("librarybrowser-folder")) #icon-folder-open")) return self.pnlFolder if isinstance(uo, DataLayer): layer = uo.getLayer() self.lblLayerName.setText(layer.getName()) self.lblLayerIcon.setIcon(getIconFromLayer(layer)) self.chkLayerVisibility.setSelected(layer.isVisible()) if layer.isWithinScale(self.mapContext.getScaleView()): # and layer.isVisible(): self.chkLayerVisibility.setEnabled(True) else: self.chkLayerVisibility.setEnabled(False) self.lblLayerName.setForeground(Color.BLACK) font = self.lblLayerName.getFont() self.lblLayerName.setForeground(Color.BLACK) if layer.isEditing(): self.lblLayerName.setForeground(Color.RED) if layer.isActive() and font.isBold(): pass elif layer.isActive() and not font.isBold(): newfont = font.deriveFont(Font.BOLD) self.lblLayerName.setFont(newfont) else: newfont = font.deriveFont(Font.PLAIN) self.lblLayerName.setFont(newfont) #self.pnlLayer.repaint() return self.pnlLayer self.lblUnknown.setText("") self.lblUnknown.setPreferredSize(Dimension(0,0)) return self.lblUnknown
class Demo(JFrame, Runnable): def __init__(self): super(Demo, self).__init__() self.initUI() def initUI(self): self.panel = JPanel(size=(50, 50)) self.panel.setLayout(FlowLayout()) self.panel.setToolTipText("GPU Demo") self.textfield1 = JTextField('Smoothing Parameter', 15) self.panel.add(self.textfield1) joclButton = JButton("JOCL", actionPerformed=self.onJocl) joclButton.setBounds(100, 500, 100, 30) joclButton.setToolTipText("JOCL Button") self.panel.add(joclButton) javaButton = JButton("Java", actionPerformed=self.onJava) javaButton.setBounds(100, 500, 100, 30) javaButton.setToolTipText("Java Button") self.panel.add(javaButton) qButton = JButton("Quit", actionPerformed=self.onQuit) qButton.setBounds(200, 500, 80, 30) qButton.setToolTipText("Quit Button") self.panel.add(qButton) newImage = ImageIO.read(io.File("input.png")) resizedImage = newImage.getScaledInstance(600, 600, 10) newIcon = ImageIcon(resizedImage) label1 = JLabel("Input Image", newIcon, JLabel.CENTER) label1.setVerticalTextPosition(JLabel.TOP) label1.setHorizontalTextPosition(JLabel.RIGHT) label1.setSize(10, 10) label1.setBackground(Color.orange) self.panel.add(label1) self.getContentPane().add(self.panel) self.clockLabel = JLabel() self.clockLabel.setSize(1, 1) self.clockLabel.setBackground(Color.orange) self.clockLabel.setVerticalTextPosition(JLabel.BOTTOM) self.clockLabel.setHorizontalTextPosition(JLabel.LEFT) myClockFont = Font("Serif", Font.PLAIN, 50) self.clockLabel.setFont(myClockFont) self.panel.add(self.clockLabel) self.setTitle("GPU Demo") self.setSize(1200, 600) self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setLocationRelativeTo(None) self.setVisible(True) def onQuit(self, e): System.exit(0) def onJocl(self, e): self.clockLabel.setText('running') self.started = Calendar.getInstance().getTimeInMillis() #print self.textfield1.getText() #time.sleep(5) iters = toInt(self.textfield1.getText()) jocl_smoother(iters) elapsed = Calendar.getInstance().getTimeInMillis() - self.started self.clockLabel.setText('JOCL Elapsed: %.2f seconds' % (float(elapsed) / 1000.0)) def onJava(self, e): self.clockLabel.setText('running') self.started = Calendar.getInstance().getTimeInMillis() #print self.textfield1.getText() #time.sleep(5) iters = toInt(self.textfield1.getText()) java_smoother(iters) elapsed = Calendar.getInstance().getTimeInMillis() - self.started self.clockLabel.setText('Java Elapsed: %.2f seconds' % (float(elapsed) / 1000.0))
def __init__(self, parent, title, modal, app): from java.awt import CardLayout self.app = app border = BorderFactory.createEmptyBorder(5, 7, 7, 7) self.getContentPane().setBorder(border) self.setLayout(BoxLayout(self.getContentPane(), BoxLayout.Y_AXIS)) self.FAVAREALAYERNAME = "Favourite zone editing" info = JLabel(self.app.strings.getString("Create_a_new_favourite_zone")) info.setAlignmentX(Component.LEFT_ALIGNMENT) #Name nameLbl = JLabel(self.app.strings.getString("fav_zone_name")) self.nameTextField = JTextField(20) self.nameTextField.setMaximumSize(self.nameTextField.getPreferredSize()) self.nameTextField.setToolTipText(self.app.strings.getString("fav_zone_name_tooltip")) namePanel = JPanel() namePanel.setLayout(BoxLayout(namePanel, BoxLayout.X_AXIS)) namePanel.add(nameLbl) namePanel.add(Box.createHorizontalGlue()) namePanel.add(self.nameTextField) #Country countryLbl = JLabel(self.app.strings.getString("fav_zone_country")) self.countryTextField = JTextField(20) self.countryTextField.setMaximumSize(self.countryTextField.getPreferredSize()) self.countryTextField.setToolTipText(self.app.strings.getString("fav_zone_country_tooltip")) countryPanel = JPanel() countryPanel.setLayout(BoxLayout(countryPanel, BoxLayout.X_AXIS)) countryPanel.add(countryLbl) countryPanel.add(Box.createHorizontalGlue()) countryPanel.add(self.countryTextField) #Type modeLbl = JLabel(self.app.strings.getString("fav_zone_type")) RECTPANEL = "rectangle" POLYGONPANEL = "polygon" BOUNDARYPANEL = "boundary" self.modesStrings = [RECTPANEL, POLYGONPANEL, BOUNDARYPANEL] modesComboModel = DefaultComboBoxModel() for i in (self.app.strings.getString("rectangle"), self.app.strings.getString("delimited_by_a_closed_way"), self.app.strings.getString("delimited_by_an_administrative_boundary")): modesComboModel.addElement(i) self.modesComboBox = JComboBox(modesComboModel, actionListener=self, editable=False) #- Rectangle self.rectPanel = JPanel() self.rectPanel.setLayout(BoxLayout(self.rectPanel, BoxLayout.Y_AXIS)) capturePane = JPanel() capturePane.setLayout(BoxLayout(capturePane, BoxLayout.X_AXIS)) capturePane.setAlignmentX(Component.LEFT_ALIGNMENT) josmP = JPanel() self.captureRBtn = JRadioButton(self.app.strings.getString("capture_area")) self.captureRBtn.addActionListener(self) self.captureRBtn.setSelected(True) self.bboxFromJosmBtn = JButton(self.app.strings.getString("get_current_area"), actionPerformed=self.on_bboxFromJosmBtn_clicked) self.bboxFromJosmBtn.setToolTipText(self.app.strings.getString("get_capture_area_tooltip")) josmP.add(self.bboxFromJosmBtn) capturePane.add(self.captureRBtn) capturePane.add(Box.createHorizontalGlue()) capturePane.add(self.bboxFromJosmBtn) manualPane = JPanel() manualPane.setLayout(BoxLayout(manualPane, BoxLayout.X_AXIS)) manualPane.setAlignmentX(Component.LEFT_ALIGNMENT) self.manualRBtn = JRadioButton(self.app.strings.getString("use_this_bbox")) self.manualRBtn.addActionListener(self) self.bboxTextField = JTextField(20) self.bboxTextField.setMaximumSize(self.bboxTextField.getPreferredSize()) self.bboxTextField.setToolTipText(self.app.strings.getString("fav_bbox_tooltip")) self.bboxTextFieldDefaultBorder = self.bboxTextField.getBorder() self.bboxTextField.getDocument().addDocumentListener(TextListener(self)) manualPane.add(self.manualRBtn) manualPane.add(Box.createHorizontalGlue()) manualPane.add(self.bboxTextField) group = ButtonGroup() group.add(self.captureRBtn) group.add(self.manualRBtn) previewPane = JPanel() previewPane.setLayout(BoxLayout(previewPane, BoxLayout.X_AXIS)) previewPane.setAlignmentX(Component.LEFT_ALIGNMENT) bboxPreviewInfo = JTextField(self.app.strings.getString("coordinates"), editable=0, border=None) bboxPreviewInfo.setMaximumSize(bboxPreviewInfo.getPreferredSize()) self.bboxPreviewTextField = JTextField(20, editable=0, border=None) self.bboxPreviewTextField.setMaximumSize(self.bboxPreviewTextField.getPreferredSize()) previewPane.add(bboxPreviewInfo) previewPane.add(Box.createHorizontalGlue()) previewPane.add(self.bboxPreviewTextField) self.rectPanel.add(capturePane) self.rectPanel.add(Box.createRigidArea(Dimension(0, 10))) self.rectPanel.add(manualPane) self.rectPanel.add(Box.createRigidArea(Dimension(0, 20))) self.rectPanel.add(previewPane) #- Polygon (closed way) drawn by hand self.polygonPanel = JPanel(BorderLayout()) self.polygonPanel.setLayout(BoxLayout(self.polygonPanel, BoxLayout.Y_AXIS)) polyInfo = JLabel("<html>%s</html>" % self.app.strings.getString("polygon_info")) polyInfo.setFont(polyInfo.getFont().deriveFont(Font.ITALIC)) polyInfo.setAlignmentX(Component.LEFT_ALIGNMENT) editPolyPane = JPanel() editPolyPane.setAlignmentX(Component.LEFT_ALIGNMENT) editPolyBtn = JButton(self.app.strings.getString("create_fav_layer"), actionPerformed=self.create_new_zone_editing_layer) editPolyBtn.setToolTipText(self.app.strings.getString("create_fav_layer_tooltip")) editPolyPane.add(editPolyBtn) self.polygonPanel.add(polyInfo) self.polygonPanel.add(Box.createRigidArea(Dimension(0, 15))) self.polygonPanel.add(editPolyPane) self.polygonPanel.add(Box.createRigidArea(Dimension(0, 15))) #- Administrative Boundary self.boundaryPanel = JPanel() self.boundaryPanel.setLayout(BoxLayout(self.boundaryPanel, BoxLayout.Y_AXIS)) boundaryInfo = JLabel("<html>%s</html>" % app.strings.getString("boundary_info")) boundaryInfo.setFont(boundaryInfo.getFont().deriveFont(Font.ITALIC)) boundaryInfo.setAlignmentX(Component.LEFT_ALIGNMENT) boundaryTagsPanel = JPanel(GridLayout(3, 3, 5, 5)) boundaryTagsPanel.setAlignmentX(Component.LEFT_ALIGNMENT) boundaryTagsPanel.add(JLabel("name =")) self.nameTagTextField = JTextField(20) boundaryTagsPanel.add(self.nameTagTextField) boundaryTagsPanel.add(JLabel("admin_level =")) self.adminLevelTagTextField = JTextField(20) self.adminLevelTagTextField.setToolTipText(self.app.strings.getString("adminLevel_tooltip")) boundaryTagsPanel.add(self.adminLevelTagTextField) boundaryTagsPanel.add(JLabel(self.app.strings.getString("other_tag"))) self.optionalTagTextField = JTextField(20) self.optionalTagTextField.setToolTipText("key=value") boundaryTagsPanel.add(self.optionalTagTextField) downloadBoundariesPane = JPanel() downloadBoundariesPane.setAlignmentX(Component.LEFT_ALIGNMENT) downloadBoundariesBtn = JButton(self.app.strings.getString("download_boundary"), actionPerformed=self.on_downloadBoundariesBtn_clicked) downloadBoundariesBtn.setToolTipText(self.app.strings.getString("download_boundary_tooltip")) downloadBoundariesPane.add(downloadBoundariesBtn) self.boundaryPanel.add(boundaryInfo) self.boundaryPanel.add(Box.createRigidArea(Dimension(0, 15))) self.boundaryPanel.add(boundaryTagsPanel) self.boundaryPanel.add(Box.createRigidArea(Dimension(0, 10))) self.boundaryPanel.add(downloadBoundariesPane) self.editingPanels = {"rectangle": self.rectPanel, "polygon": self.polygonPanel, "boundary": self.boundaryPanel} #Main buttons self.okBtn = JButton(self.app.strings.getString("OK"), ImageProvider.get("ok"), actionPerformed=self.on_okBtn_clicked) self.cancelBtn = JButton(self.app.strings.getString("cancel"), ImageProvider.get("cancel"), actionPerformed=self.close_dialog) self.previewBtn = JButton(self.app.strings.getString("Preview_zone"), actionPerformed=self.on_previewBtn_clicked) self.previewBtn.setToolTipText(self.app.strings.getString("preview_zone_tooltip")) okBtnSize = self.okBtn.getPreferredSize() viewBtnSize = self.previewBtn.getPreferredSize() viewBtnSize.height = okBtnSize.height self.previewBtn.setPreferredSize(viewBtnSize) #layout self.add(info) self.add(Box.createRigidArea(Dimension(0, 15))) namePanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(namePanel) self.add(Box.createRigidArea(Dimension(0, 15))) countryPanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(countryPanel) self.add(Box.createRigidArea(Dimension(0, 15))) modeLbl.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(modeLbl) self.add(Box.createRigidArea(Dimension(0, 5))) self.add(self.modesComboBox) self.modesComboBox.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(Box.createRigidArea(Dimension(0, 15))) self.configPanel = JPanel(CardLayout()) self.configPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)) self.configPanel.add(self.rectPanel, RECTPANEL) self.configPanel.add(self.polygonPanel, POLYGONPANEL) self.configPanel.add(self.boundaryPanel, BOUNDARYPANEL) self.configPanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(self.configPanel) buttonsPanel = JPanel() buttonsPanel.add(self.okBtn) buttonsPanel.add(self.cancelBtn) buttonsPanel.add(self.previewBtn) buttonsPanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.add(buttonsPanel) self.addWindowListener(self) self.pack()
def instantiate_particles(): """Instantiates particles using user input""" particles = [] inputted_data, position, velocity, spin = [], [], [], [] stop = False while (not stop): retry = True label = JLabel('Would You Like to Import from File', JLabel.CENTER) label.setFont(Font('Arial', Font.PLAIN, 35)) file_use = JOptionPane.showConfirmDialog(frame, label, '', JOptionPane.YES_NO_OPTION) while (retry): if (file_use == 0): file_name = input('File Name:') if (file_name != None): file = loadStrings(file_name) if (not file): print_error('Empty File') else: t_step = float(file[0]) line_pos = 2 while (line_pos < len(file)): data = file[line_pos].split(' ') data = list(map(lambda x: float(x), data)) if (line_pos + 1 < len(file)): if (file[line_pos + 1]): texture_data = file[line_pos + 1] line_pos += 3 else: texture_data = None line_pos += 2 else: texture_data = None line_pos += 2 if (len(data) > 9): init_pos = data[3:6] init_vel = data[6:9] init_spin = data[9:12] particles.append( MovingParticle(*data[:3], init_pos=init_pos, init_vel=init_vel, init_spin=init_spin, t_step=t_step, texture_data=texture_data)) else: init_pos = data[3:6] init_spin = data[6:9] particles.append( FixedParticle(*data[:3], init_pos=init_pos, init_spin=init_spin, t_step=t_step, texture_data=texture_data)) retry = False stop = True else: retry = False else: label = JLabel('Choose Particle Type:', JLabel.CENTER) label.setFont(Font('Arial', Font.PLAIN, 35)) particle_type = JOptionPane.showInputDialog( frame, label, '', JOptionPane.PLAIN_MESSAGE, None, ['Fixed', 'Moving'], '') print_message('Type \'retry\' to retry and \'stop\' to stop') mass = check_input_float('Mass: ', 'retry', 'stop', lbound=0) inputted_data.append(mass) charge = check_input_float('Charge: ', 'retry', 'stop') inputted_data.append(charge) radius = check_input_float('Radius: ', 'retry', 'stop', lbound=0) inputted_data.append(radius) position.append( check_input_float('Initial X Position: ', 'retry', 'stop')) position.append( check_input_float('Initial Y Position: ', 'retry', 'stop')) position.append( check_input_float('Initial Z Position: ', 'retry', 'stop')) inputted_data.append(position) if (particle_type == 'Moving'): velocity.append( check_input_float('Initial X Velocity: ', 'retry', 'stop')) velocity.append( check_input_float('Initial Y Velocity: ', 'retry', 'stop')) velocity.append( check_input_float('Initial Z Velocity: ', 'retry', 'stop')) inputted_data.append(velocity) spin.append( check_input_float('Initial X Spin: ', 'retry', 'stop')) spin.append( check_input_float('Initial Y Spin: ', 'retry', 'stop')) spin.append( check_input_float('Initial Z Spin: ', 'retry', 'stop')) inputted_data.append(spin) if (('retry' in inputted_data) or ('retry' in position) or ('retry' in velocity) or ('retry' in spin)): inputted_data = [] position = [] velocity = [] spin = [] elif (('stop' in inputted_data) or ('stop' in position) or ('stop' in velocity) or ('stop' in spin)): retry = False stop = True else: if (particle_type == 'Fixed'): particles.append( FixedParticle(*inputted_data, t_step=.1)) else: particles.append( MovingParticle(*inputted_data, t_step=.1)) inputted_data = [] position = [] velocity = [] spin = [] label = JLabel('Would You Like to Make Another Particle?', JLabel.CENTER) label.setFont(Font('Arial', Font.PLAIN, 35)) next = JOptionPane.showConfirmDialog( frame, label, '', JOptionPane.YES_NO_OPTION) if (next == 1): retry = False stop = True return particles
class tab(): def __init__(self, callbacks): """ Method automatically called when memory is allocated for a new object, initiates tab object """ print("Created a tab") self.callbacks = callbacks self.curRequest = None self.createTabGUI() def getFirstTab(self): """ Get the JPanel that represents the object's Timing Attack tab """ self.scrollPane = JScrollPane( self.firstTab, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED) return self.scrollPane ########################### # SECTION 1: CREATING GUI # ########################### def createTabGUI(self): """ Create GUI for this tabbed pane """ # panel for the whole tab self.firstTab = JPanel() # name of the extention self.titleTop = JLabel("Timing Attack") self.titleTop.setFont(Font("Tahoma", 1, 14)) self.titleTop.setForeground(Color(255, 102, 51)) # info about the extention self.infoTop = JLabel( "Timing Attack is a open source extention to inform how long the system takes to respond for a valid and an invalid authentication." ) self.infoTop.setFont(Font("Tahoma", 0, 11)) # labels and inputs on top half self.addTitle = JLabel("Enter a Valid and an Invalid Username") self.addTitle.setFont(Font("Tahoma", 1, 13)) self.addTitle.setForeground(Color(255, 102, 51)) self.validUsername = JLabel("Valid Username") self.validUsername.setFont(Font("Tahoma", 0, 12)) self.invalidUsername = JLabel("Invalid Username") self.invalidUsername.setFont(Font("Tahoma", 0, 12)) self.parameter = JLabel("Parameter") self.parameter.setFont(Font("Tahoma", 0, 12)) self.average = JLabel("Sample Size") self.average.setFont(Font("Tahoma", 0, 12)) self.addValid = JTextField("") self.addInvalid = JTextField("") self.addParameter = JTextField("") self.addAverage = JTextField("") self.submitButton1 = JButton("Submit", actionPerformed=self.timeTwoUsers) # result on top left self.resultTitle = JLabel("Result") self.resultTitle.setFont(Font("Tahoma", 1, 13)) self.resultTitle.setForeground(Color(255, 102, 51)) self.showResults = JTextArea("") self.showResults.setEditable(False) self.showResultsScroll = JScrollPane(self.showResults) self.twoUserViewResult = JButton("View Results", actionPerformed=self.showResultsTop) self.twoUserViewReq = JButton("View Request", actionPerformed=self.showRequestTop) self.twoUserViewValidResponse = JButton( "View Valid Response", actionPerformed=self.showValidResponseTop) self.twoUserViewInvalidResponse = JButton( "View Invalid Response", actionPerformed=self.showInvalidResponseTop) # Set top buttons to invisible until a request is submitted self.twoUserViewResult.setVisible(False) self.twoUserViewReq.setVisible(False) self.twoUserViewValidResponse.setVisible(False) self.twoUserViewInvalidResponse.setVisible(False) # labels, inputs and file on bottom half self.addTitleFile = JLabel("Input Username File") self.addTitleFile.setFont(Font("Tahoma", 1, 13)) self.addTitleFile.setForeground(Color(255, 102, 51)) self.inputFileButton = JButton("Choose File...", actionPerformed=self.chooseFile) self.separatorList = JLabel("Separator") self.separatorList.setFont(Font("Tahoma", 0, 12)) self.parameterList = JLabel("Parameter") self.parameterList.setFont(Font("Tahoma", 0, 12)) self.averageList = JLabel("Sample Size") self.averageList.setFont(Font("Tahoma", 0, 12)) self.addSeparatorList = JTextField("") self.addParameterList = JTextField("") self.addAverageList = JTextField("") self.submitButton2 = JButton("Submit", actionPerformed=self.timeUserList) # result on bottom left self.resultTitleList = JLabel("Result") self.resultTitleList.setFont(Font("Tahoma", 1, 13)) self.resultTitleList.setForeground(Color(255, 102, 51)) self.showResultsList = JTextArea("") self.showResultsList.setEditable(False) self.showResultsListScroll = JScrollPane(self.showResultsList) self.downloadResultList = JButton("Download Display", actionPerformed=self.downloadResults) self.listViewResults = JButton("View Results", actionPerformed=self.showListResults) self.listViewReq = JButton("View Request", actionPerformed=self.showListRequest) self.listViewResponses = JButton( "View Responses", actionPerformed=self.showListResponses) # Set list buttons to invisible until a request is submitted self.downloadResultList.setVisible(False) self.listViewResults.setVisible(False) self.listViewReq.setVisible(False) self.listViewResponses.setVisible(False) # something wrong? self.somethingWrong = JLabel("Something Wrong?") self.debugOn = False self.viewDebug = JButton("View debug output", actionPerformed=self.showDebug) self.debugText = JTextArea("") self.debugTextScroll = JScrollPane(self.debugText) self.debugTextScroll.setVisible(False) # layout layout = GroupLayout(self.firstTab) self.firstTab.setLayout(layout) layout.setHorizontalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) # whole layout .addGroup( layout.createSequentialGroup().addGap(15) # title + description .addGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( self.titleTop).addComponent(self.infoTop) # titles .addGroup( layout.createSequentialGroup() # title left .addGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( self.addTitle)).addGap(168) # title right .addGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( self.resultTitle))). addGroup( layout.createSequentialGroup() # left .addGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( self.validUsername).addComponent( self.invalidUsername).addComponent( self.parameter).addComponent( self.average).addComponent( self.addTitleFile). addComponent(self.inputFileButton).addComponent( self.separatorList).addComponent( self.parameterList).addComponent( self.averageList).addComponent( self.somethingWrong)).addGap(12). addGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( self.addValid, GroupLayout.PREFERRED_SIZE, 200, GroupLayout.PREFERRED_SIZE).addComponent( self.addInvalid, GroupLayout.PREFERRED_SIZE, 200, GroupLayout.PREFERRED_SIZE). addComponent( self.addParameter, GroupLayout.PREFERRED_SIZE, 200, GroupLayout.PREFERRED_SIZE).addComponent( self.addAverage, GroupLayout.PREFERRED_SIZE, 80, GroupLayout.PREFERRED_SIZE).addComponent( self.submitButton1).addComponent( self.addSeparatorList, GroupLayout.PREFERRED_SIZE, 200, GroupLayout.PREFERRED_SIZE). addComponent( self.addParameterList, GroupLayout.PREFERRED_SIZE, 200, GroupLayout.PREFERRED_SIZE).addComponent( self.addAverageList, GroupLayout.PREFERRED_SIZE, 80, GroupLayout.PREFERRED_SIZE).addComponent( self.submitButton2).addComponent( self.viewDebug)).addGap(50) # right .addGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( self.showResultsScroll, GroupLayout.PREFERRED_SIZE, 600, GroupLayout.PREFERRED_SIZE). addGroup(layout.createSequentialGroup().addGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING). addComponent(self.twoUserViewResult) ).addGap(15).addGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING). addComponent( self.twoUserViewReq)).addGap(15).addGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING). addComponent( self.twoUserViewValidResponse) ).addGap(15).addGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING). addComponent( self.twoUserViewInvalidResponse))). addComponent(self.resultTitleList).addComponent( self.showResultsListScroll, GroupLayout.PREFERRED_SIZE, 600, GroupLayout.PREFERRED_SIZE).addGroup( layout.createSequentialGroup().addGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING). addComponent(self.downloadResultList)). addGap(15).addGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING). addComponent(self.listViewResults) ).addGap(15).addGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING). addComponent(self.listViewReq) ).addGap(15).addGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING). addComponent(self.listViewResponses) )).addGap(10).addComponent( self.debugTextScroll, GroupLayout.PREFERRED_SIZE, 300, GroupLayout.PREFERRED_SIZE)))))) layout.setVerticalGroup( layout.createParallelGroup(GroupLayout.Alignment.LEADING) # whole layout .addGroup( layout.createSequentialGroup().addGap(15).addComponent( self.titleTop).addGap(10).addComponent( self.infoTop).addGap(10) # titles .addGroup( layout.createSequentialGroup() # left .addGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( self.addTitle).addGap(25) # right .addGroup( layout.createParallelGroup( GroupLayout.Alignment.LEADING).addComponent( self.resultTitle)))) # top half .addGroup( layout.createSequentialGroup() # left top half .addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE). addGroup(layout.createSequentialGroup().addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.validUsername).addGap(5).addComponent( self.addValid, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) ).addGap(5).addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.invalidUsername).addGap( 5).addComponent( self.addInvalid, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) ).addGap(5).addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.parameter).addGap(5).addComponent( self.addParameter, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) ).addGap(5).addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.average).addGap(5).addComponent( self.addAverage, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) ).addGap(5).addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.submitButton1))).addGap(5) # right top half .addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.showResultsScroll, GroupLayout.PREFERRED_SIZE, 200, GroupLayout.PREFERRED_SIZE)))).addGap(5) # buttons + titles .addGroup(layout.createSequentialGroup().addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.twoUserViewResult).addGap(20).addComponent( self.twoUserViewReq).addGap(20).addComponent( self.twoUserViewValidResponse).addGap(20). addComponent( self.twoUserViewInvalidResponse)).addGap(10).addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.addTitleFile).addGap(25).addComponent( self.resultTitleList))).addGap(3) # bottom half .addGroup( layout.createSequentialGroup() # left bottom half .addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE). addGroup(layout.createSequentialGroup().addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.inputFileButton) ).addGap(10).addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.separatorList).addGap(5).addComponent( self.addSeparatorList, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) ).addGap(5).addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.parameterList).addGap(5).addComponent( self.addParameterList, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) ).addGap(5).addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.averageList).addGap(5).addComponent( self.addAverageList, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) ).addGap(5).addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.submitButton2) )).addGap(5).addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.showResultsListScroll, GroupLayout.PREFERRED_SIZE, 200, GroupLayout.PREFERRED_SIZE)))).addGap(5) # right bottom half .addGroup(layout.createSequentialGroup().addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.downloadResultList).addGap(10).addComponent( self.listViewResults).addGap(10).addComponent( self.listViewReq).addGap(10).addComponent( self.listViewResponses))).addGap(30) # something wrong section .addGroup(layout.createSequentialGroup().addGroup( layout.createParallelGroup( GroupLayout.Alignment.BASELINE).addComponent( self.somethingWrong).addGap(10).addComponent( self.viewDebug).addGap(10).addComponent( self.debugTextScroll, GroupLayout.PREFERRED_SIZE, 150, GroupLayout.PREFERRED_SIZE))))) return def chooseFile(self, event): """ Method that allows the user to choose a file of usernames, and it tries to load the last used directory """ try: # load the directory for future imports/exports fileChooserDirectory = self._callbacks.loadExtensionSetting( "fileChooserDirectory") # there is not a last used directory except: # set the last used directory to blank fileChooserDirectory = "" self.chooser = JFileChooser(fileChooserDirectory) fileextensions = ["txt"] filter = FileNameExtensionFilter("TXT FILES", fileextensions) self.chooser.setFileFilter(filter) returnVal = self.chooser.showOpenDialog(self.chooser) if (returnVal == JFileChooser.APPROVE_OPTION): self.inputFileButton.text = self.chooser.getSelectedFile().getName( ) ################################## # SECTION 2: SEND TIMING REQUEST # ################################## def timeTwoUsers(self, event): """ Method that sends the current request to getTwoUserTimes """ if (self.curRequest == None): self.debugOutput("Timing Attack does not have a request") return # change button to say show request self.twoUserViewResult.setVisible(True) self.twoUserViewReq.setVisible(True) self.twoUserViewValidResponse.setVisible(True) self.twoUserViewInvalidResponse.setVisible(True) threading.Thread(target=self.getTwoUserTimes).start() return def getTwoUserTimes(self): """ Method that prints the time taken to return responses from one valid username and from one invalid username (called by timeTwoUsers) """ self.twoUserViewReq.setVisible(True) validTime, self.validRequest, self.validResponse = self.getTime( self.addParameter.text, self.addValid.text, self.addAverage.text) invalidTime, self.invalidRequest, self.invalidResponse = self.getTime( self.addParameter.text, self.addInvalid.text, self.addAverage.text) self.showResults.text = "Valid username: "******"\t Time: " self.showResults.text += str(validTime) + "\n" self.showResults.text += "Invalid username: "******"\t Time: " self.showResults.text += str(invalidTime) self.twoUserResult = self.showResults.text def timeUserList(self, event): """ Method that reads the usernames from file and sends them to getUserListTimes, and if there is no file so the program is going to return anything """ if (self.curRequest == None): self.debugOutput("Timing Attack does not have a request") return try: # stores the file file = self.chooser.getSelectedFile() # reads it scan = Scanner(file) readFile = "" while scan.hasNext(): readFile += scan.nextLine() # divides the file to a list of usernames self.userList = readFile.split(self.addSeparatorList.text) # set all the list buttons to visible self.downloadResultList.setVisible(True) self.listViewResults.setVisible(True) self.listViewReq.setVisible(True) self.listViewResponses.setVisible(True) # gets the time for each username threading.Thread(target=self.getUserListTimes).start() # it will handle the error and send a message about it except: self.debugOutput("No File Submitted") return def getUserListTimes(self): """ Method that prints the time taken to return responses for each username from file (called by timeUserList) """ self.listViewReq.setVisible(True) self.showResultsList.text = "" self.listResponses = "" self.listRequests = "" helpers = self.callbacks.getHelpers() for index, username in enumerate(self.userList): self.showResultsList.text += "Username: "******"\t Time: " time, request, response = self.getTime(self.addParameterList.text, username, self.addAverageList.text) self.showResultsList.text += str(time) + "\n" self.listResponses += ":: Response " + str( index) + " ::\n" + "Username: "******"\n\n" self.listResponses += helpers.bytesToString( response) + "\n\n\n\n\n" self.listRequests += ":: Request " + str( index) + " ::\n" + "Username: "******"\n\n" self.listRequests += helpers.bytesToString(request) + "\n\n\n\n\n" self.listResults = self.showResultsList.text return def getTime(self, paramName, paramInput, numTriesText): """ Method that takes in a username and returns the time taken to get its response (called by getTwoUserTimes and getUserListTimes) """ try: numTries = int(numTriesText) except: self.debugOutput("Sample size must be an integer") # keeps a reference to helpers helpers = self.callbacks.getHelpers() # Get the request request = self.curRequest.getRequest() # Get request information requestInfo = helpers.analyzeRequest(request) # loop through parameters for i in requestInfo.getParameters(): # find username parameter and change its value if (i.getName() == paramName): # it creates the request buildParam = helpers.buildParameter(paramName, paramInput, i.getType()) newRequest = helpers.updateParameter(request, buildParam) if 'newRequest' not in locals(): self.debugOutput("Parameter " + paramName + " cannot be found in request") # it builds an http service to send a request to the website httpService = self.curRequest.getHttpService() useHttps = True if httpService.getProtocol() == "https" else False httpService = helpers.buildHttpService(httpService.getHost(), httpService.getPort(), useHttps) getTime = 0 for i in range(numTries): # starts the time and it sends the changed request with valid parameter start = time.clock() makeRequest = self.callbacks.makeHttpRequest( httpService, newRequest) makeRequest.getResponse() getTime += time.clock() - start makeRequest = self.callbacks.makeHttpRequest(httpService, newRequest) request = makeRequest.getRequest() response = makeRequest.getResponse() # return the response return getTime / numTries, request, response #################################################### # SECTION 3: VIEW REQUEST/RESPONSE/RESULTS BUTTONS # #################################################### def showListRequest(self, event): """ Method that shows the request from a file of usernames """ helpers = self.callbacks.getHelpers() self.showResultsList.text = self.listRequests def showListResults(self, event): """ Show results for list """ self.showResultsList.text = self.listResults def showListResponses(self, event): """ Show responses for list """ self.showResultsList.text = self.listResponses def showResultsTop(self, event): """ Show results on top """ self.showResults.text = self.twoUserResult def showRequestTop(self, event): """ Show request on top """ helpers = self.callbacks.getHelpers() self.showResults.text = ":: Valid Request :: \n" self.showResults.text += helpers.bytesToString(self.validRequest) self.showResults.text += "\n\n\n:: Invalid Request :: \n" self.showResults.text += helpers.bytesToString(self.invalidRequest) def showValidResponseTop(self, event): """ Show valid response on top """ helpers = self.callbacks.getHelpers() self.showResults.text = helpers.bytesToString(self.validResponse) def showInvalidResponseTop(self, event): """ Show invalid response on top """ helpers = self.callbacks.getHelpers() self.showResults.text = helpers.bytesToString(self.invalidResponse) ############################## # SECTION 4: DOWNLOAD BUTTON # ############################## def downloadResults(self, event): """ Method that allows user to download file to get the response's time """ try: if (self.showResultsList.text == ""): return file = open(self.get_download_path() + "/downloadresults.txt", "w") file.write(self.showResultsList.text) file.close() self.debugOutput( "Download successful! \nCheck your downloads folder for the file." ) except: self.debugOutput("Download failed.") def get_download_path(self): """ Method to find path of download folder (called by downloadResults), and it returns the default downloads path for linux or windows """ if os.name == 'nt': import winreg sub_key = r'SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders' downloads_guid = '{374DE290-123F-4565-9164-39C4925E467B}' with winreg.OpenKey(winreg.HKEY_CURRENT_USER, sub_key) as key: location = winreg.QueryValueEx(key, downloads_guid)[0] return location else: return os.path.join(os.path.expanduser('~'), 'downloads') ########################### # SECTION 5: DEBUG BUTTON # ########################### def debugOutput(self, message): """ Write a debug message in the debug box """ self.debugText.text = message self.debugTextScroll.setVisible(True) self.viewDebug.setText("Close Debug Output") self.debugOn = True def showDebug(self, event): """ Open or close debug box """ if self.debugOn: self.debugTextScroll.setVisible(False) self.viewDebug.setText("View Debug Output") self.debugOn = False self.debugText.text = "" else: self.debugTextScroll.setVisible(True) self.viewDebug.setText("Close Debug Output") self.debugOn = True ################################### # SECTION 6: TAB RECIEVES REQUEST # ################################### def getRequest(self, messageList): """ Method that stores the request sent from proxy """ self.curRequest = messageList[0] # Show request in top box helpers = self.callbacks.getHelpers() self.showResults.text = helpers.bytesToString( self.curRequest.getRequest()) # Show request in bottom box helpers = self.callbacks.getHelpers() self.showResultsList.text = helpers.bytesToString( self.curRequest.getRequest())
def openGUI(self, invocation): try: # Get values from request or response the extension is invoked from and prepopulate GUI values invMessage = invocation.getSelectedMessages() message = invMessage[0] originalHttpService = message.getHttpService() self.originalMsgProtocol = originalHttpService.getProtocol() self.originalMsgHost = originalHttpService.getHost() self.originalMsgPort = originalHttpService.getPort() except: self.originalMsgProtocol = '' self.originalMsgHost = '' self.originalMsgPort = '' try: self.cookies = self._callbacks.getCookieJarContents() self.cookie = '' except: pass self.SSL = 'http://' self.listType = '' self.parsedList = [] # Set up main window (JFrame) self.window = JFrame("Directory Listing Parser for Burp Suite", preferredSize=(600, 475), windowClosing=self.closeUI) self.window.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE) emptyBorder = BorderFactory.createEmptyBorder(10, 10, 10, 10) self.window.contentPane.setBorder(emptyBorder) self.window.contentPane.layout = BorderLayout() # Main window title placed at the top of the main window with an invisible bottom border titlePanel = JPanel() titleBorder = BorderFactory.createEmptyBorder(0, 0, 10, 0) title = JLabel("Directory Listing Parser for Burp Suite", JLabel.CENTER) title.setBorder(titleBorder) title.setFont(Font("Default", Font.PLAIN, 18)) titlePanel.add(title) self.window.contentPane.add("North", titlePanel) # Left panel for user input, consisting of hostname, directory prefix, ssl, port, type of listing, and file self.leftPanel = JPanel() self.leftPanel.layout = GridLayout(14, 1, 3, 3) hostnameLabel = JLabel("Hostname:") if self.originalMsgHost: self.hostnameTextField = JTextField(self.originalMsgHost.rstrip()) else: self.hostnameTextField = JTextField('Hostname') dirPrefixLabel = JLabel("Full Directory Prefix (Windows):") self.dirPrefixField = JTextField('C:\\var\www\\') sslLabel = JLabel("SSL:") self.radioBtnSslEnabled = JRadioButton('Enabled (https)', actionPerformed=self.radioSsl) self.radioBtnSslDisabled = JRadioButton('Disabled (http)', actionPerformed=self.radioSsl) sslButtonGroup = ButtonGroup() sslButtonGroup.add(self.radioBtnSslEnabled) sslButtonGroup.add(self.radioBtnSslDisabled) if self.originalMsgProtocol == "https": self.radioBtnSslEnabled.setSelected(True) else: self.radioBtnSslDisabled.setSelected(True) portLabel = JLabel("Port:") if self.originalMsgPort: self.portTextField = JTextField(str(self.originalMsgPort).rstrip()) else: self.portTextField = JTextField('80') osLabel = JLabel("Type of File Listing:") self.types = ('Windows \'dir /s\'', 'Linux \'ls -lR\'', 'Linux \'ls -R\'') self.comboListingType = JComboBox(self.types) uploadLabel = JLabel("Directory Listing File:") self.uploadTextField = JTextField('') uploadButton = JButton('Choose File', actionPerformed=self.chooseFile) self.leftPanel.add(hostnameLabel) self.leftPanel.add(self.hostnameTextField) self.leftPanel.add(dirPrefixLabel) self.leftPanel.add(self.dirPrefixField) self.leftPanel.add(sslLabel) self.leftPanel.add(self.radioBtnSslEnabled) self.leftPanel.add(self.radioBtnSslDisabled) self.leftPanel.add(portLabel) self.leftPanel.add(self.portTextField) self.leftPanel.add(osLabel) self.leftPanel.add(self.comboListingType) self.leftPanel.add(uploadLabel) self.leftPanel.add(self.uploadTextField) self.leftPanel.add(uploadButton) # Right panel consisting of a text area for the URL list self.UrlPanelLabel = JLabel("URL List:") self.textArea = JTextArea() self.textArea.setEditable(True) self.textArea.setFont(Font("Default", Font.PLAIN, 14)) if self.cookies: self.textArea.append('Cookies Found:\n') for cookie in self.cookies: if cookie.getDomain() in self.originalMsgHost: self.cookie += cookie.getName() + '=' + cookie.getValue() + '; ' self.textArea.append(cookie.getName() + '=' + cookie.getValue() + '\n') scrollArea = JScrollPane(self.textArea) scrollArea.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS) scrollArea.setPreferredSize(Dimension(400, 200)) self.rightPanel = JPanel() self.rightPanel.setLayout(BorderLayout(3, 3)) self.rightPanel.add(self.UrlPanelLabel, BorderLayout.NORTH) self.rightPanel.add(scrollArea, BorderLayout.CENTER) # Panel for the generate URL list and import URL list buttons generatePanel = JPanel() generatePanel.layout = BorderLayout(3, 3) generateButton = JButton('Generate URL List', actionPerformed=self.generateUrlList) importButton = JButton('Import URL List to Burp Site Map', actionPerformed=self.confirmImport) generatePanel.add("North", generateButton) generatePanel.add("South", importButton) self.rightPanel.add("South", generatePanel) # Add the two main panels to the left and right sides self.window.contentPane.add("East", self.rightPanel) self.window.contentPane.add("West", self.leftPanel) # Create a panel to be used for the file chooser window self.uploadPanel = JPanel() self.window.pack() self.window.show()
def __init__(self, parent, title, app): from javax.swing import JCheckBox, JRadioButton, ButtonGroup self.app = app border = BorderFactory.createEmptyBorder(5, 7, 5, 7) self.getContentPane().setBorder(border) self.getContentPane().setLayout(BorderLayout(0, 5)) self.tabbedPane = JTabbedPane() #1 Tab: general panel1 = JPanel() panel1.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)) panel1.setLayout(BoxLayout(panel1, BoxLayout.PAGE_AXIS)) #Checkbutton to enable/disable update check when script starts self.updateCBtn = JCheckBox(self.app.strings.getString("updateCBtn")) self.updateCBtn.setToolTipText(self.app.strings.getString("updateCBtn_tooltip")) #Download tools downloadBtn = JButton(self.app.strings.getString("updatesBtn"), ImageProvider.get("dialogs", "refresh"), actionPerformed=self.on_downloadBtn_clicked) downloadBtn.setToolTipText(self.app.strings.getString("updatesBtn_tooltip")) #Checkbuttons for enabling/disabling tools toolsPanel = JPanel(BorderLayout(0, 5)) title = self.app.strings.getString("enable_disable_tools") toolsPanel.setBorder(BorderFactory.createTitledBorder(title)) infoLbl = JLabel(self.app.strings.getString("JOSM_restart_warning")) infoLbl.setFont(infoLbl.getFont().deriveFont(Font.ITALIC)) toolsPanel.add(infoLbl, BorderLayout.PAGE_START) toolsStatusPane = JPanel(GridLayout(len(self.app.realTools), 0)) self.toolsCBtns = [] for tool in self.app.realTools: toolCBtn = JCheckBox() toolCBtn.addItemListener(self) toolLbl = JLabel(tool.title, tool.bigIcon, JLabel.LEFT) self.toolsCBtns.append(toolCBtn) toolPane = JPanel() toolPane.setLayout(BoxLayout(toolPane, BoxLayout.X_AXIS)) toolPane.add(toolCBtn) toolPane.add(toolLbl) toolsStatusPane.add(toolPane) toolsPanel.add(toolsStatusPane, BorderLayout.CENTER) #Radiobuttons for enabling/disabling layers when a new one #is added layersPanel = JPanel(GridLayout(0, 1)) title = self.app.strings.getString("errors_layers_manager") layersPanel.setBorder(BorderFactory.createTitledBorder(title)) errorLayersLbl = JLabel(self.app.strings.getString("errors_layers_info")) errorLayersLbl.setFont(errorLayersLbl.getFont().deriveFont(Font.ITALIC)) layersPanel.add(errorLayersLbl) self.layersRBtns = {} group = ButtonGroup() for mode in self.app.layersModes: layerRBtn = JRadioButton(self.app.strings.getString("%s" % mode)) group.add(layerRBtn) layersPanel.add(layerRBtn) self.layersRBtns[mode] = layerRBtn #Max number of errors text field self.maxErrorsNumberTextField = JTextField() self.maxErrorsNumberTextField.setToolTipText(self.app.strings.getString("maxErrorsNumberTextField_tooltip")) self.maxErrorsNumberTFieldDefaultBorder = self.maxErrorsNumberTextField.getBorder() self.maxErrorsNumberTextField.getDocument().addDocumentListener(ErrNumTextListener(self)) #layout self.updateCBtn.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(self.updateCBtn) panel1.add(Box.createRigidArea(Dimension(0, 15))) downloadBtn.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(downloadBtn) panel1.add(Box.createRigidArea(Dimension(0, 15))) toolsPanel.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(toolsPanel) panel1.add(Box.createRigidArea(Dimension(0, 15))) layersPanel.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(layersPanel) panel1.add(Box.createRigidArea(Dimension(0, 15))) maxErrP = JPanel(BorderLayout(5, 0)) maxErrP.add(JLabel(self.app.strings.getString("max_errors_number")), BorderLayout.LINE_START) maxErrP.add(self.maxErrorsNumberTextField, BorderLayout.CENTER) p = JPanel(BorderLayout()) p.add(maxErrP, BorderLayout.PAGE_START) p.setAlignmentX(Component.LEFT_ALIGNMENT) panel1.add(p) self.tabbedPane.addTab(self.app.strings.getString("tab_1_title"), None, panel1, None) #2 Tab: favourite zones panel2 = JPanel(BorderLayout(5, 15)) panel2.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)) #status topPanel = JPanel() topPanel.setLayout(BoxLayout(topPanel, BoxLayout.Y_AXIS)) infoPanel = HtmlPanel(self.app.strings.getString("fav_zones_info")) infoPanel.getEditorPane().addHyperlinkListener(self) infoPanel.setAlignmentX(Component.LEFT_ALIGNMENT) self.favZoneStatusCBtn = JCheckBox(self.app.strings.getString("activate_fav_area"), actionListener=self) self.favZoneStatusCBtn.setToolTipText(self.app.strings.getString("activate_fav_area_tooltip")) self.favZoneStatusCBtn.setAlignmentX(Component.LEFT_ALIGNMENT) topPanel.add(infoPanel) topPanel.add(Box.createRigidArea(Dimension(0, 10))) topPanel.add(self.favZoneStatusCBtn) #table self.zonesTable = JTable() tableSelectionModel = self.zonesTable.getSelectionModel() tableSelectionModel.addListSelectionListener(ZonesTableListener(self)) columns = ["", self.app.strings.getString("Type"), self.app.strings.getString("Name")] tableModel = ZonesTableModel([], columns) self.zonesTable.setModel(tableModel) self.scrollPane = JScrollPane(self.zonesTable) #map self.zonesMap = JMapViewer() self.zonesMap.setZoomContolsVisible(False) self.zonesMap.setMinimumSize(Dimension(100, 200)) #buttons self.removeBtn = JButton(self.app.strings.getString("Remove"), ImageProvider.get("dialogs", "delete"), actionPerformed=self.on_removeBtn_clicked) self.removeBtn.setToolTipText(self.app.strings.getString("remove_tooltip")) newBtn = JButton(self.app.strings.getString("New"), ImageProvider.get("dialogs", "add"), actionPerformed=self.on_newBtn_clicked) newBtn.setToolTipText(self.app.strings.getString("new_tooltip")) #layout panel2.add(topPanel, BorderLayout.PAGE_START) panel2.add(self.scrollPane, BorderLayout.LINE_START) panel2.add(self.zonesMap, BorderLayout.CENTER) self.buttonsPanel = JPanel() self.buttonsPanel.add(self.removeBtn) self.buttonsPanel.add(newBtn) panel2.add(self.buttonsPanel, BorderLayout.PAGE_END) self.tabbedPane.addTab(self.app.strings.getString("tab_2_title"), None, panel2, None) #3 Tab Tools options panel3 = JPanel() panel3.setLayout(BoxLayout(panel3, BoxLayout.Y_AXIS)) panel3.setBorder(BorderFactory.createEmptyBorder(7, 7, 7, 7)) for tool in self.app.realTools: if hasattr(tool, 'prefs'): p = JPanel(FlowLayout(FlowLayout.LEFT)) p.setBorder(BorderFactory.createTitledBorder(tool.title)) p.add(tool.prefsGui) panel3.add(p) self.tabbedPane.addTab(self.app.strings.getString("tab_3_title"), None, panel3, None) self.add(self.tabbedPane, BorderLayout.CENTER) exitPanel = JPanel() saveBtn = JButton(self.app.strings.getString("OK"), ImageProvider.get("ok"), actionPerformed=self.on_saveBtn_clicked) cancelBtn = JButton(self.app.strings.getString("cancel"), ImageProvider.get("cancel"), actionPerformed=self.on_cancelBtn_clicked) saveBtn.setToolTipText(self.app.strings.getString("save_preferences")) saveBtn.setAlignmentX(0.5) exitPanel.add(saveBtn) exitPanel.add(cancelBtn) self.add(exitPanel, BorderLayout.PAGE_END) self.addWindowListener(self) self.pack()
theFont = Font("Arial", Font.BOLD, 19) elFont = Font("Arial", Font.BOLD, 23) aboutForm = JFrame("About", size=(610, 610)) aboutPanel = JPanel() aboutPanel.setOpaque(True) aboutPanel.setBackground(Color.WHITE) aboutPanel.setLayout(None) judul1Label = JLabel( "<html><center>TEKNIK PEMECAHAN KUNCI ALGORITMA ELGAMAL<br>DENGAN METODE INDEX CALCULUS</html>", JLabel.CENTER) #judul1Label.setOpaque(True) judul1Label.setFont(theFont) judul1Label.setSize(610, 70) judul1Label.setLocation(0, 10) skripsiLabel = JLabel("SKRIPSI", JLabel.CENTER) skripsiLabel.setFont(theFont) skripsiLabel.setSize(610, 50) #skripsiLabel.setOpaque(True) skripsiLabel.setLocation(0, 80) logo = JLabel("<html><center></html>", JLabel.CENTER) logoFakultas = ImageIcon("D:\\logo.jpg") logo.setIcon(logoFakultas) logo.setSize(610, 200) logo.setLocation(0, 145) #logo.setOpaque(True)
class BurpExtender(IBurpExtender, ITab): socket_time_out = 3 def registerExtenderCallbacks(self, callbacks): self.out = callbacks.getStdout() self.callbacks = callbacks self.helpers = callbacks.getHelpers() callbacks.setExtensionName("WhatsApp Decoder") self.banner = JLabel("WHATSAPP DECRYPTION AND ENCRYPTION EXTENSION BY DIKLA BARDA, ROMAN ZAIKIN", SwingConstants.CENTER) self.banner.setFont(Font("Serif", Font.PLAIN, 17)) self.banner.setBorder(BorderFactory.createLineBorder(Color.BLACK)) self.statusConn = JLabel("CONNECTION STATUS: ") self.statusConnField = JLabel("NOT CONNECTED") self.statusAct = JLabel("ACTION STATUS: ") self.statusActField = JLabel("OK") self.ref = JLabel("Ref object: ") self.refField = JTextField("123", 80) self.refField.setToolTipText("Copy the Ref from burpsuit WebSocket, make sure that the parameter 'secret' is there and you copy only the 'ref' without the connection and other data, if not logout from your whatsapp web and login again.") self.privateKey = JLabel("Private Key:") self.privateKeyField = JTextField("123", 80) self.privateKeyField.setToolTipText("Copy the private key list from your whatsapp web according to our blog post ") self.publicKey = JLabel("Public Key: ") self.publicKeyField = JTextField("123", 80) self.publicKeyField.setToolTipText("Copy the public key list from your whatsapp web according to our blog post") self.statusPanel1 = JPanel() self.statusPanel1.add(self.statusConn) self.statusPanel1.add(self.statusConnField) self.statusPanel2 = JPanel() self.statusPanel2.add(self.statusAct) self.statusPanel2.add(self.statusActField) self.privateKeyPanel = JPanel() self.privateKeyPanel.add(self.privateKey) self.privateKeyPanel.add(self.privateKeyField) self.publicKeyPanel = JPanel() self.publicKeyPanel.add(self.publicKey) self.publicKeyPanel.add(self.publicKeyField) self.refPanel = JPanel() self.refPanel.add(self.ref) self.refPanel.add(self.refField) self.messageField = JTextArea("", 5, 90) self.messageField.setLineWrap(True) self.messageField.setToolTipText("If you putting in the incoming traffic you can copy it from burp suit, the outgoing is the list from aesCbcEncrypt") self.whatsAppMessagesPanel = JPanel() self.whatsAppMessagesPanel.add(self.messageField) self.btnSave = JButton("Connect", actionPerformed=self.saveConfig) self.btnRestore = JButton("Clear", actionPerformed=self.clearConfig) self.grpConfig = JPanel() self.grpConfig.add(self.btnSave) self.grpConfig.add(self.btnRestore) self.btnIncoming = JButton("Incoming", actionPerformed=self.performAction) self.btnOutgoing = JButton("Outgoing", actionPerformed=self.performAction) self.btnEncrypt = JButton("Encrypt", actionPerformed=self.performAction) self.btnEncrypt.setEnabled(False) # Can't send data without a direction self.btnDecrypt = JButton("Decrypt", actionPerformed=self.performAction) self.btnDecrypt.setEnabled(False) # Can't send data without a direction self.btnCrypt = JPanel() self.btnCrypt.add(self.btnIncoming) self.btnCrypt.add(self.btnEncrypt) self.btnCrypt.add(self.btnDecrypt) self.btnCrypt.add(self.btnOutgoing) self.tab = JPanel() layout = GridBagLayout() self.tab.setLayout(layout) c = GridBagConstraints() c.ipadx = 0 c.ipady = 0 c.fill = GridBagConstraints.BOTH #c.weightx = 0 # gap between the x items #c.weighty = 0 # gap between the y items c.anchor = GridBagConstraints.NORTHWEST c.gridx = 0 c.gridy = 0 self.tab.add(self.banner, c) c.gridx = 0 c.gridy = 1 self.tab.add(self.refPanel, c) c.gridx = 0 c.gridy = 2 self.tab.add(self.privateKeyPanel, c) c.gridx = 0 c.gridy = 3 self.tab.add(self.publicKeyPanel, c) c.gridx = 0 c.gridy = 4 c.anchor = GridBagConstraints.CENTER self.tab.add(self.grpConfig, c) c.gridx = 0 c.gridy = 5 self.tab.add(self.whatsAppMessagesPanel, c) c.gridx = 0 c.gridy = 6 self.tab.add(self.btnCrypt, c) c.gridx = 0 c.gridy = 7 self.tab.add(self.statusPanel1, c) c.gridx = 0 c.gridy = 8 self.tab.add(self.statusPanel2, c) # restore config self.restoreConfig() callbacks.addSuiteTab(self) def performAction(self, e=None): self.client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.client.settimeout(self.socket_time_out) self.data = self.messageField.getText() eventSource = e.getSource() eventSource.setEnabled(False) # Incoming data if eventSource == self.btnIncoming: self.direction = "in" self.btnOutgoing.setEnabled(True) self.btnEncrypt.setEnabled(True) self.btnDecrypt.setEnabled(True) # Outgoing data elif eventSource == self.btnOutgoing: self.direction = "out" self.btnIncoming.setEnabled(True) self.btnEncrypt.setEnabled(True) self.btnDecrypt.setEnabled(True) # Send elif eventSource == self.btnDecrypt: self.btnDecrypt.setEnabled(True) clientData = json.dumps({"action": "decrypt", "data": { "direction": self.direction, "msg": self.messageField.getText() } }) self.client.sendto(clientData, ("127.0.0.1",2912)) try: serverData, addr = self.client.recvfrom(2048) serverData = json.loads(serverData) if serverData["status"] == 0: print serverData self.messageField.setText(json.dumps(serverData["data"])) self.statusActField.setForeground(Color.GREEN) self.statusActField.setText("OK") else: self.statusActField.setForeground(Color.RED) self.statusActField.setText("Error: {}".format(json.dumps(serverData["data"]))) except socket.timeout: pass elif eventSource == self.btnEncrypt: self.btnEncrypt.setEnabled(True) clientData = json.dumps({"action": "encrypt", "data": { "direction": self.direction, "msg": self.messageField.getText() } }) self.client.sendto(clientData, ("127.0.0.1", 2912)) try: serverData, addr = self.client.recvfrom(2048) serverData = json.loads(serverData) if serverData["status"] == 0: if isinstance(serverData["data"], list): self.messageField.setText(json.dumps(serverData["data"])) else: self.messageField.setText(serverData["data"]) self.statusActField.setForeground(Color.GREEN) self.statusActField.setText("OK") else: self.statusActField.setForeground(Color.RED) self.statusActField.setText("Error: {}".format(json.dumps(serverData["data"]))) except socket.timeout: pass self.client.close() def saveConfig(self, e=None): self.client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) self.client.settimeout(self.socket_time_out) config = { 'ref': self.refField.getText(), 'private': self.privateKeyField.getText(), 'public': self.publicKeyField.getText(), } self.callbacks.saveExtensionSetting("config", pickle.dumps(config)) try: clientData = json.dumps({"action":"init", "data":{ "ref":json.loads(self.refField.getText()), "private":self.privateKeyField.getText(), "public":self.publicKeyField.getText() } }) self.client.sendto(clientData, ("127.0.0.1", 2912)) serverData, addr = self.client.recvfrom(2048) print (serverData) self.statusConnField.setText("CONNECTED") self.statusActField.setForeground(Color.GREEN) self.statusActField.setText("OK") except socket.timeout: self.statusActField.setForeground(Color.RED) self.statusActField.setText("Error: Can't connect to the local server make sure parser.py is running!") pass except Exception as e: self.statusActField.setForeground(Color.RED) self.statusActField.setText("Error: make Sure the ref is a correct json!") self.client.close() def clearConfig(self, e=None): self.refField.setText("") self.privateKeyField.setText("") self.publicKeyField.setText("") self.statusConnField.setText("NOT CONNECTED") self.statusActField.setText("OK") self.messageField.setText("") def restoreConfig(self, e=None): storedConfig = self.callbacks.loadExtensionSetting("config") if storedConfig != None: config = pickle.loads(storedConfig) self.refField.setText(config["ref"]) self.privateKeyField.setText(config["private"]) self.publicKeyField.setText(config["public"]) def getTabCaption(self): return ("WhatsApp Decoder") def getUiComponent(self): return self.tab
def create(self): # Estilo general para todas las sub-tab. gBC = GridBagConstraints() gBC.fill = GridBagConstraints.BOTH gBC.ipadx = 5 gBC.ipady = 5 gBC.insets = Insets(0, 5, 5, 5) gBC.weightx = 0.5 #gBC.weighty = 0.7 ####################################### ### Creamos la primera sub-tab. (MASHUP) ####################################### tab_1 = JPanel(GridBagLayout()) tab_1_jlabelAyuda = JLabel( '<html><i>•Tip: This Mashup receive one or more keywords in order to generate a list of possible passwords</i></html>' ) tab_1_jlabelAyuda.setFont(Font("Serif", 0, 12)) gBC.gridx = 0 gBC.gridy = 0 tab_1.add( JLabel('<html><font color=green><i>Income:</i></font></html>'), gBC) gBC.gridy = 1 tab_1.add(JLabel('<html><b>• Name:</b></html>'), gBC) gBC.gridy = 2 tab_1.add(self._tab1_nombre, gBC) gBC.gridy = 3 tab_1.add(JLabel('<html><b>• Surname:</b></html>'), gBC) gBC.gridy = 4 tab_1.add(self._tab1_apellido, gBC) gBC.gridy = 5 tab_1.add(JLabel('<html><b>• Birthdate: (DDMMYYYY)</b></html>'), gBC) gBC.gridy = 6 tab_1.add(self._tab1_FNacimiento, gBC) gBC.gridy = 7 tab_1.add(JLabel('<html><b>• Pet:</b></html>'), gBC) gBC.gridy = 8 tab_1.add(self._tab1_mascota, gBC) gBC.gridy = 9 tab_1.add(JLabel('<html><b>• Anyother:</b></html>'), gBC) gBC.gridy = 10 tab_1.add(self._tab1_otro, gBC) gBC.gridy = 11 tab_1.add(JLabel('<html><b>• Passwd Min Size:</b></html>'), gBC) gBC.gridy = 12 tab_1.add(self._tab1_minsize, gBC) gBC.gridy = 13 tab_1.add(JLabel('<html><b>• Passwd Max Size:</b></html>'), gBC) gBC.gridy = 14 tab_1.add(self._tab1_maxsize, gBC) gBC.gridy = 15 tab_1.add( JLabel( '<html><b>• Especial Chars: (comma separated)</b></html>' ), gBC) gBC.gridy = 16 tab_1.add(self._tab1_specialchars, gBC) gBC.gridy = 17 tab_1.add(self._tab1_transformations, gBC) gBC.gridy = 18 tab_1.add(self._tab1_firstcapital, gBC) gBC.gridy = 19 tab_1.add(JButton('Mashup!', actionPerformed=self.mashup), gBC) gBC.gridy = 20 gBC.gridwidth = 3 tab_1.add(JSeparator(), gBC) gBC.gridwidth = 1 gBC.gridy = 21 gBC.gridwidth = 3 tab_1.add(tab_1_jlabelAyuda, gBC) gBC.gridwidth = 1 gBC.gridx = 1 gBC.gridy = 0 gBC.gridheight = 20 gBC.weightx = 0 tab_1.add(JSeparator(SwingConstants.VERTICAL), gBC) gBC.gridheight = 1 gBC.weightx = 0.5 gBC.gridx = 2 gBC.gridy = 0 tab_1.add( JLabel('<html><font color=green><i>Outcome:</i></font></html>'), gBC) gBC.gridy = 1 gBC.gridwidth = 2 gBC.gridheight = 18 tab_1.add(self._tab1_feedback_sp, gBC) gBC.gridwidth = 1 gBC.gridheight = 1 gBC.gridy = 19 tab_1.add( JButton('Copy to clipboard!', actionPerformed=self.cpy_clipboard), gBC) ####################################### ### Creamos la segunda sub-tab. (REDIRECT) ####################################### tab_2 = JPanel(GridBagLayout()) tab_2_jlabelAyuda = JLabel( '<html><i>•Tip: This Redirect receive a pair of hosts x,y in order to redirect from x to y.</i></html>' ) tab_2_jlabelAyuda.setFont(Font("Serif", 0, 12)) gBC.gridx = 0 gBC.gridy = 0 tab_2.add( JLabel('<html><b>• From: (i.e. www.facebook.com)</b></html>'), gBC) gBC.gridx = 1 gBC.gridy = 0 tab_2.add(self._tab2_JTFa, gBC) gBC.gridx = 2 gBC.gridy = 0 tab_2.add( JLabel('<html><b>• To: (i.e. www.myhomepage.es)</b></html>'), gBC) gBC.gridx = 3 gBC.gridy = 0 tab_2.add(self._tab2_JTFaa, gBC) gBC.gridx = 0 gBC.gridy = 1 gBC.gridwidth = 4 tab_2.add(JSeparator(), gBC) gBC.gridwidth = 1 gBC.gridx = 0 gBC.gridy = 2 tab_2.add(JLabel('<html><b>• From:</b></html>'), gBC) gBC.gridx = 1 gBC.gridy = 2 tab_2.add(self._tab2_JTFb, gBC) gBC.gridx = 2 gBC.gridy = 2 tab_2.add(JLabel('<html><b>• To:</b></html>'), gBC) gBC.gridx = 3 gBC.gridy = 2 tab_2.add(self._tab2_JTFbb, gBC) gBC.gridx = 0 gBC.gridy = 3 gBC.gridwidth = 4 tab_2.add(self._tab2_boton, gBC) gBC.gridwidth = 1 gBC.gridx = 0 gBC.gridy = 4 gBC.gridwidth = 4 gBC.insets = Insets(100, 10, 5, 10) tab_2.add(JSeparator(), gBC) gBC.gridwidth = 1 gBC.insets = Insets(5, 10, 5, 10) gBC.gridx = 0 gBC.gridy = 5 gBC.gridwidth = 4 tab_2.add(tab_2_jlabelAyuda, gBC) gBC.gridwidth = 1 ####################################### ### Creamos la tercera sub-tab. (LOADER) ####################################### tab_3 = JPanel(GridBagLayout()) tab_3_jlabelAyuda = JLabel( '<html><i>•Tip: This Loader receive a list of Hosts or IPs that will be added to the Burp Scope.</i></html>' ) tab_3_jlabelAyuda.setFont(Font("Serif", 0, 12)) gBC.gridx = 0 gBC.gridy = 0 tab_3.add( JLabel( '<html><font color=green><i>List of targets: (i.e. http://www.mytargetweb.com)</i></font></html>' ), gBC) gBC.gridy = 1 gBC.gridheight = 10 gBC.weighty = 0.5 tab_3.add(self._tab3_urls_sp, gBC) gBC.gridheight = 1 gBC.weighty = 0 gBC.gridy = 11 tab_3.add( JButton('Load Into Target => Scope!', actionPerformed=self.loader), gBC) gBC.gridy = 12 gBC.gridwidth = 5 gBC.insets = Insets(100, 10, 5, 10) tab_3.add(JSeparator(), gBC) gBC.gridwidth = 1 gBC.insets = Insets(5, 10, 5, 10) gBC.gridy = 13 tab_3.add(tab_3_jlabelAyuda, gBC) ####################################### ### Creamos la cuarta sub-tab. (HEADERS) ####################################### tab_4_jlabelAyuda = JLabel( "<html><i>•Tip: This Headers records all unique headers that appear in every host, check out the security headers.</i></html>" ) tab_4_jlabelAyuda.setFont(Font("Serif", 0, 12)) tab_4_jLabelRecomendacion = JLabel( "<html>•<b>Server</b>: Don't give away much information.<br> •<b>Content-Security-Policy</b>: Protect your site from XSS attacks by whitelisting sources of approved content.<br> •<b>Strict-Transport-Security</b>: Enforce the browser to use HTTPS.<br> •<b>Public-Key-Pins</b>: Protect your site from MITM attacks.<br> •<b>X-Content-Type-Options</b>: the valid value is -> nosniff .<br> •<b>X-Frame-Options</b>: tells the browser whether you want to allow your site to be framed or not.<br> •<b>X-XSS-Protection</b>: the best value is -> 1; mode=block .</html>" ) tab_4_jLabelRecomendacion.setFont(Font("Dialog", 0, 13)) tab_4 = JPanel(GridBagLayout()) splitpane = JSplitPane(JSplitPane.VERTICAL_SPLIT) tab_4_top = JPanel(GridBagLayout()) tab_4_bottom = JPanel(GridBagLayout()) gBC_table = GridBagConstraints() gBC_table.fill = GridBagConstraints.BOTH gBC_table.ipadx = 5 gBC_table.ipady = 5 gBC_table.insets = Insets(5, 10, 5, 10) gBC_table.weightx = 1 gBC_table.weighty = 1 tabla_datos = [] tabla_headers = ('Severity', 'Header', 'Value', 'Host') self._tab4_tabla_model = DefaultTableModel(tabla_datos, tabla_headers) tabla_ej = JTable(self._tab4_tabla_model) tabla_example = JScrollPane(tabla_ej, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED) gBC_table.gridx = 0 gBC_table.gridy = 0 gBC_table.gridheight = 5 tab_4_top.add(tabla_example, gBC_table) gBC_table.gridheight = 1 gBC_table.weightx = 0.5 gBC_table.weighty = 0 gBC_table.gridwidth = 2 gBC_table.gridx = 0 gBC_table.gridy = 0 tab_4_bottom.add(JSeparator(), gBC_table) gBC_table.gridy = 1 tab_4_bottom.add(tab_4_jlabelAyuda, gBC_table) gBC_table.gridy = 2 tab_4_bottom.add(tab_4_jLabelRecomendacion, gBC_table) splitpane.setTopComponent(tab_4_top) splitpane.setBottomComponent(tab_4_bottom) gBC_table.weightx = 1 gBC_table.weighty = 1 gBC_table.gridx = 0 gBC_table.gridy = 0 tab_4.add(splitpane, gBC_table) ####################################### ### Creamos la quinta sub-tab. (ACTIVE SCAN) ####################################### tab_5 = JPanel(GridBagLayout()) tab_5_jlabelAyuda = JLabel( '<html><i>•Tip: This Quick Scan receive a list of targets and launch an active scan.</i></html>' ) tab_5_jlabelAyuda.setFont(Font("Serif", 0, 12)) tab_5_jlabelWarning = JLabel( '<html><font color=red><i>•Warning: Active scanning generates large numbers of requests which are malicious in form and which may result in compromise of the application. You should use this scanning mode with caution, only with the explicit permission of the application owner. For more information, read the documentation of active scan, Burp Suite.</font></i></html>' ) tab_5_jlabelWarning.setFont(Font("Dialog", 0, 13)) gBC.gridx = 0 gBC.gridy = 0 tab_5.add( JLabel( '<html><font color=green><i>List of targets: (i.e. http://192.168.1.1/index.html)</i></font></html>' ), gBC) gBC.gridy = 1 gBC.gridheight = 8 gBC.weighty = 0.5 tab_5.add(self._tab5_target_sp, gBC) gBC.gridheight = 1 gBC.weighty = 0 gBC.gridy = 9 tab_5.add(JButton('Launch Scan!', actionPerformed=self.do_active_scan), gBC) gBC.gridy = 10 gBC.gridwidth = 5 gBC.insets = Insets(100, 10, 5, 10) tab_5.add(JSeparator(), gBC) gBC.gridwidth = 1 gBC.insets = Insets(5, 10, 5, 10) gBC.gridy = 11 tab_5.add(tab_5_jlabelAyuda, gBC) gBC.gridy = 12 tab_5.add(tab_5_jlabelWarning, gBC) ####################################### ### Creamos la ultima sub-tab. ####################################### tab_about = JPanel(GridBagLayout()) gBC_about = GridBagConstraints() gBC_about.fill = GridBagConstraints.HORIZONTAL gBC_about.ipadx = 5 gBC_about.ipady = 5 gBC_about.insets = Insets(5, 10, 5, 10) gBC_about.weightx = 1 gBC_about.weighty = 1 Jlabel1 = JLabel('<html><b>Plug-in L-Tools</b></html>') Jlabel1.setFont(Font("Dialog", 1, 18)) jlabel2 = JLabel( '<html>This Plug-in provides utilities for pentesters, researchers and developers, in order to support their work.</html>' ) jlabel3 = JLabel('<html><b>CC-BY 4.0, 2017. Gino Angles</b></html>') jlabel3.setFont(Font("Dialog", 1, 14)) jlabel4 = JLabel('<html><b>License</b></html>') jlabel4.setFont(Font("Dialog", 1, 14)) jlabel5 = JLabel( '<html><img alt="Licensed under a Creative Commons BY" style="border-width:0" src="https://licensebuttons.net/l/by/4.0/88x31.png"></html>' ) jlabel6 = JLabel( '<html>This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>.</html>' ) jlabel7 = JLabel('<html><b>Dependencies</b></html>') jlabel7.setFont(Font("Dialog", 1, 14)) jlabel8 = JLabel('Jython +2.7') jlabel9 = JLabel('http://www.jython.org') gBC_about.gridx = 0 gBC_about.gridy = 0 tab_about.add(Jlabel1, gBC_about) gBC_about.gridy = 1 tab_about.add(jlabel2, gBC_about) gBC_about.gridy = 2 tab_about.add(jlabel3, gBC_about) gBC_about.gridy = 3 gBC_about.gridwidth = 5 tab_about.add(JSeparator(), gBC_about) gBC_about.gridwidth = 1 gBC_about.gridy = 4 tab_about.add(jlabel4, gBC_about) gBC_about.gridy = 5 tab_about.add(jlabel5, gBC_about) gBC_about.gridy = 6 tab_about.add(jlabel6, gBC_about) gBC_about.gridy = 7 gBC_about.gridwidth = 5 tab_about.add(JSeparator(), gBC_about) gBC_about.gridwidth = 1 gBC_about.gridy = 8 tab_about.add(jlabel7, gBC_about) gBC_about.gridy = 9 tab_about.add(jlabel8, gBC_about) gBC_about.gridy = 10 tab_about.add(jlabel9, gBC_about) # Añadimos los sub-tab al contenedor y lo devolvemos. self.contenedor.addTab('Mashup', tab_1) self.contenedor.addTab('Redirect', tab_2) self.contenedor.addTab('Loader', tab_3) self.contenedor.addTab('Headers', tab_4) self.contenedor.addTab('Quick Scan', tab_5) self.contenedor.addTab('About', tab_about) return self.contenedor
class DataSourcesPanelSettings(JPanel): serialVersionUID = 1L def __init__(self): self.pcs = PropertyChangeSupport(self) self.initComponents() self.customizeComponents() def getVersionNumber(self): return serialVersionUID #PROCESSOR LOGIC def run(self, progressMonitor, callback): threading.Thread(target=self.running, args=[progressMonitor, callback]).start() def running(self, progressMonitor, callback): progressMonitor.setIndeterminate(True) newDataSources = [] errors = [] result = DataSourceProcessorCallback.DataSourceProcessorResult.NO_ERRORS try: extractor = Extractor(self.selected_apps, self.selected_devices, progressMonitor) folders = extractor.dump_apps() for serial, folder in folders.items(): try: data_source = PsyUtils.add_to_fileset("ADB_{}_{}".format( serial, int(time.time())), folder, notify=False) newDataSources.append(data_source) except Exception as e: message = "Extractor Failed for {} for {}!".format( serial, e) logging.error(message) errors.append(message) result = DataSourceProcessorCallback.DataSourceProcessorResult.NONCRITICAL_ERRORS except Exception as e: message = "Global Extractor Failed. Aborting: {}".format(e) logging.error(message) errors.append(message) result = DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS if len(newDataSources) == 0: result = DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS callback.done(result, errors, newDataSources) #PROCESSOR JPANEL LOGIC def addPropertyChangeListener(self, pcl): super(DataSourcesPanelSettings, self).addPropertyChangeListener(pcl) self.pcs.addPropertyChangeListener(pcl) def fireUIUpdate(self): #Fire UI change, this is necessary to know if it's allowed to click next self.pcs.firePropertyChange( DataSourceProcessor.DSP_PANEL_EVENT.UPDATE_UI.toString(), False, True) def validatePanel(self): return (len(self.selected_apps) != 0 and len(self.selected_devices) != 0) def initComponents(self): self.apps_checkboxes_list = [] self.devices_checkboxes_list = [] self.selected_apps = [] self.selected_devices = [] self.setLayout(BoxLayout(self, BoxLayout.PAGE_AXIS)) self.setPreferredSize( Dimension(543, 172) ) #Max 544x173 https://www.sleuthkit.org/autopsy/docs/api-docs/3.1/interfaceorg_1_1sleuthkit_1_1autopsy_1_1corecomponentinterfaces_1_1_data_source_processor.html#a068919818c017ee953180cc79cc68c80 # info menu self.p_info = SettingsUtils.createPanel() self.p_info.setPreferredSize(Dimension(543, 172)) self.d_method = SettingsUtils.createPanel(pbottom=15) self.label = JLabel( 'Press "Find Devices" to search for devices to extract information.' ) self.label.setBorder(EmptyBorder(0, 0, 5, 0)) self.d_method.add(self.label) self.label = JLabel('It will generate a file set per device.') self.label.setBorder(EmptyBorder(0, 0, 10, 0)) self.d_method.add(self.label) self.label = JLabel( 'This extract method requires ADB enabled on the device and may require root privilege for some paths.' ) self.label.setFont(self.label.getFont().deriveFont(Font.BOLD, 11)) self.label.setBorder(EmptyBorder(0, 0, 10, 0)) self.d_method.add(self.label) self.search_devices = JButton('Find Devices', actionPerformed=self.findDevices) self.d_method.add(self.search_devices) self.p_method = SettingsUtils.createPanel(ptop=15) self.sp2 = SettingsUtils.createSeparators(0) self.p_info.add(self.sp2, BorderLayout.SOUTH) self.p_method.add(JLabel("Extract user data from:")) self.p_apps = SettingsUtils.createPanel(True, pbottom=10) self.p_devices = SettingsUtils.createPanel(True) self.choose_device = JLabel("Choose device:") self.choose_device.setVisible(False) self.appsBlock() self.add(self.d_method) self.add(JSeparator()) self.add(self.p_method) self.add(self.p_apps) self.add(self.choose_device) self.add(self.p_devices) self.add(self.p_info) self.findDevices("") def customizeComponents(self): self.updateCheckboxes("") def updateCheckboxes(self, event): self.getSelectedApps(event) #initialize selected apps self.getSelectedDevices(event) #initialize selected devices self.fireUIUpdate() def findDevices(self, event): self.p_devices.removeAll() self.devices_checkboxes_list = [] devices = DeviceCommunication.list_devices() for device in devices: checkbox = SettingsUtils.addDeviceCheckbox(device, self.updateCheckboxes, visible=True) self.devices_checkboxes_list.append(checkbox) self.p_devices.add(checkbox) self.choose_device.setVisible(len(self.devices_checkboxes_list) > 0) #refresh list self.p_devices.setVisible(False) self.p_devices.setVisible(True) self.updateCheckboxes(event) def appsBlock(self): sorted_items = OrderedDict(sorted(Utils.get_all_packages().items())) for app, app_id in sorted_items.iteritems(): #(app, app_id) checkbox = SettingsUtils.addApplicationCheckbox( app, app_id, self.updateCheckboxes, visible=True) #self.add(checkbox) self.apps_checkboxes_list.append(checkbox) self.p_apps.add(checkbox) def getSelectedDevices(self, event): self.selected_apps = [] for cb_app in self.apps_checkboxes_list: if cb_app.isSelected(): self.selected_apps.append(cb_app.getActionCommand()) def getSelectedApps(self, event): self.selected_devices = [] for cb_app in self.devices_checkboxes_list: if cb_app.isSelected(): self.selected_devices.append(cb_app.getActionCommand())
class BurpExtender(IBurpExtender, IBurpExtenderCallbacks, IIntruderPayloadProcessor, ITab, IExtensionStateListener): def registerExtenderCallbacks( self, callbacks): self._helpers = callbacks.getHelpers() callbacks.setExtensionName("JWT FuzzHelper") callbacks.registerIntruderPayloadProcessor(self) callbacks.registerExtensionStateListener(self) self._stdout = PrintWriter(callbacks.getStdout(), True) self._stderr = PrintWriter(callbacks.getStderr(), True) # Holds values passed by user from Configuration panel self._fuzzoptions = { "target" : "Header", "selector" : None, "signature" : False, "algorithm" : "HS256", "key" : "", "key_cmd" : "" } self._isNone = lambda val: isinstance(val, type(None)) # Configuration panel Layout self._configurationPanel = JPanel() gridBagLayout = GridBagLayout() gridBagLayout.columnWidths = [ 0, 0, 0] gridBagLayout.rowHeights = [ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] gridBagLayout.columnWeights = [ 0.0, 0.0, 0.0 ] gridBagLayout.rowWeights = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0] self._configurationPanel.setLayout(gridBagLayout) # Setup tabs self._tabs = JTabbedPane() self._tabs.addTab('Configuration',self._configurationPanel) #self._tabs.addTab('Help',self._helpPanel) # Target Options targetLabel = JLabel("Target Selection (Required): ") targetLabel.setFont(Font("Tahoma",Font.BOLD, 12)) c = GridBagConstraints() c.gridx = 0 c.gridy = 1 c.insets = Insets(0,10,0,0) c.anchor = GridBagConstraints.LINE_END self._configurationPanel.add(targetLabel,c) options = [ 'Header', 'Payload' ] self._targetComboBox = JComboBox(options) c = GridBagConstraints() c.gridx = 1 c.gridy = 1 c.anchor = GridBagConstraints.LINE_START self._configurationPanel.add(self._targetComboBox,c) # Help Button self._helpButton = JButton("Help", actionPerformed=self.helpMenu) c = GridBagConstraints() c.gridx = 2 c.gridy = 1 c.anchor = GridBagConstraints.FIRST_LINE_START self._configurationPanel.add(self._helpButton,c) # Selector Options self._selectorLabel = JLabel("JSON Selector [Object Identifier-Index Syntax] (Required): ") self._selectorLabel.setFont(Font("Tahoma",Font.BOLD, 12)) c = GridBagConstraints() c.gridx = 0 c.gridy = 2 c.insets = Insets(0,10,0,0) c.anchor = GridBagConstraints.LINE_END self._configurationPanel.add(self._selectorLabel, c) self._selectorTextField = JTextField('',50) c = GridBagConstraints() c.gridx = 1 c.gridy = 2 self._configurationPanel.add(self._selectorTextField, c) # Regex option self._regexLabel = JLabel("Use regex as JSON Selector? (Optional): ") self._regexLabel.setFont(Font("Tahoma",Font.BOLD, 12)) c = GridBagConstraints() c.gridx = 0 c.gridy = 3 c.insets = Insets(0,0,0,0) c.anchor = GridBagConstraints.LINE_END self._configurationPanel.add(self._regexLabel,c) self._regexCheckBox = JCheckBox("", actionPerformed=self.regexSelector) c = GridBagConstraints() c.gridx = 1 c.gridy = 3 c.anchor = GridBagConstraints.FIRST_LINE_START self._configurationPanel.add(self._regexCheckBox,c) # Signature Options generateSignatureLabel = JLabel("Generate signature? (Required): ") generateSignatureLabel.setFont(Font("Tahoma",Font.BOLD, 12)) c = GridBagConstraints() c.gridx = 0 c.gridy = 4 c.insets = Insets(0,10,0,0) c.anchor = GridBagConstraints.LINE_END self._configurationPanel.add(generateSignatureLabel,c) options = ["False", "True"] self._generateSignatureComboBox = JComboBox(options) c = GridBagConstraints() c.gridx = 1 c.gridy = 4 c.anchor = GridBagConstraints.LINE_START self._configurationPanel.add(self._generateSignatureComboBox,c) signatureAlgorithmLabel = JLabel("Signature Algorithm (Optional): ") signatureAlgorithmLabel.setFont(Font("Tahoma",Font.BOLD, 12)) c = GridBagConstraints() c.gridx = 0 c.gridy = 5 c.insets = Insets(0,10,0,0) c.anchor = GridBagConstraints.LINE_END self._configurationPanel.add(signatureAlgorithmLabel,c) options = ["None", "HS256","HS384","HS512","ES256","ES384","ES512","RS256","RS384","RS512","PS256","PS256","PS384","PS512"] self._algorithmSelectionComboBox = JComboBox(options) c = GridBagConstraints() c.gridx = 1 c.gridy = 5 c.anchor = GridBagConstraints.LINE_START self._configurationPanel.add(self._algorithmSelectionComboBox,c) # Signing key options self._signingKeyLabel = JLabel("Signing Key (Optional): ") self._signingKeyLabel.setFont(Font("Tahoma",Font.BOLD, 12)) c = GridBagConstraints() c.gridx = 0 c.gridy = 6 c.insets = Insets(0,10,0,0) c.anchor = GridBagConstraints.LINE_END self._configurationPanel.add(self._signingKeyLabel,c) self.addSigningKeyTextArea() self._fromFileTextField = JTextField('',50) fromFileLabel = JLabel("Signing key from file? (Optional): ") fromFileLabel.setFont(Font("Tahoma",Font.BOLD, 12)) c = GridBagConstraints() c.gridx = 0 c.gridy = 7 c.insets = Insets(0,0,0,0) c.anchor = GridBagConstraints.LINE_END self._configurationPanel.add(fromFileLabel,c) self._fromFileCheckBox = JCheckBox("", actionPerformed=self.fromFile) c = GridBagConstraints() c.gridx = 1 c.gridy = 7 c.anchor = GridBagConstraints.FIRST_LINE_START self._configurationPanel.add(self._fromFileCheckBox,c) self._fromCmdTextField = JTextField('',50) fromCmdLabel = JLabel("Signing key from command? (Optional): ") fromCmdLabel.setFont(Font("Tahoma",Font.BOLD, 12)) c = GridBagConstraints() c.gridx = 0 c.gridy = 8 c.insets = Insets(0,0,0,0) c.anchor = GridBagConstraints.LINE_END self._configurationPanel.add(fromCmdLabel,c) self._fromCmdCheckBox = JCheckBox("", actionPerformed=self.fromCmd) c = GridBagConstraints() c.gridx = 1 c.gridy = 8 c.anchor = GridBagConstraints.FIRST_LINE_START self._configurationPanel.add(self._fromCmdCheckBox,c) self._saveButton = JButton("Save Configuration", actionPerformed=self.saveOptions) self._saveButton.setText("Save Configuration") c = GridBagConstraints() c.gridx = 1 c.gridy = 9 c.anchor = GridBagConstraints.FIRST_LINE_START self._configurationPanel.add(self._saveButton,c) callbacks.customizeUiComponent(self._configurationPanel) callbacks.customizeUiComponent(self._tabs) callbacks.addSuiteTab(self) self._stdout.println("[JWT FuzzHelper] Loaded successfully") return def getProcessorName(self): return "JWT Fuzzer" def extensionUnloaded(self): del self._configurationPanel return # Intruder logic function def processPayload(self, currentPayload, originalPayload, baseValue): dataParameter = self._helpers.bytesToString( self._helpers.urlDecode(baseValue) ) # utf-8 encode header,payload,signature = [unicode(s).encode('utf-8') for s in dataParameter.split(".",3)] decoded_header = self._helpers.bytesToString( self._helpers.base64Decode(header + "=" * (-len(header) % 4)) ) decoded_payload = self._helpers.bytesToString( self._helpers.base64Decode(payload+"=" * (-len(payload) % 4)) ) # Decode header and payload, preserving order if they are JSON objects # Decode header try: header_dict = json.loads(decoded_header, object_pairs_hook=OrderedDict) except ValueError: raise RuntimeException("[JWT FuzzHelper] Error: ValueError. Failed to decode header!") except Exception as e: self._stderr.println("[ERROR] Encountered an unknown error when decoding header:\n{}\nCarrying on...".format(e)) # Decode payload # Payload does not have to be a JSON object. # Ref: https://github.com/auth0/node-jsonwebtoken#usage payload_is_string = False try: payload_dict = json.loads(decoded_payload, object_pairs_hook=OrderedDict) except ValueError: payload_is_string = True payload_dict = decoded_payload except Exception as e: self._stderr.println("[ERROR] Encountered an unknown error when decoding payload:\n{}\nCarrying on...".format(e)) target = header_dict if self._fuzzoptions["target"] == "Header" else payload_dict selector = self._fuzzoptions["selector"] # If using Object Identifier-Index then retrieve the # value specified by the selector, # if this value does not exist, assume the user # wants to add the value that would have been specified # by the selector to the desired JWT segment (this behavior will # be noted in the help docs) intruderPayload = self._helpers.bytesToString(currentPayload) if not self._fuzzoptions["regex"]: if selector != [""]: try: value = self.getValue(target, selector) except Exception: target = self.buildDict(target, selector) if not self._isNone(selector) and selector != [""]: target = self.setValue(target, selector, intruderPayload) # Simple match-replace for regex if self._fuzzoptions["regex"]: target_string = target if payload_is_string else json.dumps(target) target_string = re.sub(selector, intruderPayload, target_string) target = target_string if payload_is_string else json.loads(target_string, object_pairs_hook=OrderedDict) if self._fuzzoptions["target"] == "Payload": payload_dict = target else: header_dict = target algorithm = self._fuzzoptions["algorithm"] if self._fuzzoptions["signature"]: # pyjwt requires lowercase 'none'. If user wants to try # "none", "NonE", "nOnE", etc... they should use .alg # as selector, delete sig from intruder and use those # permutations as their fuzz list (outlined in help docs) # and keep "Generate Signature" as False algorithm = "none" if algorithm.lower() == "none" else algorithm header_dict["alg"] = algorithm header = json.dumps(header_dict, separators=(",",":")) payload = payload_dict if payload_is_string else json.dumps(payload_dict, separators=(",",":")) header = self._helpers.base64Encode(header).strip("=") payload = self._helpers.base64Encode(payload).strip("=") contents = header + "." + payload key = self._fuzzoptions["key"] if len(self._fuzzoptions["key_cmd"]) > 0: # we provide 'contents' value as an only argument to key-generating command # it is expected that the command will print only the signature signature = check_output([self._fuzzoptions["key_cmd"], contents]) modified_jwt = contents + "." + signature elif self._fuzzoptions["signature"]: # pyjwt throws error when using a public key in symmetric alg (for good reason of course), # must do natively to support algorithmic sub attacks if algorithm.startswith("HS"): if algorithm == "HS256": hmac_algorithm = hashlib.sha256 elif algorithm == "HS384": hmac_algorithm = hashlib.sha384 else: hmac_algorithm = hashlib.sha512 signature = self._helpers.base64Encode( hmac.new( key, contents, hmac_algorithm ).digest() ).strip("=") modified_jwt = contents + "." +signature # JWT can't sign non-JSON payloads. WTF. This block is for non-JSON payloads. elif algorithm.startswith("RS") and payload_is_string: if algorithm == "RS256": rsa_algorithm = "SHA-256" elif algorithm == "RS384": rsa_algorithm = "SHA-384" else: rsa_algorithm = "SHA-512" privkey = rsa.PrivateKey.load_pkcs1(key) signature = rsa.sign(contents,privkey,rsa_algorithm) signature = base64.b64encode(signature).encode('utf-8').replace("=", "") modified_jwt = contents + "." + signature else: # Use pyjwt when using asymmetric alg if algorithm == "none": key = "" modified_jwt = jwt.encode(payload_dict,key,algorithm=algorithm,headers=header_dict) else: modified_jwt = contents + "." + signature return self._helpers.stringToBytes(modified_jwt) #----------------------- # getValue: # @return: A value at arbitrary depth in dictionary # @throws: TypeError #----------------------- def getValue(self, dictionary, values): return reduce(dict.__getitem__, values, dictionary) #----------------------- # buildDict: # @note: Will build dictionary of arbitrary depth #----------------------- def buildDict(self, dictionary, keys): if self._isNone(keys): return dictionary root = current = dictionary for key in keys: if key not in current: current[key] = {} current = current[key] return root #---------------------- # setValue: # @note: Will set key of arbitrary depth #----------------------- def setValue(self, dictionary, keys, value): root = current = dictionary for i,key in enumerate(keys): if i == len(keys) - 1: current[key] = value break if key in current: current = current[key] else: # Should never happen current = self.buildDict(current, keys) return root #----------------------- # addSigningKeyTextArea: # @note: Will toggle if fromFile selected. Be DRY. #---------------------- def addSigningKeyTextArea(self): self._signingKeyTextArea = JTextArea() self._signingKeyTextArea.setColumns(50) self._signingKeyTextArea.setRows(10) self._signingKeyScrollPane = JScrollPane(self._signingKeyTextArea) c = GridBagConstraints() c.gridx = 1 c.gridy = 6 c.anchor = GridBagConstraints.LINE_START self._configurationPanel.add(self._signingKeyScrollPane,c) def addSigningKeyFromFileTextField(self): c = GridBagConstraints() c.gridx = 1 c.gridy = 6 self._configurationPanel.add(self._fromFileTextField, c) def addSigningKeyFromCmdTextField(self): c = GridBagConstraints() c.gridx = 1 c.gridy = 6 self._configurationPanel.add(self._fromCmdTextField, c) #----------------------- # End Helpers #----------------------- #----------------------- # Implement ITab #----------------------- def getTabCaption(self): return "JWT FuzzHelper" def getUiComponent(self): return self._tabs #--------------------------- # Save configuration options #--------------------------- def saveOptions(self,event): self._fuzzoptions["target"] = self._targetComboBox.getSelectedItem() self._fuzzoptions["selector"] = self._selectorTextField.getText() self._fuzzoptions["signature"] = True if self._generateSignatureComboBox.getSelectedItem() == "True" else False self._fuzzoptions["algorithm"] = self._algorithmSelectionComboBox.getSelectedItem() self._fuzzoptions["key_cmd"] = "" if self._fromFileCheckBox.isSelected(): filename = self._fromFileTextField.getText() if os.path.isdir(filename): self._stderr.println("{} is a directory".format(filename)) return if os.path.exists(filename): with open(filename, 'rb') as f: self._fuzzoptions["key"] = f.read() elif self._fromCmdCheckBox.isSelected(): self._fuzzoptions["key_cmd"] = self._fromCmdTextField.getText() else: self._fuzzoptions["key"] = unicode(self._signingKeyTextArea.getText()).encode("utf-8") # RSA keys need to end with a line break. Many headaches because of this. if not self._fuzzoptions["key"].endswith("\n") and self._fuzzoptions["algorithm"].startswith("RS"): self._fuzzoptions["key"] += "\n" self._stdout.println("[JWT FuzzHelper] Saved options:\n{}".format(self._fuzzoptions)) # Sanity check selector if it's not a regular expression self._fuzzoptions["regex"] = self._regexCheckBox.isSelected() if not self._regexCheckBox.isSelected(): m = re.search("(\.\w+)+",self._fuzzoptions["selector"]) if self._fuzzoptions["selector"] != "." and (isinstance(m,type(None)) or m.group(0) != self._fuzzoptions["selector"]): self._saveButton.setText("Invalid JSON Selector!") else: self._fuzzoptions["selector"] = self._fuzzoptions["selector"].split(".")[1:] self._saveButton.setText("Saved!") # Sanity check the regular expression else: try: re.compile(self._fuzzoptions["selector"]) self._saveButton.setText("Saved!") except re.error: self._saveButton.setText("Invalid Regex!") return #------------------------- # From file options #------------------------ def fromFile(self,event): if self._fromFileCheckBox.isSelected(): self._signingKeyLabel.setText("Path to Signing Key (Optional): ") self._configurationPanel.remove(self._signingKeyScrollPane) self.addSigningKeyFromFileTextField() else: self._signingKeyLabel.setText("Signing Key (Optional): ") self._configurationPanel.remove(self._fromFileTextField) self.addSigningKeyTextArea() self._configurationPanel.repaint() return def fromCmd(self,event): if self._fromCmdCheckBox.isSelected(): self._signingKeyLabel.setText("Path to Signing Cmd (Optional): ") self._configurationPanel.remove(self._signingKeyScrollPane) self.addSigningKeyFromCmdTextField() else: self._signingKeyLabel.setText("Signing Key (Optional): ") self._configurationPanel.remove(self._fromCmdTextField) self.addSigningKeyTextArea() self._configurationPanel.repaint() return def regexSelector(self,event): if self._regexCheckBox.isSelected(): self._selectorLabel.setText("Selector [Regex] (Required): ") else: self._selectorLabel.setText("JSON Selector [Object Identifier-Index Syntax] (Required): ") self._configurationPanel.repaint() return #------------------------- # Help popup #------------------------- def helpMenu(self,event): self._helpPopup = JFrame('JWT Fuzzer', size=(550, 450) ); self._helpPopup.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE) helpPanel = JPanel() helpPanel.setPreferredSize(Dimension(550, 450)) helpPanel.setBorder(EmptyBorder(10, 10, 10, 10)) helpPanel.setLayout(BoxLayout(helpPanel, BoxLayout.Y_AXIS)) self._helpPopup.setContentPane(helpPanel) helpHeadingText = JLabel("<html><h2>JWT Fuzzer</h2></html>") authorText = JLabel("<html><p>@author: <pinnace></p></html>") aboutText = JLabel("<html><br /> <p>This extension adds an Intruder payload processor for JWTs.</p><br /></html>") repositoryText = JLabel("<html>Documentation and source code:</html>") repositoryLink = JLabel("<html>- <a href=\"https://github.com/pinnace/burp-jwt-fuzzhelper-extension\">https://github.com/pinnace/burp-jwt-fuzzhelper-extension</a></html>") licenseText = JLabel("<html><br/><p>JWT Fuzzer uses a GPL 3 license. This license does not apply to the dependency below:<p></html>") dependencyLink = JLabel("<html>- <a href=\"https://github.com/jpadilla/pyjwt/blob/master/LICENSE\">pyjwt</a></html>") dependencyLink.addMouseListener(ClickListener()) dependencyLink.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)) repositoryLink.addMouseListener(ClickListener()) repositoryLink.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)) helpPanel.add(helpHeadingText) helpPanel.add(authorText) helpPanel.add(aboutText) helpPanel.add(repositoryText) helpPanel.add(repositoryLink) helpPanel.add(licenseText) helpPanel.add(dependencyLink) self._helpPopup.setSize(Dimension(550, 450)) self._helpPopup.pack() self._helpPopup.setLocationRelativeTo(None) self._helpPopup.setVisible(True) return
class Demo(JFrame, Runnable): def __init__(self): super(Demo, self).__init__() self.initUI() def initUI(self): self.panel = JPanel(size=(50,50)) self.panel.setLayout(FlowLayout( )) self.panel.setToolTipText("GPU Demo") #TODO- change this so that it deletes itself when text is entered self.textfield1 = JTextField('Smoothing Parameter',15) self.panel.add(self.textfield1) joclButton = JButton("JOCL",actionPerformed=self.onJocl) joclButton.setBounds(100, 500, 100, 30) joclButton.setToolTipText("JOCL Button") self.panel.add(joclButton) javaButton = JButton("Java",actionPerformed=self.onJava) javaButton.setBounds(100, 500, 100, 30) javaButton.setToolTipText("Java Button") self.panel.add(javaButton) qButton = JButton("Quit", actionPerformed=self.onQuit) qButton.setBounds(200, 500, 80, 30) qButton.setToolTipText("Quit Button") self.panel.add(qButton) newImage = ImageIO.read(io.File(getDataDir() + "input.png")) resizedImage = newImage.getScaledInstance(600, 600,10) newIcon = ImageIcon(resizedImage) label1 = JLabel("Input Image",newIcon, JLabel.CENTER) label1.setVerticalTextPosition(JLabel.TOP) label1.setHorizontalTextPosition(JLabel.RIGHT) label1.setSize(10,10) label1.setBackground(Color.orange) self.panel.add(label1) self.getContentPane().add(self.panel) self.clockLabel = JLabel() self.clockLabel.setSize(1,1) self.clockLabel.setBackground(Color.orange) self.clockLabel.setVerticalTextPosition(JLabel.BOTTOM) self.clockLabel.setHorizontalTextPosition(JLabel.LEFT) myClockFont = Font("Serif", Font.PLAIN, 50) self.clockLabel.setFont(myClockFont) self.panel.add(self.clockLabel) self.setTitle("Structure-oriented smoothing OpenCL Demo") self.setSize(1200, 700) self.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE) self.setLocationRelativeTo(None) self.setVisible(True) def onQuit(self, e): System.exit(0) def onJocl(self, e): self.clockLabel.setText('running') self.started = Calendar.getInstance().getTimeInMillis(); #print self.textfield1.getText() #time.sleep(5) iters = toInt(self.textfield1.getText()) jocl_smoother(iters) elapsed = Calendar.getInstance().getTimeInMillis() - self.started; self.clockLabel.setText( 'JOCL Elapsed: %.2f seconds' % ( float( elapsed ) / 1000.0 ) ) def onJava(self, e): self.clockLabel.setText('running') self.started = Calendar.getInstance().getTimeInMillis(); #print self.textfield1.getText() #time.sleep(5) iters = toInt(self.textfield1.getText()) java_smoother(iters) elapsed = Calendar.getInstance().getTimeInMillis() - self.started; self.clockLabel.setText( 'Java Elapsed: %.2f seconds' % ( float( elapsed ) / 1000.0 ) )
def input(prompt): """Creates new window that allows for user input""" label = JLabel(prompt, JLabel.CENTER) label.setFont(Font('Arial', Font.PLAIN, 35)) return JOptionPane.showInputDialog(frame, label, '', JOptionPane.PLAIN_MESSAGE)
myPanel.setOpaque(True) myPanel.setBackground(Color.WHITE) myPanel.setLayout(None) # All Events Belong Here # All Buttons Belong Here hackButton = JButton("Pecahkan Kunci", actionPerformed=react) hackButton.setSize(243, 55) hackButton.setLocation(62, 307) hackButton.setFont(regFont) laporan = JLabel("Laporan Pemecahan Kunci") laporan.setSize(200, 21) laporan.setLocation(26, 376) laporan.setFont(boldenFont) showReportButton = JButton("Tampilkan Matriks", actionPerformed=pelapor) showReportButton.setSize(140, 21) showReportButton.setLocation(157, 401) showReportButton.setFont(regFont) # All Text Fields Belong Here pemecahanKunci = JLabel("Pemecahan kunci") pemecahanKunci.setLocation(26, 91) pemecahanKunci.setSize(130, 21) pemecahanKunci.setFont(boldenFont) alphaLabel = JLabel("Kunci publik alpha") alphaLabel.setLocation(26, 122) #(26, 91) alphaLabel.setSize(130, 21)
def registerExtenderCallbacks(self, callbacks): print "PhantomJS RIA Crawler extension" print "Nikolay Matyunin @autorak <*****@*****.**>" # keep a reference to our callbacks object and helpers object self._callbacks = callbacks self._helpers = callbacks.getHelpers() # extension name callbacks.setExtensionName("Phantom RIA Crawler") # Create Tab UI components self._jPanel = JPanel() self._jPanel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); _titleLabel = JLabel("Phantom RIA Crawler", SwingConstants.LEFT) _titleLabelFont = _titleLabel.font _titleLabelFont = _titleLabelFont.deriveFont(Font.BOLD, 12); _titleLabel.setFont(_titleLabelFont); _titleLabel.setForeground(Color(230, 142, 11)) self._addressTextField = JTextField('') self._addressTextField.setColumns(50) _addressTextLabel = JLabel("Target URL:", SwingConstants.RIGHT) self._addressTextField.getDocument().addDocumentListener(self) self._phantomJsPathField = JTextField('phantomjs') # TODO: set permanent config value self._phantomJsPathField.setColumns(50) _phantomJsPathLabel = JLabel("PhantomJS path:", SwingConstants.RIGHT) self._startButton = JToggleButton('Start', actionPerformed=self.startToggled) self._startButton.setEnabled(False) _requestsMadeLabel = JLabel("DEPs found:", SwingConstants.RIGHT) self._requestsMadeInfo = JLabel("", SwingConstants.LEFT) _statesFoundLabel = JLabel("States found:", SwingConstants.RIGHT) self._statesFoundInfo = JLabel("", SwingConstants.LEFT) _separator = JSeparator(SwingConstants.HORIZONTAL) _configLabel = JLabel("Crawling configuration:") self._configButton = JButton("Load config", actionPerformed=self.loadConfigClicked) self._configFile = "" _listenersLabel= JLabel("Burp proxy listener:", SwingConstants.RIGHT) self._listenersCombo = JComboBox() self._configTimer = Timer(5000, None) self._configTimer.actionPerformed = self._configUpdated self._configTimer.stop() self._configUpdated(None) self._commandClient = CommandClient(self) # Layout management self._groupLayout = GroupLayout(self._jPanel) self._jPanel.setLayout(self._groupLayout) self._groupLayout.setAutoCreateGaps(True) self._groupLayout.setAutoCreateContainerGaps(True) self._groupLayout.setHorizontalGroup(self._groupLayout.createParallelGroup() .addComponent(_titleLabel) .addGroup(self._groupLayout.createSequentialGroup() .addComponent(_addressTextLabel) .addGroup(self._groupLayout.createParallelGroup() .addComponent(self._addressTextField, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE) .addGroup(self._groupLayout.createSequentialGroup() .addComponent(_requestsMadeLabel) .addComponent(self._requestsMadeInfo)) .addGroup(self._groupLayout.createSequentialGroup() .addComponent(_statesFoundLabel) .addComponent(self._statesFoundInfo))) .addComponent(self._startButton)) .addComponent(_separator) .addGroup(self._groupLayout.createSequentialGroup() .addComponent(_configLabel) .addComponent(self._configButton)) .addGroup(self._groupLayout.createSequentialGroup() .addComponent(_phantomJsPathLabel) .addComponent(self._phantomJsPathField, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)) .addGroup(self._groupLayout.createSequentialGroup() .addComponent(_listenersLabel) .addComponent(self._listenersCombo, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE, GroupLayout.PREFERRED_SIZE)) ) self._groupLayout.setVerticalGroup(self._groupLayout.createSequentialGroup() .addComponent(_titleLabel) .addGroup(self._groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(_addressTextLabel) .addComponent(self._addressTextField) .addComponent(self._startButton)) .addGroup(self._groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(_requestsMadeLabel) .addComponent(self._requestsMadeInfo)) .addGroup(self._groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(_statesFoundLabel) .addComponent(self._statesFoundInfo)) .addComponent(_separator, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) .addGroup(self._groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(_configLabel) .addComponent(self._configButton)) .addGroup(self._groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(_phantomJsPathLabel) .addComponent(self._phantomJsPathField)) .addGroup(self._groupLayout.createParallelGroup(GroupLayout.Alignment.BASELINE) .addComponent(_listenersLabel) .addComponent(self._listenersCombo)) ) self._groupLayout.linkSize(SwingConstants.HORIZONTAL, _configLabel, _phantomJsPathLabel); self._groupLayout.linkSize(SwingConstants.HORIZONTAL, _configLabel, _listenersLabel); self._groupLayout.linkSize(SwingConstants.HORIZONTAL, _statesFoundLabel, _requestsMadeLabel); # context menu data self._contextMenuData = None; self._running = False; # register callbacks callbacks.customizeUiComponent(self._jPanel) callbacks.registerContextMenuFactory(self) callbacks.addSuiteTab(self) return
def registerExtenderCallbacks(self, callbacks): endianVal = 0 def generateTextBox(defaultTxt, editable): sample = JTextArea(5, 20) scrollPane1 = JScrollPane(sample) sample.setBounds(0, 0, 400, 400) sample.setEditable(editable) sample.setLineWrap(True) sample.setWrapStyleWord(True) sample.setBorder(BorderFactory.createLineBorder(Color.BLACK)) sample.setText(defaultTxt) return sample def decodeData(event): #Get Base64 token full_str = base64.b64decode(self._left_tb1.getText()) sha_mac = full_str[44:64].encode('hex') inflate_data = full_str[76:] data = zlib.decompress(inflate_data) user_length = data[20] loc = 21 tokenDetails = "User name :" + data[ loc:loc + int(user_length.encode('hex'), 16)].replace( "\x00", "") + "\n" loc = loc + int(user_length.encode('hex'), 16) lang_length = data[loc] loc = loc + 1 tokenDetails += "Lang Code :" + data[ loc:loc + int(lang_length.encode('hex'), 16)].replace( "\x00", "") + "\n" tmp1.setText(data[loc:loc + int(lang_length.encode('hex'), 16)].replace( "\x00", "")) loc = loc + int(lang_length.encode('hex'), 16) node_length = data[loc] loc = loc + 1 tokenDetails += "Node name :" + data[ loc:loc + int(node_length.encode('hex'), 16)].replace( "\x00", "") + "\n" tmp2.setText(data[loc:loc + int(node_length.encode('hex'), 16)].replace( "\x00", "")) loc = loc + int(node_length.encode('hex'), 16) time_length = data[loc] loc = loc + 1 tokenDetails += "Creation time :" + data[ loc:loc + int(time_length.encode('hex'), 16)].replace( "\x00", "") tmp = data[loc:loc + int(time_length.encode('hex'), 16)].replace( "\x00", "") datestamp = tmp[:len(tmp) - 7] tmp3.setText(datestamp) # Determine if it's little or big endian if (data[4:8].encode('hex') == '04030201'): endianVal = 0 else: endianVal = 1 tmp4.setText(str(endianVal)) hashcatFormat = sha_mac + ":" + data.encode("hex") left_tb2.setText(tokenDetails) left_tb3.setText(hashcatFormat) def make_field(part, size): part = chr(len(part) + size) + part return part def generateToken(event): newtoken = "" endianVal = int(tmp4.getText()) if endianVal == 1: username = right_tb2.getText().encode('utf_16_be') nodepw = right_tb1.getText().encode('utf_16_le') lang = tmp1.getText().encode('utf_16_be') nodename = tmp2.getText().encode('utf_16_be') datestamp = (tmp3.getText() + '.164266').encode('utf_16_be') token_ver = "8.10".encode('utf_16_be') unknown_field = "N".encode('utf_16_be') uncompressed_data = '\x01\x02\x03\x04\x00\x01\x00\x00\x00\x00\x02\xbc\x00\x00\x00\x00' + make_field( username, 0) + make_field(lang, 0) + make_field( nodename, 0) + make_field(datestamp, 0) + '\x00' uncompressed_field = '\x00\x00\x00' + make_field( uncompressed_data, 4) inflate_data = zlib.compress(uncompressed_field) sha1_mac = hashlib.sha1(uncompressed_field + nodepw).digest() uncompressed_length = chr(len(uncompressed_field)) static_headers1 = '\x01\x02\x03\x04\x00\x01\x00\x00\x00\x00\x02\xbc\x00\x00\x00\x00\x00\x00\x00\x2c\x00\x04\x53\x68\x64\x72\x02' + unknown_field + uncompressed_length + '\x08' + token_ver + '\x14' static_headers2 = '\x00\x05\x53\x64\x61\x74\x61' body = '\x00\x00\x00' + make_field( static_headers2 + make_field(inflate_data, 0), 4) token = '\x00\x00\x00' + make_field( static_headers1 + sha1_mac + body, 4) newtoken = base64.b64encode(token) elif endianVal == 0: username = right_tb2.getText().encode('utf_16_le') nodepw = right_tb1.getText().encode('utf_16_le') lang = tmp1.getText().encode('utf_16_le') nodename = tmp2.getText().encode('utf_16_le') datestamp = (tmp3.getText() + '.999543').encode('utf_16_le') token_ver = "8.10".encode('utf_16_le') unknown_field = "N".encode('utf_16_le') uncompressed_data = '\x00\x00\x00\x04\x03\x02\x01\x01\x00\x00\x00\xbc\x02\x00\x00\x00\x00\x00\x00' + make_field( username, 0) + make_field(lang, 0) + make_field( nodename, 0) + make_field(datestamp, 0) + '\x00' uncompressed_field = make_field(uncompressed_data, 1) inflate_data = zlib.compress(uncompressed_field) sha1_mac = hashlib.sha1(uncompressed_field + nodepw).digest() uncompressed_length = chr(len(uncompressed_field)) static_headers1 = '\x00\x00\x00\x04\x03\x02\x01\x01\x00\x00\x00\xbc\x02\x00\x00\x00\x00\x00\x00\x2c\x00\x00\x00\x04\x00\x53\x68\x64\x72\x02' + unknown_field + uncompressed_length + '\x08' + token_ver + '\x14' static_headers2 = '\x00\x00\x00\x05\x00\x53\x64\x61\x74\x61' body = make_field( static_headers2 + make_field(inflate_data, 0), 1) token = make_field(static_headers1 + sha1_mac + body, 1) newtoken = base64.b64encode(token) right_tb3.setText("PS_TOKEN=" + newtoken + ";") # keep a reference to our callbacks object self._callbacks = callbacks # obtain an extension helpers object self._helpers = callbacks.getHelpers() # set our extension name callbacks.setExtensionName("PeopleSoft PSToken Processor") # main split pane self._splitpane = JSplitPane(JSplitPane.HORIZONTAL_SPLIT) self._splitpane.setResizeWeight(0.5) c = GridBagConstraints() c.weightx = 1 c.weighty = 1 c.anchor = GridBagConstraints.NORTHWEST #Temp variables tmp1 = JLabel("tmp") tmp2 = JLabel("tmp") tmp3 = JLabel("tmp") tmp4 = JLabel("tmp") # add left panel panel1 = JPanel(GridBagLayout()) header1 = JLabel("EXTRACTION") header1.setFont(Font("Myriad Pro", Font.BOLD, 24)) left_t1 = JLabel("PS_TOKEN Cookie") left_t2 = JLabel("Token Details") left_t3 = JLabel("Token Hash + Salt (Hashcat Format)") left_t4 = JLabel( "Save this into a .hash file and run the following Hashcat command: hashcat -m 13500 <hashfile> <dictionary file>" ) self._left_tb1 = generateTextBox("Your PS_TOKEN value here", True) left_tb2 = generateTextBox("Token Details here", False) left_tb3 = generateTextBox("Hashcat format here", False) btnDecode = JButton("Decode", actionPerformed=decodeData) btnGenerate = JButton("Generate", actionPerformed=generateToken) #add right panel panel2 = JPanel(GridBagLayout()) header2 = JLabel("GENERATION") header2.setFont(Font("Myriad Pro", Font.BOLD, 24)) right_t1 = JLabel("Node password") right_t2 = JLabel("New username") right_t3 = JLabel("New Base64 PS_TOKEN") right_t4 = JLabel( "Match & Replace rule to modify PS_TOKEN (Type: Request Header, enable regex)" ) right_t5 = JLabel("Match rule: PS_TOKEN=[A-Za-z0-9\/\+]*;") right_t6 = JLabel("Replace: PS_TOKEN=<new generated PS_TOKEN>;") right_tb1 = generateTextBox("Password here", True) right_tb2 = generateTextBox("PSADMIN", True) right_tb3 = generateTextBox("Your new token here", False) panel1.add(header1, c) panel2.add(header2, c) c.gridx = 0 c.gridy = 1 panel1.add(left_t1, c) panel2.add(right_t1, c) c.gridy += 1 panel1.add(self._left_tb1, c) panel2.add(right_tb1, c) c.gridy += 1 panel1.add(left_t2, c) panel2.add(right_t2, c) c.gridy += 1 panel1.add(left_tb2, c) panel2.add(right_tb2, c) c.gridy += 1 panel1.add(left_t3, c) panel2.add(right_t3, c) c.gridy += 1 panel1.add(left_t4, c) panel2.add(right_t4, c) c.gridy += 1 panel1.add(left_tb3, c) panel2.add(right_t5, c) c.gridy += 1 panel2.add(right_t6, c) c.gridy += 1 panel2.add(right_tb3, c) c.gridy += 1 panel1.add(btnDecode, c) panel2.add(btnGenerate, c) self._splitpane.setLeftComponent(panel1) self._splitpane.setRightComponent(panel2) # customize our UI components callbacks.customizeUiComponent(self._splitpane) #callbacks.customizeUiComponent(panel1) #callbacks.customizeUiComponent(scrollPane) # add the custom tab to Burp's UI callbacks.addSuiteTab(self) #add option to do right-click callbacks.registerContextMenuFactory(self) return
class PositionsController(IMessageEditorController): def __init__(self, parent): self._parent = parent def getMainComponent(self): self._mainPanel = JPanel(BorderLayout()) #Left panel self._leftPanel = JPanel(BorderLayout()) self._leftPanel.setBorder(EmptyBorder(10, 10, 10, 10)) #Left subpanel - Positions editor self._positionsEditor = Utils.callbacks.createTextEditor() #TODO Remove a normal editor? self._positionsEditor = Utils.callbacks.createMessageEditor(self, True) self._positionsEditor.getComponent().setBorder(BorderFactory.createLineBorder(Color.BLACK)) #Left subpanel - Title pane self._leftTitlePanel = JPanel(GridLayout(0, 1)) self._leftTitlePanel.setBorder(EmptyBorder(0, 10, 10, 10)) self._titleText = JLabel("Commands Position") self._titleText.setForeground(COLOR_BURP_TITLE_ORANGE) self._titleText.setFont(self._titleText.getFont().deriveFont(16.0)) self._titleSubtitleText = JTextArea("Configure the position where commands will be inserted into the base request. Select the requests that were send Shell in the dropdown, then select the part of the request where commands need to be inserted and click the 'Add $' button.") self._titleSubtitleText.setEditable(False) self._titleSubtitleText.setLineWrap(True) self._titleSubtitleText.setWrapStyleWord(True) self._titleSubtitleText.setHighlighter(None) self._titleSubtitleText.setBorder(None) self._leftTitlePanel.add(self._titleText) self._leftTitlePanel.add(self._titleSubtitleText) #Left subpanel - Add positions editor and title self._leftPanel.add(self._leftTitlePanel, BorderLayout.NORTH) self._leftPanel.add(self._positionsEditor.getComponent(), BorderLayout.CENTER) #Right panel #self._rightPanel = JPanel(GridLayout(20, 1)) self._rightPanel = JPanel() self._rightPanel.setLayout(BoxLayout(self._rightPanel, BoxLayout.Y_AXIS)) #self._rightPanel.setPreferredSize(Dimension(150, 30)) self._rightPanel.setBorder(EmptyBorder(10, 10, 10, 10)) #Right panel - buttons self._buttonAdd = JButton(" Add $ ", actionPerformed=self.buttonAddClick) self._buttonClear = JButton(" Clear $ ", actionPerformed=self.buttonClearClick) #, actionPerformed=None # Right panel - add components self._rightPanel.add(self._buttonAdd) self._rightPanel.add(self._buttonClear) self._mainPanel.add(self._rightPanel, BorderLayout.EAST) self._mainPanel.add(self._leftPanel, BorderLayout.CENTER) return self._mainPanel def buttonAddClick(self, e): Utils.out("Button Add click") if self._positionsEditor.getSelectedText(): #TODO: For if it's a messageeditor in stead of texteditor Utils.out(self._positionsEditor.getSelectedData()) self.addPosition(self._positionsEditor.getSelectionBounds()) self._parent._consoleController.startSession() self._buttonAdd.setEnabled(False) def buttonClearClick(self, e): Utils.out("Button Clear click") self.setEditor(self._parent.currentRequestRaw()) self._buttonAdd.setEnabled(True) def setEditor(self, request_in_bytes): self._positionsEditor.setText(request_in_bytes) #TODO: for if I make the positions a messageExitor: self._positionsEditor.setMessage(iHttpRequestResponse.getRequest(), True) def addPosition(self, boundsArray): if len(boundsArray) == 2: self._parent.setCurrentRequestBounds(boundsArray[0], boundsArray[1]) modified_request = Utils.wrapRawData(self._parent.currentRequestRaw(), boundsArray[0], boundsArray[1], "$", "$") self.setEditor(modified_request)
def print_message(message): """Creates new window that displays message""" label = JLabel(message, JLabel.CENTER) label.setFont(Font('Arial', Font.PLAIN, 35)) JOptionPane.showMessageDialog(frame, label, '', JOptionPane.PLAIN_MESSAGE)
def registerExtenderCallbacks(self, callbacks): self._callbacks = callbacks self.helpers = callbacks.helpers callbacks.setExtensionName("Orchy-Webhook") self.frame = JPanel() self.frame.setSize(1024, 786) self.frame.setLayout(None) self.plugin_path = os.getcwd() self.db_file_path = os.path.join(os.getcwd(), 'burp_db.json') self.cwe_dict = json.load(open(self.db_file_path, 'r')) self.results = {} self.severity_dict = { 'Low': 1, 'Medium': 2, 'High': 3, 'Information': 0, 'Info': 0, } self.urls = [] self.confidence_dict = {'Certain': 3, 'Firm': 2, 'Tentative': 1} callbacks.registerScannerListener(self) button1 = JButton(ImageIcon( ((ImageIcon(self.plugin_path + "/refresh.jpg")).getImage()).getScaledInstance( 13, 13, SCALE_SMOOTH)), actionPerformed=self.refresh) button1.setBounds(30, 50, 22, 22) lbl0 = JLabel("Orchestron Webhook:") lbl0.setFont(Font("", Font.BOLD, 12)) lbl0.setForeground(Color(0xFF7F50)) lbl0.setBounds(60, 20, 200, 20) lbl1 = JLabel('Host') lbl1.setBounds(60, 50, 100, 20) self.txt1 = JComboBox() self.txt1.setBounds(200, 50, 220, 24) lbl2 = JLabel("Webhook Url") lbl2.setBounds(60, 80, 100, 20) self.txt2 = JTextField('', 300) self.txt2.setBounds(200, 80, 220, 24) lbl3 = JLabel("Authorization Token") lbl3.setBounds(60, 110, 200, 20) self.txt3 = JTextField('', 60) self.txt3.setBounds(200, 110, 220, 24) lbl4 = JLabel("Engagement-ID") lbl4.setBounds(60, 140, 200, 20) self.txt4 = JTextField('', 40) self.txt4.setBounds(200, 140, 220, 24) button2 = JButton('Push Results', actionPerformed=self.push) button2.setBounds(200, 170, 120, 24) self.message = JLabel('') self.message.setBounds(330, 170, 180, 24) self.frame.add(button1) self.frame.add(lbl0) self.frame.add(lbl1) self.frame.add(self.txt1) self.frame.add(lbl2) self.frame.add(self.txt2) self.frame.add(lbl3) self.frame.add(self.txt3) self.frame.add(lbl4) self.frame.add(self.txt4) self.frame.add(button2) self.frame.add(self.message) callbacks.customizeUiComponent(self.frame) callbacks.addSuiteTab(self)
def registerExtenderCallbacks( self, callbacks): self._helpers = callbacks.getHelpers() callbacks.setExtensionName("JWT FuzzHelper") callbacks.registerIntruderPayloadProcessor(self) callbacks.registerExtensionStateListener(self) self._stdout = PrintWriter(callbacks.getStdout(), True) self._stderr = PrintWriter(callbacks.getStderr(), True) # Holds values passed by user from Configuration panel self._fuzzoptions = { "target" : "Header", "selector" : None, "signature" : False, "algorithm" : "HS256", "key" : "", "key_cmd" : "" } self._isNone = lambda val: isinstance(val, type(None)) # Configuration panel Layout self._configurationPanel = JPanel() gridBagLayout = GridBagLayout() gridBagLayout.columnWidths = [ 0, 0, 0] gridBagLayout.rowHeights = [ 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] gridBagLayout.columnWeights = [ 0.0, 0.0, 0.0 ] gridBagLayout.rowWeights = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0] self._configurationPanel.setLayout(gridBagLayout) # Setup tabs self._tabs = JTabbedPane() self._tabs.addTab('Configuration',self._configurationPanel) #self._tabs.addTab('Help',self._helpPanel) # Target Options targetLabel = JLabel("Target Selection (Required): ") targetLabel.setFont(Font("Tahoma",Font.BOLD, 12)) c = GridBagConstraints() c.gridx = 0 c.gridy = 1 c.insets = Insets(0,10,0,0) c.anchor = GridBagConstraints.LINE_END self._configurationPanel.add(targetLabel,c) options = [ 'Header', 'Payload' ] self._targetComboBox = JComboBox(options) c = GridBagConstraints() c.gridx = 1 c.gridy = 1 c.anchor = GridBagConstraints.LINE_START self._configurationPanel.add(self._targetComboBox,c) # Help Button self._helpButton = JButton("Help", actionPerformed=self.helpMenu) c = GridBagConstraints() c.gridx = 2 c.gridy = 1 c.anchor = GridBagConstraints.FIRST_LINE_START self._configurationPanel.add(self._helpButton,c) # Selector Options self._selectorLabel = JLabel("JSON Selector [Object Identifier-Index Syntax] (Required): ") self._selectorLabel.setFont(Font("Tahoma",Font.BOLD, 12)) c = GridBagConstraints() c.gridx = 0 c.gridy = 2 c.insets = Insets(0,10,0,0) c.anchor = GridBagConstraints.LINE_END self._configurationPanel.add(self._selectorLabel, c) self._selectorTextField = JTextField('',50) c = GridBagConstraints() c.gridx = 1 c.gridy = 2 self._configurationPanel.add(self._selectorTextField, c) # Regex option self._regexLabel = JLabel("Use regex as JSON Selector? (Optional): ") self._regexLabel.setFont(Font("Tahoma",Font.BOLD, 12)) c = GridBagConstraints() c.gridx = 0 c.gridy = 3 c.insets = Insets(0,0,0,0) c.anchor = GridBagConstraints.LINE_END self._configurationPanel.add(self._regexLabel,c) self._regexCheckBox = JCheckBox("", actionPerformed=self.regexSelector) c = GridBagConstraints() c.gridx = 1 c.gridy = 3 c.anchor = GridBagConstraints.FIRST_LINE_START self._configurationPanel.add(self._regexCheckBox,c) # Signature Options generateSignatureLabel = JLabel("Generate signature? (Required): ") generateSignatureLabel.setFont(Font("Tahoma",Font.BOLD, 12)) c = GridBagConstraints() c.gridx = 0 c.gridy = 4 c.insets = Insets(0,10,0,0) c.anchor = GridBagConstraints.LINE_END self._configurationPanel.add(generateSignatureLabel,c) options = ["False", "True"] self._generateSignatureComboBox = JComboBox(options) c = GridBagConstraints() c.gridx = 1 c.gridy = 4 c.anchor = GridBagConstraints.LINE_START self._configurationPanel.add(self._generateSignatureComboBox,c) signatureAlgorithmLabel = JLabel("Signature Algorithm (Optional): ") signatureAlgorithmLabel.setFont(Font("Tahoma",Font.BOLD, 12)) c = GridBagConstraints() c.gridx = 0 c.gridy = 5 c.insets = Insets(0,10,0,0) c.anchor = GridBagConstraints.LINE_END self._configurationPanel.add(signatureAlgorithmLabel,c) options = ["None", "HS256","HS384","HS512","ES256","ES384","ES512","RS256","RS384","RS512","PS256","PS256","PS384","PS512"] self._algorithmSelectionComboBox = JComboBox(options) c = GridBagConstraints() c.gridx = 1 c.gridy = 5 c.anchor = GridBagConstraints.LINE_START self._configurationPanel.add(self._algorithmSelectionComboBox,c) # Signing key options self._signingKeyLabel = JLabel("Signing Key (Optional): ") self._signingKeyLabel.setFont(Font("Tahoma",Font.BOLD, 12)) c = GridBagConstraints() c.gridx = 0 c.gridy = 6 c.insets = Insets(0,10,0,0) c.anchor = GridBagConstraints.LINE_END self._configurationPanel.add(self._signingKeyLabel,c) self.addSigningKeyTextArea() self._fromFileTextField = JTextField('',50) fromFileLabel = JLabel("Signing key from file? (Optional): ") fromFileLabel.setFont(Font("Tahoma",Font.BOLD, 12)) c = GridBagConstraints() c.gridx = 0 c.gridy = 7 c.insets = Insets(0,0,0,0) c.anchor = GridBagConstraints.LINE_END self._configurationPanel.add(fromFileLabel,c) self._fromFileCheckBox = JCheckBox("", actionPerformed=self.fromFile) c = GridBagConstraints() c.gridx = 1 c.gridy = 7 c.anchor = GridBagConstraints.FIRST_LINE_START self._configurationPanel.add(self._fromFileCheckBox,c) self._fromCmdTextField = JTextField('',50) fromCmdLabel = JLabel("Signing key from command? (Optional): ") fromCmdLabel.setFont(Font("Tahoma",Font.BOLD, 12)) c = GridBagConstraints() c.gridx = 0 c.gridy = 8 c.insets = Insets(0,0,0,0) c.anchor = GridBagConstraints.LINE_END self._configurationPanel.add(fromCmdLabel,c) self._fromCmdCheckBox = JCheckBox("", actionPerformed=self.fromCmd) c = GridBagConstraints() c.gridx = 1 c.gridy = 8 c.anchor = GridBagConstraints.FIRST_LINE_START self._configurationPanel.add(self._fromCmdCheckBox,c) self._saveButton = JButton("Save Configuration", actionPerformed=self.saveOptions) self._saveButton.setText("Save Configuration") c = GridBagConstraints() c.gridx = 1 c.gridy = 9 c.anchor = GridBagConstraints.FIRST_LINE_START self._configurationPanel.add(self._saveButton,c) callbacks.customizeUiComponent(self._configurationPanel) callbacks.customizeUiComponent(self._tabs) callbacks.addSuiteTab(self) self._stdout.println("[JWT FuzzHelper] Loaded successfully") return
def print_error(error): """Creates new window that displays error message""" label = JLabel(error, JLabel.CENTER) label.setFont(Font('Arial', Font.PLAIN, 35)) JOptionPane.showMessageDialog(frame, label, '', JOptionPane.ERROR_MESSAGE)