Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- uintptr_t decrypt_client_info(const Driver& driver)
- {
- const uint64_t mb = driver.base_addr;
- uint64_t rax = mb, rbx = mb, rcx = mb, rdx = mb, rdi = mb, rsi = mb, r8 = mb, r9 = mb, r10 = mb, r11 = mb, r12 = mb, r13 = mb, r14 = mb, r15 = mb;
- r9 = driver.base_addr;
- if(!r9)
- return r9;
- rdx = driver.target_peb; //mov rdx, gs:[rax]
- return r9;
- }
- uintptr_t decrypt_client_base(const Driver& driver, uintptr_t client_info)
- {
- const uint64_t mb = driver.base_addr;
- uint64_t rax = mb, rbx = mb, rcx = mb, rdx = mb, rdi = mb, rsi = mb, r8 = mb, r9 = mb, r10 = mb, r11 = mb, r12 = mb, r13 = mb, r14 = mb, r15 = mb;
- r10 = driver.Read<uintptr_t>(client_info + 0x199798);
- if(!r10)
- return r10;
- r11= ~driver.target_peb; //mov r11, gs:[rax]
- rax = r11; //mov rax, r11
- rax <<= 0x23; //shl rax, 0x23
- rax = _byteswap_uint64(rax); //bswap rax
- rax &= 0xF;
- switch(rax) {
- case 0:
- {
- return r10;
- }
- case 1:
- {
- return r10;
- }
- case 2:
- {
- r9 = driver.Read<uintptr_t>(driver.base_addr + 0xB06412C); //mov r9, [0x00000000087D9C6C]
- rax = 0x43AE441D8481DD04; //mov rax, 0x43AE441D8481DD04
- r10 -= rax; //sub r10, rax
- rax = r10; //mov rax, r10
- rax >>= 0x26; //shr rax, 0x26
- r10 ^= rax; //xor r10, rax
- rax = r10; //mov rax, r10
- rax >>= 0x9; //shr rax, 0x09
- r10 ^= rax; //xor r10, rax
- rax = r10; //mov rax, r10
- rax >>= 0x12; //shr rax, 0x12
- r10 ^= rax; //xor r10, rax
- rcx = r10; //mov rcx, r10
- rcx >>= 0x24; //shr rcx, 0x24
- rcx ^= r10; //xor rcx, r10
- rax = r11; //mov rax, r11
- r10 = driver.base_addr + 0x424950C8; //lea r10, [0x000000003FC0A9BF]
- rax = ~rax; //not rax
- r10 *= rax; //imul r10, rax
- r10 += rcx; //add r10, rcx
- rax = 0x1EB0B3B479EF017; //mov rax, 0x1EB0B3B479EF017
- r10 *= rax; //imul r10, rax
- rax = 0xF4FDCF8C05766D07; //mov rax, 0xF4FDCF8C05766D07
- r10 ^= rax; //xor r10, rax
- rax = r10; //mov rax, r10
- rax >>= 0x17; //shr rax, 0x17
- r10 ^= rax; //xor r10, rax
- rcx = 0; //and rcx, 0xFFFFFFFFC0000000
- rcx = _rotl64(rcx, 0x10); //rol rcx, 0x10
- rax = r10; //mov rax, r10
- rcx ^= r9; //xor rcx, r9
- rax >>= 0x2E; //shr rax, 0x2E
- rcx = ~rcx; //not rcx
- r10 ^= rax; //xor r10, rax
- r10 *= driver.Read<uintptr_t>(rcx + 0x9); //imul r10, [rcx+0x09]
- return r10;
- }
- case 3:
- {
- r9 = driver.Read<uintptr_t>(driver.base_addr + 0xB06412C); //mov r9, [0x00000000087D971A]
- rcx = r11; //mov rcx, r11
- rcx = ~rcx; //not rcx
- rax = driver.base_addr + 0x8952; //lea rax, [0xFFFFFFFFFD77DBB2]
- rax = ~rax; //not rax
- rcx *= rax; //imul rcx, rax
- rax = 0x920D8D54066C3BC8; //mov rax, 0x920D8D54066C3BC8
- r10 ^= rcx; //xor r10, rcx
- r10 ^= rax; //xor r10, rax
- rax = 0x71B6A01168176A5F; //mov rax, 0x71B6A01168176A5F
- r10 *= rax; //imul r10, rax
- rax = 0; //and rax, 0xFFFFFFFFC0000000
- rax = _rotl64(rax, 0x10); //rol rax, 0x10
- rax ^= r9; //xor rax, r9
- rax = ~rax; //not rax
- r10 *= driver.Read<uintptr_t>(rax + 0x9); //imul r10, [rax+0x09]
- rax = r10; //mov rax, r10
- rax >>= 0xB; //shr rax, 0x0B
- r10 ^= rax; //xor r10, rax
- rax = r10; //mov rax, r10
- rax >>= 0x16; //shr rax, 0x16
- r10 ^= rax; //xor r10, rax
- rax = r10; //mov rax, r10
- rax >>= 0x2C; //shr rax, 0x2C
- r10 ^= rax; //xor r10, rax
- rax = 0x28C4EBE07CC779E5; //mov rax, 0x28C4EBE07CC779E5
- r10 ^= rax; //xor r10, rax
- rax = r11; //mov rax, r11
- uintptr_t RSP_0xFFFFFFFFFFFFFF80;
- RSP_0xFFFFFFFFFFFFFF80 = driver.base_addr + 0x1488BAD0; //lea rax, [0x00000000120010B7] : RBP+0xFFFFFFFFFFFFFF80
- rax *= RSP_0xFFFFFFFFFFFFFF80; //imul rax, [rbp-0x80]
- r10 -= rax; //sub r10, rax
- r10 += r11; //add r10, r11
- return r10;
- }
- case 4:
- {
- r9 = driver.Read<uintptr_t>(driver.base_addr + 0xB06412C); //mov r9, [0x00000000087D9236]
- rax = 0x7BD4F3C29580BB87; //mov rax, 0x7BD4F3C29580BB87
- r10 *= rax; //imul r10, rax
- rax = 0x646EC108C275FCD7; //mov rax, 0x646EC108C275FCD7
- r10 -= r11; //sub r10, r11
- r10 -= rax; //sub r10, rax
- rax = r10; //mov rax, r10
- rax >>= 0x1B; //shr rax, 0x1B
- r10 ^= rax; //xor r10, rax
- rax = r10; //mov rax, r10
- rax >>= 0x36; //shr rax, 0x36
- r10 ^= rax; //xor r10, rax
- rax = 0x142843BCE5FD72BB; //mov rax, 0x142843BCE5FD72BB
- rcx = 0; //and rcx, 0xFFFFFFFFC0000000
- rcx = _rotl64(rcx, 0x10); //rol rcx, 0x10
- r10 *= rax; //imul r10, rax
- rcx ^= r9; //xor rcx, r9
- rcx = ~rcx; //not rcx
- r10 += r11; //add r10, r11
- r10 *= driver.Read<uintptr_t>(rcx + 0x9); //imul r10, [rcx+0x09]
- rax = r11; //mov rax, r11
- rax = ~rax; //not rax
- uintptr_t RSP_0x78;
- RSP_0x78 = driver.base_addr + 0x71CF; //lea rax, [0xFFFFFFFFFD77C2A3] : RSP+0x78
- rax ^= RSP_0x78; //xor rax, [rsp+0x78]
- r10 -= rax; //sub r10, rax
- return r10;
- }
- case 5:
- {
- r9 = driver.Read<uintptr_t>(driver.base_addr + 0xB06412C); //mov r9, [0x00000000087D8E51]
- rax = r10; //mov rax, r10
- rax >>= 0x9; //shr rax, 0x09
- r10 ^= rax; //xor r10, rax
- rax = r10; //mov rax, r10
- rax >>= 0x12; //shr rax, 0x12
- r10 ^= rax; //xor r10, rax
- rax = r10; //mov rax, r10
- rax >>= 0x24; //shr rax, 0x24
- r10 ^= rax; //xor r10, rax
- rax = driver.base_addr; //lea rax, [0xFFFFFFFFFD774770]
- rax += 0x111FC085; //add rax, 0x111FC085
- rax += r11; //add rax, r11
- r10 += rax; //add r10, rax
- rax = 0xF8D94370868AB99; //mov rax, 0xF8D94370868AB99
- r10 *= rax; //imul r10, rax
- rax = 0xB026072E428E1D57; //mov rax, 0xB026072E428E1D57
- r10 *= rax; //imul r10, rax
- rax = driver.base_addr; //lea rax, [0xFFFFFFFFFD77493E]
- rax += 0x19F5; //add rax, 0x19F5
- rax += r11; //add rax, r11
- r10 += rax; //add r10, rax
- rax = r10; //mov rax, r10
- rax >>= 0x23; //shr rax, 0x23
- r10 ^= rax; //xor r10, rax
- rax = 0; //and rax, 0xFFFFFFFFC0000000
- rax = _rotl64(rax, 0x10); //rol rax, 0x10
- rax ^= r9; //xor rax, r9
- rax = ~rax; //not rax
- rax = driver.Read<uintptr_t>(rax + 0x9); //mov rax, [rax+0x09]
- uintptr_t RSP_0x30;
- RSP_0x30 = 0x5F23D3FEF0707261; //mov rax, 0x5F23D3FEF0707261 : RSP+0x30
- rax *= RSP_0x30; //imul rax, [rsp+0x30]
- r10 *= rax; //imul r10, rax
- return r10;
- }
- case 6:
- {
- return r10;
- }
- case 7:
- {
- return r10;
- }
- case 8:
- {
- r8 = driver.Read<uintptr_t>(driver.base_addr + 0xB06412C); //mov r8, [0x00000000087D7F42]
- rax = 0x4F7CA4829AB6D5E8; //mov rax, 0x4F7CA4829AB6D5E8
- r10 ^= rax; //xor r10, rax
- r10 += r11; //add r10, r11
- rax = r10; //mov rax, r10
- rax >>= 0x24; //shr rax, 0x24
- r10 ^= rax; //xor r10, rax
- rax = 0x5178F05F16D45A5B; //mov rax, 0x5178F05F16D45A5B
- r10 *= rax; //imul r10, rax
- rax = 0x2ED8CECF4C40E0F3; //mov rax, 0x2ED8CECF4C40E0F3
- r10 ^= r11; //xor r10, r11
- r10 ^= rax; //xor r10, rax
- r10 ^= r11; //xor r10, r11
- rax = 0; //and rax, 0xFFFFFFFFC0000000
- rax = _rotl64(rax, 0x10); //rol rax, 0x10
- rax ^= r8; //xor rax, r8
- rax = ~rax; //not rax
- r10 *= driver.Read<uintptr_t>(rax + 0x9); //imul r10, [rax+0x09]
- return r10;
- }
- case 9:
- {
- return r10;
- }
- case 10:
- {
- rax = r10; //mov rax, r10
- rax >>= 0xD; //shr rax, 0x0D
- r10 ^= rax; //xor r10, rax
- rax = r10; //mov rax, r10
- rax >>= 0x1A; //shr rax, 0x1A
- r10 ^= rax; //xor r10, rax
- rax = r10; //mov rax, r10
- rax >>= 0x34; //shr rax, 0x34
- r10 ^= rax; //xor r10, rax
- return r10;
- }
- case 11:
- {
- return r10;
- }
- case 12:
- {
- rax = r10; //mov rax, r10
- rax >>= 0xE; //shr rax, 0x0E
- r10 ^= rax; //xor r10, rax
- return r10;
- }
- case 13:
- {
- rax = driver.base_addr + 0xB0AA; //lea rax, [0xFFFFFFFFFD77D28C]
- rax = ~rax; //not rax
- rax ^= r11; //xor rax, r11
- r10 ^= rax; //xor r10, rax
- rax = r10; //mov rax, r10
- rax >>= 0x18; //shr rax, 0x18
- r10 ^= rax; //xor r10, rax
- return r10;
- }
- case 14:
- {
- r9 = driver.Read<uintptr_t>(driver.base_addr + 0xB06412C); //mov r9, [0x00000000087D6173]
- r10 -= r11; //sub r10, r11
- rax = 0xEEEEF35687DD1DF7; //mov rax, 0xEEEEF35687DD1DF7
- r10 *= rax; //imul r10, rax
- rax = r11; //mov rax, r11
- uintptr_t RSP_0x30;
- RSP_0x30 = driver.base_addr + 0x913D; //lea rax, [0xFFFFFFFFFD77B17D] : RSP+0x30
- rax *= RSP_0x30; //imul rax, [rsp+0x30]
- r10 ^= rax; //xor r10, rax
- rax = 0; //and rax, 0xFFFFFFFFC0000000
- rax = _rotl64(rax, 0x10); //rol rax, 0x10
- rax ^= r9; //xor rax, r9
- rax = ~rax; //not rax
- rax = driver.Read<uintptr_t>(rax + 0x9); //mov rax, [rax+0x09]
- uintptr_t RSP_0x50;
- RSP_0x50 = 0x571AF583F00DB5E9; //mov rax, 0x571AF583F00DB5E9 : RSP+0x50
- rax *= RSP_0x50; //imul rax, [rsp+0x50]
- r10 *= rax; //imul r10, rax
- rax = r10; //mov rax, r10
- rcx = driver.base_addr + 0x6A35; //lea rcx, [0xFFFFFFFFFD778918]
- rax >>= 0x21; //shr rax, 0x21
- rcx -= r11; //sub rcx, r11
- rcx ^= rax; //xor rcx, rax
- r10 ^= rcx; //xor r10, rcx
- return r10;
- }
- case 15:
- {
- rax = 0x586536E499271C5; //mov rax, 0x586536E499271C5
- r10 *= rax; //imul r10, rax
- return r10;
- }
- }
- }
- uintptr_t decrypt_bone_base(const Driver& driver)
- {
- const uint64_t mb = driver.base_addr;
- uint64_t rax = mb, rbx = mb, rcx = mb, rdx = mb, rdi = mb, rsi = mb, r8 = mb, r9 = mb, r10 = mb, r11 = mb, r12 = mb, r13 = mb, r14 = mb, r15 = mb;
- rdx = driver.Read<uintptr_t>(driver.base_addr + 0xEF3BD58);
- if(!rdx)
- return rdx;
- r11 = driver.target_peb; //mov r11, gs:[rax]
- rax = r11; //mov rax, r11
- rax = _rotr64(rax, 0x1A); //ror rax, 0x1A
- rax &= 0xF;
- switch(rax) {
- case 0:
- {
- r9 = driver.Read<uintptr_t>(driver.base_addr + 0xB06421D); //mov r9, [0x00000000084FA6EF]
- r14 = driver.base_addr + 0x9280; //lea r14, [0xFFFFFFFFFD49F73F]
- rax = rdx; //mov rax, rdx
- rax >>= 0x26; //shr rax, 0x26
- rdx ^= rax; //xor rdx, rax
- rax = 0x1409F0CD847A37CE; //mov rax, 0x1409F0CD847A37CE
- rdx ^= rax; //xor rdx, rax
- rax = r11; //mov rax, r11
- rax = ~rax; //not rax
- rax ^= r14; //xor rax, r14
- rdx += rax; //add rdx, rax
- rax = 0x3C34D747DB7928EE; //mov rax, 0x3C34D747DB7928EE
- rdx -= rax; //sub rdx, rax
- rax = driver.base_addr + 0xDB7F; //lea rax, [0xFFFFFFFFFD4A3E47]
- rax = ~rax; //not rax
- rax -= r11; //sub rax, r11
- rdx ^= rax; //xor rdx, rax
- rax = 0xC029A5A1D42718DD; //mov rax, 0xC029A5A1D42718DD
- rdx *= rax; //imul rdx, rax
- rax = 0; //and rax, 0xFFFFFFFFC0000000
- rax = _rotl64(rax, 0x10); //rol rax, 0x10
- rax ^= r9; //xor rax, r9
- rax = ~rax; //not rax
- rdx *= driver.Read<uintptr_t>(rax + 0x15); //imul rdx, [rax+0x15]
- rax = rdx; //mov rax, rdx
- rax >>= 0x7; //shr rax, 0x07
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0xE; //shr rax, 0x0E
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x1C; //shr rax, 0x1C
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x38; //shr rax, 0x38
- rdx ^= rax; //xor rdx, rax
- return rdx;
- }
- case 1:
- {
- r9 = driver.Read<uintptr_t>(driver.base_addr + 0xB06421D); //mov r9, [0x00000000084FA148]
- r14 = driver.base_addr + 0x54CA1D31; //lea r14, [0x0000000052137C49]
- rdx += r11; //add rdx, r11
- rax = driver.base_addr; //lea rax, [0xFFFFFFFFFD495E13]
- rdx += rax; //add rdx, rax
- rax = 0; //and rax, 0xFFFFFFFFC0000000
- rax = _rotl64(rax, 0x10); //rol rax, 0x10
- rax ^= r9; //xor rax, r9
- rax = ~rax; //not rax
- rdx *= driver.Read<uintptr_t>(rax + 0x15); //imul rdx, [rax+0x15]
- rax = 0x48462EAD4F11FD6D; //mov rax, 0x48462EAD4F11FD6D
- rdx *= rax; //imul rdx, rax
- rax = r11; //mov rax, r11
- rax ^= r14; //xor rax, r14
- rdx -= rax; //sub rdx, rax
- rax = 0x83B3774C1397A303; //mov rax, 0x83B3774C1397A303
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x26; //shr rax, 0x26
- rdx ^= rax; //xor rdx, rax
- rax = 0x829707C28057B2BC; //mov rax, 0x829707C28057B2BC
- rdx ^= rax; //xor rdx, rax
- return rdx;
- }
- case 2:
- {
- r9 = driver.Read<uintptr_t>(driver.base_addr + 0xB06421D); //mov r9, [0x00000000084F9C67]
- rax = rdx; //mov rax, rdx
- rax >>= 0x20; //shr rax, 0x20
- rdx ^= rax; //xor rdx, rax
- rax = driver.base_addr; //lea rax, [0xFFFFFFFFFD49568B]
- rdx ^= rax; //xor rdx, rax
- rax = 0; //and rax, 0xFFFFFFFFC0000000
- rax = _rotl64(rax, 0x10); //rol rax, 0x10
- rax ^= r9; //xor rax, r9
- rax = ~rax; //not rax
- rdx *= driver.Read<uintptr_t>(rax + 0x15); //imul rdx, [rax+0x15]
- rax = r11; //mov rax, r11
- uintptr_t RSP_0x40;
- RSP_0x40 = driver.base_addr + 0x3A246E06; //lea rax, [0x00000000376DC849] : RSP+0x40
- rax ^= RSP_0x40; //xor rax, [rsp+0x40]
- rdx += rax; //add rdx, rax
- rax = 0xC391B266D5217A5F; //mov rax, 0xC391B266D5217A5F
- rdx ^= rax; //xor rdx, rax
- rax = 0x5B7F3E818AF67A35; //mov rax, 0x5B7F3E818AF67A35
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x1A; //shr rax, 0x1A
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x34; //shr rax, 0x34
- rdx ^= rax; //xor rdx, rax
- rax = 0x19C8F1552DE67BBF; //mov rax, 0x19C8F1552DE67BBF
- rdx *= rax; //imul rdx, rax
- return rdx;
- }
- case 3:
- {
- r9 = driver.Read<uintptr_t>(driver.base_addr + 0xB06421D); //mov r9, [0x00000000084F977F]
- rax = driver.base_addr + 0xBD6; //lea rax, [0xFFFFFFFFFD495F43]
- rax -= r11; //sub rax, r11
- rax ^= r11; //xor rax, r11
- rdx ^= rax; //xor rdx, rax
- rax = 0xAA6F288FD0E3CBF; //mov rax, 0xAA6F288FD0E3CBF
- rdx *= rax; //imul rdx, rax
- r15 = 0x702F07A4D309E97C; //mov r15, 0x702F07A4D309E97C
- rdx += r15; //add rdx, r15
- rax = 0; //and rax, 0xFFFFFFFFC0000000
- rax = _rotl64(rax, 0x10); //rol rax, 0x10
- rax ^= r9; //xor rax, r9
- rax = ~rax; //not rax
- rdx *= driver.Read<uintptr_t>(rax + 0x15); //imul rdx, [rax+0x15]
- rdx ^= r11; //xor rdx, r11
- rax = 0x65D0349BA5FED43B; //mov rax, 0x65D0349BA5FED43B
- rdx *= rax; //imul rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x12; //shr rax, 0x12
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x24; //shr rax, 0x24
- rdx ^= rax; //xor rdx, rax
- return rdx;
- }
- case 4:
- {
- r10 = driver.Read<uintptr_t>(driver.base_addr + 0xB06421D); //mov r10, [0x00000000084F9390]
- r15 = driver.base_addr + 0x8817; //lea r15, [0xFFFFFFFFFD49D977]
- rdx ^= r11; //xor rdx, r11
- rax = driver.base_addr; //lea rax, [0xFFFFFFFFFD494FC7]
- rdx -= rax; //sub rdx, rax
- rax = 0; //and rax, 0xFFFFFFFFC0000000
- rax = _rotl64(rax, 0x10); //rol rax, 0x10
- rax ^= r10; //xor rax, r10
- rax = ~rax; //not rax
- rdx *= driver.Read<uintptr_t>(rax + 0x15); //imul rdx, [rax+0x15]
- rax = 0x647DC95B2924B45D; //mov rax, 0x647DC95B2924B45D
- rdx *= rax; //imul rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0xF; //shr rax, 0x0F
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x1E; //shr rax, 0x1E
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x3C; //shr rax, 0x3C
- rdx ^= rax; //xor rdx, rax
- rax = r11; //mov rax, r11
- rax ^= r15; //xor rax, r15
- rdx += rax; //add rdx, rax
- rax = 0x66F54217655405BD; //mov rax, 0x66F54217655405BD
- rdx *= rax; //imul rdx, rax
- return rdx;
- }
- case 5:
- {
- r9 = driver.Read<uintptr_t>(driver.base_addr + 0xB06421D); //mov r9, [0x00000000084F8E6E]
- rax = r11; //mov rax, r11
- rax -= driver.base_addr; //sub rax, [rsp+0xC8] -- didn't find trace -> use base
- rax += 0xFFFFFFFFDA207ED1; //add rax, 0xFFFFFFFFDA207ED1
- rdx += rax; //add rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x12; //shr rax, 0x12
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x24; //shr rax, 0x24
- rdx ^= rax; //xor rdx, rax
- rax = r11; //mov rax, r11
- rax -= driver.base_addr; //sub rax, [rsp+0xC8] -- didn't find trace -> use base
- rax -= 0x39EDAA32; //sub rax, 0x39EDAA32
- rdx ^= rax; //xor rdx, rax
- rax = 0x24AC8C57718FF261; //mov rax, 0x24AC8C57718FF261
- rdx *= rax; //imul rdx, rax
- rax = 0x5997D68B6A65573B; //mov rax, 0x5997D68B6A65573B
- rdx *= rax; //imul rdx, rax
- rax = 0x5FD1C67422180770; //mov rax, 0x5FD1C67422180770
- rdx -= rax; //sub rdx, rax
- rax = 0; //and rax, 0xFFFFFFFFC0000000
- rax = _rotl64(rax, 0x10); //rol rax, 0x10
- rax ^= r9; //xor rax, r9
- rax = ~rax; //not rax
- rdx *= driver.Read<uintptr_t>(rax + 0x15); //imul rdx, [rax+0x15]
- rax = r11; //mov rax, r11
- rax -= driver.base_addr; //sub rax, [rsp+0xC8] -- didn't find trace -> use base
- rax += 0xFFFFFFFFE77DFE7B; //add rax, 0xFFFFFFFFE77DFE7B
- rdx += rax; //add rdx, rax
- return rdx;
- }
- case 6:
- {
- r9 = driver.Read<uintptr_t>(driver.base_addr + 0xB06421D); //mov r9, [0x00000000084F896F]
- rax = 0; //and rax, 0xFFFFFFFFC0000000
- rax = _rotl64(rax, 0x10); //rol rax, 0x10
- rax ^= r9; //xor rax, r9
- rax = ~rax; //not rax
- rdx *= driver.Read<uintptr_t>(rax + 0x15); //imul rdx, [rax+0x15]
- rax = 0x53AAB2A28C6F8FF0; //mov rax, 0x53AAB2A28C6F8FF0
- rdx ^= rax; //xor rdx, rax
- rdx -= r11; //sub rdx, r11
- rax = rdx; //mov rax, rdx
- rax >>= 0x12; //shr rax, 0x12
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x24; //shr rax, 0x24
- rax ^= r11; //xor rax, r11
- rdx ^= rax; //xor rdx, rax
- rax = driver.base_addr; //lea rax, [0xFFFFFFFFFD494581]
- rdx += rax; //add rdx, rax
- rdx += r11; //add rdx, r11
- rax = 0x3EACC212565A3D5; //mov rax, 0x3EACC212565A3D5
- rdx *= rax; //imul rdx, rax
- return rdx;
- }
- case 7:
- {
- r10 = driver.Read<uintptr_t>(driver.base_addr + 0xB06421D); //mov r10, [0x00000000084F84E2]
- r14 = driver.base_addr + 0x8FBF; //lea r14, [0xFFFFFFFFFD49D26C]
- rax = driver.base_addr + 0xD9BA; //lea rax, [0xFFFFFFFFFD4A1A3E]
- rax = ~rax; //not rax
- rax += r11; //add rax, r11
- rdx += rax; //add rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x1B; //shr rax, 0x1B
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x36; //shr rax, 0x36
- rdx ^= rax; //xor rdx, rax
- rax = 0xC097FE30215EF7B; //mov rax, 0xC097FE30215EF7B
- rdx -= rax; //sub rdx, rax
- rdx += r11; //add rdx, r11
- rax = 0x27217EED83C00465; //mov rax, 0x27217EED83C00465
- rdx *= rax; //imul rdx, rax
- rax = 0; //and rax, 0xFFFFFFFFC0000000
- rax = _rotl64(rax, 0x10); //rol rax, 0x10
- rax ^= r10; //xor rax, r10
- rax = ~rax; //not rax
- rdx *= driver.Read<uintptr_t>(rax + 0x15); //imul rdx, [rax+0x15]
- rcx = rdx; //mov rcx, rdx
- rdx = r11; //mov rdx, r11
- rdx ^= rcx; //xor rdx, rcx
- rdx ^= r14; //xor rdx, r14
- rax = 0x40FC9A08434EAB8; //mov rax, 0x40FC9A08434EAB8
- rdx ^= rax; //xor rdx, rax
- return rdx;
- }
- case 8:
- {
- r9 = driver.Read<uintptr_t>(driver.base_addr + 0xB06421D); //mov r9, [0x00000000084F80D1]
- rax = 0xC640566C96CFB225; //mov rax, 0xC640566C96CFB225
- rdx *= rax; //imul rdx, rax
- rdx ^= driver.base_addr; //xor rdx, [rsp+0xC8] -- didn't find trace -> use base
- rax = 0; //and rax, 0xFFFFFFFFC0000000
- rax = _rotl64(rax, 0x10); //rol rax, 0x10
- rax ^= r9; //xor rax, r9
- rax = ~rax; //not rax
- rdx *= driver.Read<uintptr_t>(rax + 0x15); //imul rdx, [rax+0x15]
- rdx -= r11; //sub rdx, r11
- rax = rdx; //mov rax, rdx
- rax >>= 0x4; //shr rax, 0x04
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x8; //shr rax, 0x08
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x10; //shr rax, 0x10
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x20; //shr rax, 0x20
- rdx ^= rax; //xor rdx, rax
- rdx += r11; //add rdx, r11
- rax = 0x36BE6884C47C6D33; //mov rax, 0x36BE6884C47C6D33
- rdx *= rax; //imul rdx, rax
- rax = r11; //mov rax, r11
- rax = ~rax; //not rax
- rax -= driver.base_addr; //sub rax, [rsp+0xC8] -- didn't find trace -> use base
- rax -= 0x736A3793; //sub rax, 0x736A3793
- rdx ^= rax; //xor rdx, rax
- return rdx;
- }
- case 9:
- {
- r10 = driver.Read<uintptr_t>(driver.base_addr + 0xB06421D); //mov r10, [0x00000000084F7BDD]
- r15 = driver.base_addr + 0x56B5; //lea r15, [0xFFFFFFFFFD499062]
- rax = r11; //mov rax, r11
- rax = ~rax; //not rax
- rax ^= r15; //xor rax, r15
- rdx -= rax; //sub rdx, rax
- rax = 0x617EE6B8548ACFF8; //mov rax, 0x617EE6B8548ACFF8
- rdx ^= rax; //xor rdx, rax
- rdx += r11; //add rdx, r11
- rax = 0x44AC3A1174A702A7; //mov rax, 0x44AC3A1174A702A7
- rdx *= rax; //imul rdx, rax
- rcx = 0; //and rcx, 0xFFFFFFFFC0000000
- rdx ^= r11; //xor rdx, r11
- rcx = _rotl64(rcx, 0x10); //rol rcx, 0x10
- rax = rdx; //mov rax, rdx
- rcx ^= r10; //xor rcx, r10
- rdx >>= 0x27; //shr rdx, 0x27
- rcx = ~rcx; //not rcx
- rdx ^= rax; //xor rdx, rax
- rdx *= driver.Read<uintptr_t>(rcx + 0x15); //imul rdx, [rcx+0x15]
- rax = 0x7915D47D16706192; //mov rax, 0x7915D47D16706192
- rdx -= rax; //sub rdx, rax
- return rdx;
- }
- case 10:
- {
- r9 = driver.Read<uintptr_t>(driver.base_addr + 0xB06421D); //mov r9, [0x00000000084F779C]
- r15 = driver.base_addr + 0x5A848877; //lea r15, [0x0000000057CDBDE3]
- rax = r15; //mov rax, r15
- rax = ~rax; //not rax
- rax ^= r11; //xor rax, r11
- rdx -= rax; //sub rdx, rax
- rax = driver.base_addr; //lea rax, [0xFFFFFFFFFD49347B]
- rdx ^= rax; //xor rdx, rax
- rax = 0x21F6FDA360F3B27; //mov rax, 0x21F6FDA360F3B27
- rdx *= rax; //imul rdx, rax
- rdx -= r11; //sub rdx, r11
- rax = rdx; //mov rax, rdx
- rax >>= 0x6; //shr rax, 0x06
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0xC; //shr rax, 0x0C
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x18; //shr rax, 0x18
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x30; //shr rax, 0x30
- rdx ^= rax; //xor rdx, rax
- rax = 0x3B33D31E5AB12803; //mov rax, 0x3B33D31E5AB12803
- rdx += rax; //add rdx, rax
- rax = 0; //and rax, 0xFFFFFFFFC0000000
- rax = _rotl64(rax, 0x10); //rol rax, 0x10
- rax ^= r9; //xor rax, r9
- rax = ~rax; //not rax
- rdx *= driver.Read<uintptr_t>(rax + 0x15); //imul rdx, [rax+0x15]
- rax = rdx; //mov rax, rdx
- rax >>= 0x26; //shr rax, 0x26
- rdx ^= rax; //xor rdx, rax
- return rdx;
- }
- case 11:
- {
- r10 = driver.Read<uintptr_t>(driver.base_addr + 0xB06421D); //mov r10, [0x00000000084F72C4]
- rcx = r11; //mov rcx, r11
- rcx = ~rcx; //not rcx
- rax = driver.base_addr + 0x28691EFC; //lea rax, [0x0000000025B24CCE]
- rax = ~rax; //not rax
- rcx += rax; //add rcx, rax
- rdx ^= rcx; //xor rdx, rcx
- rax = 0x4F163BACB48EBF73; //mov rax, 0x4F163BACB48EBF73
- rdx += rax; //add rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x14; //shr rax, 0x14
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x28; //shr rax, 0x28
- rdx ^= rax; //xor rdx, rax
- rax = 0x4127EEFEDE5B92FD; //mov rax, 0x4127EEFEDE5B92FD
- rdx += rax; //add rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x21; //shr rax, 0x21
- rdx ^= rax; //xor rdx, rax
- rax = 0; //and rax, 0xFFFFFFFFC0000000
- rax = _rotl64(rax, 0x10); //rol rax, 0x10
- rax ^= r10; //xor rax, r10
- rax = ~rax; //not rax
- rdx *= driver.Read<uintptr_t>(rax + 0x15); //imul rdx, [rax+0x15]
- rax = rdx; //mov rax, rdx
- rax >>= 0x4; //shr rax, 0x04
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x8; //shr rax, 0x08
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x10; //shr rax, 0x10
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x20; //shr rax, 0x20
- rdx ^= rax; //xor rdx, rax
- rax = 0x397EFF255639273F; //mov rax, 0x397EFF255639273F
- rdx *= rax; //imul rdx, rax
- return rdx;
- }
- case 12:
- {
- r9 = driver.Read<uintptr_t>(driver.base_addr + 0xB06421D); //mov r9, [0x00000000084F6D60]
- r15 = driver.base_addr + 0x41C6E8B9; //lea r15, [0x000000003F1013E9]
- rdx += r11; //add rdx, r11
- rax = rdx; //mov rax, rdx
- rax >>= 0x22; //shr rax, 0x22
- rdx ^= rax; //xor rdx, rax
- rax = 0x233E216C40FA2CDF; //mov rax, 0x233E216C40FA2CDF
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x18; //shr rax, 0x18
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x30; //shr rax, 0x30
- rdx ^= rax; //xor rdx, rax
- rax = r11; //mov rax, r11
- rax ^= r15; //xor rax, r15
- rdx ^= rax; //xor rdx, rax
- rax = 0x6773B66CDA475049; //mov rax, 0x6773B66CDA475049
- rdx *= rax; //imul rdx, rax
- uintptr_t RSP_0x80;
- RSP_0x80 = 0xF154E6D1B3660D73; //mov rax, 0xF154E6D1B3660D73 : RSP+0x80
- rdx ^= RSP_0x80; //xor rdx, [rsp+0x80]
- rax = 0; //and rax, 0xFFFFFFFFC0000000
- rax = _rotl64(rax, 0x10); //rol rax, 0x10
- rax ^= r9; //xor rax, r9
- rax = ~rax; //not rax
- rdx *= driver.Read<uintptr_t>(rax + 0x15); //imul rdx, [rax+0x15]
- return rdx;
- }
- case 13:
- {
- r10 = driver.Read<uintptr_t>(driver.base_addr + 0xB06421D); //mov r10, [0x00000000084F6845]
- r15 = driver.base_addr + 0x102B1DCA; //lea r15, [0x000000000D7443DF]
- rax = driver.base_addr; //lea rax, [0xFFFFFFFFFD492564]
- rax += 0xBA17; //add rax, 0xBA17
- rax += r11; //add rax, r11
- rdx += rax; //add rdx, rax
- rcx = 0; //and rcx, 0xFFFFFFFFC0000000
- rcx = _rotl64(rcx, 0x10); //rol rcx, 0x10
- rax = driver.base_addr + 0x9610; //lea rax, [0xFFFFFFFFFD49B8B9]
- rax = ~rax; //not rax
- rcx ^= r10; //xor rcx, r10
- rax -= r11; //sub rax, r11
- rcx = ~rcx; //not rcx
- rdx += rax; //add rdx, rax
- rdx *= driver.Read<uintptr_t>(rcx + 0x15); //imul rdx, [rcx+0x15]
- rax = rdx; //mov rax, rdx
- rax >>= 0x15; //shr rax, 0x15
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x2A; //shr rax, 0x2A
- rdx ^= rax; //xor rdx, rax
- rax = 0x6A8B294107CC0501; //mov rax, 0x6A8B294107CC0501
- rdx ^= rax; //xor rdx, rax
- rax = 0x2EA5061AACD42452; //mov rax, 0x2EA5061AACD42452
- rdx -= rax; //sub rdx, rax
- rax = r11; //mov rax, r11
- rax = ~rax; //not rax
- rax ^= r15; //xor rax, r15
- rdx += rax; //add rdx, rax
- rax = 0x4EB7AE4244212391; //mov rax, 0x4EB7AE4244212391
- rdx *= rax; //imul rdx, rax
- return rdx;
- }
- case 14:
- {
- r10 = driver.Read<uintptr_t>(driver.base_addr + 0xB06421D); //mov r10, [0x00000000084F6412]
- rax = driver.base_addr; //lea rax, [0xFFFFFFFFFD49210C]
- rdx ^= rax; //xor rdx, rax
- rax = 0xC752E26BA360D032; //mov rax, 0xC752E26BA360D032
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x19; //shr rax, 0x19
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x32; //shr rax, 0x32
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0xD; //shr rax, 0x0D
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x1A; //shr rax, 0x1A
- rdx ^= rax; //xor rdx, rax
- rcx = 0; //and rcx, 0xFFFFFFFFC0000000
- rcx = _rotl64(rcx, 0x10); //rol rcx, 0x10
- rax = rdx; //mov rax, rdx
- rcx ^= r10; //xor rcx, r10
- rax >>= 0x34; //shr rax, 0x34
- rcx = ~rcx; //not rcx
- rdx ^= rax; //xor rdx, rax
- rdx *= driver.Read<uintptr_t>(rcx + 0x15); //imul rdx, [rcx+0x15]
- rax = driver.base_addr; //lea rax, [0xFFFFFFFFFD491DB2]
- rdx ^= rax; //xor rdx, rax
- rax = 0x5436A045E6437655; //mov rax, 0x5436A045E6437655
- rdx *= rax; //imul rdx, rax
- return rdx;
- }
- case 15:
- {
- r10 = driver.Read<uintptr_t>(driver.base_addr + 0xB06421D); //mov r10, [0x00000000084F5F77]
- rax = rdx; //mov rax, rdx
- rax >>= 0x6; //shr rax, 0x06
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0xC; //shr rax, 0x0C
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x18; //shr rax, 0x18
- rdx ^= rax; //xor rdx, rax
- rcx = 0; //and rcx, 0xFFFFFFFFC0000000
- rcx = _rotl64(rcx, 0x10); //rol rcx, 0x10
- rcx ^= r10; //xor rcx, r10
- rax = rdx; //mov rax, rdx
- rcx = ~rcx; //not rcx
- rax >>= 0x30; //shr rax, 0x30
- rdx ^= rax; //xor rdx, rax
- rdx *= driver.Read<uintptr_t>(rcx + 0x15); //imul rdx, [rcx+0x15]
- rax = driver.base_addr; //lea rax, [0xFFFFFFFFFD491AE1]
- rdx += rax; //add rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x24; //shr rax, 0x24
- rdx ^= rax; //xor rdx, rax
- rax = 0xB6C3A6FE99C92A23; //mov rax, 0xB6C3A6FE99C92A23
- rdx *= rax; //imul rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x9; //shr rax, 0x09
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x12; //shr rax, 0x12
- rdx ^= rax; //xor rdx, rax
- rax = rdx; //mov rax, rdx
- rax >>= 0x24; //shr rax, 0x24
- rdx ^= rax; //xor rdx, rax
- rax = 0xD7420EB04571AACF; //mov rax, 0xD7420EB04571AACF
- rdx *= rax; //imul rdx, rax
- rax = 0x578A3A3D4AF2D633; //mov rax, 0x578A3A3D4AF2D633
- rdx += rax; //add rdx, rax
- return rdx;
- }
- }
- }
- uint16_t get_bone_index(const Driver& driver, uint32_t bone_index)
- {
- const uint64_t mb = driver.base_addr;
- uint64_t rax = mb, rbx = mb, rcx = mb, rdx = mb, rdi = mb, rsi = mb, r8 = mb, r9 = mb, r10 = mb, r11 = mb, r12 = mb, r13 = mb, r14 = mb, r15 = mb;
- rdi = bone_index;
- rcx = rdi * 0x13C8;
- rax = 0xCC70CD3D3E0A7B49; //mov rax, 0xCC70CD3D3E0A7B49
- rax = _umul128(rax, rcx, (uintptr_t*)&rdx); //mul rcx
- r11 = driver.base_addr; //lea r11, [0xFFFFFFFFFD7FE0F5]
- r10 = 0x45F86A52798F52B7; //mov r10, 0x45F86A52798F52B7
- rdx >>= 0xC; //shr rdx, 0x0C
- rax = rdx * 0x1409; //imul rax, rdx, 0x1409
- rcx -= rax; //sub rcx, rax
- rax = 0xDC9D0ECFCB6E9379; //mov rax, 0xDC9D0ECFCB6E9379
- r8 = rcx * 0x1409; //imul r8, rcx, 0x1409
- rax = _umul128(rax, r8, (uintptr_t*)&rdx); //mul r8
- rdx >>= 0xD; //shr rdx, 0x0D
- rax = rdx * 0x2522; //imul rax, rdx, 0x2522
- r8 -= rax; //sub r8, rax
- rax = 0x49539E3B2D066EA3; //mov rax, 0x49539E3B2D066EA3
- rax = _umul128(rax, r8, (uintptr_t*)&rdx); //mul r8
- rax = r8; //mov rax, r8
- rax -= rdx; //sub rax, rdx
- rax >>= 0x1; //shr rax, 0x01
- rax += rdx; //add rax, rdx
- rax >>= 0x9; //shr rax, 0x09
- rcx = rax * 0x31C; //imul rcx, rax, 0x31C
- rax = 0xD79435E50D79435F; //mov rax, 0xD79435E50D79435F
- rax = _umul128(rax, r8, (uintptr_t*)&rdx); //mul r8
- rdx >>= 0x4; //shr rdx, 0x04
- rcx += rdx; //add rcx, rdx
- rax = rcx * 0x26; //imul rax, rcx, 0x26
- rcx = r8 + r8 * 4; //lea rcx, [r8+r8*4]
- rcx <<= 0x3; //shl rcx, 0x03
- rcx -= rax; //sub rcx, rax
- rax = driver.Read<uint16_t>(rcx + r11 * 1 + 0xB0E6420); //movzx eax, word ptr [rcx+r11*1+0xB0E6420]
- r8 = rax * 0x13C8; //imul r8, rax, 0x13C8
- rax = r10; //mov rax, r10
- rax = _umul128(rax, r8, (uintptr_t*)&rdx); //mul r8
- rax = r10; //mov rax, r10
- rdx >>= 0xB; //shr rdx, 0x0B
- rcx = rdx * 0x1D45; //imul rcx, rdx, 0x1D45
- r8 -= rcx; //sub r8, rcx
- r9 = r8 * 0x39A6; //imul r9, r8, 0x39A6
- rax = _umul128(rax, r9, (uintptr_t*)&rdx); //mul r9
- rdx >>= 0xB; //shr rdx, 0x0B
- rax = rdx * 0x1D45; //imul rax, rdx, 0x1D45
- r9 -= rax; //sub r9, rax
- rax = 0x88ECF206D1CD0DD7; //mov rax, 0x88ECF206D1CD0DD7
- rax = _umul128(rax, r9, (uintptr_t*)&rdx); //mul r9
- rax = 0xAAAAAAAAAAAAAAAB; //mov rax, 0xAAAAAAAAAAAAAAAB
- rdx >>= 0xB; //shr rdx, 0x0B
- rcx = rdx * 0xEF5; //imul rcx, rdx, 0xEF5
- rax = _umul128(rax, r9, (uintptr_t*)&rdx); //mul r9
- rdx >>= 0x1; //shr rdx, 0x01
- rcx += rdx; //add rcx, rdx
- rax = rcx + rcx * 2; //lea rax, [rcx+rcx*2]
- rax += rax; //add rax, rax
- rcx = r9 * 8 + 0x0; //lea rcx, [r9*8]
- rcx -= rax; //sub rcx, rax
- r15 = driver.Read<uint16_t>(rcx + r11 * 1 + 0xB0EDA50); //movsx r15d, word ptr [rcx+r11*1+0xB0EDA50]
- return r15;
- }
Advertisement
Add Comment
Please, Sign In to add comment