[PS3] RPC.Call by string (1.26)

ChuteAa ©

Chacun sa croix !!
Premium
Inscription
3 Décembre 2013
Messages
1 890
Réactions
1 204
Points
19 248
RGCoins
85
Salut :RG:
je vous partage un RPC qui vous permettra d’appeler les natives par "string"

le + de cette méthode est : aucune adresse a mettre a jour
le - de cette méthode est : ralentissement de la fonction a appeler

Le codage est fonctionnelle mais , peut ne pas être adapter a votre codage , a vous de résoudre les soucies si vous en rencontrer


Code:
public static CCAPI PS3 = new CCAPI();

public static int Call(string func_address, params object[] parameters)
        {
            int length = parameters.Length;
            int index = 0;
            uint num3 = 0;
            uint num4 = 0;
            uint num5 = 0;
            uint num6 = 0;
            while (index < length)
            {
                if (parameters[index] is int)
                {
                    PS3.Extension.WriteInt32(0x10020000 + (num3 * 4), (int)parameters[index]);
                    num3++;
                }
                else if (parameters[index] is uint)
                {
                    PS3.Extension.WriteUInt32(0x10020000 + (num3 * 4), (uint)parameters[index]);
                    num3++;
                }
                else
                {
                    uint num7;
                    if (parameters[index] is string)
                    {
                        num7 = 0x10022000 + (num4 * 0x400);
                        PS3.Extension.WriteString(num7, Convert.ToString(parameters[index]));
                        PS3.Extension.WriteUInt32(0x10020000 + (num3 * 4), num7);
                        num3++;
                        num4++;
                    }
                    else if (parameters[index] is float)
                    {
                        WriteSingle(0x10020024 + (num5 * 4), (float)parameters[index]);
                        num5++;
                    }
                    else if (parameters[index] is float[])
                    {
                        float[] input = (float[])parameters[index];
                        num7 = 0x10021000 + (num6 * 4);
                        WriteSingle(num7, input);
                        PS3.Extension.WriteUInt32(0x10020000 + (num3 * 4), num7);
                        num3++;
                        num6 += (uint)input.Length;
                    }
                }
                index++;
            }

            PS3.Extension.WriteUInt32(0x1002004C, findSub(Convert.ToString(func_address)));

            while (PS3.Extension.ReadUInt32(0x1002004C) != 0) ;

            return PS3.Extension.ReadInt32(0x10020050);
        }

        public static uint CreateHash(string Native)
        {
            uint num = 0;
            byte[] bytes = Encoding.UTF8.GetBytes(Native);
            for (int i = 0; i < bytes.Length; i++)
            {
                num += bytes[i];
                num += num << 10;
                num ^= num >> 6;
            }
            num += num << 3;
            num ^= num >> 11;
            return (num + (num << 15));
        }

        public static uint findSub(string NativeString)
        {
            uint NativeHash = CreateHash(NativeString.ToLower());
            short[] bl_Dictionary = { 0x4AE5, 0x4AE4, 0x4AEB, 0x4AE9, 0x4AE6, 0x4AA8, 0x4AEA, 0x4AE8, 0x4AE3, 0x4AE1, 0x4AE2, 0x4AE7, 0x4AB9, 0x4AB8, 0x4AB7, 0x4AB6, 0x4AB5, 0x4AB4, 0x4AB3, 0x4AB2, 0x4AB1 };
            uint Hash = NativeHash & 0xff;
            uint Struct = PS3.Extension.ReadUInt32(0x1E6FF38 + (Hash * 4));
            while (Struct != 0)
            {
                int NativeCount = PS3.Extension.ReadInt32(Struct + 0x20); 
                for (uint i = 0; i < NativeCount; i++)
                {
                    if (PS3.Extension.ReadUInt32((Struct + 0x24) + (i * 4)) == NativeHash)
                    {
                        uint Native = PS3.Extension.ReadUInt32(PS3.Extension.ReadUInt32((Struct + 4) + (i * 4)));
                        for (uint e = 0; e < 100; ++e)
                        {
                            short NativeLocation = PS3.Extension.ReadInt16(Native + (e * 0x4));
                            for (int u = 0; u < bl_Dictionary.Length; ++u)
                            {
                                if (bl_Dictionary[u] == NativeLocation)
                                {
                                    byte[] call = PS3.GetBytes(Native + (e * 0x4), 4);
                                    Array.Reverse(call);
                                    return ((uint)(BitConverter.ToUInt32(call, 0) - 0x48000001)) + Native + (e * 0x4) - 0x4000000;
                                }
                            }
                        }
                    }
                }
                Struct = PS3.Extension.ReadUInt32(Struct);
            }
            return 0xFF;
        }
 
