HOB Software Competition

For their 25th anniversary HOB Software decided to have a Problem Solving competition

 

1

2

I was at work and decided to give it a go during the break. After decompressing the HSM Problem solving Competition.rar6

Stage 1:

I opened the raw class file in vim and noticed something interesting

7

<p style=”font-size:110%”><b>Stage 2: U3RhZ2UgMzogNTMgNzQgNjEgNjcgNjUgMjAgMzQgM2EgMjAgMzEgMzMgMzQgMzcgMzcgMzcgMzMgMzcgMzUgMzY=</b></p>

To me this seemed like a base64 encoded string prefixed with Stage 2: meant I somehow solved the first Stage. Not being satisfied I decided to decompile the class back to java which produced the following code:

import Main;
import java.awt.Color;
import java.awt.Component;
import java.awt.GridBagLayout;
import java.awt.LayoutManager;
import java.io.File;
import java.net.URL;
import java.security.CodeSource;
import java.security.ProtectionDomain;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextPane;
import javax.swing.border.Border;

public class Competition
extends JFrame {
final String gz = "STAGE 1 COMPLETE! 4 STAGES LEFT!";
private static final long serialVersionUID = 1;
private String gotostage2dottxt = "gotostage2.txt";
private JTextPane label;

public Competition() {
super("HOB Software Malta Competition");
this.setDefaultCloseOperation(3);
this.setLayout(new GridBagLayout());
this.label = new JTextPane();
this.label.setEditable(false);
this.label.setBackground(null);
this.label.setBorder(null);
this.label.setContentType("text/html");
File file = new File(String.valueOf(this.getExecutableLocation()) + this.gotostage2dottxt);
if (file.exists() && !file.isDirectory()) {
this.doTextFilePresentProcedure();
this.setSize(1000, 200);
} else {
this.doTextFileAbsentProcedure();
this.setSize(600, 200);
}
this.setLocationRelativeTo(null);
this.setVisible(true);
}

String getExecutableLocation() {
return Main.class.getProtectionDomain().getCodeSource().getLocation().getPath().replaceAll("%20", " ");
}

void doTextFilePresentProcedure() {
this.label.setText("<p style=\"font-size:110%\"><b>Stage 2: U3RhZ2UgMzogNTMgNzQgNjEgNjcgNjUgMjAgMzQgM2EgMjAgMzEgMzMgMzQgMzcgMzcgMzcgMzMgMzcgMzUgMzY=</b></p>");
JPanel panel1 = new JPanel(new GridBagLayout());
panel1.add(this.label);
this.add(panel1);
}

void doTextFileAbsentProcedure() {
this.label.setText("<p style=\"font-size:150%\"><b>404 - File Not Found</b></p>");
JPanel panel1 = new JPanel(new GridBagLayout());
panel1.add(this.label);
this.add(panel1);
}
}

There is a conditional looking for a file named gotostage2.txt, so in reality the first stage was to create an empty text file named gotostage2.txt and execute the run_me.bat.

3

another fact seems like that from “STAGE 1 COMPLETE! 4 STAGES LEFT!” this competition has 5 stages.

Stage 2:

https://www.base64decode.org/

4

U3RhZ2UgMzogNTMgNzQgNjEgNjcgNjUgMjAgMzQgM2EgMjAgMzEgMzMgMzQgMzcgMzcgMzcgMzMgMzcgMzUgMzY=

Stage 3: 53 74 61 67 65 20 34 3a 20 31 33 34 37 37 37 33 37 35 36

 

Stage 3:

http://www.rapidtables.com/convert/number/hex-to-ascii.htm

53 74 61 67 65 20 34 3a 20 31 33 34 37 37 37 33 37 35 36

5

Stage 4: 1347773756

Stage 4:

1347773756

 

I tried a lot of things including trying to map the numbers to letters on the phone keypad but yielded no success.

Stuck here!!

 

Stage 5:

??