#Project Deployment/Demos/Security

1 messages · Page 1 of 1 (latest)

hollow flare
#

Discussion on maintaining project integrity (making it difficult to crack a demo project/ full project).

#

Okay so how do developers usually run playtests/demos and encrypt/encode their gamefiles from unity. And how do they post their games to Steam.

fresh stag
hollow flare
limpid owl
#

If you're worried about code, Il2cpp.

#

Regarding the physical copying of the assets is there any way to prevent it? No, not really. Models, Textures, Animations. They're all going to be extremely easy to grab, as they all use public formats. Even games that use private formats or modified formats, ex. Rust. Still easily have their models ripped after a while.

Legally? I suggest you mark your textures with some small colored pixels or something of the sort so you could easily prove which textures are yours.

fresh stag
hollow flare
limpid owl
#

Could write up a python script that finds an area on your textures, and automatically applies a small little watermark. That'd help legally

hollow flare
#

basically like a secret key and you run the texture data through an algorithm using the secret key

fresh stag
#

^^ I’ve marked my textures with tiny pixels in a pattern on top left top right bottom left bottom right with a tiny water mark

limpid owl
#

Or manually do it

fresh stag
#

Automation is fun though

limpid owl
fresh stag
#

Some sort of hashing for pixels i think

hollow flare
#

the secret key that only you have, is the pattern of the pixels, you have an algorithm you write to search for the pattern, and you run the key through it

limpid owl
#

What.. Would even be the point of that

#

I was referencing just adding some kind of watermark on your textures

hollow flare
#

legal protection

limpid owl
#

So if someone uses them you could claim..

#

Why would you ever need to be able to find any of that again?

hollow flare
#

to prove ownership

limpid owl
#

Just make like a oreintation of 5 pixels on each one of your textures and mark thme

#

them

#

You dont' need any.. weird algorithm to find patterns or.. keys.. or.. what

hollow flare
fresh stag
#

That is unnecessarily complicated

hollow flare
#

also might be easy to find

#

its just an idea haha

fresh stag
hollow flare
limpid owl
#

No?

hollow flare
#

could be overcomplicating whats needed here for sure, but it was just an idea lol

limpid owl
#

If you publish your game in 2020, have specific textures. A game pops up in 2022 with textures that look nearly identical. You walk into court and go. yeah those are mine "prove it" well what if they just made similar looking textures.

In this case you'd have 5 odd pixels on all your image textures.. And if they have those same 5 pixels well

#

that proves they copied

hollow flare
#

I dont really care about assets because I dont make them

hollow flare
fresh stag
limpid owl
#

xd

hollow flare
#

and modified slightly to sell

#

I dont care if I lose just the assets, because I will be paying for a license to use them, or using free ones

limpid owl
#

if you really wanna get into how i'd do it

write a python script that finds a group of atleast 10 pixels on a image that are of the same general color, and slightly alter 5 of those pixels in a different shade maybe like 1 rgb value down on.

fresh stag
hollow flare
limpid owl
#

ok but

#

again

#

if you never find those

#

or notice them

hollow flare
limpid owl
#

they're literally 1 rgb value down, what kind of algorithm is someone going to write to find that. and again i think you're thinking too deep into this.

#

no one is going to steal your project bar for bar and even if they did, all you have to do is prove you had files before them. that are the same

fresh stag
hollow flare
#

youll need an algorithm that can find them again

limpid owl
#

.. when you're running the script log the pixels that have changed

#

so you can recall back to them

#

or just store the original image

#

and compare

hollow flare
limpid owl
#

by itself if i make a unity game and compile it in mono, you can copy literally THE WHOLE GAME with no issues

#

if you compile it with il2cpp, the game will NOT function or work. BUT you will have all the assets

fresh stag
#

There are still reasons you’d want to use mono, most likely it’s better for modding

limpid owl
#

yeah if your game has a modding community

#

il2cpp kinda sucks for them

#

hard for them to analyze and change things

#

unless you make some kind of modding tool or framework for them

#

in game

hollow flare
#

youd need to probably establish your company, and have it known that the game is yours before letting people mod it though

limpid owl
#

people dont care

#

i mod any game in my steam library or on itch

fresh stag
limpid owl
#

yes

#

just not AS easily as mono

hollow flare
limpid owl
#

mod

#

not

#

steal

#

with il2cpp you cant just read the original c# code

#

you can still RUN c# code on the game though so you can still mod the game

fresh stag
limpid owl
fresh stag
#

Yeah but how would you interact with cpp from c#

