package de.usd.cstchef.operations.string; import org.bouncycastle.util.Arrays; import burp.BurpUtils; import burp.IBurpExtenderCallbacks; import burp.IExtensionHelpers; import de.usd.cstchef.operations.Operation; import de.usd.cstchef.operations.Operation.OperationInfos; import de.usd.cstchef.operations.OperationCategory; import de.usd.cstchef.view.ui.VariableTextField; @OperationInfos(name = "Split and Select", category = OperationCategory.STRING, description = "Split input and select one item.") public class SplitAndSelect extends Operation { private VariableTextField item; private VariableTextField delim; @Override protected byte[] perform(byte[] input) throws Exception { byte[] delimmiter = delim.getBytes(); int itemNumber = 0; try { String itemValue = item.getText(); itemNumber = Integer.valueOf(itemValue); } catch(Exception e) { return input; } if( itemNumber < 0 ) return input; IBurpExtenderCallbacks cbs = BurpUtils.getInstance().getCallbacks(); IExtensionHelpers helpers = cbs.getHelpers(); int length = input.length; int start = 0; int offset = 0; int counter = 0; while( counter < itemNumber ) { offset = helpers.indexOf(input, delimmiter, false, start, length); if( offset >= 0 ) { start = offset + delimmiter.length; counter++; } else { break; } } int end = helpers.indexOf(input, delimmiter, false, start, length); if( end < 0 ) end = length; byte[] result = Arrays.copyOfRange(input, start, end); return result; } @Override public void createUI() { this.delim = new VariableTextField(); this.addUIElement("Delimmiter", this.delim); this.item = new VariableTextField(); this.addUIElement("Item number", this.item); } }