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.
read more →
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.
read more →
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.
read more →
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.
read more →
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
answering the recurring question from Yurichev, "[w]hat does this code do?"
read more →
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 most of the behavior could have been inferred through some high-level
analysis, yet I spent nearly five hours fruitlessly trying to reverse it, and
the subsequent burnout was bad enough that I went home early. This wasn't the
first time a reversing task had gotten the best of me; there had been a few
competitions last year where I felt a similar loss in motivation. Noticing this
recurring pattern frustrated me, and that frustration drove me to think about
ways to improve myself as a reverse engineer.
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 →
"funsignals" was a 250 point binary exploitation challenge with 58 solves. The
challenge itself was a very trivial example of sigreturn-oriented programming.
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 →
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 →