Skip to content

Commit

Permalink
bugfix Custom JTable
Browse files Browse the repository at this point in the history
  • Loading branch information
isayan committed Feb 5, 2019
1 parent d00d0be commit 090afb2
Show file tree
Hide file tree
Showing 10 changed files with 377 additions and 102 deletions.
6 changes: 4 additions & 2 deletions Readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,13 @@ Burp Suiteは主にアジア圏のエンコーディング周りが弱いため
全てにおいて問題ないわけではありません。

## ヘルプ
利用方法等の詳細なヘルプは、help ディレクトリのhelp.html を参照して下さい。
利用方法等の詳細なヘルプは、help ディレクトリの help.html を参照してください。

オンラインの場合は、[help](https://github.com/raise-isayan/YaguraExtender/blob/master/help/help.adoc)を参照して下さい。

## 必須ライブラリ
ビルドには別途 [BurpExtLib](https://github.com/raise-isayan/BurpExtLib) のライブラリを必要とします。
* BurpExtlib v1.7.36
* BurpExtlib v1.7.37

## 注意事項
このツールは、私個人が勝手に開発したもので、PortSwigger社は一切関係ありません。本ツールを使用したことによる不具合等についてPortSwiggerに問い合わせないようお願いします。
Expand Down
Binary file modified release/YaguraExtender.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion src/burp/release.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# YaguraExtender build xml properties

# version
version=1.7.32.0
version=1.7.33.0

#lib
asciidoctor-version=1.5.6
125 changes: 125 additions & 0 deletions src/yagura/model/ParamsView.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
package yagura.model;

import burp.IParameter;
import extend.model.base.ObjectTableColumn;
import extend.model.base.ObjectTableMapping;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
*
* @author isayan
*/
public class ParamsView extends Parameter implements ObjectTableMapping {

public ParamsView(IParameter parameter) {
super(parameter);
}

public ParamsView() {
super(Parameter.newPameter());
}

private final String [] columns = new String [] {
"Data", "Type", "Name", "Value"
};

public ObjectTableColumn getColumn() {
return new ObjectTableColumn() {
@Override
public String getColumnName(int column) {
return columns[column];
}

@Override
public Class<?> getColumnClass(int columnIndex) {
return Object.class;
}

@Override
public int getColumnCount() {
return columns.length;
}
};
}

private final boolean[] canEdit = new boolean [] {
false, false, false, false
};

@Override
public boolean isCellEditable(int columnIndex) {
return canEdit[columnIndex];
}

@Override
public Object getObject(int column) {
Object value = null;
try {
IParameter param = this;
switch (column) {
case 0: //
{
value = param;
break;
}
case 1: // Type
{
value = getType(param.getType());
break;
}
case 2: // Name
{
value = param.getName();
break;
}
case 3: // Value
{
value = param.getValue();
break;
}
default:
break;
}
} catch (Exception ex) {
Logger.getLogger(ParamsViewModel.class.getName()).log(Level.SEVERE, null, ex);
}
return value;
}

@Override
public void setObject(int column, Object value) {
try {
Parameter param = this;
switch (column) {
case 0: // Data
break;
case 1: // Type
param.setType((parseType((String)value)));
break;
case 2: // Name
param.setName((String)value);
break;
case 3: // Value
param.setValue((String)value);
break;
}
} catch (Exception ex) {
Logger.getLogger(ParamsView.class.getName()).log(Level.SEVERE, null, ex);
}
}

private final static String[] TYPES = {"URL", "Body", "Cookie", "XML", "-", "(file)", "JSON"};

public static String getType(byte type) {
return TYPES[type];
}

public static byte parseType(String type) {
for (int i = 0; i < TYPES.length; i++) {
if (TYPES[i].equals(type)) return (byte)i;
}
return (byte)-1;
}

}
89 changes: 39 additions & 50 deletions src/yagura/model/ParamsViewModel.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package yagura.model;

import burp.IParameter;
import extend.model.base.ObjectTableModel;
import extend.model.base.DefaultObjectTableModel;
import extend.util.Util;
import java.util.List;
import java.nio.charset.StandardCharsets;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.table.TableModel;
Expand All @@ -13,43 +12,41 @@
*
* @author raise.isayan
*/
public class ParamsViewModel extends ObjectTableModel<Parameter> {
public class ParamsViewModel extends DefaultObjectTableModel<ParamsView> {

public ParamsViewModel(TableModel model) {
super(model);
}

public ParamsViewModel(TableModel model, List<Parameter> d) {
super(model, d);
}

private boolean editable = false;

public void setCellEditable(boolean enable) {
this.editable = enable;
}


public boolean getCellEditable() {
return this.editable;
}

@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return this.editable;
}

@Override
public Object getValueAt(int row, int col) {
public Object getValueAt(int rowIndex, int columnIndex) {
Object value = null;
try {
if (row < 0 || row >= this.getRowCount()) {
return value;
}
IParameter param = this.getData(row);
switch (col) {
ParamsView param = super.getData(rowIndex);
switch (columnIndex) {
case 0: //
{
value = param;
break;
}
case 1: // Type
{
value = getType(param.getType());
value = ParamsView.getType(param.getType());
break;
}
case 2: // Name
Expand Down Expand Up @@ -84,53 +81,45 @@ public Object getValueAt(int row, int col) {
}

@Override
public void setValueAt(Object value, int row, int col) {
public void setValueAt(Object value, int rowIndex, int columnIndex) {
try {
Parameter param = this.getData(row);
switch (col) {
ParamsView param = new ParamsView();
switch (columnIndex) {
case 0: // Data
break;
case 1: // Type
param.setType((parseType((String)value)));
param.setType((ParamsView.parseType((String)value)));
break;
case 2: // Name
param.setName((String)value);
if (this.urldecode) {
String raw = Util.getRawStr(Util.encodeMessage((String)value, encoding));
raw = TransUtil.encodeUrl(raw, encoding, true);
param.setName(raw);
}
else {
String rowMessage = Util.getRawStr(Util.encodeMessage((String)value, encoding));
param.setName(rowMessage);
}
break;
case 3: // Value
param.setValue((String)value);
if (this.urldecode) {
String raw = Util.getRawStr(Util.encodeMessage((String)value, encoding));
raw = TransUtil.encodeUrl(raw, encoding, true);
param.setValue(raw);
}
else {
String raw = Util.getRawStr(Util.encodeMessage((String)value, encoding));
param.setValue(raw);
}
break;
}
this.fireTableDataChanged();
super.setData(rowIndex, param);
} catch (Exception ex) {
Logger.getLogger(ParamsViewModel.class.getName()).log(Level.SEVERE, null, ex);
Logger.getLogger(ParamsView.class.getName()).log(Level.SEVERE, null, ex);
}
}

private final static String[] TYPES = {"URL", "Body", "Cookie", "XML", "-", "(file)", "JSON"};

public static String getType(byte type) {
return TYPES[type];
}

public static byte parseType(String type) {
for (int i = 0; i < TYPES.length; i++) {
if (TYPES[i].equals(type)) return (byte)i;
}
return (byte)-1;
}

@Override
public Object[] getRows(int row) {
try {
IParameter msg = this.getData(row);
return new Object[]{row, msg.getType(), msg.getName(), msg.getValue()};
} catch (Exception ex) {
Logger.getLogger(ParamsViewModel.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}

private String encoding = "8859_1";
private String encoding = StandardCharsets.ISO_8859_1.name();

public String getEncoding() {
return this.encoding;
Expand All @@ -139,7 +128,7 @@ public String getEncoding() {
public void setEncoding(String encoding) {
this.encoding = encoding;
}

private boolean urldecode = false;

public boolean getUrlDecode() {
Expand Down
Loading

0 comments on commit 090afb2

Please sign in to comment.