Projects STRLCPY LoggerPlusPlus Commits 758cfdb6
🤬
Revision indexing in progress... (symbol navigation in revisions will be accurate after indexed)
  • ■ ■ ■ ■
    build.gradle
    skipped 12 lines
    13 13  dependencies {
    14 14   compile 'net.portswigger.burp.extender:burp-extender-api:1.7.22'
    15 15   compile 'org.swinglabs:swingx:1.6.1'
    16  - compile 'com.github.CoreyD97:BurpExtenderUtilities:3adaa74c'
     16 + compile 'com.github.CoreyD97:BurpExtenderUtilities:2ed0d897'
    17 17   compile 'com.google.code.gson:gson:2.8.2'
    18 18   compile 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.5.2'
    19 19   compile 'org.apache.httpcomponents:httpclient:4.5.6'
    skipped 23 lines
  • ■ ■ ■ ■ ■ ■
    src/main/java/com/nccgroup/loggerplusplus/grepper/GrepResults.java
    skipped 19 lines
    20 20   processEntry(pattern);
    21 21   }
    22 22   
    23  - public ArrayList<Match> getResults() {
     23 + public ArrayList<Match> getMatches() {
    24 24   return results;
    25 25   }
    26 26   
    27  - public Object getLogEntry() {
     27 + public LogEntry getLogEntry() {
    28 28   return this.entry;
    29 29   }
    30 30   
    skipped 29 lines
    60 60   }else {
    61 61   responseMatches++;
    62 62   }
    63  - results.add(new Match(groups, isRequest));
     63 + results.add(new Match(groups, isRequest, respMatcher.start(), respMatcher.end()));
    64 64   }
    65 65   }
    66 66   
    67 67   public static class Match {
    68 68   public final String[] groups;
     69 + public final int startIndex;
     70 + public final int endIndex;
    69 71   public final boolean isRequest;
    70 72   
    71  - Match(String[] groups, boolean isRequest){
     73 + Match(String[] groups, boolean isRequest, int startIndex, int endIndex) {
    72 74   this.groups = groups;
    73 75   this.isRequest = isRequest;
     76 + this.startIndex = startIndex;
     77 + this.endIndex = endIndex;
    74 78   }
    75 79   }
    76 80  }
    skipped 1 lines
  • ■ ■ ■ ■ ■ ■
    src/main/java/com/nccgroup/loggerplusplus/grepper/GrepResultsTable.java
    1 1  package com.nccgroup.loggerplusplus.grepper;
    2 2   
    3  -import com.coreyd97.BurpExtenderUtilities.Preferences;
    4  -import com.nccgroup.loggerplusplus.LoggerPlusPlus;
    5 3  import com.nccgroup.loggerplusplus.logview.logtable.LogTable;
    6 4  import org.jdesktop.swingx.JXTree;
    7 5  import org.jdesktop.swingx.JXTreeTable;
    skipped 133 lines
    141 139   }
    142 140   
    143 141   public void addEntry(GrepResults matches){
    144  - if(matches.getResults().size() == 0) return;
     142 + if (matches.getMatches().size() == 0) return;
    145 143   synchronized (this.matchingEntries) {
    146 144   this.matchingEntries.add(matches);
    147 145   }
    skipped 23 lines
    171 169   
    172 170   @Override
    173 171   public Object getValueAt(Object node, int column) {
    174  - if(node instanceof GrepResults){
    175  - if(column == 0) return ((GrepResults) node).getLogEntry().toString();
    176  - if(column == 1) return ((GrepResults) node).getRequestMatches();
    177  - if(column == 2) return ((GrepResults) node).getResponseMatches();
    178  - if(column == 3) return ((GrepResults) node).getResults().size();
     172 + if(node instanceof GrepResults) {
     173 + if (column == 0) return ((GrepResults) node).getLogEntry().toString();
     174 + if (column == 1) return ((GrepResults) node).getRequestMatches();
     175 + if (column == 2) return ((GrepResults) node).getResponseMatches();
     176 + if (column == 3) return ((GrepResults) node).getMatches().size();
    179 177   else return "";
    180 178   }
    181 179   if(node instanceof GrepResults.Match){
    skipped 7 lines
    189 187   @Override
    190 188   public Object getChild(Object parent, int i) {
    191 189   if(parent instanceof GrepResults)
    192  - return ((GrepResults) parent).getResults().get(i);
     190 + return ((GrepResults) parent).getMatches().get(i);
    193 191   if(this.matchingEntries == null) return null;
    194 192   return this.matchingEntries.get(i);
    195 193   }
    skipped 1 lines
    197 195   @Override
    198 196   public int getChildCount(Object parent) {
    199 197   if(parent instanceof GrepResults){
    200  - return ((GrepResults) parent).getResults().size();
     198 + return ((GrepResults) parent).getMatches().size();
    201 199   }
    202 200   synchronized (matchingEntries) {
    203 201   return this.matchingEntries.size();
    skipped 3 lines
    207 205   @Override
    208 206   public int getIndexOfChild(Object parent, Object child) {
    209 207   if(parent instanceof GrepResults){
    210  - return ((GrepResults) parent).getResults().indexOf(child);
     208 + return ((GrepResults) parent).getMatches().indexOf(child);
    211 209   }
    212 210   return -1;
    213 211   }
    skipped 13 lines
  • ■ ■ ■ ■ ■
    src/main/java/com/nccgroup/loggerplusplus/grepper/GrepperController.java
    1 1  package com.nccgroup.loggerplusplus.grepper;
    2 2   
     3 +import burp.IHttpRequestResponse;
     4 +import burp.IHttpRequestResponseWithMarkers;
    3 5  import com.coreyd97.BurpExtenderUtilities.Preferences;
    4 6  import com.nccgroup.loggerplusplus.LoggerPlusPlus;
    5 7  import com.nccgroup.loggerplusplus.logentry.LogEntry;
    skipped 3 lines
    9 11  import com.nccgroup.loggerplusplus.util.NamedThreadFactory;
    10 12   
    11 13  import java.util.ArrayList;
     14 +import java.util.List;
    12 15  import java.util.concurrent.ExecutorService;
    13 16  import java.util.concurrent.Executors;
    14 17  import java.util.concurrent.atomic.AtomicInteger;
    skipped 35 lines
    50 53   return remainingEntries.get() > 0;
    51 54   }
    52 55   
    53  - public void reset(){ //TODO SwingWorker
     56 + public void reset() { //TODO SwingWorker
    54 57   for (GrepperListener listener : this.listeners) {
    55  - try{
     58 + try {
    56 59   listener.onResetRequested();
    57  - }catch (Exception e){e.printStackTrace();}
     60 + } catch (Exception e) {
     61 + e.printStackTrace();
     62 + }
     63 + }
     64 + }
     65 + 
     66 + public IHttpRequestResponseWithMarkers addMarkers(IHttpRequestResponse requestResponse, List<GrepResults.Match> matches) {
     67 + List<int[]> requestMarkers = new ArrayList<>(), responseMarkers = new ArrayList<>();
     68 + for (GrepResults.Match match : matches) {
     69 + int[] marker = new int[]{match.startIndex, match.endIndex};
     70 + if (match.isRequest) requestMarkers.add(marker);
     71 + else responseMarkers.add(marker);
    58 72   }
     73 + 
     74 + return LoggerPlusPlus.callbacks.applyMarkers(requestResponse, requestMarkers, responseMarkers);
    59 75   }
    60 76   
    61  - public void beginSearch(final Pattern pattern, final boolean inScopeOnly){
     77 + public void beginSearch(final Pattern pattern, final boolean inScopeOnly) {
    62 78   int searchThreads = this.preferences.getSetting(Globals.PREF_SEARCH_THREADS);
    63 79   this.searchExecutor = Executors.newFixedThreadPool(searchThreads, new NamedThreadFactory("LPP-Grepper"));
    64 80   
    skipped 82 lines
  • ■ ■ ■ ■ ■ ■
    src/main/java/com/nccgroup/loggerplusplus/grepper/GrepperPanel.java
    1 1  package com.nccgroup.loggerplusplus.grepper;
    2 2   
    3  -import burp.BurpExtender;
     3 +import burp.IHttpRequestResponse;
     4 +import burp.IHttpRequestResponseWithMarkers;
    4 5  import com.coreyd97.BurpExtenderUtilities.Alignment;
    5 6  import com.coreyd97.BurpExtenderUtilities.HistoryField;
    6 7  import com.coreyd97.BurpExtenderUtilities.PanelBuilder;
    7 8  import com.coreyd97.BurpExtenderUtilities.Preferences;
     9 +import com.nccgroup.loggerplusplus.logview.entryviewer.RequestViewerController;
    8 10  import com.nccgroup.loggerplusplus.util.Globals;
    9 11   
    10 12  import javax.swing.*;
     13 +import javax.swing.tree.TreePath;
    11 14  import java.awt.*;
    12 15  import java.awt.event.ActionEvent;
    13 16  import java.awt.event.KeyAdapter;
    14 17  import java.awt.event.KeyEvent;
     18 +import java.util.Collections;
     19 +import java.util.List;
    15 20  import java.util.regex.Pattern;
    16 21  import java.util.regex.PatternSyntaxException;
    17 22   
    skipped 8 lines
    26 31   private final JCheckBox inScopeOnly;
    27 32   private final JTabbedPane resultsPane;
    28 33   private final GrepResultsTable grepResultsTable;
     34 + private final RequestViewerController requestViewerController;
    29 35   private final UniquePatternMatchTable uniqueTable;
    30 36   
    31 37   GrepperPanel(GrepperController controller, Preferences preferences){
    skipped 32 lines
    64 70   });
    65 71   
    66 72   this.grepResultsTable = new GrepResultsTable(controller);
     73 + this.requestViewerController = new RequestViewerController(preferences, false, false);
     74 + 
     75 + grepResultsTable.addTreeSelectionListener(treeSelectionEvent -> {
     76 + TreePath selectedPath = treeSelectionEvent.getPath();
     77 + GrepResults grepResultEntry = (GrepResults) selectedPath.getPath()[1];
     78 + GrepResults.Match selectedMatch = null;
     79 + if (selectedPath.getPath().length > 2) {
     80 + selectedMatch = (GrepResults.Match) selectedPath.getPath()[2];
     81 + }
     82 + 
     83 + IHttpRequestResponse requestResponse = grepResultEntry.getLogEntry().getRequestResponse();
     84 + List<GrepResults.Match> matches;
     85 + 
     86 + if (selectedMatch != null) {
     87 + matches = Collections.singletonList(selectedMatch);
     88 + } else {
     89 + matches = grepResultEntry.getMatches();
     90 + }
     91 + 
     92 + IHttpRequestResponseWithMarkers markedRequestResponse = controller.addMarkers(requestResponse, matches);
     93 + requestViewerController.setDisplayedEntity(markedRequestResponse);
     94 + 
     95 + //TODO Setup message editor to support highlighting. Code is ready, waiting on API support.
     96 + //https://forum.portswigger.net/thread/eeditor-custom-highlighting-991b1a7e?CategoryId=burp-extensions
     97 + });
     98 + 
     99 + JSplitPane resultsSplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, new JScrollPane(grepResultsTable), requestViewerController.getRequestViewerPanel());
    67 100   this.uniqueTable = new UniquePatternMatchTable(controller);
    68 101   
    69 102   this.resultsPane = new JTabbedPane();
    70  - this.resultsPane.addTab("Results", new JScrollPane(grepResultsTable));
     103 + this.resultsPane.addTab("Results", resultsSplitPane);
    71 104   this.resultsPane.addTab("Unique Results", new JScrollPane(uniqueTable));
    72 105   
    73 106   JPanel wrapperPanel = PanelBuilder.build(new JComponent[][]{
    skipped 79 lines
  • ■ ■ ■ ■ ■ ■
    src/main/java/com/nccgroup/loggerplusplus/grepper/UniquePatternMatchTable.java
    1 1  package com.nccgroup.loggerplusplus.grepper;
    2 2   
    3 3   
    4  -import com.nccgroup.loggerplusplus.grepper.GrepResults;
    5  -import com.nccgroup.loggerplusplus.grepper.GrepperController;
    6  -import com.nccgroup.loggerplusplus.grepper.GrepperListener;
    7  - 
    8 4  import javax.swing.*;
    9 5  import javax.swing.table.AbstractTableModel;
    10  -import java.util.*;
     6 +import java.util.ArrayList;
     7 +import java.util.HashMap;
     8 +import java.util.LinkedHashMap;
    11 9  import java.util.regex.Pattern;
    12 10   
    13 11  public class UniquePatternMatchTable extends JTable implements GrepperListener {
    skipped 26 lines
    40 38   public void addEntry(GrepResults entry) {
    41 39   synchronized (valueCountMap) {
    42 40   synchronized (entryKeys) {
    43  - for (GrepResults.Match result : entry.getResults()) {
     41 + for (GrepResults.Match result : entry.getMatches()) {
    44 42   String key = result.groups[0];
    45 43   int index = entryKeys.indexOf(key);
    46 44   if (index == -1) {
    skipped 98 lines
  • ■ ■ ■ ■
    src/main/java/com/nccgroup/loggerplusplus/logview/LogViewController.java
    skipped 6 lines
    7 7  import com.nccgroup.loggerplusplus.filterlibrary.FilterLibraryController;
    8 8  import com.nccgroup.loggerplusplus.logview.entryviewer.RequestViewerController;
    9 9  import com.nccgroup.loggerplusplus.logview.logtable.LogTableController;
    10  -import com.nccgroup.loggerplusplus.logview.processor.LogProcessor;
    11  - 
    12  -import static com.nccgroup.loggerplusplus.util.Globals.PREF_AUTO_IMPORT_PROXY_HISTORY;
    13 10   
    14 11  public class LogViewController {
    15 12   
    skipped 13 lines
    29 26   
    30 27   this.logTableController = new LogTableController(this, filterLibraryController);
    31 28   this.logFilterController = new LogFilterController(this);
    32  - this.requestViewerController = new RequestViewerController(this, false, false);
     29 + this.requestViewerController = new RequestViewerController(preferences, false, false);
    33 30   
    34 31   //Build UI
    35 32   this.logViewPanel = new LogViewPanel(this);
    skipped 35 lines
  • ■ ■ ■ ■ ■ ■
    src/main/java/com/nccgroup/loggerplusplus/logview/entryviewer/RequestViewerController.java
    1 1  package com.nccgroup.loggerplusplus.logview.entryviewer;
    2 2   
    3  -import burp.*;
     3 +import burp.IHttpRequestResponse;
     4 +import burp.IHttpService;
     5 +import burp.IMessageEditor;
     6 +import burp.IMessageEditorController;
    4 7  import com.coreyd97.BurpExtenderUtilities.Preferences;
    5 8  import com.nccgroup.loggerplusplus.LoggerPlusPlus;
    6  -import com.nccgroup.loggerplusplus.logview.LogViewController;
    7 9   
    8 10  public class RequestViewerController implements IMessageEditorController {
    9 11   
    10  - private final LogViewController logViewController;
    11 12   private final Preferences preferences;
    12 13   private final IMessageEditor requestEditor;
    13 14   private final IMessageEditor responseEditor;
    skipped 1 lines
    15 16   
    16 17   private IHttpRequestResponse currentItem;
    17 18   
    18  - public RequestViewerController(LogViewController logViewController, boolean requestEditable, boolean responseEditable){
    19  - this.logViewController = logViewController;
    20  - this.preferences = logViewController.getPreferences();
     19 + public RequestViewerController(Preferences preferences, boolean requestEditable, boolean responseEditable) {
     20 + this.preferences = preferences;
    21 21   this.requestEditor = LoggerPlusPlus.callbacks.createMessageEditor(this, requestEditable);
    22 22   this.responseEditor = LoggerPlusPlus.callbacks.createMessageEditor(this, responseEditable);
    23 23   this.requestViewerPanel = new RequestViewerPanel(this);
    skipped 65 lines
Please wait...
Page is in error, reload to recover