- пол
- M
- Устройство
- Realme GT Master Edition — Android 13
- Страна
- Бангладеш
Привет всем . Надеюсь, у всех все в порядке. Сегодня я делаю этот урок в соответствии с @DDeveloperЗапрос. В этом уроке я покажу вам, как использовать базовые хуки.
Давайте начнем ....
Допустим, мы собираемся перехватить функцию get_Coins.
Прежде всего нам нужно скопировать исходный экземпляр этой функции.
Далее нам нужно заставить нашу функцию заменить эту старую функцию в игре после перехвата.
Теперь мы можем изменить функцию по своему желанию. Но в большинстве случаев мы просто возвращаем значение. Давайте сделаем это для этого урока.
Сначала нам нужно проверить правильность этой функции во время выполнения. Для этого мы можем просто использовать оператор «if».
Теперь Здесь мы можем, если экземпляр действителен, мы можем просто вернуть наше значение. (Знания о типах данных немного помогут).
Но когда он недействителен (и в некоторых других случаях), мы должны вернуть тот исходный экземпляр, который мы скопировали.
Теперь код должен выглядеть так.
Теперь, если вы используете меню Mod, вы можете просто использовать здесь логический переключатель.
На последнем крючке вы смещаете ветку взлома (LGL Menu) с помощью MSHook или A64InlineHook.
Для других возвращаемых типов просто измените тип данных ваших функций ловушки. Нравиться ...
Это все на сегодня. Надеюсь, этот урок вам немного поможет.
Давайте начнем ....
Допустим, мы собираемся перехватить функцию get_Coins.
Прежде всего нам нужно скопировать исходный экземпляр этой функции.
C ++:
int (*org_getCoins)(void *instance);
Далее нам нужно заставить нашу функцию заменить эту старую функцию в игре после перехвата.
C ++:
int getCoins(void *instance) {
}
Теперь мы можем изменить функцию по своему желанию. Но в большинстве случаев мы просто возвращаем значение. Давайте сделаем это для этого урока.
Сначала нам нужно проверить правильность этой функции во время выполнения. Для этого мы можем просто использовать оператор «if».
C ++:
int getCoins(void *instance) {
if (instance != NULL) {
}
}
Теперь Здесь мы можем, если экземпляр действителен, мы можем просто вернуть наше значение. (Знания о типах данных немного помогут).
C ++:
int getCoins(void *instance) {
if (instance != NULL) {
return 99999;
}
}
Но когда он недействителен (и в некоторых других случаях), мы должны вернуть тот исходный экземпляр, который мы скопировали.
C ++:
int getCoins(void *instance) {
if (instance != NULL) {
return 99999;
}
return org_getCoins(instance);
}
Теперь код должен выглядеть так.
C ++:
int (*org_getCoins)(void *instance);
int getCoins(void *instance) {
if (instance != NULL) {
return 99999;
}
return org_getCoins(instance);
}
Теперь, если вы используете меню Mod, вы можете просто использовать здесь логический переключатель.
C ++:
int getCoins(void *instance) {
if (instance != NULL) {
if (feature1){ //your switch boolean
return 99999;
}
}
return org_getCoins(instance);
}
На последнем крючке вы смещаете ветку взлома (LGL Menu) с помощью MSHook или A64InlineHook.
C ++:
MSHookFunction((void *) getAbsoluteAddress(targetLibName, string2Offset(OBFUSCATE_KEY("0x123456", 'a'))), (void *) getCoins, (void **) &org_getCoins);
Для других возвращаемых типов просто измените тип данных ваших функций ловушки. Нравиться ...
C ++:
float (*org_getCoins)(void *instance);
float getCoins(void *instance) {
if (instance != NULL) {
return 99999.0f;
}
return org_getCoins(instance);
}
C ++:
bool (*org_isUnlocked)(void *instance);
bool isUnlocked(void *instance) {
if (instance != NULL) {
return true;
}
return org_isUnlocked(instance);
}
Это все на сегодня. Надеюсь, этот урок вам немного поможет.
Вложения
-
2.4 KB Просмотров: 142
-
2.5 KB Просмотров: 144
-
2.5 KB Просмотров: 116