Game Maker 8 Decompiler in a Month

September 15, 2010

It’s been almost 10 months since the release of Game Maker 8.0 and games have been relatively safe due to the fact that no public decompiler was available for games made with Game Maker 8. That is until now, or at least very soon. Developers have been working to create a decompiler that will take an executable generated by Game Maker 8 and reverse it back to its original gmk, much like the previous decompilers for Game maker 6 and 7.

To prove that this is not a rumor and is fully functional, here are some screenshots:

A game decompiled to expose its source

The program itself

The decompiler also has some other features included, such as “debug mode” which will enable debug mode on any executable, allowing you to essentially debug the game using Game Maker’s native debugging system. It also features something that allows users to take an executable made with the Lite version of Game Maker, and convert it into a “Pro” version which modifies the executable as if it was generated with Game Maker Pro in the first place. This removes any splash screens, function limitations and other things associated with the Lite version.

As mentioned earlier, the decompiler isn’t yet available publicly. This quote from the developer should explain sufficiently as to when it will be available.

ALL game engines make bloated executables its part of the territory.
try writing a full fledged game with just C++ and have fun while the rest of us are actually getting somewhere.
In fact all programming languages make bloated files too, if you want the smallest possible filesize, I suggest you learn binary.

and you’re very wrong. gm exe’s are maybe .5x bigger than something written in C++ (which is very similar to GML)

and even if they were ’32x’ bigger, it wouldn’t matter cause the biggest GM game ever in the history of the earth wouldn’t even dent today’s hard drives

Aragon1029 :>Implying it’s “decent” software.
Consider the following:
– GMKs both in and out of the EXE waste anywhere from 4x to 32x the space they should.
– Mark stores timestamps as a floating point double type that starts in 1899.
– Mark leaves many resources inside of the runner that where only used in very early (<GM5.x) versions. This hogs about 25% of the total runner size, slows loading time considerably, uses 4x memory overall with a blank game and actually decreases FPS slightly. (I have tested, and confirmed this)
– Mark doesn’t search for game data properly, he simply rounds off to the nearest millionth and then places the game data there. Everything before it is null data.
– The GMK format doesn’t properly handle events.
– The GMK format gzips null data, very, very often.
– The GMK format doesn’t normalize IDs, leading to larger GMKs and larger compiled games.
– The encryption inside of the EXE is effectively a needle in the hay stack + a “a = h, h = a, b = z, etc”.
– Debug mode is a flag.
– Pro mode is a flag.
– Both of which take up 4x the space they should.
– The GMK format CONSTANTLY, both inside and outside of the EXE uses version for backwards compatibility.
1. You only needs ONE global version, which ALREADY exists in the format.
2. The places where this version exists goes AFTER data that differs in versions of GM.
3. This means that there’s no point other than taking up roughly 14% of the total GMK size, it’s completely useless, you can’t even load newer GM games in older versions of GM. This is why 3rd party tools like LGM had to be developed.
– The format packs a directX 8 wrapper, aside from that being poor practice, GM needs to use OpenGL, or at least move to DX9.
That’s just to name a few. Everything in that list is true.
That’s just the format, that’s not including how pathetic the actual runner is.
GM is not decent software, it’s shitty software, it shouldn’t even run, in fact, it often doesn’t.

1. that doesn’t matter AT ALL since the biggest GM ever wouldn’t even dent today’s smallest hard drive.
2. all game engines do this, in fact all programming languages do this, if you want the smallest filesize possible, program in binary.
3. you greatly exagerated, the games are maybe .5x the size they would normally be in say… C++

honestly though this is just a bad idea. I mean I wanted this, because I lost my gmk data and no it wasn’t my fault. But I don’t agree with its existance.
“everything should be open source” Why? why should everyone share everything they’ve done with everyone else. I mean what if someone hacked your online game and cheated, now you’re whole game is ruined because of something like this. the only legitimate excuse for using this is if you want your own game data back, and to that I have to say… keep better track of your game source. back it up. Its the same with all computer data.

If someone wants to make their game open source they’ll make it open source, if someone doesn’t want to, they won’t, but you shouldn’t force them to anyway.

many devs on yoyo would be happy to help you, and even give you parts of their source to use in your own game free of charge with no credit given and many of them just upload the gmk file and not the exe.

