Hey! It's an account I still have
Sep. 26th, 2024 03:06 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
So I guess I'm going to try things here again, now that cohost is shutting down.
I'm not sure I will use it for much, but I do think I'll probably soon be archiving and/or hiding most entries older than about 10 years, mostly because my kid doesn't need to be able to find those entries, and if he somehow wants them he can ask me about them.
Anyway though, for a first entry, here's something I'm pulling over from cohost:
So, I made a puzzle as a bit of a tribute to my dad. I have verified that solving the puzzle is possible in the sense that "if you know what went into constructing this but not the answer, it is possible to derive the answer" but of course that's no guarantee that people who are not me will naturally look at it and say "ah, these are the tools I need to wield to attack this".
Solving the puzzle requires Math, but getting to where you can figure out which Math to use first requires reading x86 assembly language. So first of, if either of those things strikes you as Intensely Not Fun, this isn't for you.
If you want to try the puzzle on hard mode, it's this: what input causes the following static linux x86 binary to exit successfully?
You have my guarantee that this program only reads from stdin, only writes to stdout, and the only other syscall it makes is
(Still, run it in an isolated docker container or VM because good lord, have some basic security safety/hygiene)
If you prefer slightly less hard-mode, there's this link, which contains x86 assembly language source for the program for both Windows and Linux: https://gist.github.com/fizbin/d558258f40f39bdc62b5eeafbc43f642
That gives you variable and symbol names, as well as a very minor hint or two in the comments.
It also gives you this background on why this puzzle is what it is:
I'm not sure I will use it for much, but I do think I'll probably soon be archiving and/or hiding most entries older than about 10 years, mostly because my kid doesn't need to be able to find those entries, and if he somehow wants them he can ask me about them.
Anyway though, for a first entry, here's something I'm pulling over from cohost:
A puzzle I made
So, I made a puzzle as a bit of a tribute to my dad. I have verified that solving the puzzle is possible in the sense that "if you know what went into constructing this but not the answer, it is possible to derive the answer" but of course that's no guarantee that people who are not me will naturally look at it and say "ah, these are the tools I need to wield to attack this".
Solving the puzzle requires Math, but getting to where you can figure out which Math to use first requires reading x86 assembly language. So first of, if either of those things strikes you as Intensely Not Fun, this isn't for you.
If you want to try the puzzle on hard mode, it's this: what input causes the following static linux x86 binary to exit successfully?
begin-base64 755 passcheck
f0VMRgEBAQAAAAAAAAAAAAIAAwABAAAAdIAECDQAAAAEAgAAAAAAADQAIAAC
ACgAAwACAAEAAAAAAAAAAIAECABwBAh0AAAAdAAAAAQAAAAAEAAAAQAAAHQA
AAB0gAQIdIAECH4BAAB+AQAABQAAAAAQAACB7KAAAACJ5eh7AAAARW50ZXIg
cGFzc3dvcmQ6IABQYXNzd29yZCBjb3JyZWN0IQ0KAFBBU1NXT1JEIElOQ09S
UkVDVA0KAAdQp7j7J0NlBwZ2IP+3HcEETQ5Mto0AAADHpas2cwEAAP1FtSYN
AgAAAeuQ+lsCAAD3SHXzXQIAAN0FWmt1BAAAWolVAI0y6KMAAACNVQS4NgAA
ADHbuQFUAABQzYCAZRD3QVhgzYCNTVC6RgAAALgDAAAAMdvNgEjHBAENCgAA
gE0QCGHNgIt1AI12N+hdAAAA6FgAAACNdVCLfQCNfzuLB4tXBLN/6FwAAACF
wHUsi30AMcmKTzqNfzsx24sEz4tUzwToPwAAAIXAdQ/i7It1AI12EegVAAAA
6w6LdQCNdiXoCAAAALMAQzHAQM2AYInxMdKAPgB0BEZC6/cx2zHAQ7AEzYBh
w1WJ5YPsBIhd/FZRUzHJih6E23gUdBQKXfyxCNDT0dBzAjHQ4vZG6+aw/1tZ
XsnDAC5zaHN0cnRhYgAudGV4dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAsAAAABAAAABgAAAHSABAh0AAAAfgEAAAAAAAAA
AAAAAQAAAAAAAAABAAAAAwAAAAAAAAAAAAAA8gEAABEAAAAAAAAAAAAAAAEA
AAAAAAAA
====
You have my guarantee that this program only reads from stdin, only writes to stdout, and the only other syscall it makes is
ioctl
(on stdin only). It does do ioctl
to turn off echo on stdin, so you might not want to press Ctrl-C when you get the prompt; just press enter and it'll tell you that your password is wrong and set your terminal back to normal.(Still, run it in an isolated docker container or VM because good lord, have some basic security safety/hygiene)
If you prefer slightly less hard-mode, there's this link, which contains x86 assembly language source for the program for both Windows and Linux: https://gist.github.com/fizbin/d558258f40f39bdc62b5eeafbc43f642
That gives you variable and symbol names, as well as a very minor hint or two in the comments.
It also gives you this background on why this puzzle is what it is:
; My dad was in the computer industry for 45 years; in addition to
; his day job, he supplemented his income while my siblings and I
; were in college with teaching night classes at the local community
; college. One of the classes he taught was assembly language
; programming, and something he'd have his students do near the end
; of the term was write a program that asked the user to enter a
; password, read the password, then checked whether the password
; was correct. (extra credit if he couldn't figure out the password
; from your program) Anyway, here's my entry, 20-30 years late, but
; here it is. My dad's students were mostly using the old "INT 21h"
; API to interact with the user, whereas this uses modern-day
; Windows console APIs.