more
This commit is contained in:
67
vault-door-7/VaultDoor7.java
Executable file
67
vault-door-7/VaultDoor7.java
Executable file
@@ -0,0 +1,67 @@
|
||||
import java.util.*;
|
||||
import javax.crypto.Cipher;
|
||||
import javax.crypto.spec.SecretKeySpec;
|
||||
import java.security.*;
|
||||
|
||||
class VaultDoor7 {
|
||||
public static void main(String args[]) {
|
||||
VaultDoor7 vaultDoor = new VaultDoor7();
|
||||
Scanner scanner = new Scanner(System.in);
|
||||
System.out.print("Enter vault password: ");
|
||||
String userInput = scanner.next();
|
||||
String input = userInput.substring("picoCTF{".length(),userInput.length()-1);
|
||||
if (vaultDoor.checkPassword(input)) {
|
||||
System.out.println("Access granted.");
|
||||
} else {
|
||||
System.out.println("Access denied!");
|
||||
}
|
||||
}
|
||||
|
||||
// Each character can be represented as a byte value using its
|
||||
// ASCII encoding. Each byte contains 8 bits, and an int contains
|
||||
// 32 bits, so we can "pack" 4 bytes into a single int. Here's an
|
||||
// example: if the hex string is "01ab", then those can be
|
||||
// represented as the bytes {0x30, 0x31, 0x61, 0x62}. When those
|
||||
// bytes are represented as binary, they are:
|
||||
//
|
||||
// 0x30: 00110000
|
||||
// 0x31: 00110001
|
||||
// 0x61: 01100001
|
||||
// 0x62: 01100010
|
||||
//
|
||||
// If we put those 4 binary numbers end to end, we end up with 32
|
||||
// bits that can be interpreted as an int.
|
||||
//
|
||||
// 00110000001100010110000101100010 -> 808542562
|
||||
//
|
||||
// Since 4 chars can be represented as 1 int, the 32 character password can
|
||||
// be represented as an array of 8 ints.
|
||||
//
|
||||
// - Minion #7816
|
||||
public int[] passwordToIntArray(String hex) {
|
||||
int[] x = new int[8];
|
||||
byte[] hexBytes = hex.getBytes();
|
||||
for (int i=0; i<8; i++) {
|
||||
x[i] = hexBytes[i*4] << 24
|
||||
| hexBytes[i*4+1] << 16
|
||||
| hexBytes[i*4+2] << 8
|
||||
| hexBytes[i*4+3];
|
||||
}
|
||||
return x;
|
||||
}
|
||||
|
||||
public boolean checkPassword(String password) {
|
||||
if (password.length() != 32) {
|
||||
return false;
|
||||
}
|
||||
int[] x = passwordToIntArray(password);
|
||||
return x[0] == 1096770097
|
||||
&& x[1] == 1952395366
|
||||
&& x[2] == 1600270708
|
||||
&& x[3] == 1601398833
|
||||
&& x[4] == 1716808014
|
||||
&& x[5] == 1734291511
|
||||
&& x[6] == 960049251
|
||||
&& x[7] == 1681089078;
|
||||
}
|
||||
}
|
||||
6
vault-door-7/sol.py
Executable file
6
vault-door-7/sol.py
Executable file
@@ -0,0 +1,6 @@
|
||||
#!/home/maxime/.pyvenv/bin/python3
|
||||
|
||||
I = [1096770097, 1952395366, 1600270708, 1601398833, 1716808014, 1734291511, 960049251, 1681089078]
|
||||
|
||||
print(''.join(map(lambda a: (chr(a>>24) + chr((a%(2**24))>>16) + chr((a%(2**16))>>8) + chr(a%(2**8))), I)))
|
||||
|
||||
Reference in New Issue
Block a user