its not YOUR choice to make

and lol @aragon for being so full of bs…
if he knew something, they’d have shut him down already and censored all of this..

I promise you he knows nothing. There’s no “dark gm secret” that yoyogames doesn’t want him to tell us. He’s just making himself sound like a child

My first thought about the decompiler was how nice that could be, but really, it should be up to the developer. Using the decompiler is stealing someone’s work and making it easy to call it your own. All you need to do is slap together a couple sprites and change the levels around and you’re good to go. If the developer wants to give out the source publicly or even privately, that’s their decision. But it’s not right to just take a game that someone worked on for months and steal all their code. Hopefully people will realize this and not use the decompiler, or someone will come out with an anit-decompiler QUICK.

Hello.
I lost my GMK too. So I downloaded the decompiler from the link up there. I tried it on my EXE, and it said everything was 100% complete. But I couldn’t find a GMK file for it anywhere.
Please help.

Zach :Sure,http://www.x2048.com/decompiler/
(download is up in the right hand corner)
Hope you get your game back.
Someone on the GMC PM’d me to get his game back he said it worked, aside from GEX’s, but you can always get those again.

I don’t have any problems with anyone seeing my code. My resources might have copyright for which >I< bought a licence though. Also client-server communication will be a lot harder to secure once the password is known used to salt the hashed data. Or it sure is possible, else opensource online FPS engines wouldn't exists, but I just don't know how and I think many with me.

If there was an option to hide a total of 200bytes from decompilers (like /*nodecomp-next50b*/ in front of it) and tell the decompiler a few resources have copyright (by resource namechange or something), i'd be perfectly fine with this. Maybe even nearly a good thing. But that just isn't going to happen 🙁

If you think you have any ability to actually beat the anti-decompiler, I suspect you would have already tried. There’s no point trying to pretend you care about people having an option to protect their games, and using that as an excuse for not trying. You’re dong this for a challenge? The anti-decompiler would just be another to you; So I think we both know you can’t break the anti-decompiler.

On the off chance that you can actually break it I’m sure it will only encourage greater protection from score_under. However, I have faith that it is quite secure, given that no one has actually broken it so far.

@Aragon1029 – You still didn’t explain why you are creating tools for destruction and theft of the personal property of developers. If you don’t like the program, then stay with your other languages and out of our business, perhaps get a life, and use your talents to program something that is used for good causes(for once).

I could explain why I’m doing it right now never YYG always censors it, even if I’M not the one who says it. It always gets censored. So it wouldn’t matter, they’re obviously worried more about their self image than their product.

When the decompiler releases (I just a few minutes ago got it into a releasable stage) I’ll explain in more detail why I wrote this tool.
The only other reasons aside from the one YYG doesn’t like me or anyone else even mentioning, is that it’s just plain fun.

It’s a challenge, and finishing this means a little bit more than just writing a tool that “destroys” other peoples work.

As for “Don’t you have anything better to do/program?”, don’t you have anything better to do than program games?
You program games, I program software, it’s all for fun or learning purposes.

Also after I release this I will be releasing a GM LOC counter (Lines of Code) which is actually very helpful for people who want to see how large their game really is since sprites, sounds, backgrounds, etc can be rather large and it’s easier to tell the true size of a game off of code.

After that I’ll be releasing a “fix” to the GM runner which I’ve already had great successes with so far, increasing load time, cutting back memory usage significantly and making the GM runner in general roughly 25% smaller.

I also think that’s “good” and “productive”.
So don’t think I’m all “evil”, I’m just a programmer trying to make a point.
Make no mistake, the scum that decompile games and then sell them as their own I hate, and I’m sorry that my software would enable such an unworthy person.

I’m questioning whether or not to touch score_unders protection, I don’t know if it’d amplify my claim, or just make everyone’s lives harder. You can as of right now protect your game and the decompiler won’t touch it.

That’s a much better explanation. I still don’t like you doing this, but I look forward to your runner fix. 🙂

And I seriously think you should not touch the protection score_under offers with his fix. I think we all know you can get around it, but his program still gives people the freedom to protect their work.

But there is no similar new house to move into. And maybe I don’t want to have to learn where everything is in the house and who to use it again.

