Game Maker Community YoYo Games

Welcome Guest ( Log In | Register )

> Distributing Games Rules

This forum is meant for discussion of specific distribution issues related to your freeware, shareware, or commercial GM products.

Make sure that you READ these rules prior to posting. And remember that the General GMC Rules apply here too.

43 Pages V   1 2 3 > »   
Reply to this topicStart new topic
Game Maker Obfuscator -protect Your Gm Source, Now with a debug feature!
Schreib
post May 1 2008, 04:09 PM
Post #1


Valen Shadowbreath
Group Icon

Group: GMC Member
Posts: 1481
Joined: 20-October 05
From: The Abyss
Member No.: 37333



GM Obfuscator
Written by Schreib in Java

"I tested this program on a few simple games, and it sure got me. The source code is rendered nearly impossible to read, by anyone other than the amazingly desperate." - anonymouss

GM7.gif A GMK version is now available! GM7.gif



A screenshot of the obfuscator v0.2.3


Update 0.2.3: Option to let native GM constants be replaced by their values; vk_left is replaced by (37) and so forth.


I. What is an obfuscator?
An obfuscator is a program that will rewrite source code of a program to make it as unreadable as possible to users, often to prevent people from decompiling/reverse engineering the program and stealing bits of code from it. This project is such a program - except that it will take a GM6.gif OR GM7.gif and spit out a new source with the code, resources and variables completely unreadable and inunderstandable. I bet this is the only "protection" topic which will not get hammered by NPT. wink1.gif

II. What was the purpose of this project?
The project was to disthirsten the crave GMC members had for a decompilation protection. However, this program does not make your games undecompilable. Additionally, the program was NOT written to hinder the decompilation project, as I respect their work a lot. The program's main purpose was to hinder those "noobs" who used the decompiler to understand the game source structure and code. That being said, I will not appreciate any comments saying that I hindered the decompilation project, as I have not.
I have put in a lot of energy into this project, so please don't screw around with it. Follow the licence and common sense and you will be OK.

III. I'm having problems with this! It messes up my game completely!
Here are a few pointers.
  • Use the debug check box. The obfuscator will then insert the original names as comments, allowing you to find the part which Game Maker cannot compile and edit it back to its original state.
  • Uncheck "Value Constants" if you're not used to coding with semicolons. A single semicolon out of place could make Game Maker think you're using a script.
  • Make sure you are not using deprecated functions, such as image_single, move_contact, make_color, external_call0, external_call1, image_single, image_single, image_single or the like. If you are, simply add the deprecated function (without the parenthesis) to the "Do Not Modify" list.
  • If the problem remains unfixed, uncheck "Rename resources", obfuscate and try to run the obfuscated copy. Once you get an error, take a look in which script or piece of code the error occurs in. Then post the un-obfuscated script or code here. It will most likely be a problem like the ones above, but in the circumstance it isn't, I will see if I can fix other types of problems.


IV. Who made this program, and what was it written in?
The program was made solely by me, Schreib. I've received much Java help from others, including the person going unnamed who made the decompiler. A personal note to him; I'm sorry I said this program was going to be personal, but I realized it's use would be void in that case since I don't release many games. Moreover, remember that this project was not intended to hinder your efforts in any way.
Much help was gotten from the GM6file documentation, written by IsmAvatar. Thanks!
The program was written in Java using the open-source development platform Eclipse, utilizing JavaX Swing components to make the GUI.

