ЯevDex
4.27K subscribers
119 photos
59 videos
122 files
156 links
My GitHub - https://github.com/ispointer
Telegram Bot - @RevDexbot
Telegram Chat: @RevDexChat
RevDex Team Identity -- > Reverse Engineer & Indie Developer
Download Telegram
Play Integrity Attestation Token Bypass is Back Again ( Non Root static mod )

classic INTEGRITY_SERVICE
express INTEGRITY_SERVICE

An app integrity token solver package is now ready for release 🐱
The website is currently in the final development stage and will be available soon 🪟

the service works on a credit based model similar to AI subscription services you can purchase token credits based on your needs.
The pricing list will be announced on the website very soon
Please open Telegram to view this post
VIEW IN TELEGRAM
114👀2
Magic Eraser_3.2.16_ Integrity token killed #2.apk
32.4 MB
Magic Eraser_3.2.16_ Integrity token killed.apk

Make sure Install Plugging - https://t.me/RevDex/631

Non Root only don't try in rooted device be careful
3👀96
Media is too big
VIEW IN TELEGRAM
Google Integrity Breakdown

Thanks for staying with the RevDex Security Researcher community I guess two apps are enough to understand

Play integrity token Bypass

#1
https://t.me/RevDex/632

#2
https://t.me/RevDex/633

F**k you google 🫵👉👌

God 🔌 Plugging - https://t.me/RevDex/631
620❤‍🔥5😱3😁1🤯1
Google Login (Break Bug 🪲)

I recently bypassed the Google Login system in a modded app the bypass itself isn't very difficult but analyzing the new implementation was much more challenging

I'm planning to add this feature to my Play Integrity Service allowing Google account signin even on supported modded apps
👌316🤯5❤‍🔥3
Legend only understand this image 😂👍
😁103🤓2
bool bAutoSlice = false;
void *playerBladeOwner = NULL;
void (*Fruit_Slice)(void *instance,
int bladeId,
void *bladeOwner,
float bladePosX,
float bladePosY,
float sliceDirX,
float sliceDirY,
float sliceSpeed,
bool triggerModifers,
bool countTowardsAchievement,
bool sliceDiamondEnabled,
bool juiceEnabled,
bool splatsEnabled);

void (*old_Fruit_Update)(void *instance);
bool (*Fruit_get_IsBomb)(void *instance);

void* (*Blade_get_Owner)(void *instance);
void (*old_Blade_Update)(void *instance);

void hook_Blade_Update(void *instance)
{
if (instance != NULL)
{
if (Blade_get_Owner != NULL)
{
playerBladeOwner = Blade_get_Owner(instance);
}
}
return old_Blade_Update(instance);
}

void hook_Fruit_Update(void *instance)
{
if (instance != NULL && bAutoSlice)
{
if (Fruit_get_IsBomb != NULL && !Fruit_get_IsBomb(instance))
{
float bladePosX = 5.0f;
float bladePosY = 5.0f;

float sliceDirX = 5.0f;
float sliceDirY = 5.0f;
float sliceSpeed = 35.0f;
int targetBladeId = (playerBladeOwner != NULL) ? 0 : 1;

Fruit_Slice(
instance,
targetBladeId,
playerBladeOwner,
bladePosX, bladePosY,
sliceDirX, sliceDirY,
sliceSpeed,
true,
true,
true,
true,
true
);
}
}
return old_Fruit_Update(instance);
}


Fruit_Slice = (void (*)(void *, int, void *,
float, float, float, float, float,
bool, bool, bool, bool, bool))getAbsoluteAddress(targetLibName, 0x1C74C64);
Fruit_get_IsBomb = (bool (*)(void *))getAbsoluteAddress(targetLibName, 0x1C72234);
Blade_get_Owner = (void* (*)(void *))getAbsoluteAddress(targetLibName, 0x20748D8);
HOOK_LIB("libil2cpp.so", "0x1C730D8", hook_Fruit_Update, old_Fruit_Update);
HOOK_LIB("libil2cpp.so", "0x2075418", hook_Blade_Update, old_Blade_Update);


OBFUSCATE("1_Toggle_Auto Slice Fruits")