A better solution is, the idiots who create and try to threaten people with decompilers should do something better with their life then try to ruin decent software for other people just because they don’t like it. Don’t force your “everyone should be able to learn from each others work” crap onto me. That excuse is very tired.

>Implying it’s “decent” software.
Consider the following:
– GMKs both in and out of the EXE waste anywhere from 4x to 32x the space they should.
– Mark stores timestamps as a floating point double type that starts in 1899.
– Mark leaves many resources inside of the runner that where only used in very early (<GM5.x) versions. This hogs about 25% of the total runner size, slows loading time considerably, uses 4x memory overall with a blank game and actually decreases FPS slightly. (I have tested, and confirmed this)
– Mark doesn't search for game data properly, he simply rounds off to the nearest millionth and then places the game data there. Everything before it is null data.
– The GMK format doesn't properly handle events.
– The GMK format gzips null data, very, very often.
– The GMK format doesn't normalize IDs, leading to larger GMKs and larger compiled games.
– The encryption inside of the EXE is effectively a needle in the hay stack + a "a = h, h = a, b = z, etc".
– Debug mode is a flag.
– Pro mode is a flag.
– Both of which take up 4x the space they should.
– The GMK format CONSTANTLY, both inside and outside of the EXE uses version for backwards compatibility.
1. You only needs ONE global version, which ALREADY exists in the format.
2. The places where this version exists goes AFTER data that differs in versions of GM.
3. This means that there's no point other than taking up roughly 14% of the total GMK size, it's completely useless, you can't even load newer GM games in older versions of GM. This is why 3rd party tools like LGM had to be developed.
– The format packs a directX 8 wrapper, aside from that being poor practice, GM needs to use OpenGL, or at least move to DX9.

That's just to name a few. Everything in that list is true.
That's just the format, that's not including how pathetic the actual runner is.
GM is not decent software, it's shitty software, it shouldn't even run, in fact, it often doesn't.

Loaf, you’re an idiot. Using Game Maker happens to be the problem, it can’t generate safe executables.

No, telling us the solution is to drop the program we enjoy using is idiotic.

Think of it like this. Say I have a house with locks on the door that require a key, but one which can illegally but easily be obtained by anyone who wants it. I’m not going to just abandon my house. I’ll wait till the company who built my house can find a more secure lock for my doors.

And this is where the difference between you and I (and Rohan for that matter) exists.

Personally, I would either make the lock myself, or move into a new house that I like just as much or more because I happen to be able to adapt to change, I don’t have to stay in the same house because I don’t know how to move.

The only reason your work can be decompiled is because Game Maker’s security is horrible, if you use another language (specifically a compiled language, .NET and Java are bytecode and reversable), nobody can get your original source code! They’d have to translate the assembly into whatever language they want it in.

Your resources are nothing to complain about, they’re never safe.

Loaf, you’re an idiot. Using Game Maker happens to be the problem, it can’t generate safe executables.

If a decompiler keeps getting created, maybe YoYoGames will learn that they need to do something about it. They’re the company you need to bitch about, a EULA isn’t going to stop anybody, nobody reads them.

@Aragon, Even those of us that do use other languages still come back to GM for its ease of use, and the speed at which content and core mechanics can be produced. Not everything is about efficiency beneath the hood.

Yes, I know, I’m right there with you, though I tend to stick to C++ more than GM.
But I understand the appeal, I know people who use Java, even though they hate it because it’s cross platform and easier to use in such instances than C++.

People should ALWAYS create open specifications. Only Microsoft Word can properly read .doc/.docx files, so everyone’s locked into Microsoft’s software.

I don’t want YoYo Games to lose money, but I do want people to have the freedom to do what they wish with the files they create. Especially in today’s world, where it seems technology companies are dictators of empires, this kind of thing just shows that it’s so pointless.

yea what you’re talking about is proprietary formatting and has absolutely nothing to do with open source vs. commercial. If someone makes a game, there could be several reasons they don’t want you in their source, and you have to legal or ethical right to access it against their wishes.

that being said there are plenty of game devs on yoyo that will help you and even give you parts of their source and many that upload the gmk source file rather than the exe.

Well, how about secure client-server communication? Not everyone is good enough with online to make it still be secure even while “opensource”. Kinda the problem I’m facing right now, and the anti-decompiler doesn’t work with instant play 🙁