How to Connect Weapon Class to Player Class Complete Guide
Weapon Class Explained
The Weapon class handles gun bullet count
class Weapon {
private:
int ammo; // Hidden variable
public:
// Setter method to change ammo
void setAmmo(int value) {
ammo = value;
}
// Getter method to read ammo
int getAmmo() const {
return ammo;
}
};
Player Class Connection
Player class contains weapon directly
class Player {
private:
Weapon weapon; // Player OWNS this weapon 0x2C
public:
// Returns weapon's address
Weapon* getWeapon() {
return &weapon;
}
};
Enemy Class Difference
class Enemy {
private:
Weapon* weapon; // Enemy has pointer to weapon 0x2C
public:
Weapon* getWeapon() const {
return weapon;
}
};
Hook Explain
void saferHookedUpdate(void* instance) {
// Check if this is Player (not Enemy)
if (IsPlayerInstance(instance)) {
// Extract weapon from memory offset 0x2C
void* weaponPtr = *(void**)((uint64_t)instance + 0x2C);
// If weapon exists, set ammo to 10000
if (weaponPtr != NULL) {
originalSetAmmo(weaponPtr, 10000);
}
}
// Call original game function
originalUpdate(instance);
}
How It Works In Game
Game updates all characters update each frame CPM Our hook intercepts runs before original update function Checks instance type identifies player vs enemy Sets unlimited ammo only for players 10000 bullets Game continues resumes normal operation
https://news.1rj.ru/str/RevDex/167
https://news.1rj.ru/str/RevDex/168
https://news.1rj.ru/str/RevDex/169
// cocos2d engine 🚂 example here
Guide - @aantik_mods
Some people still don't know about the field Offset I explain 😂👏 See
Example '*
Your update offset is 0x7788.
Your field offset
float get_speed is 0x5
That means the full field address is 0x7788 + 0x5
For example, in hex: 00 66 55 66 C7 88
here C7 is the pointer of your field
Weapon Class Explained
The Weapon class handles gun bullet count
class Weapon {
private:
int ammo; // Hidden variable
public:
// Setter method to change ammo
void setAmmo(int value) {
ammo = value;
}
// Getter method to read ammo
int getAmmo() const {
return ammo;
}
};
Player Class Connection
Player class contains weapon directly
class Player {
private:
Weapon weapon; // Player OWNS this weapon 0x2C
public:
// Returns weapon's address
Weapon* getWeapon() {
return &weapon;
}
};
Enemy Class Difference
class Enemy {
private:
Weapon* weapon; // Enemy has pointer to weapon 0x2C
public:
Weapon* getWeapon() const {
return weapon;
}
};
Hook Explain
void saferHookedUpdate(void* instance) {
// Check if this is Player (not Enemy)
if (IsPlayerInstance(instance)) {
// Extract weapon from memory offset 0x2C
void* weaponPtr = *(void**)((uint64_t)instance + 0x2C);
// If weapon exists, set ammo to 10000
if (weaponPtr != NULL) {
originalSetAmmo(weaponPtr, 10000);
}
}
// Call original game function
originalUpdate(instance);
}
How It Works In Game
Game updates all characters update each frame CPM Our hook intercepts runs before original update function Checks instance type identifies player vs enemy Sets unlimited ammo only for players 10000 bullets Game continues resumes normal operation
https://news.1rj.ru/str/RevDex/167
https://news.1rj.ru/str/RevDex/168
https://news.1rj.ru/str/RevDex/169
// SoldierLocalController->updateStep(float, cpVect, cpVect, float);
void (*orig_updateStepP)(void *instance, float f1, Vector2 v1, Vector2 v2, float f2);
void updateStepP(void *instance, float f1, Vector2 v1, Vector2 v2, float f2) {
if (instance != NULL) {
// Class Linking get Object
void* Weapon = *(void**)((uint64_t)instance + 0x1D0);
if (Weapon != NULL) {
if (isZoom > 0) {
*(float *) ((uint64_t) Weapon + 0x1dc) = (float) isZoom;
}
}
}
return orig_updateStepP(instance, f1, v1, v2, f2);
}
// cocos2d engine 🚂 example here
Guide - @aantik_mods
Some people still don't know about the field Offset I explain 😂👏 See
Example '*
Your update offset is 0x7788.
Your field offset
float get_speed is 0x5
That means the full field address is 0x7788 + 0x5
For example, in hex: 00 66 55 66 C7 88
here C7 is the pointer of your field
1❤5👌3
https://github.com/eirv/SimpleIORedirect
发现一个有趣的项目,听说它可以过签360加固,但是只支持安卓14-15,你可以研究一下😁
发现一个有趣的项目,听说它可以过签360加固,但是只支持安卓14-15,你可以研究一下😁
GitHub
GitHub - eirv/SimpleIORedirect: Android IO redirection implementation, using seccomp user notify mechanism / 使用 seccomp unotify…
Android IO redirection implementation, using seccomp user notify mechanism / 使用 seccomp unotify 的 Android 文件重定向实现 - eirv/SimpleIORedirect
Media is too big
VIEW IN TELEGRAM
I’m building HM Manager, but I ran into a big problem.
I added DEX regex searching, but
Last night, I started doing research to figure out how MT Manager performs regex searches so fast, even on large DEX files 😂👏
After continuous work, I finally managed to build my own **custom disassembler and DEX parser in C++ and here’s the result
Dex Parser Faster Than Ever! 😂👏
I added DEX regex searching, but
dexlib2 is sooo slow 🦥😭Last night, I started doing research to figure out how MT Manager performs regex searches so fast, even on large DEX files 😂👏
After continuous work, I finally managed to build my own **custom disassembler and DEX parser in C++ and here’s the result
Dex Parser Faster Than Ever! 😂
Please open Telegram to view this post
VIEW IN TELEGRAM
👌14❤6❤🔥1
ApiKill @aantik_mods.zip
512.3 KB
ApiKill — @aantik_mods
Internal API Request Block
ApiKill is a simple, effective tool to control internal API requests inside an app. With ApiKill you can block annoying online dialogs, unwanted remote checks, or problematic domains while still allowing specific APIs you need
Online dialog sellers are already jealous of me 😁
The main feature doesn’t need a firewall or VPN 😂 My C++ is fire, dialog sellers can’t compete I don’t care💅
Internal API Request Block
ApiKill is a simple, effective tool to control internal API requests inside an app. With ApiKill you can block annoying online dialogs, unwanted remote checks, or problematic domains while still allowing specific APIs you need
Online dialog sellers are already jealous of me 😁
The main feature doesn’t need a firewall or VPN 😂 My C++ is fire, dialog sellers can’t compete I don’t care
Please open Telegram to view this post
VIEW IN TELEGRAM
❤14🤯7🥰2
diff tools.apk
5.3 MB
Lib Diff Tool Lightweight library comparer for modding
A simple and fast tool to compare native libraries and other files when an APK is modded but the DEX isn't changed. Works well with large libraries (1GB+) If you have the original library and a modded one, this tool highlights differences so you can quickly find what was changed.
A simple and fast tool to compare native libraries and other files when an APK is modded but the DEX isn't changed. Works well with large libraries (1GB+) If you have the original library and a modded one, this tool highlights differences so you can quickly find what was changed.
1❤18🤓3
Auto CE 2.0 MOD.apk
21.9 MB
Auto CE 2.0 MOD.apk
No Need Vip Access ( Lifetime 🛡️)
Don't West Money ( Happy Reverse Engineering)
No Need Vip Access ( Lifetime 🛡️)
Don't West Money ( Happy Reverse Engineering)
❤13🤯1😍1
C++ Toast No Need Jni Method.h
6.4 KB
AantikToast – C++ Toast Without Any JNI Methods
AantikToast() is a simple and elegant C++ function that lets you show Android Toast messages directly from native code no extra Java methods, no messy JNI bridges, and no unnecessary boilerplate It works smoothly with just JNIEnv* and a jobject context.
And yeah… some people tried to use this same context to show dialogs 😂
+ Java developer understand this point ---[]
But listen Android has many different types of contexts and this one is ONLY meant for showing Toasts. Don’t try anything else with it
AantikToast() is a simple and elegant C++ function that lets you show Android Toast messages directly from native code no extra Java methods, no messy JNI bridges, and no unnecessary boilerplate It works smoothly with just JNIEnv* and a jobject context.
And yeah… some people tried to use this same context to show dialogs 😂
+ Java developer understand this point ---[]
But listen Android has many different types of contexts and this one is ONLY meant for showing Toasts. Don’t try anything else with it
❤14👀3🤓2
Color.h
1 KB
Color.hColor ColourSky = Color::red();
bool SkyBox = true;
// SkyBix Pointer instance
void (*set_Skybox)(void *instance);
// color Pointer instance
void (*set_Color)(void *instance, Color value);
// Main Pointer instance
void (*old_BackgroundUpdate)(void *instance);
void BackgroundUpdate(void *instance)
{
if (instance != NULL && SkyBox)
{
// Main Pointer instance
void *classMaterial = *(void**)((uint64_t)instance + 0x14);
//public class BackgroundController
// private Material _DepthMaterial; // 0x14
set_Skybox(classMaterial);
if
(classMaterial != NULL)
{
set_Color(classMaterial, Color(ColourSky));
}
//SkyBox = false;
}
return old_BackgroundUpdate(instance);
}
case 1:
SkyBox = boolean;
break;
case 3:
switch (value) {
case 0:
ColourSky = Color::red();
break;
case 1:
ColourSky = Color::green();
break;
case 2:
ColourSky = Color::blue();
break;
case 3:
ColourSky = Color::black();
break;
case 4:
ColourSky = Color::purple();
break;
case 5:
ColourSky = Color::yellow();
break;
case 6:
ColourSky = Color::magenta();
break;
case 7:
ColourSky = Color::grey();
break;
case 8:
ColourSky = Color::white();
break;
default:
ColourSky.setRGBA(0.5f, 0.5f, 0.5f, 1.0f); // Default grey
break;
OBFUSCATE("1_Toggle_Enable Sky Colour"),
OBFUSCATE("3_Spinner_Sky Color_Default,Green,Blue,Black,Purple,Yellow,Magenta,Grey,White"), //3 Case
set_Skybox = (void (*)(void *))getAbsoluteAddress(targetLibName, 0x30BF8B4);
//public sealed class RenderSettings
//public static void set_skybox(Material value) { }
set_Color = (void (*)(void *, Color))getAbsoluteAddress(targetLibName, 0x30C5968);
//public class Material
//public void set_color(Color value) { }
HOOK_LIB("libil2cpp.so", "0xDAFBCC", BackgroundUpdate, old_BackgroundUpdate);
//public class BackgroundController
//private void LateUpdate() { }
subway surfers Sky Color Hook
Dev - @aantik_mods
❤🔥7❤3👌2
package io.flutter.plugin.common;
import io.flutter.plugin.common.l;
public interface l$c {
void onMethodCall(k kVar, l.d dVar);
}
Flutter Modder Only Understand this 😂👍
😍8❤4🥰1