zoukankan      html  css  js  c++  java
  • HearthBuddy的class276以及class247

    使用de4dot-cex反编译原版的hearthbuddy得到的

    链接: https://pan.baidu.com/s/1hT79LpIjbyvODsjnkSe_5A 提取码: iemx 

    class276里面的指针是通过class247得到的

    internal Class276(ExternalProcessMemory memory)
    {
        this.externalProcessMemory_0 = memory;
        this.intptr_0 = this.method_18("mono.dll");
        this.intptr_31 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_9;
        this.intptr_28 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_17;
        this.intptr_13 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_22;
        this.intptr_16 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_16;
        this.intptr_6 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_7;
        this.intptr_1 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_15;
        this.intptr_15 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_24;
        this.intptr_14 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_21;
        this.intptr_7 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_5;
        this.intptr_19 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_10;
        this.intptr_29 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_35;
        this.intptr_17 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_1;
        this.intptr_25 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_30;
        this.intptr_24 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_25;
        this.intptr_32 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_31;
        this.intptr_34 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_28;
        this.intptr_36 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_0;
        this.intptr_35 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_29;
        this.intptr_23 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_34;
        this.intptr_33 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_33;
        this.intptr_27 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_32;
        this.intptr_12 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_4;
        this.intptr_10 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_3;
        this.intptr_4 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_6;
        this.intptr_8 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_11;
        this.intptr_21 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_23;
        this.intptr_18 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_8;
        this.intptr_5 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_2;
        this.intptr_30 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_19;
        this.intptr_2 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_12;
        this.intptr_9 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_18;
        this.intptr_3 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_14;
        this.intptr_26 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_27;
        this.intptr_22 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_26;
        this.intptr_20 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_13;
        this.intptr_11 = this.intptr_0 + TritonHs.class247_0.struct106_0.int_20;
        this.method_15<bool>("boolean");
        this.method_15<object>("object");
        this.method_15<sbyte>("sbyte");
        this.method_15<byte>("byte");
        this.method_15<short>("int16");
        this.method_15<ushort>("uint16");
        this.method_15<int>("int32");
        this.method_15<uint>("uint32");
        this.method_15<long>("int64");
        this.method_15<ulong>("uint64");
        this.method_15<float>("single");
        this.method_15<double>("double");
        this.method_15<char>("char");
        this.method_15<string>("string");
        this.method_15<Enum>("enum");
    }

    赋值处理

    try
                    {
                        TritonHs.class247_0 = new Class247();
                        TritonHs.class247_0.method_1(array, TritonHs.Memory.ImageBase);
                    }
                    catch (Exception)
                    {
                        string_0 = string.Format("The data required to run the bot is corrupted. Please make sure your key is still valid at the Buddy Auth Portal: http://buddyauth.com/User/Keys {0}{0}For any further assistance, please contact support: https://bosslandgmbh.zendesk.com/home", Environment.NewLine);
                        return false;
                    }
                    TritonHs.class276_0 = new Class276(TritonHs.externalProcessMemory_0);
                    using (TritonHs.AcquireFrame())
                    {
                        TritonHs.intptr_1 = TritonHs.Class276_0.method_2();
                    }

    直接new一个class247的实例对象,然后调用method_1。传递的参数是array和TritonHs.Memory.ImageBase

    public static ExternalProcessMemory Memory
            {
                get
                {
                    return TritonHs.externalProcessMemory_0;
                }
            }

    array参数的获取,delegate6_0貌似是从服务器获取地址数据

    byte[] array = delegate6_0(TritonHs.String_0, out string_0);
                if (array == null)
                {
                    if (string.IsNullOrEmpty(string_0))
                    {
                        string_0 = string.Format("The data required to run the bot was not successfully obtained. Please make sure your key is still valid at the Buddy Auth Portal: http://buddyauth.com/User/Keys {0}{0}For any further assistance, please contact support: https://bosslandgmbh.zendesk.com/home", Environment.NewLine);
                    }
                    return false;
                }

    class247里面的method1方法

    // ns25.Class247
    // Token: 0x06001990 RID: 6544 RVA: 0x000DAF40 File Offset: 0x000D9140
    internal unsafe void method_1(byte[] byte_0, IntPtr intptr_1)
    {
        this.intptr_0 = new IntPtr[byte_0.Length / 4];
        byte b = 1;
        byte* ptr;
        if (byte_0 != null && byte_0.Length != 0)
        {
            fixed (byte* ptr = &byte_0[0])
            {
            }
        }
        else
        {
            ptr = null;
        }
        uint* ptr2 = (uint*)ptr;
        for (int i = 0; i < this.intptr_0.Length; i++)
        {
            uint uint_ = ptr2[i];
            IntPtr intPtr = new IntPtr((long)((ulong)Class247.smethod_0(uint_, b)));
            this.intptr_0[i] = intPtr;
            b = ((b + 1) ?? 0);
        }
        ptr = null;
        this.method_0(intptr_1);
    }

    method0方法在对struct106_0 进行赋值

    if (ptr4 != null)
        {
            this.struct106_0 = *(Struct106*)ptr4;
        }
    // ns25.Class247
    // Token: 0x0600198F RID: 6543 RVA: 0x000DAE44 File Offset: 0x000D9044
    internal unsafe void method_0(IntPtr intptr_1)
    {
        IntPtr[] array = new IntPtr[this.intptr_0.Length];
        this.intptr_0.CopyTo(array, 0);
        ArraySegment<IntPtr> arraySegment_;
        ArraySegment<IntPtr> arraySegment_2;
        this.method_4(array, out arraySegment_, out arraySegment_2);
        for (int i = arraySegment_.Offset; i < arraySegment_.Count; i++)
        {
            if (arraySegment_.Array[i].ToInt32() > 4194304)
            {
                array[i] = array[i] - 4194304 + intptr_1.ToInt32();
            }
        }
        IntPtr[] array2;
        IntPtr* ptr;
        if ((array2 = this.method_2<IntPtr>(arraySegment_)) != null && array2.Length != 0)
        {
            fixed (IntPtr* ptr = &array2[0])
            {
            }
        }
        else
        {
            ptr = null;
        }
        byte* ptr2 = (byte*)ptr;
        if (ptr2 != null)
        {
            this.struct105_0 = *(Struct105*)ptr2;
        }
        ptr = null;
        IntPtr* ptr3;
        if ((array2 = this.method_2<IntPtr>(arraySegment_2)) != null && array2.Length != 0)
        {
            fixed (IntPtr* ptr3 = &array2[0])
            {
            }
        }
        else
        {
            ptr3 = null;
        }
        byte* ptr4 = (byte*)ptr3;
        if (ptr4 != null)
        {
            this.struct106_0 = *(Struct106*)ptr4;
        }
        ptr3 = null;
    }

    所以之前的工作原理,是从服务器获取mono的偏移地址,然后进行后续操作的。

  • 相关阅读:
    linux每日命令(31):tar命令
    Django——model基础
    Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)
    Django
    linux每日命令(30):Linux 用户及用户组相关文件、命令详解
    linux每日命令(29):chown命令
    20170430深圳Meetup
    静态库嵌套引用问题
    JD-Store购物网站复盘——20170312
    20170305Meetup Git、heroku drop db
  • 原文地址:https://www.cnblogs.com/chucklu/p/11660332.html
Copyright © 2011-2022 走看看