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
opportunities were better spent getting a head start on homework for other
classes, but I did have a few friends who still passed the time playing video
games. Rather than Flash games or Quake, though, these were browser games using
the new-fangled HTML5 canvas. I'd practically forgotten these games existed
until someone from my capture-the-flag team mentioned "krunker.io". Apparently
it's one of the more popular ones. It got me thinking about how I'd go about
writing cheats for a game in the browser. Writing cheats for CS:GO was a breeze,
so why would this be any harder? I had some time to spare over winter break, so
I decided to give it a go and see what kind of damage I could do.
read more →
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 Clojure. I had initially pushed Clojure to the side, feeling it
was too different from Common Lisp, but now that I've had a positive firsthand
experience with a Lisp where lists aren't the data structure you always reach
for, I'm hoping to return to it with an open mind.
read more →
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 Duke's trash talking, I've finally decided to troubleshoot it.
read more →
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
subtle enough that it went under the radar for nearly 23 years. Most developers
aren't actively thinking about this kind of attack while writing a bytecode
interpreter. I have an enormous amount of respect for the development teams of
both GZDoom and Zandronum, who were quick to issue a patch addressing the issue
and were respectful of my wishes to release this whitepaper to the public. I'd
also like to thank everyone I had the pleasure of working with during this
process; it warms my heart to know that the communities behind these open-source
software projects are this friendly.
read more →
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
seem. In this post, I will explain the concepts in a way that is familiar to
people with experience in binary exploitation and reverse engineering, but it
shouldn't be too hard to understand if you lack that background.
read more →
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.
read more →
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 hopefully this post will serve as an informal specification.
read more →