limpid owl
#

the game still runs as c#

#

kinda

#

its hard to explain

#

anyways il2cpp game, i can still open it up. write a script that checks for me pressing f, and delete the object im looking at. all coded in c#

#

bepinex interprets the c# code you write and pretty much loads it into the game the same way il2cpp does

#

the same way unity compiles your c# code into il2cpp

#

as a unity developer

#

same process for modding, just less freedom and a little more tricky to understand the game logic

fresh stag
#

But when compiled its c++ you can interact with that from c#?

limpid owl
#

essentially

thick elk
#

It's not that the game runs C# or IL, it's that the modding tool converts the C++ to IL and back

limpid owl
#

bepinex is the middleware

limpid owl
#

interprets your c#

fresh stag
#

I was confused because i thought you were saying you could just execute and modify cpp code from c# without bepinex

limpid owl
#

oh no

#

you can still technically dig through the dlls and change hardcoded values statically the same you would with any other game though

#

not too relevant to typical unity modding though

#

the best example of the most overall secure unity game i can think of is rust

fresh stag
limpid owl
#

thats cpp to il which is more readable and understandable than cpp when compiled

#

but definitely not like you could just drag in an entire game and be able to copy paste it into your own unity game

#

makes life easier for unity il2cpp modders though ofc

fresh stag
limpid owl
#

It's hard to explain, I don't know the exact details besides il2cpp games aren't going to be copy pasted. They require a bunch of reworking. I've got a group of guys that could explain it well and in depth. They've spent the past few months trying to fully get an il2cpp game into a working state in the unity editor

#

Using a huge variety of tools, and even a mono copy of the game's demo version.

#

Because some of the code from the demo version stayed in the il2cpp version, which means they could get some kind of comparison and blah blah. Helped in some way

fresh stag
#

Oh so it’s hard

limpid owl
#

Even then they're spending alot of time rewriting scripts

#

The only reason someone would put the effort in, is for modding. Not trying to copy paste the game and sell it for themselves

#

Is pretty much my point

fresh stag
#

i see

limpid owl
fresh stag
#

ohh

limpid owl
#

Ex. If I decompiled a unity il2cpp game and looked at a script. It'd look something like this.

// Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
// DefaultPlatform
using UnityEngine;

public class DefaultPlatform : IPlatform
{
    private bool isInitialised;

    public bool IsInitialised => false;

    public bool IsInitialising => false;

    public bool RequiresSpecificUnityMicrophoneUsage => false;

    public string UnityMicrophonePrimaryName => null;

    public void AsyncInitialise(GameObject platformRootOwner)
    {
    }

    public void Update()
    {
    }

    public void OnDisable()
    {
    }

    public bool SendGameInvite(string otherPlayerId, string connectionString)
    {
        return false;
    }

    public void SetMultiplayerActivity(string connectionString, bool isPublic, bool allowJoin, uint maxPlayers, uint currentPlayers, bool allowCrossPlatform, StoreSDKManager.MultiplayerActivityType type)
    {
    }

    public void ClearMultiplayerActivity()
    {
    }

    public bool IsPlayerBlocked(PlatformPlayerId otherPlayerId)
    {
        return false;
    }

    public bool IsPlayerMuted(PlatformPlayerId otherPlayerId)
    {
        return false;
    }

    public void OpenPlayerPage(PlatformPlayerId playerId)
    {
    }
}
#

All the actual code missing

#

public float sanityDrain;

public int sprinting;

public bool flashlights;

public bool loseItemsOnDeath;

public float playerSpeed;

public int evidenceGiven;
#

Names of everything, their types.

#

Which I mean.. Sure you get those, but then you have to write the actual logic. Assume what each does

#

It's actually pretty nice because you could decompile a game you're a fan of, and see how they structure their work.

#

Which is a way of how I learn

#

Lookin at professional work and trying to take tips from them

limpid owl
#

yeah all without copying the code itself, just getting a better understandance of how certain features might work

#

likeee i dunno.. perhaps how in schedule I, how xp is handled.

#

could decompile and see if they use some kind of handler.. what the function call is like..

#

or maybe how they handle the different views because picking the weed, combining it, yada.

hollow flare
#

who made schedule 1? that gaame looks really well made

limpid owl
#

guy named tyler

#

TVGS (Tyler's Video Game Studio)
Founder & Developer = Tyler
Composer = KAESUL
Graffiti Artist = Cody To

hollow flare
limpid owl
#

i doubt its actual copies of schedule I

#

i doubt its actually a game anyways