RSSAmplifier

Blog

Jakob's Personal Webpage

Recent Posts

jakob.spaceRSS feed ↗39 posts

Latest posts

Eschewing An Established Convention Because We Can

Nearly every programming language has some flavor of "structure" declaration , where the programmer can conjure a new type representing the composition of other primitive types or structures, neatly organized into named fields. While the concept is practically universal, the way the programmer defines and interacts with these types can vary dramatically between languages. In Scheme, such…

USB-PD Is Pretty Cool

Packed lunches are a great way to save money, but being limited to foods palatable at room temperature (or colder) can be a little discouraging. In most American workplaces, a microwave oven is readily available in the breakroom, making it easy to reheat a home-cooked meal. However, after leaving a desk-bound white-collar job for one that often takes me into the field, that's only occasionally an…

Spaced Repetition Anywhere

Spaced repetition is an effective habit for memorizing small fragments of information for, effectively, an indefinite amount of time. The idea is to repeatedly challenge your recall of a piece of information, typically with a sort of flashcard , doing so at a frequency determined by your previous recall performance: new information is challenged frequently until you remember it, and previously…

Sorry Guys, I Have to Troubleshoot My USB Drivers Before I Can Play With You

This blog post is about a GNU/Linux rabbit hole I fell down in the belief I was chasing a mighty adventure. It was not nearly as adventurous as I had hoped, but I am nonetheless posting about it in case this information is helpful to someone else. My story begins with a purchase of four wireless gamepads from 8BitDo . I had done little research outside of scrolling past a few positive comments…

What I've Learned About Formal Methods In Half a Year

I started working on my master's degree last September. The goal was to return to my workplace as a domain expert in formal methods – a topic I knew I was interested in, and yet something I knew practically nothing about. I partially attribute my lack of exposure to the lack of supervised learning opportunities (courses) at my undergraduate institution. Brown has an ample supply of teaching and…

Pushing Haunt to Its Limits

When I started writing this article, I didn't mean to do anything more than describe a comment system I'd written in Guile. But as often happens when I write, I soon found myself disregarding that original scope and recording the history of every line of code I've written that's ever been run by a web server. I settled on allowing this to be an article about incorporating dynamic content into a…

I Love My PinePhone

For the past ten months, I've been using my PinePhone as a "daily driver." By which, I mean it's been in my pocket everywhere I go, and it's the device I use to make phone calls. Depending on your familiarity with the PinePhone (or the state of "Linux Phones" more generally) this statement is either delirious, or vapid (why should I care that you use a "smart" phone just like the rest of us?)…

Rust on the Flipper Zero

My Flipper Zero arrived in the mail a few weeks ago, ending a nearly two-year wait for its arrival. For the uninitiated, it's a "multi-tool device for geeks": a development board for radio, IR, and GPIO in a Tamagotchi -like form-factor. It combines the capability of the GoodWatch with the cuteness of the Pwnagotchi . Part of the appeal, to me, is the ability to hack on the free (as in freedom)…

A Good-Bye Letter To My Life-Long Companion

Last night – Thursday, May 12th, 2022, at 22:17L – my cat was put to rest. I tend to avoid publishing anything non-technical to this website, but she deserves to be remembered, and this is the only place I can be confident my writing will last. She'd been with me through most of my life, always bringing me comfort when I was stressed, and keeping watch over me when I was sick. I owe this to her.

ret2emacs

It's that time of year again where I take some time to reflect on UMass CTF . This is going to be shorter than last year's. I put out eight challenges, and I'm only going to be writing about one of them. Code, documentation, and write-ups for the others are available here .

Dollar Bin Reverse Engineering

The background for this project is a lesson in avoiding dishonest vendors. Two years ago, I was looking to purchase a smart watch with sleep tracking capabilities; I've always had difficulty sleeping and wanted a way of finally quantifying that difficulty. One of my requirements was the ability to pull data off of the watch without the use of proprietary software , so the only options I was…

UMass CTF 2021 Postmortem

This was the first year our capture-the-flag event, UMass CTF 2021 , was open to the public. The competition started Friday, March 26th at 18:00 EDT, and ended Sunday, March 8th at the same time. By the end of the competition, we had 1991 registered users , belonging to 1160 registered teams . No teams were tied, we had just one unsolved challenge, and each of the "harder" challenges had just one…

UMass CTF 2020 - suckless Writeup

