Wait, what possible use could this have
sonicviz
Thanks for heads up!
Zeblote
It allows you to add assemblies integrity checks in your app. So if someone will try to alter your assemblies (patch IL bytecode for example) to cheat something, you will be able to notice this and react accordingly, e.g. ban this guy in your game or change game behaviour to prevent his hiscore to be submitted, or whatever you like to do with him.
Think of it as of Application.genuine analogue, but it should work fine on all mobile and desktop platforms (except Web Player and Flash Player), where regular Application.genuine usually is not working.
But I could just patch that function (or it’s usage) too, so what’s the point
Well, you need to know it exists at all. When someone will patch assembly of some particular game first time there is high chance he will not know about this checks at all, so assemblies altering may be detected until all check will be found and patched, this gives you as developer chance to ban this guy for example.
Anyway, I’ll quote here what I said earlier:
Hi, i don’t use PlayerPrefs i save settings manually to file using BinaryWriter and upload to web server, is there way to encrypt byte[ ] array? or get and set encrypted data from PlayerPrefsObscured?
or if i use some .net encryption how do i hide encryption key from hacker?
Hey, friuns3!
Currently ACT has no APIs to encrypt and decrypt byte arrays, I’ll add this to TODO, thanks for noticing this.
You could use any of Obscured types to encrypt data you write to the byte array itself though.
E.g. you can encrypt string, write it to the byte array, save, then load, read encrypted string, decrypt.
You can hide encryption key easily. If you have your web server - just send your key to the client on demand to avoid its storage in managed code.
Thanks! didn’t noticed EncryptDecrypt function)
if send key from web server it can easily sniffed with HttpFox it also captures https. Is there way to prevent this?
Sure, but you could hide it using something simple, like Base64 + some custom tricks like string inversion, mixing, etc to hide your original key + send it with some other data, not alone if possible. This would be enough to hide it from mainstream cheaters \ hackers.
And keep in mind main rule - if someone skilled will really wish to hack it - he will hack it, since all code and data placed in client is not secure anyway.
Привет, Дмитрий!
Приобрел твой Анти чит, но в некоторых случаях он не помог. Описываю ситуацию. Для моей игры есть чит на скорострельность оружия.
У меня есть переменная shootInterval, я ее защитил, но чит все равно остался работать. полез разбираться глубже.
и так у меня есть вот такой код в апдейте
Тут смысл, что если шут интервал уже прошел, то дальше внутри выстрел генерируется.
Мы видим что я сделал дебаг всех параметров, которые в этом if участвуют,и при активизации чита происходит странная вещь. Последний дебаг лог выводится false, то-есть в данном обращении основное условие ифа не выполняется, время для выстрела еще не подошло, но внутрь ифа мы все равно попадаем и таким образом получается выстрел в каждом апдейте!
Как такое может быть и как от такого защищаться?
Привет!
Если все действительно так, как вы описали (мы попадаем внутрь if’а, но условие false), то вполне возможно, что правят саму сборку и меняют условие на противоположное. Проверьте, нет ли изменений в сборке. Кроме того, в ACT есть средства для обнаружения таких вторжений в сборку (см. описание класса IntegrityChecker). Если проблему так и не удастся решить - предлагаю свзяться по скайпу (dmitry.you) для более оперативного решения проблемы.
Весь чит представляет собой вот такйо скрипт для чит ингайна
if ( checkbox_getState(sender)== 1 ) then
stringListAddresses = AOBScan(“FF 8B 47 4C D9 80 C4 00 00 00”,“XW-C”)
if (stringListAddresses==nil) then
messageDialog(“Не активировано!”,1, 2)
return end
lenghtLines = stringlist_getCount(stringListAddresses)
for i = 0, lenghtLines-1 do
address = stringlist_getString(stringListAddresses, i)
writeBytes(address, 0xFF, 0x8B, 0x47, 0xB4, 0xD9, 0x80, 0xC4, 0x00, 0x00, 0x00)
showMessage(“Скорострельность активирована! на пистолете не работает на других работает”)
return end
Я добавился тебе в скайп, чтобы более подробно все обсудить
Above this post, we can notice a new Anti-Cheat Toolkit feature in action: it now scrambles your forum posts so that they become undecipherable.
=D
Can’t compile on windows phone 8 platform, can you fix please?
Error building Player: Exception: Error: type System.Reflection.MethodBody
doesn’t exist in target framework.
Error: type System.Reflection.MethodBody
doesn’t exist in target framework.
Error: type System.Reflection.MethodBody
doesn’t exist in target framework.
Error: type System.Security.Cryptography.MD5
doesn’t exist in target framework.
Error: type System.Security.Cryptography.MD5
doesn’t exist in target framework.
Hey, friuns3! Thanks for heads up. I’ll look into this issue. Looks like Windows 8 doesn’t supports reflection (parts of it), so IntegrityChecker won’t be available there =(
I’ll see what can I do here to allow compilation at all.
Hi, I downloaded and imported ACT into my iOS/Android project. I’m not actually using any of the classes, but when I run my project I get the following output in Xcode:
get_deviceUniqueIdentifier can only be called from the main thread.
Constructors and field initializers will be executed from the loading thread when loading a scene.
Don’t use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function.
Best
ecc
ecc83, thanks for reporting this. I’ll look into this issue as well.
Given the reference to loading in the output, this might be relevant:
I use a simple “loading” scene, with a single behaviour that calls Application.LoadLevelASync
Thanks for addition, it may help with testing of fix I’ll implement.
Hi, any update on this?