Skip to content

Commit 090afb2

Browse files
author
isayan
committed
bugfix Custom JTable
1 parent d00d0be commit 090afb2

File tree

10 files changed

+377
-102
lines changed

10 files changed

+377
-102
lines changed

Readme.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,13 @@ Burp Suiteは主にアジア圏のエンコーディング周りが弱いため
88
全てにおいて問題ないわけではありません。
99

1010
## ヘルプ
11-
利用方法等の詳細なヘルプは、help ディレクトリのhelp.html を参照して下さい。
11+
利用方法等の詳細なヘルプは、help ディレクトリの help.html を参照してください。
12+
13+
オンラインの場合は、[help](https://github.com/raise-isayan/YaguraExtender/blob/master/help/help.adoc)を参照して下さい。
1214

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

1719
## 注意事項
1820
このツールは、私個人が勝手に開発したもので、PortSwigger社は一切関係ありません。本ツールを使用したことによる不具合等についてPortSwiggerに問い合わせないようお願いします。

release/YaguraExtender.jar

9.38 KB
Binary file not shown.

src/burp/release.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# YaguraExtender build xml properties
22

33
# version
4-
version=1.7.32.0
4+
version=1.7.33.0
55

66
#lib
77
asciidoctor-version=1.5.6

src/yagura/model/ParamsView.java

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package yagura.model;
2+
3+
import burp.IParameter;
4+
import extend.model.base.ObjectTableColumn;
5+
import extend.model.base.ObjectTableMapping;
6+
import java.util.logging.Level;
7+
import java.util.logging.Logger;
8+
9+
/**
10+
*
11+
* @author isayan
12+
*/
13+
public class ParamsView extends Parameter implements ObjectTableMapping {
14+
15+
public ParamsView(IParameter parameter) {
16+
super(parameter);
17+
}
18+
19+
public ParamsView() {
20+
super(Parameter.newPameter());
21+
}
22+
23+
private final String [] columns = new String [] {
24+
"Data", "Type", "Name", "Value"
25+
};
26+
27+
public ObjectTableColumn getColumn() {
28+
return new ObjectTableColumn() {
29+
@Override
30+
public String getColumnName(int column) {
31+
return columns[column];
32+
}
33+
34+
@Override
35+
public Class<?> getColumnClass(int columnIndex) {
36+
return Object.class;
37+
}
38+
39+
@Override
40+
public int getColumnCount() {
41+
return columns.length;
42+
}
43+
};
44+
}
45+
46+
private final boolean[] canEdit = new boolean [] {
47+
false, false, false, false
48+
};
49+
50+
@Override
51+
public boolean isCellEditable(int columnIndex) {
52+
return canEdit[columnIndex];
53+
}
54+
55+
@Override
56+
public Object getObject(int column) {
57+
Object value = null;
58+
try {
59+
IParameter param = this;
60+
switch (column) {
61+
case 0: //
62+
{
63+
value = param;
64+
break;
65+
}
66+
case 1: // Type
67+
{
68+
value = getType(param.getType());
69+
break;
70+
}
71+
case 2: // Name
72+
{
73+
value = param.getName();
74+
break;
75+
}
76+
case 3: // Value
77+
{
78+
value = param.getValue();
79+
break;
80+
}
81+
default:
82+
break;
83+
}
84+
} catch (Exception ex) {
85+
Logger.getLogger(ParamsViewModel.class.getName()).log(Level.SEVERE, null, ex);
86+
}
87+
return value;
88+
}
89+
90+
@Override
91+
public void setObject(int column, Object value) {
92+
try {
93+
Parameter param = this;
94+
switch (column) {
95+
case 0: // Data
96+
break;
97+
case 1: // Type
98+
param.setType((parseType((String)value)));
99+
break;
100+
case 2: // Name
101+
param.setName((String)value);
102+
break;
103+
case 3: // Value
104+
param.setValue((String)value);
105+
break;
106+
}
107+
} catch (Exception ex) {
108+
Logger.getLogger(ParamsView.class.getName()).log(Level.SEVERE, null, ex);
109+
}
110+
}
111+
112+
private final static String[] TYPES = {"URL", "Body", "Cookie", "XML", "-", "(file)", "JSON"};
113+
114+
public static String getType(byte type) {
115+
return TYPES[type];
116+
}
117+
118+
public static byte parseType(String type) {
119+
for (int i = 0; i < TYPES.length; i++) {
120+
if (TYPES[i].equals(type)) return (byte)i;
121+
}
122+
return (byte)-1;
123+
}
124+
125+
}

src/yagura/model/ParamsViewModel.java

Lines changed: 39 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package yagura.model;
22

3-
import burp.IParameter;
4-
import extend.model.base.ObjectTableModel;
3+
import extend.model.base.DefaultObjectTableModel;
54
import extend.util.Util;
6-
import java.util.List;
5+
import java.nio.charset.StandardCharsets;
76
import java.util.logging.Level;
87
import java.util.logging.Logger;
98
import javax.swing.table.TableModel;
@@ -13,43 +12,41 @@
1312
*
1413
* @author raise.isayan
1514
*/
16-
public class ParamsViewModel extends ObjectTableModel<Parameter> {
15+
public class ParamsViewModel extends DefaultObjectTableModel<ParamsView> {
1716

1817
public ParamsViewModel(TableModel model) {
1918
super(model);
2019
}
2120

22-
public ParamsViewModel(TableModel model, List<Parameter> d) {
23-
super(model, d);
24-
}
25-
2621
private boolean editable = false;
22+
2723
public void setCellEditable(boolean enable) {
2824
this.editable = enable;
2925
}
30-
26+
27+
public boolean getCellEditable() {
28+
return this.editable;
29+
}
30+
3131
@Override
3232
public boolean isCellEditable(int rowIndex, int columnIndex) {
3333
return this.editable;
3434
}
3535

3636
@Override
37-
public Object getValueAt(int row, int col) {
37+
public Object getValueAt(int rowIndex, int columnIndex) {
3838
Object value = null;
3939
try {
40-
if (row < 0 || row >= this.getRowCount()) {
41-
return value;
42-
}
43-
IParameter param = this.getData(row);
44-
switch (col) {
40+
ParamsView param = super.getData(rowIndex);
41+
switch (columnIndex) {
4542
case 0: //
4643
{
4744
value = param;
4845
break;
4946
}
5047
case 1: // Type
5148
{
52-
value = getType(param.getType());
49+
value = ParamsView.getType(param.getType());
5350
break;
5451
}
5552
case 2: // Name
@@ -84,53 +81,45 @@ public Object getValueAt(int row, int col) {
8481
}
8582

8683
@Override
87-
public void setValueAt(Object value, int row, int col) {
84+
public void setValueAt(Object value, int rowIndex, int columnIndex) {
8885
try {
89-
Parameter param = this.getData(row);
90-
switch (col) {
86+
ParamsView param = new ParamsView();
87+
switch (columnIndex) {
9188
case 0: // Data
9289
break;
9390
case 1: // Type
94-
param.setType((parseType((String)value)));
91+
param.setType((ParamsView.parseType((String)value)));
9592
break;
9693
case 2: // Name
97-
param.setName((String)value);
94+
if (this.urldecode) {
95+
String raw = Util.getRawStr(Util.encodeMessage((String)value, encoding));
96+
raw = TransUtil.encodeUrl(raw, encoding, true);
97+
param.setName(raw);
98+
}
99+
else {
100+
String rowMessage = Util.getRawStr(Util.encodeMessage((String)value, encoding));
101+
param.setName(rowMessage);
102+
}
98103
break;
99104
case 3: // Value
100-
param.setValue((String)value);
105+
if (this.urldecode) {
106+
String raw = Util.getRawStr(Util.encodeMessage((String)value, encoding));
107+
raw = TransUtil.encodeUrl(raw, encoding, true);
108+
param.setValue(raw);
109+
}
110+
else {
111+
String raw = Util.getRawStr(Util.encodeMessage((String)value, encoding));
112+
param.setValue(raw);
113+
}
101114
break;
102115
}
103-
this.fireTableDataChanged();
116+
super.setData(rowIndex, param);
104117
} catch (Exception ex) {
105-
Logger.getLogger(ParamsViewModel.class.getName()).log(Level.SEVERE, null, ex);
118+
Logger.getLogger(ParamsView.class.getName()).log(Level.SEVERE, null, ex);
106119
}
107120
}
108121

109-
private final static String[] TYPES = {"URL", "Body", "Cookie", "XML", "-", "(file)", "JSON"};
110-
111-
public static String getType(byte type) {
112-
return TYPES[type];
113-
}
114-
115-
public static byte parseType(String type) {
116-
for (int i = 0; i < TYPES.length; i++) {
117-
if (TYPES[i].equals(type)) return (byte)i;
118-
}
119-
return (byte)-1;
120-
}
121-
122-
@Override
123-
public Object[] getRows(int row) {
124-
try {
125-
IParameter msg = this.getData(row);
126-
return new Object[]{row, msg.getType(), msg.getName(), msg.getValue()};
127-
} catch (Exception ex) {
128-
Logger.getLogger(ParamsViewModel.class.getName()).log(Level.SEVERE, null, ex);
129-
}
130-
return null;
131-
}
132-
133-
private String encoding = "8859_1";
122+
private String encoding = StandardCharsets.ISO_8859_1.name();
134123

135124
public String getEncoding() {
136125
return this.encoding;
@@ -139,7 +128,7 @@ public String getEncoding() {
139128
public void setEncoding(String encoding) {
140129
this.encoding = encoding;
141130
}
142-
131+
143132
private boolean urldecode = false;
144133

145134
public boolean getUrlDecode() {

0 commit comments

Comments
 (0)