mirror of
https://github.com/maikka39/Personal-Website.git
synced 2026-10-02 14:46:25 +00:00
Improve collapsable code to be reusable
This commit is contained in:
@@ -58,9 +58,9 @@ Upon opening the website, we're greeted with a code editor and some text:
|
||||
>
|
||||
> The controlCar function takes a single parameter – `scanArray` – which is an array containing 17 integers denoting distance > from your car to the nearest obstacle:
|
||||
>
|
||||
> - [indexes 0-7]: on the left side of the car (index 7 is the measurement at the left headlight),
|
||||
> - [index 8]: at the center of the car,
|
||||
> - [indexes 9-16]: on the right side of the car (index 9 is the measurement at the right headlight).
|
||||
> - [indexes 0-7]: on the left side of the car (index 7 is the measurement at the left headlight),
|
||||
> - [index 8]: at the center of the car,
|
||||
> - [indexes 9-16]: on the right side of the car (index 9 is the measurement at the right headlight).
|
||||
>
|
||||
> See also [this image]({{< ref "#radar-image" >}}) (it's not precise, but will give you an idea what you are looking at).
|
||||
>
|
||||
@@ -72,9 +72,9 @@ Upon opening the website, we're greeted with a code editor and some text:
|
||||
>
|
||||
> The `controlCar` must return an integer denoting where the car should drive:
|
||||
>
|
||||
> - -1 (or any other negative value): drive more to the left,
|
||||
> - 0: continue straight / straighten up the car,
|
||||
> - 1 (or any other positive value): drive more to the right.
|
||||
> - -1 (or any other negative value): drive more to the left,
|
||||
> - 0: continue straight / straighten up the car,
|
||||
> - 1 (or any other positive value): drive more to the right.
|
||||
|
||||
When opening the source, we also find the following comment:
|
||||
|
||||
@@ -92,66 +92,66 @@ When opening the source, we also find the following comment:
|
||||
|
||||
To solve this challenge, I came up with the following script:
|
||||
|
||||
{{< code language="js" title="solve.js" >}}
|
||||
{{< collapsible-block badge="js" title="solve.js" >}}
|
||||
|
||||
```js
|
||||
function controlCar(scanArray) {
|
||||
if (!window.has_reset_game) {
|
||||
window.has_reset_game = true;
|
||||
window.car_position = 0;
|
||||
window.queue = [];
|
||||
}
|
||||
|
||||
if (window.queue.length === 0) {
|
||||
let left, center, right;
|
||||
|
||||
if (window.car_position === -1) {
|
||||
left = 8;
|
||||
center = 12;
|
||||
right = 15;
|
||||
} else if (window.car_position === 0) {
|
||||
left = 4;
|
||||
center = 8;
|
||||
right = 12;
|
||||
} else if (window.car_position === 1) {
|
||||
left = 1;
|
||||
center = 4;
|
||||
right = 8;
|
||||
if (!window.has_reset_game) {
|
||||
window.has_reset_game = true;
|
||||
window.car_position = 0;
|
||||
window.queue = [];
|
||||
}
|
||||
|
||||
left = scanArray[left];
|
||||
center = scanArray[center];
|
||||
right = scanArray[right];
|
||||
if (window.queue.length === 0) {
|
||||
let left, center, right;
|
||||
|
||||
let furthest = Math.max(left, center, right);
|
||||
let closest = Math.min(left, center, right);
|
||||
if (window.car_position === -1) {
|
||||
left = 8;
|
||||
center = 12;
|
||||
right = 15;
|
||||
} else if (window.car_position === 0) {
|
||||
left = 4;
|
||||
center = 8;
|
||||
right = 12;
|
||||
} else if (window.car_position === 1) {
|
||||
left = 1;
|
||||
center = 4;
|
||||
right = 8;
|
||||
}
|
||||
|
||||
console.log(left, center, right);
|
||||
left = scanArray[left];
|
||||
center = scanArray[center];
|
||||
right = scanArray[right];
|
||||
|
||||
let moveInDirection = (direction) => {
|
||||
console.log("Going in direction", direction);
|
||||
if (direction === window.car_position) {
|
||||
window.queue.push(0);
|
||||
} else if (direction > window.car_position) {
|
||||
window.queue.push(1, 1, 1, 1);
|
||||
window.car_position += 1;
|
||||
} else if (direction < window.car_position) {
|
||||
window.queue.push(-1, -1, -1, -1);
|
||||
window.car_position -= 1;
|
||||
}
|
||||
};
|
||||
let furthest = Math.max(left, center, right);
|
||||
let closest = Math.min(left, center, right);
|
||||
|
||||
if (closest < 0) moveInDirection(window.car_position);
|
||||
else if (furthest === left) moveInDirection(-1);
|
||||
else if (furthest === center) moveInDirection(0);
|
||||
else if (furthest === right) moveInDirection(1);
|
||||
}
|
||||
console.log(left, center, right);
|
||||
|
||||
return window.queue.pop();
|
||||
let moveInDirection = (direction) => {
|
||||
console.log("Going in direction", direction);
|
||||
if (direction === window.car_position) {
|
||||
window.queue.push(0);
|
||||
} else if (direction > window.car_position) {
|
||||
window.queue.push(1, 1, 1, 1);
|
||||
window.car_position += 1;
|
||||
} else if (direction < window.car_position) {
|
||||
window.queue.push(-1, -1, -1, -1);
|
||||
window.car_position -= 1;
|
||||
}
|
||||
};
|
||||
|
||||
if (closest < 0) moveInDirection(window.car_position);
|
||||
else if (furthest === left) moveInDirection(-1);
|
||||
else if (furthest === center) moveInDirection(0);
|
||||
else if (furthest === right) moveInDirection(1);
|
||||
}
|
||||
|
||||
return window.queue.pop();
|
||||
}
|
||||
```
|
||||
|
||||
{{< /code >}}
|
||||
{{< /collapsible-block >}}
|
||||
|
||||
It starts off by initializing some global variables if the game is running for the first time (or after a restart). After which, it check if there are still moves in the queue. If so, it grabs the last item out of the queue and returns it.
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@ You’re taking a stroll in the lab, when Dr. Klostermann is calling your name:
|
||||
|
||||
[attachment.zip](/files/writeups/google-ctf/2021/beginners-quest/4/attachment.zip)
|
||||
|
||||
{{< code language="c" title="chal.c" isCollapsed="true" >}}
|
||||
{{< collapsible-block badge="c" title="chal.c" isCollapsed="true" >}}
|
||||
|
||||
```c
|
||||
#include <stdbool.h>
|
||||
@@ -208,7 +208,7 @@ int main(void)
|
||||
}
|
||||
```
|
||||
|
||||
{{< /code >}}
|
||||
{{< /collapsible-block >}}
|
||||
|
||||
## Recon
|
||||
|
||||
@@ -308,7 +308,7 @@ for set_mask, clr_mask in zip(set_masks, clr_masks):
|
||||
print(flag.strip())
|
||||
```
|
||||
|
||||
{{< code language="py" title="Full code" isCollapsed="true" >}}
|
||||
{{< collapsible-block badge="py" title="Full code" isCollapsed="true" >}}
|
||||
|
||||
```py
|
||||
set_mask_str = "gpio_set_mask"
|
||||
@@ -343,7 +343,7 @@ for set_mask, clr_mask in zip(set_masks, clr_masks):
|
||||
print(flag.strip())
|
||||
```
|
||||
|
||||
{{< /code >}}
|
||||
{{< /collapsible-block >}}
|
||||
|
||||
## Solution
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ As you and Gökhan are leaving the crates to enter a car, you spot the tough guy
|
||||
|
||||
[attachment.zip](/files/writeups/google-ctf/2021/beginners-quest/5/attachment.zip)
|
||||
|
||||
{{< code language="py" title="RoboCaller1337.py" isCollapsed="true" >}}
|
||||
{{< collapsible-block badge="py" title="RoboCaller1337.py" isCollapsed="true" >}}
|
||||
|
||||
```py
|
||||
import random
|
||||
@@ -103,9 +103,9 @@ if __name__ == "__main__":
|
||||
main()
|
||||
```
|
||||
|
||||
{{< /code >}}
|
||||
{{< /collapsible-block >}}
|
||||
|
||||
{{< code language="txt" title="robo_numbers_list.txt" isCollapsed="true" >}}
|
||||
{{< collapsible-block badge="txt" title="robo_numbers_list.txt" isCollapsed="true" >}}
|
||||
|
||||
```txt
|
||||
263-170-6234
|
||||
@@ -734,7 +734,7 @@ if __name__ == "__main__":
|
||||
446-996-9104
|
||||
```
|
||||
|
||||
{{< /code >}}
|
||||
{{< /collapsible-block >}}
|
||||
|
||||
## Recon
|
||||
|
||||
@@ -793,7 +793,7 @@ for a,b in zip(key, secret):
|
||||
print(flag)
|
||||
```
|
||||
|
||||
{{< code language="py" title="Full code" isCollapsed="true" >}}
|
||||
{{< collapsible-block badge="py" title="Full code" isCollapsed="true" >}}
|
||||
|
||||
```py
|
||||
from mt19937predictor import MT19937Predictor
|
||||
@@ -816,7 +816,7 @@ for a,b in zip(key, secret):
|
||||
print(flag)
|
||||
```
|
||||
|
||||
{{< /code >}}
|
||||
{{< /collapsible-block >}}
|
||||
|
||||
## Solution
|
||||
|
||||
|
||||
@@ -50,7 +50,7 @@ After having climbed through the window, you wait for a while on the ground. The
|
||||
|
||||
[attachment.zip](/files/writeups/google-ctf/2021/beginners-quest/6/attachment.zip)
|
||||
|
||||
{{< code language="txt" title="encodings" isCollapsed="true" >}}
|
||||
{{< collapsible-block badge="txt" title="encodings" isCollapsed="true" >}}
|
||||
|
||||
```text
|
||||
I made a super secret encoder. I remember using:
|
||||
@@ -64,15 +64,15 @@ I made a super secret encoder. I remember using:
|
||||
I also use gzip and zlib (to compress the stuff) and I like hiding things in files...
|
||||
```
|
||||
|
||||
{{< /code >}}
|
||||
{{< /collapsible-block >}}
|
||||
|
||||
{{< code language="txt" title="chall.txt" isCollapsed="true" >}}
|
||||
{{< collapsible-block badge="txt" title="chall.txt" isCollapsed="true" >}}
|
||||
|
||||
```txt
|
||||
File is too large to display here.
|
||||
```
|
||||
|
||||
{{< /code >}}
|
||||
{{< /collapsible-block >}}
|
||||
|
||||
## Recon
|
||||
|
||||
@@ -336,7 +336,7 @@ for line in data:
|
||||
print(line)
|
||||
```
|
||||
|
||||
{{< code language="text" title="output" >}}
|
||||
{{< collapsible-block badge="text" title="output" >}}
|
||||
|
||||
```text
|
||||
nyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyya~
|
||||
@@ -776,7 +776,7 @@ nyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyya~
|
||||
nyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyya~
|
||||
```
|
||||
|
||||
{{< /code >}}
|
||||
{{< /collapsible-block >}}
|
||||
|
||||
### nya~
|
||||
|
||||
@@ -841,43 +841,43 @@ Then, let's follow the steps to convert brainfuck to Unary in reverse.
|
||||
|
||||
1. Remove the leading `1`
|
||||
|
||||
```py
|
||||
unary_code = unary_code[1:]
|
||||
```
|
||||
```py
|
||||
unary_code = unary_code[1:]
|
||||
```
|
||||
|
||||
2. Replace unary with brainfuck
|
||||
|
||||
```py
|
||||
for i in range(0, len(unary_code), 3):
|
||||
operation = unary_code[i:i+3]
|
||||
```py
|
||||
for i in range(0, len(unary_code), 3):
|
||||
operation = unary_code[i:i+3]
|
||||
|
||||
if operation == "000":
|
||||
brainfuck_code += ">"
|
||||
elif operation == "001":
|
||||
brainfuck_code += "<"
|
||||
elif operation == "010":
|
||||
brainfuck_code += "+"
|
||||
elif operation == "011":
|
||||
brainfuck_code += "-"
|
||||
elif operation == "100":
|
||||
brainfuck_code += "."
|
||||
elif operation == "101":
|
||||
brainfuck_code += ","
|
||||
elif operation == "110":
|
||||
brainfuck_code += "["
|
||||
elif operation == "111":
|
||||
brainfuck_code += "]"
|
||||
```
|
||||
if operation == "000":
|
||||
brainfuck_code += ">"
|
||||
elif operation == "001":
|
||||
brainfuck_code += "<"
|
||||
elif operation == "010":
|
||||
brainfuck_code += "+"
|
||||
elif operation == "011":
|
||||
brainfuck_code += "-"
|
||||
elif operation == "100":
|
||||
brainfuck_code += "."
|
||||
elif operation == "101":
|
||||
brainfuck_code += ","
|
||||
elif operation == "110":
|
||||
brainfuck_code += "["
|
||||
elif operation == "111":
|
||||
brainfuck_code += "]"
|
||||
```
|
||||
|
||||
3. Print the result:
|
||||
|
||||
```py
|
||||
print(brainfuck_code)
|
||||
```
|
||||
```py
|
||||
print(brainfuck_code)
|
||||
```
|
||||
|
||||
```bf
|
||||
[-]>[-]<++++++[>++++++++++<-]>+++++++.<+[>++++++++++<-]>+++++++.<+[>----------<-]>----.<+++++[>++++++++++<-]>+++.<+[>----------<-]>-.<[>----------<-]>----.<+++++[>----------<-]>-------.<[>++++++++++<-]>+.<++++++[>++++++++++<-]>+++.<++++++[>----------<-]>----.<++++[>++++++++++<-]>++++.<+[>++++++++++<-]>+++++.<++++++[>----------<-]>--.<++++[>++++++++++<-]>+++++++.<+[>++++++++++<-]>++++.<++++++[>----------<-]>-.<[>++++++++++<-]>++++.<++++++[>++++++++++<-]>++.<+[>++++++++++<-]>+.<
|
||||
```
|
||||
```bf
|
||||
[-]>[-]<++++++[>++++++++++<-]>+++++++.<+[>++++++++++<-]>+++++++.<+[>----------<-]>----.<+++++[>++++++++++<-]>+++.<+[>----------<-]>-.<[>----------<-]>----.<+++++[>----------<-]>-------.<[>++++++++++<-]>+.<++++++[>++++++++++<-]>+++.<++++++[>----------<-]>----.<++++[>++++++++++<-]>++++.<+[>++++++++++<-]>+++++.<++++++[>----------<-]>--.<++++[>++++++++++<-]>+++++++.<+[>++++++++++<-]>++++.<++++++[>----------<-]>-.<[>++++++++++<-]>++++.<++++++[>++++++++++<-]>++.<+[>++++++++++<-]>+.<
|
||||
```
|
||||
|
||||
### Brainfuck
|
||||
|
||||
@@ -903,7 +903,7 @@ CTF{pl34s3_n0_m04r}
|
||||
|
||||
As for most ctf problems, I've written a script that executes all the step automatically and returns the flag.
|
||||
|
||||
{{< code language="py" title="solve.py" isCollapsed="true" >}}
|
||||
{{< collapsible-block badge="py" title="solve.py" isCollapsed="true" >}}
|
||||
|
||||
```py
|
||||
# pip install brainfuck-interpreter
|
||||
@@ -1065,7 +1065,7 @@ flag = brainfuck.evaluate(brainfuck_code)
|
||||
print(flag)
|
||||
```
|
||||
|
||||
{{< /code >}}
|
||||
{{< /collapsible-block >}}
|
||||
|
||||
## Solution
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ Nowak is very impressed by your skills. You and him sit down by a table, and you
|
||||
|
||||
[attachment.zip](/files/writeups/google-ctf/2021/beginners-quest/7/attachment.zip)
|
||||
|
||||
{{< code language="python" title="chall.py" isCollapsed="true" >}}
|
||||
{{< collapsible-block badge="python" title="chall.py" isCollapsed="true" >}}
|
||||
|
||||
```py
|
||||
from Crypto.Util.number import *
|
||||
@@ -63,7 +63,7 @@ print(n)
|
||||
#21034814455172467787319632067588541051616978031477984909593707891829600195022041640200088624987623056713604514239406145871910044808006741636513624835862657042742260288941962019533183418661144639940608960169440421588092324928046033370735375447302576018460809597788053566456538713152022888984084306297869362373871810139948930387868426850576062496427583397660227337178607544043400076287217521751017970956067448273578322298078706011759257235310210160153287198740097954054080553667336498134630979908988858940173520975701311654172499116958019179004876438417238730801165613806576140914402525031242813240005791376093215124477
|
||||
```
|
||||
|
||||
{{< /code >}}
|
||||
{{< /collapsible-block >}}
|
||||
|
||||
## Recon
|
||||
|
||||
|
||||
Reference in New Issue
Block a user