write-ups-challenges-2021-2022/buffer_buffet/part1/index.rkt

42 lines
1.2 KiB
Racket
Raw Permalink Normal View History

2021-12-02 23:33:26 +00:00
#lang racket
(define memory (make-vector 1024 #\nul))
(define flag (if (getenv "FLAG") (getenv "FLAG") "NO-FLAG-DEFINED"))
(define (write-to-memory! str memory-start-index)
(define str-length (string-length str))
(define (loop str-index)
(when (< str-index str-length)
(vector-set! memory (+ memory-start-index str-index) (string-ref str str-index))
(loop (+ str-index 1))))
(loop 0))
(define (init-memory!)
(write-to-memory! "admin\0" 8)
(write-to-memory! (string-append flag "\0") 14))
(init-memory!)
(define (read-from-memory memory-start-index)
(define (loop str curr-index)
(if (equal? (vector-ref memory curr-index) #\nul)
str
(loop (string-append str (string (vector-ref memory curr-index))) (+ curr-index 1))))
(loop "" memory-start-index))
(define (main)
(display "Editing user name 'admin'\n")
(display "Enter new name: ")
(define new-username (symbol->string (read)))
(if (> (string-length new-username) (- 14 8))
(begin
(display "Error: new username cannot be longer than old username\n")
(main))
(begin
(write-to-memory! new-username 8)
(display (string-append "Successfully changed username of 'admin' to '" (read-from-memory 8) "'")))))
(main)