Hello Hackers,<p>I recently came upon some school work of mine, code I wrote, from high school in 2001 as a sophomore.<p>For my high school CS101 class, I wrote a C++ game called Snake. The game was written using a graphics library called Allegro (https://www.allegro.cc/). Allegro was a lovely library.<p>It is still possible to download the original zipped binaries which I uploaded 19 years ago. They can be downloaded here: https://www.allegro.cc/depot/snake2<p>I also put them online here: https://github.com/natehouk/snake<p>(There is also a second game Mastermind available here https://github.com/natehouk/mastermind and here https://www.allegro.cc/depot/mastermind)<p>Unfortunately, I can not find the source code anywhere. I am very saddened by this. I thought it would be very fun to see code I wrote when I was 15, nearly 20 years ago. It would be especially fun to see how I've improved, or what neat tricks I came up with at that young age.<p>I have the .exe and the .dat data files and the original readme.txt. I have tried running my program on Windows 10 and with Wine. In both cases, the program crashes. I have tried all of the compatibility modes in Windows 10 and none of them work.<p>The year was 2001, so I believe we must have been using Windows 98 in the classroom, maybe Windows NT 2000? I can't remember.<p>I know that my program ran great back in the day. It even got 100,000 downloads off Download.com back then before cnet ruined them.<p>I want to play my game. What can I do to get my program running again? It seems like Allegro is barely supported these days. I think I need to try a native Windows 2000 install. Was it naive of me to think I would easily be able to run a program from nearly 20 years back?<p>What tools are available and what is state of the art for decoding a compiled binary back into readable source code?<p>Thanks for any info.
A first step can be disassembling and then decompiling the binary. A good, free tool for this is Ghidra: <a href="https://ghidra-sre.org/" rel="nofollow">https://ghidra-sre.org/</a><p>It will not give you code that you can recompile, but it should be possible to understand and recreate the code based on the result of decompiling the software<p>An alternative approach can be to emulate the binary under e.g. qemu
The easiest way to run it would probably be running an older windows version on a VM. Maybe not 2000, but something like XP might work?<p>I suppose you could always reverse engineer it worst case, but that's probably a much more work than you're looking to do, especially without any debug symbol info.
Unfortunately, obtaining the source code used to produce a C++ executable from only the executable itself is an unsolved problem and reverse engineering is a generally difficult and labour-intensive process. However, there are tools that will help to reduce the level of pain involved.<p>The Hex-Rays Decompiler for IDA Pro will produce a remarkably good result in functional terms, but its output won't closely resemble the code you remember writing.<p>Ghidra looks like a good open-source alternative, though I haven't tried it myself.
What you're asking for is skill held by a well paid discipline within the practical arm of the computer science industry. In other words, some people spend their entire careers on reverse engineering compiled binaries. And there's a whole fascinating back and forth arms race between them and people who don't want their code decompiled.
I don't have answers to your questions, but I can offer one piece of advice. The program is compressed with UPX, and you must decompress it before you decompile it.