case 1:
bAutoSlice = boolean;
break;


Dev - @aantik_mods

Fruit Ninja 3.96.5 ( Auto Play )
🥰114👌1
This media is not supported in your browser
VIEW IN TELEGRAM
Old game modding experience 😂👍

Hook - https://t.me/RevDex/640
🤯94❤‍🔥2😁2
struct Vector3 {
float x, y, z;
};

bool bAutoSlice = false;
void *playerBladeOwner = NULL;
void *(*Fruit_Slice)(void *instance, int bladeId, int bladeOwner, float bladePosX, float bladePosY, float sliceDirX, float sliceDirY, float sliceSpeed, bool triggerModifers, bool countTowardsAchievement, bool sliceDiamondEnabled, bool juiceEnabled, bool splatsEnabled);
void (*old_Fruit_Update)(void *instance);
bool (*Fruit_get_IsBomb)(void *instance);
bool (*Fruit_get_IsMenuFruit)(void *instance);
bool (*Fruit_get_IsSliced)(void *instance);
bool (*Fruit_get_IsSliceable)(void *instance);
void (*old_Blade_Update)(void *instance);
int (*Blade_get_Id)(void *instance);
int (*Blade_get_Owner)(void *instance);
void *(*Blade_get_BladeSlicer)(void *instance);
void (*BladeSlicer_AddToCurrentCombo)(void *instance, void *sliceEvent, void *fruit);
void *(*Component_get_transform)(void *instance);
Vector3 (*Transform_get_position)(void *instance);
void *(*BladeManager_get_Instance)();
void *(*BladeManager_get_PlayerBlade)(void *instance);
void *(*ScoreCard_get_Instance)();
void (*ScoreCard_ModifyScore)(void *instance, int player, int delta);

/**
*
*
* @code with RevDex antik mods cxx
* @param instance
*/

void hook_Blade_Update(void *instance) {
if (instance != NULL && Blade_get_Owner != NULL) {
int owner = Blade_get_Owner(instance);
if (owner == 0) {
if (playerBladeOwner != instance) {
LOGI(OBFUSCATE("Player Blade Captured: %p"), instance);
playerBladeOwner = instance;
}
}
}
old_Blade_Update(instance);
}

void hook_Fruit_Update(void *instance)
{
if (instance != NULL && bAutoSlice)
{
if (Fruit_get_IsBomb && Fruit_get_IsBomb(instance)) return old_Fruit_Update(instance);
if (Fruit_get_IsMenuFruit && Fruit_get_IsMenuFruit(instance)) return old_Fruit_Update(instance);
if (Fruit_get_IsSliced && Fruit_get_IsSliced(instance)) return old_Fruit_Update(instance);
if (Fruit_get_IsSliceable && !Fruit_get_IsSliceable(instance)) return old_Fruit_Update(instance);

int bladeId = 0;
int bladeOwner = 0;
float posX = 0, posY = 0;

void *playerBlade = playerBladeOwner;
if (playerBlade == NULL && BladeManager_get_Instance && BladeManager_get_PlayerBlade) {
void *bm = BladeManager_get_Instance();
if (bm) {
playerBlade = BladeManager_get_PlayerBlade(bm);
if (playerBlade) {
LOGI(OBFUSCATE("Blade found via BladeManager: %p"), playerBlade);
}
}
}

if (playerBlade != NULL) {
if (Blade_get_Id) bladeId = Blade_get_Id(playerBlade);
if (Blade_get_Owner) bladeOwner = Blade_get_Owner(playerBlade);
}

if (Component_get_transform && Transform_get_position) {
void *transform = Component_get_transform(instance);
if (transform) {
Vector3 pos = Transform_get_position(transform);
posX = pos.x;
posY = pos.y;
}
}

void *sliceEvent = Fruit_Slice(
instance,
bladeId,
bladeOwner,
posX, posY,
5.0f, 5.0f,
35.0f,
true,
true,
true,
true,
true
);

if (sliceEvent) {
LOGI(OBFUSCATE("Fruit pointer --> %p"), sliceEvent, bladeOwner);
int points = *(int*)((uintptr_t)sliceEvent + 0x7C); // m_slicePoints offset
void *sc = ScoreCard_get_Instance();
if (sc && ScoreCard_ModifyScore) {
ScoreCard_ModifyScore(sc, 0, points > 0 ? points : 1);
LOGI(OBFUSCATE("m_slicePoints --> %d points"), points > 0 ? points : 1);
}

if (playerBlade && Blade_get_BladeSlicer && BladeSlicer_AddToCurrentCombo) {
void *slicer = Blade_get_BladeSlicer(playerBlade);
if (slicer) {
BladeSlicer_AddToCurrentCombo(slicer, sliceEvent, instance);
/**
*
* done add points same like normal environment
*
*/
LOGI(OBFUSCATE("_"));
}
}
}
}
return old_Fruit_Update(instance);
}




