signed __int64 __fastcall sub_10BB6D0(__int64 a1, __int64 a2, __int64 a3, int a4, __int64 a5, __int64 a6, unsigned __int64 a7, unsigned __int64 a8, __int64 a9, __int64 a10, __int64 a11, __int64 a12, __int64 a13, __int64 a14)
{
int v14; // esi
__int64 v15; // rbx
__int64 v16; // r10
unsigned __int64 v17; // rdi
unsigned __int64 v18; // r10
__int64 *v19; // rbx
__int64 v20; // r10
char v21; // sf
char v22; // dh
unsigned __int64 v23; // r8
signed __int64 v24; // r10
signed __int64 result; // rax
bool v26; // cf
__int64 v27; // [rsp+88h] [rbp+20h]

v14 = a4;
v15 = a1;
sub_E9FF30(&a7, &a8, &v27, &a14);
v16 = *(_QWORD *)(v15 + 8i64 * (unsigned int)a14 + 0x110);
v17 = (a7 & *(_QWORD *)(v15 + 8i64 * (unsigned int)a14 + 0x110)) >> v27;
v18 = (a8 & v16) - (((a8 & v16) >> 1) & 0x5555555555555555i64);
v19 = (__int64 )((_QWORD )(v15 + 0x80)
+ 8
* ((unsigned __int8 *)((unsigned int)a14 + v15 + 0x130)
+ (0x101010101010101i64
* (((v18 & 0x3333333333333333i64)
+ ((v18 >> 2) & 0x3333333333333333i64)
+ (((v18 & 0x3333333333333333i64) + ((v18 >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64) >> 0x38)));
a5 = 0x48B2FA2B4651BD52i64;
a6 = 0xA6594D2C281677CDi64;
((void (__fastcall *)(__int64 *, __int64 *))loc_B4B10)(&a6, &a5);
v20 = *v19;
JUMPOUT(v21, (char *)&loc_10BB7ED + 4);
JUMPOUT(!v21, (char *)&loc_10BB7ED + 4);
JUMPOUT(!SETP(v22, 0x31), &unk_10D8F2F);
*(_DWORD )(v17 - 0x74B3C75D) += CFADD(v22, 0xCFu) + 0x44;
v24 = a6 ^ ((unsigned int)v20 | ((unsigned int)v20 | v20 & 0xFFFFFFFF00000000ui64 ^ ((unsigned __int64)(unsigned int)(2 * ROR4((_QWORD *)((char )&dword_3807620 + (v23 >> 0x34)), 3) - v20) << 0x20)) & 0xFFFFFFFF00000000ui64 ^ ((unsigned __int64)(ROR4((_QWORD *)((char *)&dword_3807620 + (v23 & 0xFFF)) >> 0x20, 0xB) ^ (unsigned int)~(_DWORD)v20) << 0x20));
JUMPOUT(v24, 0i64, (char *)&loc_10BB87B + 6);
JUMPOUT(v24 >= 0, (char *)&loc_10BB87B + 6);
result = 0xB79D549Ei64;
v26 = *(_BYTE *)(2i64 * (unsigned int)(v14 + 0x3E8E9907) + 0x6AEF1701) < 0x8Bu;
return result;
}

et voici mon ancienne fonction dans mon code

inline uintptr_t DecryptComponent(uintptr_t parent, uint8_t idx) {
__try {
if (parent) {

unsigned __int64 v1 = parent;
unsigned __int64 v2 = (uintptr_t)1 << (uintptr_t)(idx & 0x3F);
unsigned __int64 v3 = v2 - 1;
unsigned __int64 v4 = idx & 0x3F;
unsigned __int64 v5 = idx / 0x3F;
unsigned __int64 v6 = SDK->RPM<uintptr_t>((v1 + 8 * (uint32_t)v5 + 0x110));
unsigned __int64 v7 = (v2 & SDK->RPM<uintptr_t>((v1 + 8 * (uint32_t)v5 + 0x110))) >> v4;
unsigned __int64 v8 = (v3 & v6) - (((v3 & v6) >> 1) & 0x5555555555555555);
unsigned __int64 v9 = SDK->RPM<uintptr_t>((SDK->RPM<uintptr_t>((v1 + 0x80)) + 8 * (SDK->RPM<uint8_t>(((uint32_t)v5 + v1 + 0x130)) + ((0x101010101010101 * (((v8 & 0x3333333333333333) + ((v8 >> 2) & 0x3333333333333333) + (((v8 & 0x3333333333333333) + ((v8 >> 2) & 0x3333333333333333)) >> 4)) & 0xF0F0F0F0F0F0F0F)) >> 0x38))));
unsigned __int64 Key1 = SDK->GlobalKey1;
unsigned __int64 Key2 = SDK->GlobalKey2;
auto dummy = SDK->RPM<_QWORD>(SDK->dwGameBase + 0x3825080 + (Key1 >> 0x34));
auto dummy2 = SDK->RPM<_QWORD>(SDK->dwGameBase + 0x3825080 + (Key1 & 0xFFF));
unsigned __int64 v10 = (unsigned int)v9 | v9 & 0xFFFFFFFF00000000ui64 ^ ((unsigned __int64)(2 * (unsigned int)v9 - ROL4(dummy, 9)) << 0x20);
unsigned __int64 v11 = (unsigned int)Key2 ^ (unsigned int)v10 | (Key2 ^ ((unsigned int)v10 | v10 & 0xFFFFFFFF00000000ui64 ^ ((unsigned __int64)(unsigned int)(2 * v10 - ROL4(HIDWORD(dummy2), 9)) << 0x20))) & 0xFFFFFFFF00000000ui64 ^ ((unsigned __int64)(2 * ((unsigned int)Key2 ^ (unsigned int)v10) + 0x4DD43052) << 0x20);
unsigned __int64 v12 = -(int)v7 & ((unsigned int)v11 | v11 & 0xFFFFFFFF00000000ui64 ^ ((unsigned __int64)(unsigned int)(2 * ROR4(HIDWORD(dummy), 3) - v11) << 0x20));
return v12;



}
}
__except (EXCEPTION_EXECUTE_HANDLER) {}
return NULL;
}


peu tu maider a mettre a jour mon code sachant que uniquement les adresse et offset on changer et legerment les structure, fait moi une mise a jour du code