0

Burp Suite 拡張機能を開発しています。

クラス BurpExtender があり、public static フィールドがあります。

public class BurpExtender implements IBurpExtender, IContextMenuFactory{

    private IBurpExtenderCallbacks callbacks;
    public static PrintWriter stdout;
    public static IExtensionHelpers helpers;
    ...
    @Override
        public void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks) {

            this.callbacks = callbacks;
            this.helpers = callbacks.getHelpers();
            PrintWriter stdout = new PrintWriter(callbacks.getStdout(), true);

            callbacks.setExtensionName("REQUESTSENDER");
            callbacks.registerContextMenuFactory(BurpExtender.this);
            stdout.println("Registered");

        }

    public List<JMenuItem> createMenuItems(final IContextMenuInvocation invocation) {
        List<JMenuItem> menuItemList = new ArrayList<JMenuItem>();
        JMenuItem item = new JMenuItem(new MyAction());
        menuItemList.add(item);
        return menuItemList;
    }

このファイルには、別のクラス MyAction があります。

private class MyAction extends AbstractAction{
    public MyAction(){
        super("Name");
    }


    public void actionPerformed(ActionEvent e) {
        //Here i want to use BurpExtender.helpers, but i cant figure out, how to.
        //BurpExtender.stdout doesnt work here. Dunno why, NullPoinerException.
    }
}

JMenuItem item = new JMenuItem(new AbstractAction("123") {...} のようにsmthを実行しようとすると、別の解決策がありました

4

1 に答える 1

1

helperクラスのおよびstdoutオブジェクトを初期化する必要がありますBurpExtender

これらは静的フィールドであるため、適切な場所は、宣言時またはクラスの静的ブロック内で初期化することです。

例えば:

  1. それらを宣言している間:
public static PrintWriter stdout = System.out;
public static IExtensionHelpers helpers = new ExtensionHelperImpl();// something like this.
  1. または静的ブロック内
public static PrintWriter stdout;
public static IExtensionHelpers helpers;

static {
    stdout = System.out;
    helpers = new ExtensionHelperImpl();// something like this.
}

この初期化がないと、stdoutとのhelpers参照は を指しnullます。BurpExtender.stdoutこれにより、またはBurpExtender.helpers他のクラスで使用しようとすると NullPointerException が発生します 。

アップデート

MyActionクラスで、オブジェクトを保持するための参照を宣言しますIContextMenuInvocation invocation。このようなもの:

private class MyAction extends AbstractAction{
    private IContextMenuInvocation invocation;

    public MyAction(IContextMenuInvocation invocation){
        super("Name");
        this.invocation = invocation;
    }


    public void actionPerformed(ActionEvent e) {
        //Here you can use BurpExtender.helpers and IContextMenuInvocation invocation also.
        BurpExtender.helpers.doSomething();
        invocation.invoke();// for example..
    }
}

次に、外部クラス内で、createMenuItemsメソッドを次のように変更します。

public List<JMenuItem> createMenuItems(final IContextMenuInvocation invocation) {
    List<JMenuItem> menuItemList = new ArrayList<JMenuItem>();
    JMenuItem item = new JMenuItem(new MyAction(invocation));// this is the change
    menuItemList.add(item);
    return menuItemList;
}

お役に立てれば!

于 2016-12-30T09:06:06.693 に答える