-
Notifications
You must be signed in to change notification settings - Fork 85
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Detecting GameMaker #40
Comments
Thanks very much for these suggestions! |
For context -- our limitations is that we've only got filenames to operate off of, so we can't scan for file content. We can check file counts and do some complex logic if necessary, but we prefer to do keep things simple if we can. We also prefer to accept some amount of false negatives if it means avoiding false positives, but the ideal is of course identifying as many games as possible correctly. I will be mining this helpful comment for some time to see if we can improve GameMaker detection. |
What does this mean?
|
Is |
And what about GMXInput.dll? I found it in Hotline: Miami, but I don't know if that game has been rewritten to not be in Game Maker any more or not. |
Also .gmspr and .gmbck, you seen these before? They seem to appear in some Game Maker games in my test set. |
I added some new rules based on your suggestions. I am unable to scan executables, and we had to remove folder names because of lots of false positives and other ambiguity in other areas, but hopefully this catches a whole lot more of them. The ones I remain unable to detect seem to be standalone executables with extremely generic files. mus_ and music_ prefix on ogg files turns out to be too generic to take as a sign of game maker games, because it's used all over the place, though snd_ along with other hints can be narrowed down to game maker games. |
A common Linux build of a GameMaker game will contain the following:
That makes sense. I think this would mostly yield a small number of false-negatives for games that only have a single Windows depot with a self-extracting executable.
That's a very old (2008?) 7-zip wrapper for GameMaker, yeah.
I'm not aware of this one, might be custom for it - the rewrite had a lot of tricks.
In old versions of GameMaker you used to be able to export sprites and backgrounds to these, which are essentially just zlib-compressed metadata + RBGA bytes, and load them in-game. They would be a sign of GM as well. |
Okay, so I added a few more tests. Let's see how many false negatives we're left with after this and then we'll reevaluate. Thanks for your help, as always. |
joydll.dll causes a false positive match for Awesomenauts and likely others, so I'm going to remove that rule. |
As per my comment, it causes a false positive match for Awesomenauts since the (non-GameMaker) game contains a GameMaker mini-game in one of the subdirectories. |
oh, gotcha! Then that's acceptable, actually. Because that's valid in our eyes. The app contains a gamemaker game. |
When we have multiple game engines in one app we just list all the technologies we detected. It only gets ambiguous when you have a game with a custom engine (and thus no other obvious engine) that also matches like a minigame or something, it can falsely imply the whole game is made in that engine.... hmmm. I'll think about this but for now I'll allow it until I have a better idea. |
Currently there are plenty of false negatives for GM games, which is attributed to the following factors:
data.win
file into the executable as a resource instead of keeping it external.snd_*
naming convention is non-obligatory -mus_
is also common, as is camelCase/PascalCase. And some games might not have external audio at all! (it's a thing you tick a checkbox for on sounds)In a way I also personally made the matters worse due to releasing a tool that rewrites audio file paths and moves them to a sub-directory
Since almost all games would resort to using at least one DLL for specific features, collecting legacy DLL names from GMToolbox could help, but would take a while.
Binary signature detection is also problematic.
options.ini
is not required for the game to run so some people would delete itSuggestions:
game.unx
andgame.ios
are Linux/Mac versions ofdata.win
libYoYoGamepad.dylib
for concrete results.runner
(+x
) +run.sh
+lib/libsteam_api.so
+assets
is a good tell of a GM Linux build that has not been customizedaudiogroup<index>.dat
are packages of audio files to be loaded on-demand and can be a good tell.These are always labelled sequentially starting at 1, so
audiogroup1.dat
,audiogroup2.dat
, and so on.D3DX9_43.dll
withoutD3DCompiler_43.dll
can be a good hint of GMS1 YYC game given presence of other evidence.7z e that.exe
.This would also fix some other false negatives with games that used self-extracting executables.
FORM
<any 4 bytes>GEN8
- this is a tell of adata.win
file embedded into the executable.(pictured: Cavern Kings' executable)
CleanMem.dll
: this thing.Steamworks.gmk.dll
: my Steamworks wrapper for pre-GMS1 GameMaker versions (as far as I can tell, adds a couple games)Steamworks.gml.dll
: my Steamworks helper for current GameMaker versionsGOG.gml.dll
: my GOG wrapperjoydll.dll
+SDL.dll
: a DLL for SDL-based gamepad supportGMS-WinDev.dll
: an ancient DLL of mine with Windows-specific curiosities.Apollo.dll
: my Lua wrapper. Might be worth combining with other evidence since the name is generic enough.gmlive-server.exe
: the local server from my live-coding extension. You are not supposed to ship it to the end user, but people sometimes forget.geon_fx
: a folder with bits from Geon FX particle editor. Similarly, you are not supposed to distribute it to the end user, but guess whatdisplay_mouse_lock.dll
: a native mouselock extension of mine.window_set_cursor.dll
: an extension for native cursors by me.rousrDissonance.dll
: a Discord Rich Presence wrapper extension.window_frame.dll
: an extension of mine that prevents the game from getting frozen in an event loop while resized... and causes a handfulcatch_error.dll
: an extension of mine that monkey-patches exception handling and crash reports into versions of GameMaker that didn't have those.Some false-negatives:
music_
-prefixed OGGsrousrDissonance.dll
Steamworks.gml.dll
Steamworks.gml.dll
, audio groups.window_set_cursor.dll
geon_fx
folderwindow_set_cursor.dll
joydll.dll
The text was updated successfully, but these errors were encountered: