Albion Online Cheat Detection methods

I do not know how old this information is, but since I started playingAlbion Online Cheat Detection methods Albion Online, I figured I should share some of the Albion Online Cheat Detection methods which I came across.

There are 2, which I have come across, and are both obscured using reflection methods. It creates a list of hashed assemblies that are loaded in the game, which is included each time a SelectCharacter and/or ChangeCluster packet is sent. In other words, be careful when running public cheats!

Albion Online Cheat Detection methods

Most likely the server maintains a blacklist of hashes of publicly available assemblies. For this reason, if you are using a public cheat, make sure to increase the file size and change the hash daily.

Below you can find the detection methods and their reversed counterparts respectively.

are constructor

CODE:

public are()
{
    object obj = Type.GetType(ara.g[9]).GetMethod(ara.g[10]).Invoke(null, null);
    object obj2 = obj.GetType().GetType().GetMethod(ara.g[18], new Type[]
    {
        typeof(string)
    }).Invoke(obj.GetType(), new string[]
    {
        ara.g[11]
    });
    Type type = (Type)obj2.GetType().GetProperty(ara.g[16]).GetGetMethod().Invoke(obj2, null);
    IEnumerable<ParameterInfo> parameters = type.GetMethod(ara.g[12]).GetParameters();
    if (are.b == null)
    {
        are.b = new Func<ParameterInfo, int, ParameterExpression>(are.a);
    }
    ParameterExpression[] parameters2 = parameters.Select(are.b).ToArray<ParameterExpression>();
    MethodCallExpression body = Expression.Call(Expression.Constant(aq9.aj()), aq9.aj().GetType().GetMethod(ara.g[13], new Type[]
    {
        typeof(string)
    }), new Expression[]
    {
        Expression.Constant(string.Empty, typeof(string))
    });
    Delegate @delegate = Expression.Lambda(type, body, parameters2).Compile();
    MethodInfo method = obj2.GetType().GetMethod(ara.g[17]);
    method.Invoke(obj2, new object[]
    {
        obj,
        @delegate
    });
}

Can you survive what's about to come? Prepare now with this e-book

CODE:

public are() {
    AppDomain.CurrentDomain.AssemblyLoad += (sender, args) => aq9.au(string.Empty);
}

aq9.au

CODE:

public void au(string A_0)
{
    EventData a_ = ara.a(new adr
    {
        a5k = aq9.z,
        a5l = “Horst” + (long.MaxValue – aq9.z),
        a5m = 0,
        a5n = 0,
        a5s = Guid.Empty.ToByteArray(),
        a5r = “”,
        a5w = new float[2],
        a5x = GameTimeStamp.Zero,
        a5y = 180f,
        a50 = 0L,
        a5z = 0f,
        a51 = 1000f,
        a52 = 1000f,
        a53 = 0f,
        a54 = GameTimeStamp.Zero,
        a55 = 100f,
        a56 = 100f,
        a57 = 0f,
        a58 = GameTimeStamp.Zero,
        a6g = null,
        a6h = null
    });
    this.az(a_);
}

aq9.az

CODE:

public void az(EventData A_0)
{
    try
    {
        object obj = Type.GetType(ara.g[9]).GetMethod(ara.g[10]).Invoke(null, null);
        object[] array = (object[])obj.GetType().GetMethod(ara.g[14]).Invoke(obj, null);
        int i = 0;
        while (i < array.Length)
        {
            object obj2 = array[i];
            string text = (string)obj2.GetType().GetProperty(ara.g[15]).GetGetMethod().Invoke(obj2, null);
            ConstructorInfo constructor = ajy.a(ara.g[8]).GetConstructor(new Type[]
            {
                typeof(string),
                ajy.a(ara.g[7]),
                ajy.a(ara.g[6]),
                ajy.a(ara.g[5])
            });
            object obj3 = Enum.ToObject(ajy.a(ara.g[7]), 3);
            object obj4 = Enum.ToObject(ajy.a(ara.g[6]), 1);
            object obj5 = Enum.ToObject(ajy.a(ara.g[5]), 3);
            object obj6 = null;
            try
            {
                obj6 = constructor.Invoke(new object[]
                {
                    text,
                    obj3,
                    obj4,
                    obj5
                });
            }
            catch (Exception)
            {
                aop.a.Add(-1);
                goto IL_2AD;
            }
            goto IL_178;
            IL_2AD:
            i++;
            continue;
            IL_178:
            ConstructorInfo constructor2 = ajy.a(ara.g[4]).GetConstructor(new Type[]
            {
                ajy.a(ara.g[8])
            });
            object obj7 = constructor2.Invoke(new object[]
            {
                obj6
            });
            PropertyInfo property = ajy.a(ara.g[4]).GetProperty(ara.g[3]);
            object value = property.GetValue(obj7, null);
            Type type = value.GetType();
            PropertyInfo property2 = type.GetProperty(ara.g[2]);
            long num = (long)property2.GetValue(value, null);
            int num2 = (int)num;
            MethodInfo method = ajy.a(ara.g[4]).GetMethod(ara.g[1]);
            byte[] a_ = (byte[])method.Invoke(obj7, new object[]
            {
                num2
            });
            MethodInfo method2 = ajy.a(ara.g[4]).GetMethod(ara.g[0]);
            method2.Invoke(obj7, null);
            aop.a.Add(ara.a(a_));
            goto IL_2AD;
        }
    }
    catch (Exception)
    {
    }
}

Free Bitcoin faucet

CODE:

// aop.a
public static HashSet<int> _assemblyHashes = new HashSet<int>();

// aq9.az
public void StoreLoadedAssemblies(EventData eventData) {
    foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) {
        try {
            var fileStream = new FileStream(assembly.Location, FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
            var binaryReader = new BinaryReader(fileStream);
            
            var assemblyLength = binaryReader.BaseStream.Length;
            var assemblyBytes = binaryReader.ReadBytes(assemblyLength);
            var assemblyHash = Hash(assemblyBytes);
            
            binaryReader.Close();
            
            _assemblyHashes.Add(assemblyHash);
        }
        catch (Exception) {
            _assemblyHashes.Add(-1);
        }
    }
}

CODE:
// ara.a
public static int Hash(byte[] bytes) {
    var hash = -0x7EE3623B;

    foreach (var @byte in bytes) {
        hash ^= @byte;
        hash *= 0x01000193;
    }

    hash += hash << 13;
    hash ^= hash >> 07;
    hash += hash << 03;
    hash ^= hash >> 17;
    hash += hash << 05;

    return hash;
}

Thanks goes to Jadd, for this informative guide and code.

Hopefully this code isn’t meaningless to you, and you can use it to better your own game hacks, with this guide to Albion Online Cheat Detection methods. If you need a break, you can check out this video: Are your base are belong to us.

Page Views: 60

Leave a Reply

Your email address will not be published. Required fields are marked *

css.php
X

Forgot Password?

Join Us