Well, this is certainly overdue. It's the writeup for a challenge I authored for this year's UMass CTF, which ran from October 5th to October 12th . Yes, I'm late. But when you attend a university that tried very hard to squeeze the entire semester twelve weeks , you're going to deal with burnout and not nearly enough time to do things outside of your coursework. So I'm finally coming back to the…

The Many Faces of an Undying Programming Language

This is a post I've been meaning to write for a while now: one anecdotally comparing programming languages in the Lisp family. I consider myself to be a Lisp hacker. Perhaps that much was obvious from the letter λ adorning my website's header, a reference to the λ-calculus which inspired John McCarthy to design the first LISP [1]. Yet, "Lisp hacker" likely means little unless you, too, consider…

Investigating a Backdoor.SH.SHELLBOT.AA Infection

It's typical for the younger sibling to look up to and mimic the older sibling, which is apparently what happened while I was away at school. I'm self-hosting a few services off of a Raspberry Pi B+ back at my parents' house, and when my brother got a Pi of his own, he decided that he also wanted to use it for self-hosting. Unfortunately, he doesn't know much about security, and unintentionally…

Browser Games Aren't an Easy Target

If you're about my age and had a similarly dull upbringing, you probably also have memories of playing video games behind a teacher's back whenever class involved going to some sort of "computer lab." Flash games were the thing when I was in elementary school, and when I was in middle school, I'd bring Quake with me on a flash drive. By the time I was in high school, I'd realized that these…

First Impressions of the Myrddin Programming Language

It's been over a year since I last wrote about contenders for the throne that C currently sits upon, so I'll spare you the prosy introduction and cut to the chase. I'd like to share some thoughts on my recent foray into a little programming language I came across while browsing lobste.rs some years ago: Myrddin , the pet project of Ori Bernstein . From the language specification, "Myrddin is…

Writeups for Dennis Yurichev's Reverse Engineering Challenges (#36-#74)

This is the fourth and final set of for my self-imposed challenge of completing at least fifty of the exercises on Dennis Yurichev's challenges.re by the end of the year. The previous set is available here .

Writeups for Dennis Yurichev's Reverse Engineering Challenges (#23-#35)

This is the third set of solutions for my self-imposed challenge of completing at least fifty of the exercises on Dennis Yurichev's challenges.re by the end of the year. The previous set is available here .

Towards Guix for DevOps

Hey, there! I'm Jakob, a Google Summer of Code intern and new contributor to Guix. Since May, I've been working on a DevOps automation tool for the Guix System, which we've been calling guix deploy. ... This is a crosspost. Click here to read the rest of the article.

Writeups for Dennis Yurichev's Reverse Engineering Challenges (#12-#22)

This is the second set of solutions for my self-imposed challenge of completing at least fifty of the exercises on Dennis Yurichev's challenges.re by the end of the year. The first set is available here .

Transitioning to Haunt

Rather than study for finals this week, I spent my time moving this blog over to Haunt . Previously, I was using Hugo, and while ox-hugo made the authoring workflow tolerable, doing anything on the rendering side of things was unsavory at best. I eventually had enough and decided to look for another solution, of which Haunt was the most enticing.

Writeups for PlaidCTF 2019

My long-lived hiatus from capture-the-flag has come to an end, as I got off my ass this weekend to play in PlaidCTF 2019. Being a one-man team is pretty lonely, but my old team wasn't playing, and even if they were, I don't know if I would've wanted to make the commute just to play with them.

Writeups for Dennis Yurichev's Reverse Engineering Challenges (#2-#11)

As mentioned in the (now deleted) post I wrote describing my plans for 2019, one of my goals this year is to get through at least 50 of the exercises on Dennis Yurichev's challenges.re . I've decided to document my progress in the form of writeups for the challenges I complete, batched in sets of ten exercises. For each challenge, I'll try to explain the intuitions that brought me closer to…

First Impressions of the Kotlin Programming Language

In the introduction of the previous post I wrote for this series, First Impressions of the Rust Programming Language , I alluded to the presence of arguments that programming language safety should be achieved by moving to languages such as Java which run on a virtual machine. While "safety" may no longer be the first thing that comes to mind in discussion of these languages, especially with the…

Slime the World: A Postmortem

Slime the World was my entry to this year's Autumn Lisp Game Jam , and it managed to win second place. The theme was slime, so it’s a game about covering everything in sight with slime, and the dialect of Lisp I chose to use was Fennel , a simple and elegant Lisp that I feel perfectly matches the simplicity and elegance of Lua. It takes on a more "modern" style that I associate with Lisps such as…

