Download

Is there a way to keep my packaging .exe application run only on a specific computer?

For some reasons, we need to make sure the application only run on a specific computer and can’t be copy to other computers. Anyone knows how to make it? Thanks in advance.

Ah it works now for some reason

As far as I know, Unreal packages your game as a generic .exe file so it can be executed anywhere. You might have to look at other solutions outside of Unreal to make this happen.

There is probably no way to do this, even with outside tools, nothing 100% reliable.
There are options, but its a question of ‘how determined’ are your adversaries etc. :stuck_out_tongue:

There is a way, but you probably need a bit of C++. I think this is not exposed to blueprints. So find unreal and C++ tutorial, then write simple function that reads HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography from registry.

more about this topic in: https://stackoverflow.com/questions/…que-machine-id

you can also read SID: LookupAccountSidA function (winbase.h) - Win32 apps | Microsoft Docs

Thank you very much!

Spotted this while looking for something else in case its helpful:
https://answers.unrealengine.com/que…-registry.html

If that doesn’t work but you 100% control the packager, try this:
https://stackoverflow.com/questions/…f-registry-key
(Use Get Command Line BP node etc)

we finally solved this problem by running an external app in the game application. This external app will detect if the machine hardware ID is matched with the ID we programmed in it. If not, it will force quit the game application.

@Huolynn

Interesting… Spawn a ‘Kill’ if the Machine ID’s mismatch.
But what-if the EXE is renamed first, to something else?

Thanks for reminding this. We tried renaming the EXE, it still works.

No worries… One last thing while I think of it as CryEngine’s Editor ‘Login’ suffered from this…
Launch the EXE, 2 or even 3 times at the same time, to ensure all sessions are killed off etc.
In other words Taskkill or whatever by matching against Exe name and all PID’s. Good Luck!

The most usual way (although ‘most usual’ can be controversial lol) is to use hardware dongle and there is an sdk for it.
Other than that, custom programming is usually needed and that can take times to complete, and usually not as robust as on-the-shelf solution.

You know having separate application that kills game, is quite weak copy protection. All somebody needs to do is replacing that watchdog app with something that does not kill game. Also such application is small, piece of cake to disassemble in IDA, and easy to find out what is checked and how. That external exe file is weak protection and imo not worth all hassle to implement. Also do not try to encrypt it with some standard exe file protector, about everybody has decryptors for them nowadays.

It would be all much harder to trace inside huge binary (like unreal engine game is).

For you best protection would be something hardware based. Cheapest option here is rapsberry pi.
Setup there some PGP like system, make unreal app send its public pgp key and get in return key to decrypt some vital file.
Or even better send encrypted file to rapsberry, and get decrypted one back, but load it directly into memory.

There was also some tiny usb computer with some extra security measures, which would be ideal hardware key for this, but i forgot its name.