Fruit_Slice = (void *(*)(void *, int, int, float, float, float, float, float, bool, bool, bool, bool, bool))getAbsoluteAddress(targetLibName, 0x1C74C64);
Fruit_get_IsBomb = (bool (*)(void *))getAbsoluteAddress(targetLibName, 0x1C72234);
Fruit_get_IsMenuFruit = (bool (*)(void *))getAbsoluteAddress(targetLibName, 0x1C72220);
Fruit_get_IsSliced = (bool (*)(void *))getAbsoluteAddress(targetLibName, 0x1C722F8);
Fruit_get_IsSliceable = (bool (*)(void *))getAbsoluteAddress(targetLibName, 0x1C7230C);
Blade_get_Id = (int (*)(void *))getAbsoluteAddress(targetLibName, 0x20748E8);
Blade_get_Owner = (int (*)(void *))getAbsoluteAddress(targetLibName, 0x20748D8);
Blade_get_BladeSlicer = (void *(*)(void *))getAbsoluteAddress(targetLibName, 0x20748D0);
BladeSlicer_AddToCurrentCombo = (void (*)(void *, void *, void *))getAbsoluteAddress(targetLibName, 0x1BEB09C);
Component_get_transform = (void *(*)(void *))getAbsoluteAddress(targetLibName, 0x3C67160);
Transform_get_position = (Vector3 (*)(void *))getAbsoluteAddress(targetLibName, 0x3C744DC);
BladeManager_get_Instance = (void *(*)())getAbsoluteAddress(targetLibName, 0x1BE1F04);
BladeManager_get_PlayerBlade = (void *(*)(void *))getAbsoluteAddress(targetLibName, 0x1BE1E7C);
ScoreCard_get_Instance = (void *(*)())getAbsoluteAddress(targetLibName, 0x1E6E018);
ScoreCard_ModifyScore = (void (*)(void *, int, int))getAbsoluteAddress(targetLibName, 0x1E6E48C);

HOOK_LIB("libil2cpp.so", "0x1C730D8", hook_Fruit_Update, old_Fruit_Update);
HOOK_LIB("libil2cpp.so", "0x2075418", hook_Blade_Update, old_Blade_Update);


OBFUSCATE("1_Toggle_Auto Play")


case 1:
bAutoSlice = boolean;
break;

Fruit Ninja 3.96.5 ( Auto Play )
7
Fruit Ninja_3.96.5_( Auto Play ).apk
340.1 MB
6👀3😁2
Antik
Legend only understand this image 😂👍
😶‍🌫️😶‍🌫️ mf google
https://t.me/RevDex/638
😁62🤓1
dex2c pro 3.5.apk
31.5 MB
Dex2C Pro v3.5 (Offline Support)


New Added :
# fixed null byte

# background task in background ally's isolated process alive libArt.so & libAndroid_runtime.so hook thanks for LSPlant

# T(N) = N / 2 »» O(N) Shifting ( Fix )

Send bug 🪲 - @aantik_mods
23👌4🥰2🤓2❤‍🔥1
dex2c 专业版 CN.apk
35 MB
⚠️ 中国版没有语言切换选项 因此不适合全球用户 另外 中国版新增了两个主题包 并使用了不同的 NDK 我还加入了中国代理 因此下载速度更快 祝各位中国用户使用愉快
18