Replacing Anki With org-drill

Recently, I read Michael Nielsen's essay, "Augmenting Cognition" . It talks about some very interesting use cases for the spaced repetition software "Anki" that made me want to try it out again. I'm familiar with Anki, as I used it extensively throughout my last year of high school to study for AP exams. At the time, Anki's "killer feature" for me over similar software was being able to typeset…

First Impressions of the Rust Programming Language

C is almost 50 years old, and C++ is almost 40 years old. While age is usually indicative of mature implementations with decades of optimization under their belts, it also means that the language's feature set is mostly devoid of modern advancements in programming language design. For that reason, you see a great deal of encouragement nowadays to move to newer languages - they're designed with…

Installing Gentoo: One Month Later

It seems that the general consensus on "distro hopping," the act of constantly switching between distributions of GNU/Linux, is that it's a bad habit that should be consciously avoided. If you do a search for the term, you'll get articles with titles along the lines of "How I Stopped Distro Hopping." But it's also a term that gets thrown around loosely, and I think that that "distro hopping" is an…

Reverse Engineering By Hand

My capture-the-flag team played in the Insomni'hack teaser this year. During the competition, I worked on a single challenge titled "sapeloshop." It was labeled as "Medium-Hard," and it was in the binary exploitation category. The source code for the server wasn't provided, so reverse engineering was necessary. I don't think that having to reverse the binary was supposed to be the hard part, as…

Duke on Fluidsynth

My first experiences with Duke Nukem 3D were with EDuke32 ages ago. This was back when I was running Windows Vista, and while my memory is a bit lacking, I swear that I had working music then. Ever since I made the switch to Linux, I haven't had working music playback in EDuke. Frustrated at the fact that my past few years of Duke 3D have been devoid of all sound besides the screams of death and…

Bad BEHAVIOR

TL;DR, I discovered a stack-smashing vulnerability in GZDoom's interpreter for ACS. As a preface, there's a tendency for whitepapers like this in the security community to be written with a somewhat condescending tone towards the product's vendor. I do not mean for any portion of this writeup to come off as degrading to the developers involved. Yes, the bug was obvious to me , but it was still…

BackdoorCTF 2017: FUNSIGNALS

"funsignals" was a 250 point binary exploitation challenge with 58 solves. The challenge itself was a very trivial example of sigreturn-oriented programming.

Understand Game Hacking In One Post

At a first glance, it might seem that game cheats like AimTux are something that could only be conjured by the most talented of reverse engineers. That was at least my initial view on it, especially since I always saw these game hackers using outlandish terms that I hadn't heard in over a year of playing in CTF's. Don't be fooled; game hacking isn't nearly as complex as its community makes it…

Analyzing Executable Size, part 0 - A Small Proof-of-Concept Loader

It seems that static linking is back in style, or at least popular among all the hip new programming languages of today. I don't have anything against statically linked binaries, nor do I have a problem with larger executables, but I've noticed that the acceptable size for an executable is a lot larger now than it was a few years ago; that is, the new kids on the block have significantly more…

Making Your Own Music Player: A Gentle Introduction to Audio Programming

To start off, I'd like to say that I know very little about audio programming and digital audio in general. I've never formally studied signal processing, and hell, I haven't even started high school physics yet. This post merely documents what I've learned while trying to get sound working in my game, because there aren't really any other learning resources about this out there.

Game Hacking on Linux - scanmem Basics

Hey, this is a very brief tutorial on scanmem, a memory manipulation tool for Linux that’s well suited to game hacking. I’ll be using GZDoom as an example, but you should be able to follow along with any game you want. ... This is a crosspost. Click here to read the rest of the article.

Reverse Engineering Babby's First Archive Format

About two months have passed since the first release of Nekopack - a tool I wrote for extracting game data from Nekopara's XP3 archives. While the process wasn't an amazing reverse-engineering war story that will keep you on the edge of your seat, I feel it deserves a small blog post explaining how I did it. Additionally, there's no real documentation on the XP3 format as far as I'm aware, so…

SDL Tutorial Part 0x00 - Boilerplate, Windowing and Rendering

SDL2 is my favorite graphics library right now. It might not be as powerful as something like raw OpenGL, but it's simple. Simple enough that you can just pick it up and start using it. There's a glaring issue with it, though. The documentation is horrible. Absolutely horrible. A lot of it is unfinished, and it doesn't look like it's getting attention any time soon. The SDL1.2 documentation wasn't…