Salut :RG:
je vous partage un RPC qui vous permettra d’appeler les natives par "string"

le + de cette méthode est : aucune adresse a mettre a jour
le - de cette méthode est : ralentissement de la fonction a appeler

Le codage est fonctionnelle mais , peut ne pas être adapter a votre codage , a vous de résoudre les soucies si vous en rencontrer


Code:
public static CCAPI PS3 = new CCAPI();

public static int Call(string func_address, params object[] parameters)
        {
            int length = parameters.Length;
            int index = 0;
            uint num3 = 0;
            uint num4 = 0;
            uint num5 = 0;
            uint num6 = 0;
            while (index < length)
            {
                if (parameters[index] is int)
                {
                    PS3.Extension.WriteInt32(0x10020000 + (num3 * 4), (int)parameters[index]);
                    num3++;
                }
                else if (parameters[index] is uint)
                {
                    PS3.Extension.WriteUInt32(0x10020000 + (num3 * 4), (uint)parameters[index]);
                    num3++;
                }
                else
                {
                    uint num7;
                    if (parameters[index] is string)
                    {
                        num7 = 0x10022000 + (num4 * 0x400);
                        PS3.Extension.WriteString(num7, Convert.ToString(parameters[index]));
                        PS3.Extension.WriteUInt32(0x10020000 + (num3 * 4), num7);
                        num3++;
                        num4++;
                    }
                    else if (parameters[index] is float)
                    {
                        WriteSingle(0x10020024 + (num5 * 4), (float)parameters[index]);
                        num5++;
                    }
                    else if (parameters[index] is float[])
                    {
                        float[] input = (float[])parameters[index];
                        num7 = 0x10021000 + (num6 * 4);
                        WriteSingle(num7, input);
                        PS3.Extension.WriteUInt32(0x10020000 + (num3 * 4), num7);
                        num3++;
                        num6 += (uint)input.Length;
                    }
                }
                index++;
            }

            PS3.Extension.WriteUInt32(0x1002004C, findSub(Convert.ToString(func_address)));

            while (PS3.Extension.ReadUInt32(0x1002004C) != 0) ;

            return PS3.Extension.ReadInt32(0x10020050);
        }

        public static uint CreateHash(string Native)
        {
            uint num = 0;
            byte[] bytes = Encoding.UTF8.GetBytes(Native);
            for (int i = 0; i < bytes.Length; i++)
            {
                num += bytes[i];
                num += num << 10;
                num ^= num >> 6;
            }
            num += num << 3;
            num ^= num >> 11;
            return (num + (num << 15));
        }

        public static uint findSub(string NativeString)
        {
            uint NativeHash = CreateHash(NativeString.ToLower());
            short[] bl_Dictionary = { 0x4AE5, 0x4AE4, 0x4AEB, 0x4AE9, 0x4AE6, 0x4AA8, 0x4AEA, 0x4AE8, 0x4AE3, 0x4AE1, 0x4AE2, 0x4AE7, 0x4AB9, 0x4AB8, 0x4AB7, 0x4AB6, 0x4AB5, 0x4AB4, 0x4AB3, 0x4AB2, 0x4AB1 };
            uint Hash = NativeHash & 0xff;
            uint Struct = PS3.Extension.ReadUInt32(0x1E6FF38 + (Hash * 4));
            while (Struct != 0)
            {
                int NativeCount = PS3.Extension.ReadInt32(Struct + 0x20);
                for (uint i = 0; i < NativeCount; i++)
                {
                    if (PS3.Extension.ReadUInt32((Struct + 0x24) + (i * 4)) == NativeHash)
                    {
                        uint Native = PS3.Extension.ReadUInt32(PS3.Extension.ReadUInt32((Struct + 4) + (i * 4)));
                        for (uint e = 0; e < 100; ++e)
                        {
                            short NativeLocation = PS3.Extension.ReadInt16(Native + (e * 0x4));
                            for (int u = 0; u < bl_Dictionary.Length; ++u)
                            {
                                if (bl_Dictionary[u] == NativeLocation)
                                {
                                    byte[] call = PS3.GetBytes(Native + (e * 0x4), 4);
                                    Array.Reverse(call);
                                    return ((uint)(BitConverter.ToUInt32(call, 0) - 0x48000001)) + Native + (e * 0x4) - 0x4000000;
                                }
                            }
                        }
                    }
                }
                Struct = PS3.Extension.ReadUInt32(Struct);
            }
            return 0xFF;
        }
a merci enfin je les trouver le rpc de gta en 1.26 !!
 
Retour
Haut