Salut 
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
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;
}