V. How do I use this program?
The program is rather straightforward. Simply load your GM6 or GMK file into the program (don't forget to read the license!), specify your settings and process your GM6 or GMK to a new location. The program utilizes SwingWorker, a threaded operation utility which means you'll be able to see the progress of the obfuscation. If you wonder what a certain setting does, hover your cursor over it and a tooltip will appear explaining what it does.
Take this final file, open it and create an executable out of it. That's it, your game functions just as well as before, but when decompiled is quite difficult to understand.

VI. "When I open the ZIP all I see is .class files. How do I run the program?"
This happens to people using IE and think the JAR (Java ARchive) is a ZIP file. A tip; throw away IE and use either Opera or FireFox. Then run the JAR file, providing you have the latest (v6) Java virtual environment installed.

VII. Screenshots
Here are few screenshots of GM6 projects I have obfuscated with my obfuscator.

Other images:
[2] [3] [4]

VIII. Download
Download the JAR (read section V above, IE users!) from one of these two mirrors:

WillHostForFood.com - Version 0.2.3 ~Newest~
Download!

MediaFire - Version 0.2.3 ~Newest~
Download!

Old links (0.2.2):
http://www.willhostforfood.com/access.php?fileid=22120
http://www.mediafire.com/?2wrb2jmd5ag

IX. Acknowledgements
I would like to sincerely thank IsmAvatar for providing me with the GM6 byte documentation, GMK raw byte documentation and the GMK encryption documentation. She has done a lot to help the development of this tool. Anyone else involved in writing these documentations has my thanks as well.

X. Bugs & Suggestions
This program has been throughly tested on my own GM6/GMKs and other people's, including a lot of variety like D&D, code and so on. This program might not be able to obfuscate your coding style! The program was written in mind with the default Java coding&indentation standard, and since GM is quite forgiving when it comes to syntax, be aware that the obfuscator might not be able to obfuscate certain pieces of your code! If it cannot do so, it will report with an error of the script/code/object in question, and the line the obfuscator found confusing. Even if it is successful, there is no guarantee that your game will be syntax-error free. (I hope it will, I have tested this a lot and no errors have popped up for my and others GM6/GMKs).
If you want to report a bug, send me a PM with the ORIGINAL file and the script/code the obfuscator couldn't obfuscate. If you have any suggestions, you are free to do so as well.

XI. Licencing and terms of use
This program utilizes reading the GM6 and GMK format, created by Mark Overmars. I hold no responsibility or accountability if the program is not able to read your particular file, and neither does Mark Overmars or YoYoGames. This tool does not interact with the executables created by Game Maker nor Game Maker itself - only the editable source files Game Maker can create. This project is not officially supported by neither YoYoGames or Mark Overmars - yet. As close as today YoYoJim reported to me that this sounds good, and they might give their official consent.
This software is provided as-is and may only be redistributed on the condition that no modifications are made to the original package and that no commercial profit, either abstract or concrete, is made when redistributing.
No warranty, support, responsibility or accountability - either expressed or implied - is provided for any direct or indirect loss, harm or damage caused as a result of using this software. This includes any licence infringements any user may commit by utilizing this software. You may not reverse engineer, decompile or disassemble this software in any way.

XII. Final words
Well, this is it, after months of work. I guess the only words I can tell you is good luck, and focus on making good games instead of creating protection. That the job of others.

© Copyright 2008 Schreib

This post has been edited by Schreib: Apr 7 2009, 03:16 PM
Go to the top of the page
 
+Quote Post
enterstations
post May 1 2008, 04:15 PM
Post #2


GMC Member
Group Icon

Group: GMC Member
Posts: 224
Joined: 12-February 08
Member No.: 99890



pretty cool FIRST POST!

edit: it works like a charm!

is it only for gm6?

This post has been edited by enterstations: May 1 2008, 04:16 PM
Go to the top of the page
 
+Quote Post
NakedPaulToast
post May 1 2008, 05:27 PM
Post #3


GMC Member
Group Icon

Group: GMC Member
Posts: 4613
Joined: 23-April 07
Member No.: 77112



Unlike the previous non-solutions to the decompiler. This project has a tremendous amount of potential. As Shreib describes, this does not prevent decompiling, but renders the decompiled output almost useless.

This is the type of solution that Java, and other decompilable languages uses.

I hope this project is well received, and expanded to include GM 7.

Excellent work Shreib!
Go to the top of the page
 
+Quote Post
skinnyeddy
post May 1 2008, 05:35 PM
Post #4


GMC Member
Group Icon

Group: GMC Member
Posts: 360
Joined: 31-December 07
From: Cornwall, England
Member No.: 96542



this seems pretty cool! I would use it but, alas, i use GM7. Still, keep up the good work
Go to the top of the page
 
+Quote Post
samscam
post May 1 2008, 06:33 PM
Post #5


Zarplax CEO
Group Icon

Group: GMC Member
Posts: 730
Joined: 10-June 06
From: Belgium
Member No.: 52068



I like the fact that you can only delete the comments. This will decrease the game file size if you don't check the other options.

Grtz,
Samscam
Go to the top of the page
 
+Quote Post
anonymouss
post May 1 2008, 06:50 PM
Post #6


Wanna Play?
Group Icon

Group: GMC Member
Posts: 2105
Joined: 29-January 08
Member No.: 98677



Before I use this, I have a question: Does it raise or lower the filesize?
Go to the top of the page
 
+Quote Post
Schreib
post May 1 2008, 07:01 PM
Post #7


Valen Shadowbreath
Group Icon

Group: GMC Member
Posts: 1481
Joined: 20-October 05
From: The Abyss
Member No.: 37333



The initial file will be about a meg higher, from a lazy me. It's actually about a meg of null bytes in the end of the file, but GM ignores those anyway. When you've processed the file, open the processed one and resave it to yet another file. That rids the null bytes, and the final file will be... i'd say 5 kb larger than the original, since it renames variables and names to larger ones.
Go to the top of the page
 
+Quote Post
Revel
post May 1 2008, 07:06 PM
Post #8


Revel Entertainment
Group Icon

Group: GMC Member
Posts: 4420
Joined: 3-February 07
From: Canada.
GM: 7.0 Pro
Member No.: 69882



What does "Insert crap" do?

This post has been edited by Revel: May 1 2008, 07:07 PM
Go to the top of the page
 
+Quote Post
NakedPaulToast
post May 1 2008, 07:11 PM
Post #9


GMC Member
Group Icon

Group: GMC Member
Posts: 4613
Joined: 23-April 07
Member No.: 77112



QUOTE
What does "Insert crap" do?

It emulates a typical GMC post.
Go to the top of the page
 
+Quote Post
Schreib
post May 1 2008, 07:12 PM
Post #10


Valen Shadowbreath
Group Icon

Group: GMC Member
Posts: 1481
Joined: 20-October 05
From: The Abyss
Member No.: 37333



QUOTE ("My first post")
If you wonder what a certain setting does, hover your cursor over it and a tooltip will appear explaining what it does.
Go to the top of the page
 
+Quote Post
Revel
post May 1 2008, 07:15 PM
Post #11


Revel Entertainment
Group Icon

Group: GMC Member
Posts: 4420
Joined: 3-February 07
From: Canada.
GM: 7.0 Pro
Member No.: 69882



Oh, sorry. I missed that part. laugh.gif



Nice software! It would be great if you released a GMK version.

This post has been edited by Revel: May 1 2008, 07:18 PM
Go to the top of the page
 
+Quote Post
X-tra Fear
post May 1 2008, 07:22 PM
Post #12


Behemoth Creator
Group Icon

Group: GMC Member
Posts: 439
Joined: 11-October 06
From: Kingsport, Tennessee
Member No.: 61283



Good work.

[Edited my noob post.] sad.gif

This post has been edited by X-tra Fear: Feb 24 2009, 09:09 PM
Go to the top of the page
 
+Quote Post
Somelauw
post May 1 2008, 07:28 PM
Post #13


GMC Member
Group Icon

Group: GMC Member
Posts: 1514
Joined: 29-October 05
From: The Netherlands Aged: 18
Member No.: 37851



Good job. Legal, simple and effective.
I didn't noticed much of the inserted crap btw. But the name sounds funny.

This post has been edited by Somelauw: May 1 2008, 07:38 PM
Go to the top of the page
 
+Quote Post
Schreib
post May 1 2008, 07:28 PM
Post #14


Valen Shadowbreath
Group Icon

Group: GMC Member
Posts: 1481
Joined: 20-October 05
From: The Abyss
Member No.: 37333



Do I have to repeat I did not make this to stop the decompilation project?

QUOTE
I haven't tried it yet, but I suggest you also remove all indentation and remove all linefeeds.

I also suggest you put an example of obfuscated code in your first post.


It's noticable that you haven't tried it yet. tongue.gif It DOES remove all indentation and linefeed defaultly.

This post has been edited by Schreib: May 1 2008, 07:29 PM
Go to the top of the page
 
+Quote Post
Maxi06
post May 1 2008, 07:36 PM
Post #15


GMC Member
Group Icon

Group: GMC Member
Posts: 293
Joined: 27-January 07
From: Norfolk
Member No.: 69297



Nice, simple awesome idea works great! Although its not gonna stop the "uber noobs" that just decompile a game and change the sprites.
Go to the top of the page
 
+Quote Post
jontyl
post May 1 2008, 07:39 PM
Post #16


JJTGames
Group Icon

Group: GMC Member
Posts: 621
Joined: 6-February 07
From: On the moon
Member No.: 70194



Awesome!
But, when i checked the 'insert crap' button, there was a compile error
Go to the top of the page
 
+Quote Post
paul23
post May 1 2008, 07:40 PM
Post #17


GMC Member
Group Icon

Group: GMC Member
Posts: 1826
Joined: 1-March 05
From: Here in holland
Member No.: 23016



uhm aren't there a mega number of bugs with such a tool? - Renaming resource names would potentially remove a lot of functionality (things like "if (object_get_name(OBJECT) = BLALBLA)" don't work.. Neither does the function "Variable_exists()" work anymore! Or does it look inside strings too?
Go to the top of the page
 
+Quote Post
t3mp3st
post May 1 2008, 07:42 PM
Post #18


Damaged's Tool
Group Icon

Group: Local Moderators
Posts: 2567
Joined: 28-October 03
From: Between here and there.
Member No.: 904



QUOTE
and i dont see why everyone is making these things

Really? First I've seen.

QUOTE
no games are worth decompiling anyway

Few, maybe, I wouldn't say none though.

QUOTE
and u WONT be making it for GMKs
as usual, useless stuff flooding the GMC.

That doesn't make it less useful to users of GM6.


Perhaps the next project might be a de-obfuscator, that could correct grammar and capitalization in posts. I know I'd find that useful. tongue.gif
Go to the top of the page
 
+Quote Post
Dmaster270
post May 1 2008, 07:47 PM
Post #19


GMC Member
Group Icon

Group: GMC Member
Posts: 2087
Joined: 21-November 07
Member No.: 93546



QUOTE (paul23 @ May 1 2008, 11:40 AM) *
uhm aren't there a mega number of bugs with such a tool? - Renaming resource names would potentially remove a lot of functionality (things like "if (object_get_name(OBJECT) = BLALBLA)" don't work.. Neither does the function "Variable_exists()" work anymore! Or does it look inside strings too?

Nope. It doesn't mess with functions, and when it changes a name it changes everything about the name. if's aren't messed with.
Go to the top of the page
 
+Quote Post
SunnyKatt
post May 1 2008, 07:48 PM
Post #20


GMC Member
Group Icon

Group: GMC Member
Posts: 685
Joined: 11-March 08
From: USA
Member No.: 101909



Sweet idea! I'll look forward to the final version!
(I hope it's gm7 compatable...)

EDIT: ...crap.

This post has been edited by SunnyKatt: May 2 2008, 08:19 PM
Go to the top of the page
 
+Quote Post

43 Pages V   1 2 3 > » 
Reply to this topicStart new topic
2 User(s) are reading this topic (2 Guests and 0 Anonymous Users)
0 Members:

 



RSS Lo-Fi Version Time is now: 9th February 2010 - 04:36 PM