Search Unity

Anti-Cheat Toolkit: stop cheaters easily!

Discussion in 'Assets and Asset Store' started by codestage, Aug 20, 2013.

  1. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey @jmjd

    Yes migration is still possible but you'll need to migrate to the latest v1 first in order to allow further migration.

    Please contact me directly so I could send you older version for the first migration step.
     
  2. Flight648

    Flight648

    Joined:
    Apr 5, 2020
    Posts:
    7
    Hi codestage, thanks for a great asset!
    Can you please help me with GetEncrypted() method for ObscuredString? I'm trying to save encrypted value into external file like this, but it doesn't work:

    Code (CSharp):
    1. ObscuredString level = SceneLevels.CurrentSceneName;
    2. char[] levelKey;
    3. saveManager.LastLevel = level.GetEncrypted(out levelKey);
    I'm new to Unity so I probably miss something with syntax here. With ObscuredInt variables this logic works.
     
  3. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey @Flight648,

    Your code looks correct.
    Could you please elaborate on this?
     
  4. Flight648

    Flight648

    Joined:
    Apr 5, 2020
    Posts:
    7
    It's shame to admit, I forgot that GetEncrypted() returns not an Int, but char[], so that was the reason )
     
    codestage likes this.
  5. NathanielAH

    NathanielAH

    Joined:
    Jul 22, 2013
    Posts:
    100
    @codestage , just imported the latest version and am getting the below as an FYI:

    [ACTk] Some error occurred while looking for image
    Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/ForDark/Icons/Star.png
    Please report to support@codestage.net including your Unity and ACTk version numbers.
    UnityEngine.Debug:LogError(Object)
    CodeStage.AntiCheat.EditorCode.TextureTools:GetTexture(String, Boolean, Boolean) (at Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/TextureTools.cs:57)
    CodeStage.AntiCheat.EditorCode.TextureTools:GetIconTexture(String, Boolean) (at Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/TextureTools.cs:25)
    CodeStage.AntiCheat.EditorCode.Icons:get_Star() (at Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Tools/TextureTools.cs:76)
    CodeStage.AntiCheat.EditorCode.SettingsGUI:DrawSettingsHeader() (at Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsGUI.cs:94)
    CodeStage.AntiCheat.EditorCode.SettingsGUI:OnGUI() (at Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsGUI.cs:41)
    CodeStage.AntiCheat.EditorCode.<>c:<CreateMyCustomSettingsProvider>b__0_0(String) (at Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Scripts/Settings/SettingsProviderWrapper.cs:24)
    UnityEngine.GUIUtility:processEvent(Int32, IntPtr)

    Thanks.
     
  6. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey @NathanielAH,

    Thank you for reporting this problem.
    I can't reproduce it on my end though.
    Could you please provide additional details so we could move further here?

    - what is your Unity version?
    - does file Assets/Plugins/CodeStage/AntiCheatToolkit/Editor/Textures/ForDark/Icons/Star.png exists?
    - when this errors does show up?
    - did you tried to re-add ACTk to the project or reproduce it in new empty project?

    Thanks!
     
  7. NathanielAH

    NathanielAH

    Joined:
    Jul 22, 2013
    Posts:
    100
    Please see below. As to re-producing, I've encountered a separate error that I need to work on re-producing and will work on this alongside it. Will update you once I'm done.
    • 2019.4.1f1
    • Can't find it now; in trying to clear my other issue, cleared this asset.
    • It showed up right after install.
    • I have not; as indicated, I will if it crops up again in the course of my work to re-produce this alongside another error.
    Again, I'll update you once I have more. Thank you for the response!
     
    codestage likes this.
  8. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Thank you for all the additional details.
    Unfortunately I still couldn't reproduce it on my end in Unity 2019.4.1f.

    Sure, it would help a lot, thank you!
     
  9. NathanielAH

    NathanielAH

    Joined:
    Jul 22, 2013
    Posts:
    100
    I've gone back and re-built from the ground up. The error is not re-appearing, so seems to have been an import issue. If it crops up again or I figure out the origin will let you know.

    Thanks.

    Sincerely,
    Nathaniel
     
    codestage likes this.
  10. conan1987

    conan1987

    Joined:
    Apr 8, 2016
    Posts:
    32
    Hi
    when i used Anticheat toolkit and try to build with IL2CPP and .net4.0 i get this error

    Failed running D:\Unity 2019.2\2019.2.5f1\Editor\Data\il2cpp\build/UnityLinker.exe -out="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed/tempStrip" -x="D:/Unity 2019.2/2019.2.5f1/Editor/Data/PlaybackEngines/AndroidPlayer/Whitelists/Core.xml" -x="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed/../platform_native_link.xml" -x=C:/Users/Mohamed/AppData/Local/Temp/tmp6dc8a27c.tmp -x=C:/Users/Mohamed/AppData/Local/Temp/tmp3bf5ad47.tmp -x="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed/TypesInScenes.xml" -x="F:/Amazing V6.0 wz Firebase/Assets/link.xml" -x="F:/Amazing V6.0 wz Firebase/Assets/Best HTTP/link.xml" -d="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed" --include-unity-root-assembly="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed/Assembly-CSharp-firstpass.dll" --include-unity-root-assembly="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed/Assembly-CSharp.dll" --include-unity-root-assembly="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed/ACTk.Examples.Genuine.Runtime.dll" --include-unity-root-assembly="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed/BestHTTP.dll" --include-unity-root-assembly="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed/ACTk.Runtime.dll" --include-unity-root-assembly="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed/UnityEngine.UI.dll" --include-unity-root-assembly="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed/Unity.TextMeshPro.dll" --include-unity-root-assembly="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed/ACTk.Examples.Runtime.dll" --include-unity-root-assembly="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed/com.unity.multiplayer-hlapi.Runtime.dll" --include-unity-root-assembly="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed/DOTween.dll" --include-unity-root-assembly="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed/UnityEngine.Advertisements.dll" --dotnetruntime=il2cpp --dotnetprofile=unityaot --use-editor-options --include-directory="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed" --rule-set=Conservative --editor-data-file="F:/Amazing V6.0 wz Firebase/Temp/StagingArea/assets/bin/Data/Managed/EditorToUnityLinkerData.json" --disable-engine-module-support --enable-engine-module-stripping --engine-stripping-flag=EnableUnityConnect --engine-stripping-flag=EnablePerformanceReporting --engine-stripping-flag=EnableAnalytics --engine-stripping-flag=EnableCrashReporting --engine-modules-asset-file="D:/Unity 2019.2/2019.2.5f1/Editor/Data/PlaybackEngines/AndroidPlayer/Whitelists/../modules.asset"
    stdout:
    Fatal error in Unity CIL Linker
    Mono.Linker.MarkException: Error processing method: 'System.Void CodeStage.AntiCheat.Examples.ObscuredPrefsExamples::LockObscuredPrefsToDevice(CodeStage.AntiCheat.Storage.ObscuredPrefs/DeviceLockLevel)' in assembly: 'ACTk.Examples.Runtime.dll' ---> Mono.Cecil.ResolutionException: Failed to resolve CodeStage.AntiCheat.Storage.ObscuredPrefs/DeviceLockLevel CodeStage.AntiCheat.Storage.ObscuredPrefs::lockToDevice
    at Mono.Linker.Steps.MarkStep.HandleUnresolvedField(FieldReference reference)
    at Mono.Linker.Steps.MarkStep.MarkInstruction(Instruction instruction)
    at Mono.Linker.Steps.MarkStep.MarkMethodBody(MethodBody body)
    at Unity.Linker.Steps.UnityMarkStep.MarkMethodBody(MethodBody body)
    at Mono.Linker.Steps.MarkStep.ProcessMethod(MethodDefinition method)
    at Unity.Linker.Steps.UnityMarkStep.ProcessMethod(MethodDefinition method)
    at Mono.Linker.Steps.MarkStep.ProcessQueue()
    --- End of inner exception stack trace ---
    at Mono.Linker.Steps.MarkStep.ProcessQueue()
    at Mono.Linker.Steps.MarkStep.ProcessPrimaryQueue()
    at Mono.Linker.Steps.MarkStep.Process()
    at Unity.Linker.Steps.UnityMarkStep.Process(LinkContext context)
    at Mono.Linker.Pipeline.ProcessStep(LinkContext context, IStep step)
    at Unity.Linker.UnityPipeline.ProcessStep(LinkContext context, IStep step)
    at Mono.Linker.Pipeline.Process(LinkContext context)
    at Unity.Linker.UnityDriver.Run()
    at Unity.Linker.UnityDriver.RunDriverWithoutErrorHandling()
    at Unity.Linker.UnityDriver.RunDriver()
    stderr:
    UnityEngine.Debug:LogError(Object)
    UnityEditorInternal.Runner:RunProgram(Program, String, String, String, CompilerOutputParserBase) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:126)
    UnityEditorInternal.Runner:RunManagedProgram(String, String, String, CompilerOutputParserBase, Action`1) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/BuildUtils.cs:71)
    UnityEditorInternal.AssemblyStripper:RunAssemblyLinker(IEnumerable`1, String&, String&, String, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:222)
    UnityEditorInternal.AssemblyStripper:StripAssembliesTo(String[], String[], String, String, String&, String&, String, IIl2CppPlatformProvider, IEnumerable`1, BuildTargetGroup, ManagedStrippingLevel, Boolean, String) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:158)
    UnityEditorInternal.AssemblyStripper:RunAssemblyStripper(IEnumerable, String, String[], String[], String, IIl2CppPlatformProvider, RuntimeClassRegistry, ManagedStrippingLevel) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:358)
    UnityEditorInternal.AssemblyStripper:StripAssemblies(String, IIl2CppPlatformProvider, RuntimeClassRegistry, ManagedStrippingLevel) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/AssemblyStripper.cs:246)
    UnityEditorInternal.IL2CPPBuilder:Run() (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:326)
    UnityEditorInternal.IL2CPPUtils:RunIl2Cpp(String, String, IIl2CppPlatformProvider, Action`1, RuntimeClassRegistry) (at C:/buildslave/unity/build/Editor/Mono/BuildPipeline/Il2Cpp/IL2CPPUtils.cs:63)
    UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)



    Any help ?
     
  11. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey @conan1987

    Thank you for reporting this problem!
    Could you please clarify your target platform so I could reproduce and investigate this error?

    For now try removing CodeStage\AntiCheatToolkit\Examples folder.
     
  12. GloriaVictis

    GloriaVictis

    Joined:
    Sep 1, 2016
    Posts:
    133
    Is by any chance Anti-Cheat Toolkit able to help fighting against AutoHotKey macros?
     
  13. conan1987

    conan1987

    Joined:
    Apr 8, 2016
    Posts:
    32
    hi @codestage
    Thanks for fast reply
    the problem is when i build my project using IL2CPP and NET 4.x and codestage exist the build fails and it gives me this error , if i removed code stage the build completed successfully
    But after i removed the examples folder it works fine
    Thanks
     
    codestage likes this.
  14. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    This macros tool (and plenty other similar tools) can be used in very different ways and I'm not sure it's possible to cover all of them uniformly.

    More likely protection should built on top of the sensitive logic to make it resistant to any kind of clickers or automated input of other kind.
     
  15. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Thank you for letting me know, it will help with the cause investigation!
     
  16. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey, I've tried to reproduce this problem but it compiles just fine in 2019.4.0 LTS both for Windows and Android with IL2CPP and .NET 4.x.

    I also tried 2019.2.5 and it works fine as well. Looks like you have some specific settings or environment which differs from default one.

    May I ask you to send me your ProjectSettings folder zipped so I could use your settings for reproduction attempts?
     
  17. Zeradias

    Zeradias

    Joined:
    Dec 13, 2016
    Posts:
    4
    I would love to buy this asset, if it promoted protection against lucky patcher and the like, is it possible today?
     
  18. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey @Zeradias,

    Thank you for your interest!

    ACTk has no specific LuckyPatcher-related features but it has generic code hash generator which can be used to check if your code is genuine (and can stop being genuine when tools like lucky patcher do alter your application's code).

    CodeHashGenerator works on PC (Windows) and Android platforms and it requires some coding in order to be properly used. Basically it allows you to get a hash signature of your app code so you could compare it with a genuine one (preferably on a server-side) to detect app alteration.

    Also it wasn't tested with lucky patcher directly yet in all possible cases so not sure it will suit your specific case.
     
  19. modernator24

    modernator24

    Joined:
    Apr 7, 2017
    Posts:
    202
    Is this also can detect IAP hacks?
     
  20. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey @modernator24,

    ACTk does not have IAP-specific tools yet (relevant research is planned though).
     
    modernator24 likes this.
  21. DarkCooker

    DarkCooker

    Joined:
    Jan 7, 2015
    Posts:
    119
    Hi Codestage
    I want to know for app game.
    Do we also need an obfuscator for all codes including logic, field name etc.
    But this could introduce bugs like field mapping enum issues...
    I want to know about your view on this

    Many thanks
     
  22. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey @DarkCooker,

    I'd recommend obfuscating as much as possible names in your code while making early testing to make sure obfuscation will not break anything.

    Most obfuscators are able to exclude code portions and class members from the obfuscation either automatically (e.g. skipping all serializable fields) or explicitly using specific attributes (e.g. utilizing ObfuscationAttribute).

    The main goal of the names obfuscation: make it harder to reverse-engineer logic of your application.
    More obfuscated names leads to the more tough reverse-engineering process.
     
  23. DarkCooker

    DarkCooker

    Joined:
    Jan 7, 2015
    Posts:
    119
    do you have any recommended tool or plugin for obfuscation of codes? Thanks
     
  24. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    I do usually recommend Obfuscator from the Asset Store since it does aware about Unity-specific elements.
     
  25. DarkCooker

    DarkCooker

    Joined:
    Jan 7, 2015
    Posts:
    119
    we have used the detector inside our game.
    Some gamers report that it detects cheat but in fact there is nothing cheat and likely detect wrongly.
    How come and how to fix this situation? Thanks
     
  26. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey @DarkCooker,

    Could you please let me know more details about your case?
    - what detector causes false positives for you (ACTk has few ones)?
    - what's your ACTk version?
    - what's your Unity version and target platform?

    General suggestion here - relax default sensitivity settings and try figure out any specific information which could help reproducing the problem.

    Unfortunately not much can be done without issue reproduction.
     
  27. newlife

    newlife

    Joined:
    Jan 20, 2010
    Posts:
    1,081
    Hello modernator24, this is a very interesting matter. Which are the IAP hacks you are talking about?
     
  28. yomanx

    yomanx

    Joined:
    Dec 5, 2016
    Posts:
    38
    Hi friend, how yours time cheating detection works? I can’t find any docs about it and how to turn it on.
     
  29. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey @yomanx

    Please take a look at the "Time cheating detection" and "Common detectors features and setup" readme sections
     
  30. yomanx

    yomanx

    Joined:
    Dec 5, 2016
    Posts:
    38
    Last edited: Oct 26, 2020
  31. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey @yomanx,

    This link does works fine for me (actually you can use domain only since it uses headers to get datetime).

    Did you tried to look at the
    Examples/API Examples/API Examples.unity scene
    and
    Examples/API Examples/Scripts/Runtime/UsageExamples/DetectorsExamples.cs script?

    Could you please let me know what errors or problems you have while setting detector up?
     
  32. yomanx

    yomanx

    Joined:
    Dec 5, 2016
    Posts:
    38
    ok, fixed, the problem was in OnTimeCheatingDetected() - in your Demo it too doesn't work through inspector.


    But we found one more issue, when the player change TIME ZONES - he will not be caught by anticheat, anyway to fix it?
     
  33. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey this is an intended behavior since Time Zones can be changed due to the travel conditions, daylight saving and such. So in order to avoid any false positives here, TimeCheatingDetecator operates with UTC time (which is time-zone independent).
     
  34. waqas_haxhmi

    waqas_haxhmi

    Joined:
    Jun 15, 2016
    Posts:
    15
    Hello,
    How i can check that my APK is signed with different key ( re-package )
     
  35. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey @waqas_haxhmi ,

    Currently ACTk does not provides direct re-package detection but you can try using Application.genuine to validate signature and use CodeHashGenerator feature to detect your code alteration.
     
  36. waqas_haxhmi

    waqas_haxhmi

    Joined:
    Jun 15, 2016
    Posts:
    15
    Thanks for your reply!
    So I just need to make CodeHashGenerator on Compile time = true?
    and then I will check in my Application its genuine or not?
    If yes then than if check can also be altred by some hacker...
     
  37. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey @waqas_haxhmi ,

    Please take a look at the "Code obfuscation and overall code protection notes" and "Code Integrity check" readme sections to know more about both code protection and CodeHashGenerator to get the idea on how to use it in different scenarios.
     
  38. waqas_haxhmi

    waqas_haxhmi

    Joined:
    Jun 15, 2016
    Posts:
    15
    Hey, @codestage I checked the documentation but it seems like it does not work for IL2Cpp apk build.
    Can you please verify what is the procedure to check the repackaging of IL2cpp apk?
     
  39. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey @waqas_haxhmi it should work fine with IL2CPP builds as well.
     
  40. waqas_haxhmi

    waqas_haxhmi

    Joined:
    Jun 15, 2016
    Posts:
    15
    So I just tasted I did CodeHashGenerator on Compile time = true
    build an apk.
    extract assembly - > change the const variable value and then repackage and build.
    But Application.geniue is still true...
     
  41. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Ah, just realized you're talking about Android!

    Unity's Application.genuine does not work on Android right now (but it will start working since 2020.2 with basic package name check implementation under the hood).

    For now, I'd suggest to stick with CodeHashGenerator for code integrity checks (especially if your game uses network connection and you can check hash on the server side) and take a look at other advanced methods like google play license verification, e.g.:
    https://github.com/Unity-Technologies/GooglePlayLicenseVerification
     
  42. ieslam

    ieslam

    Joined:
    Sep 28, 2020
    Posts:
    1
    How do you deal with people that can bypass the anti-cheat?

    "Just nop all calls that say StartRoutine or OnCheatDetected."
     
  43. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey @ieslam, you deal with this by using CodeHashGenerator to validate code integrity (preferably on the server-side) and protecting your build from reverse-engineering, please take a look at the "Code obfuscation and overall code protection notes" readme section for details.

    Final build protection is a massive separate topic which is out from ACTk scope at the moment. There will be always skilled reverse-engineers which can dig into almost any code which you host on the client (which is available to the reverser), so protecting against them does involves pricey solutions like native protectors and complex solutions like denuvo or moving your sensitive logic to the server side. If your game starts to be interesting to such skilled guys - it's time to think about getting something more robust and expensive.
     
    Crossway and ieslam like this.
  44. Crossway

    Crossway

    Joined:
    May 24, 2016
    Posts:
    509
    Can I protect my game hierarchy? For example can anybody extract my game camera?
     
  45. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey @Crossway,

    Not sure I got your question correctly. Could you please elaborate on this, on sensitive data you care about and, perhaps, show some examples of such cheat technique?
     
  46. AKComp

    AKComp

    Joined:
    Aug 22, 2014
    Posts:
    26
    Hey,

    Using for detecting speedhack. It is works on editor (Cheat Engine) but not works on android. Players can hack game using 8x speed sandbox. We sended you a support ticket.

    Please help us as soon as possible.

    Thanks.
     
  47. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Hey Alptuğrul, please take a look at your email inbox, I've sent a reply to the support ticket 2 hours ago. Please also check your spam folder just in case and let me know if you can't find it.
     
  48. AKComp

    AKComp

    Joined:
    Aug 22, 2014
    Posts:
    26
    Uh sorry, It is in spam folder :)

    I will try TimeCheatingDetector and will give a feedback.
     
    codestage likes this.
  49. hungrybelome

    hungrybelome

    Joined:
    Dec 31, 2014
    Posts:
    336
    Hi, how does the server validate the client's code has in this case? Does the client have to send the code hash to the server? In that case, can't the client be edited to send the hash of an unmodified client?
     
  50. codestage

    codestage

    Joined:
    Jul 27, 2012
    Posts:
    1,931
    Yes, client have to send current hash and for sure it still can be altered as anything on a client side so make sure you are sending it in a secure enough way to make at as harder as possible to figure out correct hash and to modify it.