1: https://nee.lv/2021/02/28/How-I-cut-GTA-Online-loading-times...
2: https://www.pcgamer.com/rockstar-thanks-gta-online-player-wh...
On HN: https://news.ycombinator.com/item?id=26296339 (703 comments)
On Lobsters: https://lobste.rs/s/jzj4q9 (25 comments)
And Reddit: https://www.reddit.com/r/programming/comments/luq9oz (1022 comments)
P.S. these threads where found with a site I'm building: https://discussions.xojoc.pw/?url=https%3A%2F%2Fnee.lv%2F202...
I gave the patch to someone named "pumpkin" on IRC, and it got integrated into the jailbreak. Kinda fun to be part of that, even though I only contributed a few bytes of code. (And I got to learn a little arm assembly.)
It's been a long time, but the tricky part was trying to shoehorn a if / return in there. I remember having to rewrite some existing code in a more efficient way (might have been jump table -> conditionals) to gain an extra couple of bytes.
I've also reversed java class files a few times to patch issues for work, but those usually have source these days. The one I remember, years ago, was a bug in the ftp code that could cause hangs with some servers. Something about sockets being closed in the wrong order.
The rest of my decompiling/disassembly has been for interoperability, trying to figure out stuff like the Notes.app or Numbers.app file formats.
Oh I remember that bug. It was insane that a button on a web page could do that.
Wouldn’t it have been easier (and way more performant) to just whip up a quick extension that dumps the list of open tabs to disk every time a tab is opened/closed? I recall session savers being some of the very first extensions available for Firefox.
For example, in one case I discovered that double clicking a cell sometimes only selected part of the contents. With Hopper I was able to verify that the bug is that AppKit just selected the range from 0 to 32000, assuming that would be enough. I was able to work around the issue by manually selecting a bigger range. (I also reported the bug to Apple, they told me they won't fix it because it's a deprecated API. Doesn't matter that 100s of apps, including Apple's own, were still using it...)
In another case, I found out that an obscure feature (text attachments with custom cells) was crashing because AppKit called -release too often, so it was impossible to use the feature. Apple had apparently broken it when implementing the force touch functionality for dictionary lookups.
Another time Cornerstone, the SVN client, was broken on a prerelease version of macOS. I don't recall the details, I think they called -registerDefaults: too early. I was able to fix it by writing a dynamic library that changed the -registerDefaults: implementation so that it ignored the first call (today with hardened runtime this fix wouldn't be possible anymore without disabling system integrity protection).
So I downloaded the JAR file, decompiled it with the JAD decompiler and found that they had hardcoded the file separator as backslash. So that was easy to fix. I compiled it, ran the JAR file and uploaded my pictures and picked up the prints a few days later.
Of course the government eventually decided to change that rate, and it sounded like the vendor wasn't going to be able to get them upgraded to a corrected version in time. I overheard the discussion and offered to try and help by seeing if I could hack in a fix. Rather surprisingly they agreed, and after a bit of debugging I found the problem and patched the binary. It did the trick and they successfully used that patched version for a couple of weeks until they got their upgrade.
But it didn't work for us. I forget the exact reason, but it was like some kind of text encoding issue where the mail server was expecting ASCII but the software was sending some weird non-ASCII character from EUC or SJIS that borked it. (It was a Japanese workflow app for internal company processes like calendaring, expense approvals, etc., so it had lots of user-entered strings that were in Japanese. UTF-8 existed, but... this product had legacy issues.)
Unfortunately the vendor delivered that software (in part, but the significant part for this story) as compiled Perl modules. I think they maybe did that to make it harder for third parties to customize their shit, and therefore make it easier to get any related customization/integration contracts, but possibly it was just innocent performance enhancement.
Regardless, though, a dude I worked with decompiled those modules and figured out how to fix the bug by doing some kind of text/encoding transform.
And then it could send email.
There are certainly cases where the license server quits working, even when the software isn't yet abandonware. I'd consider that a bug.
For example, changing hardcoded key bindings to be more dvorak friendly in Touhou games.
I've fixed many Quake engine based games that have the infamous OpenGL extension string overflow bug.
There's another old game (possibly Soldier of Fortune 2: Double Helix?) that refuses to run if you have the string "generic" in your OpenGL driver name. This is common on Linux distros that ship a "generic" kernel.
Painkiller crashes if your uptime is too high, due to overflow on division. That's another easy fix.
Personally, I did it once on a very old game with DRM that no longer functioned, though the game ran fine. I wasn't about to trust a random crack download, so I decompiled and removed the DRM check.