Jump to content

2 posts in this topic

Recommended Posts

Posted

Example/semi-doc of the IOS-Il2cppResolver tool made by @batchh. Its not gonna be the best however it is better than nothing. I recommend you use this if you don't understand how to use the tool.

I will update this if I get a better understanding or if more information is passed down to me to add here. Unless it becomes obsolete.

 

Download IOS-Il2cppResolver:

Just so you're aware it is not limited to whatever is inside the AssemblyCSharp.dll. It also includes any and all types that is being used within the game including but not limited to UnityEngine types.

 

Resolving functions from namespaces/classes:

// Get the pointer of the following function from the following Namespace/classe(s)

// Arg1: Namespace/Class path
// Arg2: Method name
// Arg3: Target arguments
// Return: target ptr (in this case 'get_CampType' pointer)
IL2CPP::Class::Utils::GetMethodPointerRVA("GameEngine.BattleSystem.BattleUnitStatus", "get_CampType", 3);
// return -> *function_ptr

// Example of get_CampType
public static void get_CampType(DataCharacter p_DataCharacter, int p_Level = 0, [Optional] Stat p_Stat)
{
	return null;
}

// As you can see we have 3 arguments within the target function.
// IF you do not parse the amount of arguments within 'get_CampType' then it can cause an issue with resolving the function. Even the [optional]'s

For some context. The method pointer is returned allowing you to instantly hook as soon as you call the function and the pointer is returned.

 

Hooking directly after getting target pointer:

// Here we are instantly hooking whatever result is resolved and returned from the GetMethodPointerRVA
HOOK(IL2CPP::Class::Utils::GetMethodPointerRVA("GameEngine.BattleSystem.BattleUnitStatus", "get_CampType", 0), Hget_CampType, old_get_CampType);

// It is recommended you dont do this but instead first get the rva, make sure it is handled then hook it to ensure it doesnt break anything or cause any issues. Remember to parse the argument size where the 0 is. Read above snippet for insight.

Helper.hpp

Going over soon.

Class.hpp

IL2CPP::Class:

Going over soon.

IL2CPP::Class::Utils:

Getting the static field of a class:

int* field = IL2CPP::Class::Utils::GetStaticField("MyClassPath", "myField");
printf(field); // prints the pointer of the field

Setting the static field of a class:

int* cashToSet = 100000;
IL2CPP::Class::Utils::SetStaticField("MyPathToClass", "myField", cashToSet);
// Gets the targeted field then sets the value to it of the targeted pointer in this case 'cashToSet'.

Getting the pointer of a static field of a class:

int* fieldPtr = IL2CPP::Class::Utils::GetFieldOffset("MyPathToClass", "myField");
printf(fieldPtr);
// We resolve the pointer of the field then we print it.

Getting the method pointer of a method:

void* methodPtr = IL2CPP::Class::Utils::GetMethodPointer("MyPathToClass", "MyMethodName"); // resolves the method then returns its pointer
int* intMethodPtr = static_cast<int*>(methodPtr); // We then cast it (I call it a convert) into a pointer 
printf("%p\n", static_cast<void*>(intMethodPtr)); // We then print the resulting pointer after convertion

Getting the RVA of a Method:

uint64_t RVA = IL2CPP::Class::Utils::GetMethodPointerRVA("MyPathToClass", "myMethod",0); // already covered above
printf(RVA); // prints the RVA of the method

Getting the param name from specific method index:

void MyMethod(int param1, int param2); // example
char* paramN = MethodGetParamName("MyMethod", 2); // get param2
printf(paramN); // -> "param2"

Getting the param type from specific method index:

void MyMethod(int param1, int param2); // example
char* paramN = MethodGetParamType("MyMethod", 2); // get param2
printf(paramN); // -> "int/integer" (not sure what the actual output would be but you get the idea)

Getting the class from a specific type:

char* Class = ClassFromType("bool"); // get param2
printf(paramN); // -> myClass

 

  • Like 2

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
  • Create New...

Important Information

We would like to place cookies on your device to help make this website better. The website cannot give you the best user experience without cookies. You can accept or decline our cookies. You may also adjust your cookie settings. Privacy Policy - Guidelines