feat: add 200B200C challenge

This commit is contained in:
Abel Stuker 2024-11-25 22:25:13 +01:00
commit 0c40415d3d
4 changed files with 51 additions and 0 deletions

7
200B200C/README.md Normal file
View File

@ -0,0 +1,7 @@
# 200B200C
## Text
Here is your flag `IGCTF{Th1s_1s_th3_wr0ng_fl4g}`.
## Files
n/a
## How to Deploy
n/a

8
200B200C/SOLUTION.md Normal file
View File

@ -0,0 +1,8 @@
## Difficulty
Easy
## Category
Miscellaneous
## How To Solve
Copy the flag and open it in Vim. You will see that there are a lot of Zero Width Unicode Characters `U+200B` and `U+200C` between the letters. Decode every `U+200C` as a `0` and every `U+200B` as a `1`. Then interpret the obtained row as a sequence of ASCII characters (by converting every 8 bits to an ASCII character) to get the flag. Example [write-up script in Racket](./writeup.rkt).
## Flag
`IGCTF{Th3_0nly_c0rr3ct_fl4g}`

1
200B200C/flag.txt Normal file
View File

@ -0,0 +1 @@
IGCTF{Th1s_1s_th3_wr0ng_fl4g}

35
200B200C/writeup.rkt Normal file
View File

@ -0,0 +1,35 @@
#lang racket
(define (get-input)
(display "Enter your string ")
(read-line (current-input-port) 'any))
(define (decode input)
(define bits '())
(for/list ((c (string->list input)))
(cond ((equal? c #\u200C) (set! bits (append bits '(0))))
((equal? c #\u200B) (set! bits (append bits '(1))))))
(bits->text bits))
(define (bits->text bits)
(define bytes (collect-bytes bits))
(apply string (map (lambda (byte)
(integer->char (bits->number byte)))
bytes)))
(define (collect-bytes bits)
(define (collect-bytes-iter bits acc)
(cond ((null? bits) (reverse acc))
((>= (length bits) 8) (collect-bytes-iter (drop bits 8) (cons (take bits 8) acc)))
(else (error "Invalid bits"))))
(collect-bytes-iter bits '()))
(define (bits->number bits)
(let ((binary-string (apply string (map (lambda (bit) (if (= bit 1) #\1 #\0)) bits))))
(string->number binary-string 2)))
(define (main)
(let ((input (get-input)))
(displayln (decode input))))
(main)