Advertisement
Guest User

1.41.2.10056273

a guest
Aug 28th, 2021
570
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 32.17 KB | None | 0 0
  1. // Version 1.41.2.10056273
  2.  
  3. namespace offsets {
  4.  
  5. constexpr auto refdef = 0x17932CB0;
  6. constexpr auto name_array = 0x1793E2D8;
  7. constexpr auto name_array_pos = 0x4C70;
  8. constexpr auto camera_base = 0x149B0E70;
  9. constexpr auto camera_pos = 0x1D8;
  10. constexpr auto local_index = 0x31DC0;
  11. constexpr auto local_index_pos = 0x1FC;
  12. constexpr auto recoil = 0xE2605E;
  13. // could not find any signature matches with 83 3D ? ? ? ? ? 41 BE ? ? ? ? 4C 89 BD ? ? ? ? 66 C7 85 ? ? ? ? ? ? 0F 8E ? ? ? ? B8 ? ? ? ? 33 F6 for game_mode offset
  14. constexpr auto game_mode = 0x0;
  15. constexpr auto weapon_definitions = 0x14A85750;
  16.  
  17. namespace player {
  18.     constexpr auto size = 0x3AE0;
  19.     constexpr auto valid = 0x504;
  20.     constexpr auto pos = 0x100;
  21.     constexpr auto team = 0x4D0;
  22.     constexpr auto stance = 0x98C;
  23.     // could not find any signature matches with 48 8D 99 ? ? ? ? 66 83 3B 00 74 ? 33 D2 48 8B CB E8 ? ? ? ? 84 C0 for weapon_index offset
  24.     constexpr auto weapon_index = 0x0;
  25.     constexpr auto dead_1 = 0x27C;
  26.     constexpr auto dead_2 = 0x570;
  27. }
  28.  
  29. namespace bone {
  30.     // could not find any signature matches with 48 05 ? ? ? ? 48 89 44 24 ? 4C 8D 84 24 ? ? ? ? for base_pos offset
  31.     constexpr auto base_pos = 0x0;
  32.     constexpr auto index_struct_size = 0x150;
  33. }
  34.  
  35. namespace directx {
  36.     constexpr auto command_queue = 0x193A6D28;
  37.     // could not find any signature matches with 4C 8D 05 ? ? ? ? 48 8D 15 ? ? ? ? 48 8B 01 FF 10 8B D8 85 C0 for swap_chain offset
  38.     constexpr auto swap_chain = 0x0;
  39. }
  40.  
  41. }
  42.  
  43. // 1.41.2.10056273
  44.  
  45. #include "Decryption.h"
  46.  
  47. extern "C" auto decrypt_client_info(uint64_t imageBase, uint64_t peb) -> uint64_t
  48. {
  49.     uint64_t RAX = imageBase, RBX = imageBase, RCX = imageBase, RDX = imageBase, R8 = imageBase, RDI = imageBase, RSI = imageBase, R9 = imageBase, R10 = imageBase, R11 = imageBase, R12 = imageBase, R13 = imageBase, R14 = imageBase, R15 = imageBase;
  50.  
  51.     RBX = readMemory<uint64_t>(imageBase + 0x179302F8);
  52.     if (RBX == 0) {
  53.         return 0;
  54.     }
  55.     uint64_t RSP_0x50 = imageBase;
  56.     RSP_0x50 = 0x18; // mov byte ptr [rsp+50h],18h
  57.     // movzx eax,byte ptr [rsp+50h]
  58.     R8 = imageBase;
  59.     RAX = _rotr64(RAX, 0x3E);
  60.     // movzx eax,al
  61.     RCX = peb; // mov rcx,gs:[rax]
  62.     RCX = ~RCX;
  63.     RDX = 0xFE6FC31D37029CCB;
  64.     RAX = 0x0;
  65.     RAX = _rotl64(RAX, 0x10);
  66.     RAX ^= readMemory<uint64_t>(imageBase + 0x67FB0FC);
  67.     RAX = ~RAX;
  68.     RAX = readMemory<uint64_t>(RAX + 0x9);
  69.     RAX *= RDX;
  70.     RBX *= RAX;
  71.     RAX = RBX;
  72.     RAX >>= 0x7;
  73.     RBX ^= RAX;
  74.     RAX = RBX;
  75.     RAX >>= 0xE;
  76.     RBX ^= RAX;
  77.     RAX = RBX;
  78.     RAX >>= 0x1C;
  79.     RBX ^= RAX;
  80.     RAX = RBX;
  81.     RAX >>= 0x38;
  82.     RBX ^= RAX;
  83.     RAX = 0xD5864B9ED1AC7F75;
  84.     RBX -= R8;
  85.     RBX *= RAX;
  86.     RAX = imageBase + 0xFE2C;
  87.     RCX *= RAX;
  88.     RBX -= RCX;
  89.     return RBX;
  90. }
  91.  
  92. extern "C" auto decrypt_client_base(uint64_t clientInfo, uint64_t imageBase, uint64_t peb) -> uint64_t
  93. {
  94.     uint64_t RAX = imageBase, RBX = imageBase, RCX = imageBase, RDX = imageBase, R8 = imageBase, RDI = imageBase, RSI = imageBase, R9 = imageBase, R10 = imageBase, R11 = imageBase, R12 = imageBase, R13 = imageBase, R14 = imageBase, R15 = imageBase, RBP = 0, RSP = 0;
  95.  
  96.     RAX = readMemory<uint64_t>(clientInfo + 0x9DC38);
  97.     R11 = peb; // mov r11,gs:[rcx]
  98.     // test rax,rax
  99.     // je 00007FF794122BE5h
  100.     RCX = R11;
  101.     RCX >>= 0x17;
  102.     RCX &= 0xF;
  103.     // cmp rcx,0Eh
  104.     // ja 00007FF794122689h
  105.     switch (RCX) {
  106.     case 0: {
  107.         RSI = imageBase + 0x26BD;
  108.         R9 = readMemory<uint64_t>(imageBase + 0x67FB135);
  109.         RCX = RAX;
  110.         RCX >>= 0x4;
  111.         RAX ^= RCX;
  112.         RCX = RAX;
  113.         RCX >>= 0x8;
  114.         RAX ^= RCX;
  115.         RCX = RAX;
  116.         RCX >>= 0x10;
  117.         RAX ^= RCX;
  118.         RCX = RAX;
  119.         RCX >>= 0x20;
  120.         RAX ^= RCX;
  121.         RAX -= R11;
  122.         RAX += RSI;
  123.         RCX = 0x3577A1A3C799F24;
  124.         RAX += RCX;
  125.         RCX = RAX;
  126.         RCX >>= 0x15;
  127.         RAX ^= RCX;
  128.         RCX = RAX;
  129.         RCX >>= 0x2A;
  130.         RAX ^= RCX;
  131.         RCX = 0x0;
  132.         RCX = _rotl64(RCX, 0x10);
  133.         RCX ^= R9;
  134.         RCX = ~RCX;
  135.         RCX = readMemory<uint64_t>(RCX + 0xF);
  136.         RAX *= RCX;
  137.         RCX = 0x3ECE4BA3EAB88BC1;
  138.         RAX *= RCX;
  139.         RAX += R11;
  140.         return RAX;
  141.     }
  142.     case 1: {
  143.         R15 = imageBase + 0x3C65C721;
  144.         R14 = imageBase + 0x566326E9;
  145.         R10 = readMemory<uint64_t>(imageBase + 0x67FB135);
  146.         RDX = RAX;
  147.         RCX = imageBase + 0x741B;
  148.         RAX = R11;
  149.         RAX *= RCX;
  150.         RCX = 0x1AB412D1A8B3F1E;
  151.         RAX ^= RDX;
  152.         RAX ^= R11;
  153.         RAX ^= R15;
  154.         RAX ^= RCX;
  155.         RCX = RAX;
  156.         RCX >>= 0x12;
  157.         RAX ^= RCX;
  158.         RCX = RAX;
  159.         RCX >>= 0x24;
  160.         RAX ^= RCX;
  161.         RCX = 0x0;
  162.         RCX = _rotl64(RCX, 0x10);
  163.         RCX ^= R10;
  164.         RCX = ~RCX;
  165.         RAX *= readMemory<uint64_t>(RCX + 0xF);
  166.         RDX = R11;
  167.         RDX = ~RDX;
  168.         RDX ^= R14;
  169.         RCX = RAX;
  170.         RAX = 0x3D285928C2BA6D69;
  171.         RAX *= RCX;
  172.         RAX += RDX;
  173.         RCX = 0x87349DA53452C668;
  174.         RAX ^= RCX;
  175.         return RAX;
  176.     }
  177.     case 2: {
  178.         R14 = imageBase + 0x5551D555;
  179.         R9 = readMemory<uint64_t>(imageBase + 0x67FB135);
  180.         RCX = 0x0;
  181.         RCX = _rotl64(RCX, 0x10);
  182.         RCX ^= R9;
  183.         RCX = ~RCX;
  184.         RAX *= readMemory<uint64_t>(RCX + 0xF);
  185.         RCX = RAX;
  186.         RCX >>= 0x1A;
  187.         RAX ^= RCX;
  188.         RCX = RAX;
  189.         RCX >>= 0x34;
  190.         RCX ^= R11;
  191.         RAX ^= RCX;
  192.         RSI = 0xF083AE4EFC5CF8D9;
  193.         RCX = R11;
  194.         RCX *= R14;
  195.         RCX += RSI;
  196.         RAX += RCX;
  197.         RCX = 0x495B672DDFF4C79A;
  198.         RAX ^= RCX;
  199.         RCX = 0x21BEA6484094EE31;
  200.         RAX *= RCX;
  201.         RCX = RAX;
  202.         RCX >>= 0x4;
  203.         RAX ^= RCX;
  204.         RCX = RAX;
  205.         RCX >>= 0x8;
  206.         RAX ^= RCX;
  207.         RCX = RAX;
  208.         RCX >>= 0x10;
  209.         RAX ^= RCX;
  210.         RCX = RAX;
  211.         RCX >>= 0x20;
  212.         RAX ^= RCX;
  213.         return RAX;
  214.     }
  215.     case 3: {
  216.         R15 = imageBase + 0x5483A609;
  217.         R10 = readMemory<uint64_t>(imageBase + 0x67FB135);
  218.         RCX = 0x0;
  219.         RCX = _rotl64(RCX, 0x10);
  220.         RCX ^= R10;
  221.         RCX = ~RCX;
  222.         RAX *= readMemory<uint64_t>(RCX + 0xF);
  223.         RCX = R11;
  224.         RCX = ~RCX;
  225.         RAX ^= RCX;
  226.         RCX = imageBase;
  227.         RAX ^= R15;
  228.         RAX -= RCX;
  229.         RCX = 0x6DB09640D873D9E1;
  230.         RAX *= RCX;
  231.         RCX = imageBase;
  232.         RAX += RCX;
  233.         RCX = RAX;
  234.         RCX >>= 0xE;
  235.         RAX ^= RCX;
  236.         RCX = RAX;
  237.         RCX >>= 0x1C;
  238.         RAX ^= RCX;
  239.         RCX = RAX;
  240.         RCX >>= 0x38;
  241.         RAX ^= RCX;
  242.         RCX = imageBase;
  243.         RAX -= RCX;
  244.         RCX = 0x3139D1EC9F95155B;
  245.         RAX -= RCX;
  246.         return RAX;
  247.     }
  248.     case 4: {
  249.         R14 = imageBase + 0x29F61CB7;
  250.         R9 = readMemory<uint64_t>(imageBase + 0x67FB135);
  251.         RCX = R14;
  252.         RCX = ~RCX;
  253.         RCX *= R11;
  254.         RAX ^= RCX;
  255.         RCX = 0x3B501AF25251E94A;
  256.         RAX -= RCX;
  257.         RCX = RAX;
  258.         RCX >>= 0x20;
  259.         RAX ^= RCX;
  260.         RCX = 0x51AEA3739FFAD47D;
  261.         RAX *= RCX;
  262.         RCX = imageBase + 0x35C7D984;
  263.         RAX += R11;
  264.         RAX += RCX;
  265.         RCX = imageBase + 0xBF03;
  266.         RCX -= R11;
  267.         RAX += RCX;
  268.         RCX = 0xA39130DB0F4A771D;
  269.         RAX *= RCX;
  270.         RCX = 0x0;
  271.         RCX = _rotl64(RCX, 0x10);
  272.         RCX ^= R9;
  273.         RCX = ~RCX;
  274.         RAX *= readMemory<uint64_t>(RCX + 0xF);
  275.         return RAX;
  276.     }
  277.     case 5: {
  278.         R15 = imageBase + 0xBFB5;
  279.         R10 = readMemory<uint64_t>(imageBase + 0x67FB135);
  280.         RDX = imageBase + 0x4717;
  281.         RCX = R15;
  282.         RCX -= R11;
  283.         RAX ^= RCX;
  284.         RCX = 0x0;
  285.         RCX = _rotl64(RCX, 0x10);
  286.         RCX ^= R10;
  287.         RCX = ~RCX;
  288.         RAX *= readMemory<uint64_t>(RCX + 0xF);
  289.         RCX = R11;
  290.         RCX ^= RDX;
  291.         RAX -= RCX;
  292.         RAX -= R11;
  293.         RCX = 0x488AA665612944F5;
  294.         RAX ^= RCX;
  295.         RCX = RAX;
  296.         RCX >>= 0x15;
  297.         RAX ^= RCX;
  298.         RCX = RAX;
  299.         RCX >>= 0x2A;
  300.         RAX ^= RCX;
  301.         RCX = 0xC4FB88A311EC464E;
  302.         RAX ^= RCX;
  303.         RCX = 0x585BB4C4771BF83D;
  304.         RAX *= RCX;
  305.         return RAX;
  306.     }
  307.     case 6: {
  308.         R10 = readMemory<uint64_t>(imageBase + 0x67FB135);
  309.         R14 = imageBase + 0x2EB0;
  310.         RCX = imageBase;
  311.         RAX += RCX;
  312.         RCX = 0x4FDE02BB52F7F8AE;
  313.         RAX -= RCX;
  314.         RDX = 0x0;
  315.         RDX = _rotl64(RDX, 0x10);
  316.         RCX = R14;
  317.         RCX = ~RCX;
  318.         RDX ^= R10;
  319.         RCX ^= R11;
  320.         RDX = ~RDX;
  321.         RCX ^= RAX;
  322.         RAX = readMemory<uint64_t>(RDX + 0xF);
  323.         RAX *= RCX;
  324.         RCX = 0x565467D6B529281D;
  325.         RAX *= RCX;
  326.         RCX = imageBase;
  327.         RAX ^= RCX;
  328.         RCX = RAX;
  329.         RCX >>= 0x28;
  330.         RAX ^= RCX;
  331.         RCX = 0xB4852AEC637CFA;
  332.         RAX -= RCX;
  333.         return RAX;
  334.     }
  335.     case 7: {
  336.         uint64_t RSP_0x48 = imageBase;
  337.         R10 = readMemory<uint64_t>(imageBase + 0x67FB135);
  338.         RCX = imageBase + 0xF209;
  339.         RSP_0x48 = RCX; // mov [rsp+48h],rcx
  340.         R15 = imageBase + 0x26FA8C56;
  341.         RAX -= R11;
  342.         RCX = RAX;
  343.         RCX >>= 0x11;
  344.         RAX ^= RCX;
  345.         RCX = RAX;
  346.         RCX >>= 0x22;
  347.         RAX ^= RCX;
  348.         RCX = 0x0;
  349.         RCX = _rotl64(RCX, 0x10);
  350.         RCX ^= R10;
  351.         RCX = ~RCX;
  352.         RAX *= readMemory<uint64_t>(RCX + 0xF);
  353.         RAX += R11;
  354.         RCX = 0xEE8930C356DAC66D;
  355.         RAX *= RCX;
  356.         RAX += R11;
  357.         RDX = R15;
  358.         RCX = R11;
  359.         RCX = ~RCX;
  360.         RDX = ~RDX;
  361.         RCX ^= RSP_0x48; // xor rcx,[rsp+48h]
  362.         RDX *= R11;
  363.         RDX -= RCX;
  364.         RAX += RDX;
  365.         return RAX;
  366.     }
  367.     case 8: {
  368.         R15 = imageBase + 0x6104F5D0;
  369.         R10 = readMemory<uint64_t>(imageBase + 0x67FB135);
  370.         RCX = R15;
  371.         RCX = ~RCX;
  372.         RCX ^= R11;
  373.         RAX -= RCX;
  374.         RCX = 0xE31B9303B67241B3;
  375.         RAX *= RCX;
  376.         RCX = 0x407DA7F5ABBA0B35;
  377.         RAX ^= RCX;
  378.         RCX = 0x16209D16F22F9A2A;
  379.         RAX ^= RCX;
  380.         RCX = RAX;
  381.         RCX >>= 0xC;
  382.         RAX ^= RCX;
  383.         RCX = RAX;
  384.         RCX >>= 0x18;
  385.         RAX ^= RCX;
  386.         RCX = RAX;
  387.         RCX >>= 0x30;
  388.         RAX ^= RCX;
  389.         RCX = RAX;
  390.         RCX >>= 0x1C;
  391.         RAX ^= RCX;
  392.         RCX = RAX;
  393.         RCX >>= 0x38;
  394.         RAX ^= RCX;
  395.         RDX = 0x0;
  396.         RDX = _rotl64(RDX, 0x10);
  397.         RDX ^= R10;
  398.         RDX = ~RDX;
  399.         RDX = readMemory<uint64_t>(RDX + 0xF);
  400.         RDX *= RAX;
  401.         RAX = imageBase + 0xB894;
  402.         RAX = ~RAX;
  403.         RAX *= R11;
  404.         RAX += RDX;
  405.         return RAX;
  406.     }
  407.     case 9: {
  408.         R14 = imageBase + 0x3AC6;
  409.         R10 = readMemory<uint64_t>(imageBase + 0x67FB135);
  410.         RCX = imageBase;
  411.         RCX += 0x7CD1465B;
  412.         RCX += R11;
  413.         RAX += RCX;
  414.         RCX = RAX;
  415.         RCX >>= 0x27;
  416.         RAX ^= RCX;
  417.         RCX = imageBase;
  418.         RAX ^= RCX;
  419.         RCX = 0x67B1B4BD21BFB786;
  420.         RAX ^= RCX;
  421.         RAX ^= R11;
  422.         RCX = 0x0;
  423.         RCX = _rotl64(RCX, 0x10);
  424.         RCX ^= R10;
  425.         RCX = ~RCX;
  426.         RAX *= readMemory<uint64_t>(RCX + 0xF);
  427.         RCX = 0x6B16A8EF07BB817F;
  428.         RAX *= RCX;
  429.         RDX = R11;
  430.         RDX = ~RDX;
  431.         RCX = R14;
  432.         RCX = ~RCX;
  433.         RDX += RCX;
  434.         RAX ^= RDX;
  435.         return RAX;
  436.     }
  437.     case 10: {
  438.         R10 = readMemory<uint64_t>(imageBase + 0x67FB135);
  439.         RSI = imageBase + 0x6ADA;
  440.         RCX = 0x52F34A9EC14971D8;
  441.         RAX += RCX;
  442.         RCX = RAX;
  443.         RCX >>= 0x16;
  444.         RAX ^= RCX;
  445.         RDX = 0x0;
  446.         RDX = _rotl64(RDX, 0x10);
  447.         RCX = RAX;
  448.         RDX ^= R10;
  449.         RCX >>= 0x2C;
  450.         RDX = ~RDX;
  451.         RCX ^= RAX;
  452.         RAX = readMemory<uint64_t>(RDX + 0xF);
  453.         RAX *= RCX;
  454.         RCX = 0xD61F39EC4C4A3E77;
  455.         RAX *= RCX;
  456.         RCX = imageBase + 0xF60B;
  457.         RCX = ~RCX;
  458.         RAX += RCX;
  459.         RCX = imageBase + 0x2BC6BF05;
  460.         RAX += RCX;
  461.         RCX = R11;
  462.         RCX ^= RSI;
  463.         RAX += RCX;
  464.         RCX = imageBase;
  465.         RAX ^= RCX;
  466.         return RAX;
  467.     }
  468.     case 11: {
  469.         R10 = readMemory<uint64_t>(imageBase + 0x67FB135);
  470.         RDX = imageBase + 0x3599D644;
  471.         RCX = 0x0;
  472.         RCX = _rotl64(RCX, 0x10);
  473.         RCX ^= R10;
  474.         RCX = ~RCX;
  475.         RAX *= readMemory<uint64_t>(RCX + 0xF);
  476.         RAX ^= R11;
  477.         RAX ^= RDX;
  478.         RCX = RAX;
  479.         RCX >>= 0x19;
  480.         RAX ^= RCX;
  481.         RCX = RAX;
  482.         RCX >>= 0x32;
  483.         RAX ^= RCX;
  484.         RCX = imageBase + 0xE81F;
  485.         RCX = ~RCX;
  486.         RCX *= R11;
  487.         RAX += RCX;
  488.         RCX = 0x5CE4A91B453CA2B5;
  489.         RAX *= RCX;
  490.         RCX = 0xFBD301072DA48C49;
  491.         RAX *= RCX;
  492.         RCX = 0x6D3E2BBCB0B5BAFE;
  493.         RAX += RCX;
  494.         return RAX;
  495.     }
  496.     case 12: {
  497.         R14 = imageBase + 0x3C18896C;
  498.         R15 = imageBase + 0x7358;
  499.         R10 = readMemory<uint64_t>(imageBase + 0x67FB135);
  500.         RDX = 0x0;
  501.         RDX = _rotl64(RDX, 0x10);
  502.         RDX ^= R10;
  503.         RCX = imageBase + 0x37182832;
  504.         RCX = ~RCX;
  505.         RDX = ~RDX;
  506.         RCX ^= R11;
  507.         RDX = readMemory<uint64_t>(RDX + 0xF);
  508.         RAX *= RDX;
  509.         RAX -= RCX;
  510.         RCX = R15;
  511.         RCX = ~RCX;
  512.         RCX += R11;
  513.         RAX ^= RCX;
  514.         RCX = RAX;
  515.         RCX >>= 0x1C;
  516.         RAX ^= RCX;
  517.         RCX = RAX;
  518.         RCX >>= 0x38;
  519.         RAX ^= RCX;
  520.         RCX = R11;
  521.         RCX ^= R14;
  522.         RAX -= RCX;
  523.         RCX = 0x5A75353690BF4BB6;
  524.         RAX -= RCX;
  525.         RCX = 0x14B683D257A0AC05;
  526.         RAX -= RCX;
  527.         RCX = 0xCD3F082CCF689C3B;
  528.         RAX *= RCX;
  529.         return RAX;
  530.     }
  531.     case 13: {
  532.         R10 = readMemory<uint64_t>(imageBase + 0x67FB135);
  533.         RCX = RAX;
  534.         RCX >>= 0x10;
  535.         RAX ^= RCX;
  536.         RCX = RAX;
  537.         RCX >>= 0x20;
  538.         RAX ^= RCX;
  539.         RCX = RAX;
  540.         RCX >>= 0x28;
  541.         RAX ^= RCX;
  542.         RCX = imageBase + 0x3BF05E93;
  543.         RAX += R11;
  544.         RAX += RCX;
  545.         RCX = 0x8E178B4D1FA76B53;
  546.         RAX ^= RCX;
  547.         RCX = 0x6E360574F4F05AE3;
  548.         RAX -= RCX;
  549.         RCX = RAX;
  550.         RCX >>= 0x17;
  551.         RAX ^= RCX;
  552.         RCX = RAX;
  553.         RCX >>= 0x2E;
  554.         RDX = 0x0;
  555.         RCX ^= RAX;
  556.         RDX = _rotl64(RDX, 0x10);
  557.         RDX ^= R10;
  558.         RDX = ~RDX;
  559.         RAX = readMemory<uint64_t>(RDX + 0xF);
  560.         RAX *= RCX;
  561.         RCX = 0xA2BA560E0DCA4EE3;
  562.         RAX *= RCX;
  563.         return RAX;
  564.     }
  565.     case 14: {
  566.         uint64_t RSP_0x70 = imageBase;
  567.         RCX = imageBase + 0x1228DA68;
  568.         RSP_0x70 = RCX; // mov [rsp+70h],rcx
  569.         RDX = readMemory<uint64_t>(imageBase + 0x67FB135);
  570.         RCX = RAX;
  571.         RCX >>= 0x1D;
  572.         RAX ^= RCX;
  573.         RCX = RAX;
  574.         RCX >>= 0x3A;
  575.         RAX ^= RCX;
  576.         RCX = imageBase;
  577.         RCX += 0x759AA3A7;
  578.         RCX += R11;
  579.         RAX += RCX;
  580.         RCX = 0x7C95F63657C1D725;
  581.         RAX *= RCX;
  582.         RCX = 0xE86C0C7105CDFF33;
  583.         RAX *= RCX;
  584.         R10 = 0xD3FE55DB3D4FC3C5;
  585.         RCX = R11;
  586.         RCX *= RSP_0x70; // imul rcx,[rsp+70h]
  587.         RCX += R10;
  588.         RAX += RCX;
  589.         RCX = 0x0;
  590.         RCX = _rotl64(RCX, 0x10);
  591.         RCX ^= RDX;
  592.         RCX = ~RCX;
  593.         RAX *= readMemory<uint64_t>(RCX + 0xF);
  594.         return RAX;
  595.     }
  596.     case 15: {
  597.         R10 = readMemory<uint64_t>(imageBase + 0x67FB135);
  598.         RCX = imageBase;
  599.         RAX -= RCX;
  600.         RCX = 0xBB37BFCF3BDA3171;
  601.         RAX *= RCX;
  602.         RCX = RAX;
  603.         RCX >>= 0xA;
  604.         RAX ^= RCX;
  605.         RCX = RAX;
  606.         RCX >>= 0x14;
  607.         RAX ^= RCX;
  608.         RCX = RAX;
  609.         RCX >>= 0x28;
  610.         RAX ^= RCX;
  611.         RCX = RAX;
  612.         RCX >>= 0xB;
  613.         RAX ^= RCX;
  614.         RCX = RAX;
  615.         RCX >>= 0x16;
  616.         RAX ^= RCX;
  617.         RCX = RAX;
  618.         RCX >>= 0x2C;
  619.         RCX ^= RAX;
  620.         RDX = 0x0;
  621.         RDX = _rotl64(RDX, 0x10);
  622.         RDX ^= R10;
  623.         RDX = ~RDX;
  624.         RAX = readMemory<uint64_t>(RDX + 0xF);
  625.         RAX *= RCX;
  626.         RCX = 0x6DAE9526BEBF03B9;
  627.         RAX ^= RCX;
  628.         RCX = 0x4408D5B3AA254ED7;
  629.         RAX *= RCX;
  630.         RAX -= R11;
  631.         return RAX;
  632.     }
  633.     }
  634. }
  635.  
  636. extern "C" auto decrypt_bone_base(uint64_t imageBase, uint64_t peb) -> uint64_t
  637. {
  638.     uint64_t RAX = imageBase, RBX = imageBase, RCX = imageBase, RDX = imageBase, R8 = imageBase, RDI = imageBase, RSI = imageBase, R9 = imageBase, R10 = imageBase, R11 = imageBase, R12 = imageBase, R13 = imageBase, R14 = imageBase, R15 = imageBase, RBP = 0, RSP = 0;
  639.  
  640.     R8 = readMemory<uint64_t>(imageBase + 0x15C1FC98);
  641.     if (R8 == 0) {
  642.         return 0;
  643.     }
  644.     RBX = peb; // mov rbx,gs:[rax]
  645.     // test r8,r8
  646.     // je 00007FF79426CEB2h
  647.     RAX = RBX;
  648.     RAX >>= 0x1C;
  649.     RAX &= 0xF;
  650.     // cmp rax,0Eh
  651.     // ja 00007FF79426C9D7h
  652.     switch (RAX) {
  653.     case 0: {
  654.         // push rbx
  655.         // pushfq
  656.         // pop rbx
  657.         // popfq
  658.         // pop rbx
  659.         R10 = readMemory<uint64_t>(imageBase + 0x67FB1F9);
  660.         RAX = 0xD400C48A96FD460B;
  661.         R8 *= RAX;
  662.         R8 ^= RBX;
  663.         RAX = 0x0;
  664.         RAX = _rotl64(RAX, 0x10);
  665.         RAX ^= R10;
  666.         RAX = _byteswap_uint64(RAX);
  667.         R8 *= readMemory<uint64_t>(RAX + 0x11);
  668.         RAX = R8;
  669.         RAX >>= 0x17;
  670.         R8 ^= RAX;
  671.         RCX = R8;
  672.         RCX >>= 0x2E;
  673.         RCX ^= R8;
  674.         R8 = imageBase + 0x558FDA8C;
  675.         RAX = RBX;
  676.         RAX = ~RAX;
  677.         R8 *= RAX;
  678.         RAX = imageBase + 0x5E7CD6BA;
  679.         R8 += RCX;
  680.         R8 += RAX;
  681.         RAX = imageBase;
  682.         R8 -= RAX;
  683.         return R8;
  684.     }
  685.     case 1: {
  686.         R10 = readMemory<uint64_t>(imageBase + 0x67FB1F9);
  687.         RAX = 0x591390EF81A13BC6;
  688.         R8 ^= RAX;
  689.         RAX = 0xCC16DF6688041E13;
  690.         R8 *= RAX;
  691.         RAX = R8;
  692.         RAX >>= 0x12;
  693.         R8 ^= RAX;
  694.         RAX = R8;
  695.         RAX >>= 0x24;
  696.         R8 ^= RAX;
  697.         RAX = imageBase;
  698.         R8 ^= RAX;
  699.         RAX = 0x16F30E650A04CB81;
  700.         R8 *= RAX;
  701.         RCX = 0x0;
  702.         RAX = R8;
  703.         RCX = _rotl64(RCX, 0x10);
  704.         RCX ^= R10;
  705.         RAX >>= 0x21;
  706.         RAX ^= R8;
  707.         RCX = _byteswap_uint64(RCX);
  708.         R8 = readMemory<uint64_t>(RCX + 0x11);
  709.         R8 *= RAX;
  710.         R8 -= RBX;
  711.         return R8;
  712.     }
  713.     case 2: {
  714.         uint64_t RSP_0x78 = imageBase;
  715.         // push rax
  716.         // pushfq
  717.         // pop rax
  718.         // popfq
  719.         // pop rax
  720.         RCX = imageBase + 0x6C98B583;
  721.         RSP_0x78 = RCX; // mov [rsp+78h],rcx
  722.         R10 = readMemory<uint64_t>(imageBase + 0x67FB1F9);
  723.         RAX = RBX;
  724.         RAX *= RSP_0x78; // imul rax,[rsp+78h]
  725.         R8 -= RAX;
  726.         RCX = 0x0;
  727.         RAX = R8;
  728.         RCX = _rotl64(RCX, 0x10);
  729.         RCX ^= R10;
  730.         R8 = 0x2629738A1FBB3CBC;
  731.         RAX ^= R8;
  732.         RCX = _byteswap_uint64(RCX);
  733.         R8 = readMemory<uint64_t>(RCX + 0x11);
  734.         R8 *= RAX;
  735.         RAX = imageBase;
  736.         R8 -= RAX;
  737.         RAX = 0x18F2E10705C88997;
  738.         R8 += RAX;
  739.         RAX = R8;
  740.         RAX >>= 0x9;
  741.         R8 ^= RAX;
  742.         RAX = R8;
  743.         RAX >>= 0x12;
  744.         R8 ^= RAX;
  745.         RAX = R8;
  746.         RAX >>= 0x24;
  747.         R8 ^= RAX;
  748.         RAX = R8;
  749.         RAX >>= 0xF;
  750.         R8 ^= RAX;
  751.         RAX = R8;
  752.         RAX >>= 0x1E;
  753.         R8 ^= RAX;
  754.         RAX = R8;
  755.         RAX >>= 0x3C;
  756.         R8 ^= RAX;
  757.         RAX = 0x790DC5F9E77DB383;
  758.         R8 *= RAX;
  759.         return R8;
  760.     }
  761.     case 3: {
  762.         uint64_t RBP_NEG_0x38 = imageBase;
  763.         R9 = readMemory<uint64_t>(imageBase + 0x67FB1F9);
  764.         RAX = R8;
  765.         RAX >>= 0x1;
  766.         R8 ^= RAX;
  767.         RAX = R8;
  768.         RAX >>= 0x2;
  769.         R8 ^= RAX;
  770.         RAX = R8;
  771.         RAX >>= 0x4;
  772.         R8 ^= RAX;
  773.         RAX = R8;
  774.         RAX >>= 0x8;
  775.         R8 ^= RAX;
  776.         RAX = R8;
  777.         RAX >>= 0x10;
  778.         R8 ^= RAX;
  779.         RAX = R8;
  780.         RAX >>= 0x20;
  781.         R8 ^= RAX;
  782.         RAX = 0x4362551BD1A44749;
  783.         R8 *= RAX;
  784.         RAX = 0x3AC41A89C131E9C3;
  785.         R8 += RAX;
  786.         RAX = R8;
  787.         RAX >>= 0x1F;
  788.         R8 ^= RAX;
  789.         RAX = R8;
  790.         RAX >>= 0x3E;
  791.         R8 ^= RAX;
  792.         RAX = RBX;
  793.         RAX -= RBP_NEG_0x38; // sub rax,[rbp-38h]
  794.         RAX -= 0x2987173F;
  795.         R8 ^= RAX;
  796.         RAX = 0x0;
  797.         RAX = _rotl64(RAX, 0x10);
  798.         RAX ^= R9;
  799.         RAX = _byteswap_uint64(RAX);
  800.         R8 *= readMemory<uint64_t>(RAX + 0x11);
  801.         RAX = 0x6CF642E511B85B3B;
  802.         R8 *= RAX;
  803.         RAX = R8;
  804.         RAX >>= 0x12;
  805.         R8 ^= RAX;
  806.         RAX = R8;
  807.         RAX >>= 0x24;
  808.         R8 ^= RAX;
  809.         return R8;
  810.     }
  811.     case 4: {
  812.         RCX = readMemory<uint64_t>(imageBase + 0x67FB1F9);
  813.         RAX = R8;
  814.         RAX >>= 0x24;
  815.         R8 ^= RAX;
  816.         RAX = R8;
  817.         RAX >>= 0x19;
  818.         R8 ^= RAX;
  819.         RAX = R8;
  820.         RAX >>= 0x32;
  821.         R8 ^= RAX;
  822.         RAX = 0x3AE6C8EA23D7CAA9;
  823.         R8 -= RAX;
  824.         RAX = imageBase;
  825.         R8 ^= RAX;
  826.         RAX = R8;
  827.         RAX >>= 0x7;
  828.         R8 ^= RAX;
  829.         RAX = R8;
  830.         RAX >>= 0xE;
  831.         R8 ^= RAX;
  832.         RAX = R8;
  833.         RAX >>= 0x1C;
  834.         R8 ^= RAX;
  835.         RAX = R8;
  836.         RAX >>= 0x38;
  837.         R8 ^= RAX;
  838.         RAX = 0x0;
  839.         RAX = _rotl64(RAX, 0x10);
  840.         RAX ^= RCX;
  841.         RAX = _byteswap_uint64(RAX);
  842.         R8 *= readMemory<uint64_t>(RAX + 0x11);
  843.         RAX = 0xE1ABE343F54D02D3;
  844.         R8 *= RAX;
  845.         RAX = imageBase + 0x8015;
  846.         RAX = ~RAX;
  847.         RAX ^= RBX;
  848.         R8 ^= RAX;
  849.         return R8;
  850.     }
  851.     case 5: {
  852.         uint64_t RBP_NEG_0x40 = imageBase;
  853.         uint64_t RBP_NEG_0x68 = imageBase;
  854.         // pushfq
  855.         // push rbx
  856.         // pop rbx
  857.         // pop rbx
  858.         R10 = readMemory<uint64_t>(imageBase + 0x67FB1F9);
  859.         RAX = imageBase + 0xCB49;
  860.         RBP_NEG_0x68 = RAX; // mov [rbp-68h],rax
  861.         RAX = imageBase + 0x17A7AB8F;
  862.         RBP_NEG_0x40 = RAX; // mov [rbp-40h],rax
  863.         RAX = R8;
  864.         RAX >>= 0xC;
  865.         R8 ^= RAX;
  866.         RAX = R8;
  867.         RAX >>= 0x18;
  868.         R8 ^= RAX;
  869.         RAX = R8;
  870.         RAX >>= 0x30;
  871.         R8 ^= RAX;
  872.         RAX = RBX;
  873.         RAX ^= RBP_NEG_0x68; // xor rax,[rbp-68h]
  874.         R8 += RAX;
  875.         RAX = 0x9A5C4FFF10BB23F;
  876.         R8 *= RAX;
  877.         RAX = imageBase;
  878.         RAX += 0x7198;
  879.         RAX += RBX;
  880.         R8 ^= RAX;
  881.         RAX = 0xC07464ABE121CBB2;
  882.         R8 ^= RAX;
  883.         RAX = RBX;
  884.         RCX = 0x0;
  885.         RAX = ~RAX;
  886.         RAX ^= RBP_NEG_0x40; // xor rax,[rbp-40h]
  887.         RAX += R8;
  888.         RCX = _rotl64(RCX, 0x10);
  889.         RCX ^= R10;
  890.         RCX = _byteswap_uint64(RCX);
  891.         R8 = readMemory<uint64_t>(RCX + 0x11);
  892.         R8 *= RAX;
  893.         RAX = 0xC9F41707BF09F16B;
  894.         R8 *= RAX;
  895.         return R8;
  896.     }
  897.     case 6: {
  898.         R11 = imageBase + 0x3BAA;
  899.         R9 = readMemory<uint64_t>(imageBase + 0x67FB1F9);
  900.         RAX = 0x0;
  901.         RAX = _rotl64(RAX, 0x10);
  902.         RAX ^= R9;
  903.         RAX = _byteswap_uint64(RAX);
  904.         RAX = readMemory<uint64_t>(RAX + 0x11);
  905.         R8 *= RAX;
  906.         RAX = 0xAF99A13EE9F4F5E7;
  907.         R8 *= RAX;
  908.         RAX = imageBase;
  909.         R8 += RAX;
  910.         RAX = 0x9FF32413B72D07C0;
  911.         R8 ^= RAX;
  912.         RAX = R11;
  913.         RAX = ~RAX;
  914.         RAX *= RBX;
  915.         R8 ^= RAX;
  916.         RAX = 0xF2CA424F0A6D19A7;
  917.         R8 ^= RAX;
  918.         RAX = R8;
  919.         RAX >>= 0x27;
  920.         R8 ^= RAX;
  921.         RAX = imageBase;
  922.         R8 -= RAX;
  923.         return R8;
  924.     }
  925.     case 7: {
  926.         uint64_t RBP_NEG_0x70 = imageBase;
  927.         // push rbx
  928.         // pushfq
  929.         // pop rbx
  930.         // popfq
  931.         // pop rbx
  932.         RCX = imageBase + 0xCFDE;
  933.         RBP_NEG_0x70 = RCX; // mov [rbp-70h],rcx
  934.         R10 = readMemory<uint64_t>(imageBase + 0x67FB1F9);
  935.         RAX = R8;
  936.         RAX >>= 0x26;
  937.         R8 ^= RAX;
  938.         RAX = imageBase;
  939.         R8 -= RAX;
  940.         RCX = 0x0;
  941.         RCX = _rotl64(RCX, 0x10);
  942.         RCX ^= R10;
  943.         RAX = RBX;
  944.         RAX *= RBP_NEG_0x70; // imul rax,[rbp-70h]
  945.         RCX = _byteswap_uint64(RCX);
  946.         R8 -= RAX;
  947.         RAX = 0x49E8B26B7A37ACB;
  948.         RAX *= R8;
  949.         R8 = 0x20AB3E8CAD4A4075;
  950.         RAX += R8;
  951.         R8 = readMemory<uint64_t>(RCX + 0x11);
  952.         R8 *= RAX;
  953.         RAX = imageBase;
  954.         R8 -= RAX;
  955.         RAX = 0x5E2BF7651FDE63D7;
  956.         R8 -= RAX;
  957.         return R8;
  958.     }
  959.     case 8: {
  960.         R11 = readMemory<uint64_t>(imageBase + 0x67FB1F9);
  961.         RCX = RBX;
  962.         RCX = ~RCX;
  963.         RDX = 0x0;
  964.         RAX = imageBase + 0x81F2;
  965.         RDX = _rotl64(RDX, 0x10);
  966.         RAX = ~RAX;
  967.         RCX *= RAX;
  968.         RDX ^= R11;
  969.         RCX += R8;
  970.         RDX = _byteswap_uint64(RDX);
  971.         R8 = readMemory<uint64_t>(RDX + 0x11);
  972.         R8 *= RCX;
  973.         RDX = imageBase + 0x30BFADDC;
  974.         RAX = 0xEF32FB22BA05068D;
  975.         R8 *= RAX;
  976.         RAX = RBX;
  977.         RAX *= RDX;
  978.         R8 ^= RAX;
  979.         RAX = R8;
  980.         RAX >>= 0x1D;
  981.         R8 ^= RAX;
  982.         RAX = R8;
  983.         RAX >>= 0x3A;
  984.         R8 ^= RAX;
  985.         RAX = 0x36823D1F32D5C0C9;
  986.         R8 ^= RAX;
  987.         RAX = R8;
  988.         RAX >>= 0x8;
  989.         R8 ^= RAX;
  990.         RAX = R8;
  991.         RAX >>= 0x10;
  992.         R8 ^= RAX;
  993.         RAX = R8;
  994.         RAX >>= 0x20;
  995.         R8 ^= RAX;
  996.         RAX = 0xE8ABE8747885683F;
  997.         R8 ^= RAX;
  998.         return R8;
  999.     }
  1000.     case 9: {
  1001.         R10 = readMemory<uint64_t>(imageBase + 0x67FB1F9);
  1002.         RCX = 0x0;
  1003.         RAX = imageBase + 0x9CBF;
  1004.         RCX = _rotl64(RCX, 0x10);
  1005.         RAX -= RBX;
  1006.         RAX ^= R8;
  1007.         RCX ^= R10;
  1008.         RCX = _byteswap_uint64(RCX);
  1009.         R8 = readMemory<uint64_t>(RCX + 0x11);
  1010.         R8 *= RAX;
  1011.         RAX = 0xCB29257956CB181C;
  1012.         R8 ^= RAX;
  1013.         RAX = R8;
  1014.         RAX >>= 0x18;
  1015.         R8 ^= RAX;
  1016.         RAX = R8;
  1017.         RAX >>= 0x30;
  1018.         R8 ^= RAX;
  1019.         RAX = R8;
  1020.         RAX >>= 0xB;
  1021.         R8 ^= RAX;
  1022.         RAX = R8;
  1023.         RAX >>= 0x16;
  1024.         R8 ^= RAX;
  1025.         RAX = R8;
  1026.         RAX >>= 0x2C;
  1027.         RAX ^= RBX;
  1028.         R8 ^= RAX;
  1029.         RAX = 0x7A5E53429AB1ADCF;
  1030.         R8 *= RAX;
  1031.         RAX = imageBase + 0x1C9;
  1032.         RAX = ~RAX;
  1033.         RAX += RBX;
  1034.         R8 ^= RAX;
  1035.         return R8;
  1036.     }
  1037.     case 10: {
  1038.         uint64_t RBP_NEG_0x38 = imageBase;
  1039.         R10 = readMemory<uint64_t>(imageBase + 0x67FB1F9);
  1040.         RAX = R8;
  1041.         RAX >>= 0x5;
  1042.         R8 ^= RAX;
  1043.         RAX = R8;
  1044.         RAX >>= 0xA;
  1045.         R8 ^= RAX;
  1046.         RAX = R8;
  1047.         RAX >>= 0x14;
  1048.         R8 ^= RAX;
  1049.         RAX = R8;
  1050.         RAX >>= 0x28;
  1051.         R8 ^= RAX;
  1052.         RCX = 0x0;
  1053.         RAX = RBX;
  1054.         RAX = ~RAX;
  1055.         RCX = _rotl64(RCX, 0x10);
  1056.         RAX -= RBP_NEG_0x38; // sub rax,[rbp-38h]
  1057.         RCX ^= R10;
  1058.         RAX += 0xFFFFFFFFFFFF31FA;
  1059.         RAX += R8;
  1060.         RCX = _byteswap_uint64(RCX);
  1061.         R8 = readMemory<uint64_t>(RCX + 0x11);
  1062.         R8 *= RAX;
  1063.         RAX = 0x590B701CB12E47F0;
  1064.         R8 -= RAX;
  1065.         RAX = 0x63C8FF0DB78B46F7;
  1066.         R8 ^= RAX;
  1067.         RAX = imageBase;
  1068.         R8 -= RAX;
  1069.         R8 += 0xFFFFFFFFFFFF8925;
  1070.         R8 += RBX;
  1071.         RAX = R8;
  1072.         RAX >>= 0x22;
  1073.         R8 ^= RAX;
  1074.         RAX = 0xFAFEBF069D0D69D;
  1075.         R8 *= RAX;
  1076.         return R8;
  1077.     }
  1078.     case 11: {
  1079.         R10 = readMemory<uint64_t>(imageBase + 0x67FB1F9);
  1080.         R8 ^= RBX;
  1081.         RAX = 0xA49C7A33AB5E8F89;
  1082.         R8 *= RAX;
  1083.         RAX = R8 + RBX;
  1084.         R8 = 0x2BE4C9B9AD37236A;
  1085.         RAX += R8;
  1086.         R8 = imageBase;
  1087.         R8 += RAX;
  1088.         RAX = 0xE7F1DC6FBEF3C745;
  1089.         R8 ^= RAX;
  1090.         RAX = R8;
  1091.         RAX >>= 0x28;
  1092.         R8 ^= RAX;
  1093.         RAX = imageBase;
  1094.         R8 -= RAX;
  1095.         RAX = 0x0;
  1096.         RAX = _rotl64(RAX, 0x10);
  1097.         RAX ^= R10;
  1098.         RAX = _byteswap_uint64(RAX);
  1099.         R8 *= readMemory<uint64_t>(RAX + 0x11);
  1100.         return R8;
  1101.     }
  1102.     case 12: {
  1103.         uint64_t RBP_NEG_0x38 = imageBase;
  1104.         R10 = readMemory<uint64_t>(imageBase + 0x67FB1F9);
  1105.         RCX = 0x0;
  1106.         RCX = _rotl64(RCX, 0x10);
  1107.         RAX = R8;
  1108.         RCX ^= R10;
  1109.         R8 = imageBase;
  1110.         RAX -= R8;
  1111.         RCX = _byteswap_uint64(RCX);
  1112.         R8 = readMemory<uint64_t>(RCX + 0x11);
  1113.         R8 *= RAX;
  1114.         RCX = imageBase + 0x4122C852;
  1115.         RAX = RBX;
  1116.         RAX = ~RAX;
  1117.         R8 ^= RAX;
  1118.         R8 ^= RCX;
  1119.         RAX = 0x9371937110C3E571;
  1120.         R8 *= RAX;
  1121.         RAX = 0x4D6579411936D45B;
  1122.         R8 += RAX;
  1123.         RAX = RBX;
  1124.         RAX = ~RAX;
  1125.         RAX -= RBP_NEG_0x38; // sub rax,[rbp-38h]
  1126.         RAX += 0xFFFFFFFFB91CA8FA;
  1127.         R8 += RAX;
  1128.         RAX = R8;
  1129.         RAX >>= 0x1B;
  1130.         R8 ^= RAX;
  1131.         RAX = R8;
  1132.         RAX >>= 0x36;
  1133.         R8 ^= RAX;
  1134.         R8 ^= RBX;
  1135.         return R8;
  1136.     }
  1137.     case 13: {
  1138.         R9 = readMemory<uint64_t>(imageBase + 0x67FB1F9);
  1139.         RAX = R8;
  1140.         RAX >>= 0xF;
  1141.         R8 ^= RAX;
  1142.         RAX = R8;
  1143.         RAX >>= 0x1E;
  1144.         R8 ^= RAX;
  1145.         RAX = R8;
  1146.         RAX >>= 0x3C;
  1147.         R8 ^= RAX;
  1148.         RAX = R8;
  1149.         RAX >>= 0xC;
  1150.         R8 ^= RAX;
  1151.         RAX = R8;
  1152.         RAX >>= 0x18;
  1153.         R8 ^= RAX;
  1154.         RAX = R8;
  1155.         RAX >>= 0x30;
  1156.         R8 ^= RAX;
  1157.         RAX = R8;
  1158.         RAX >>= 0x25;
  1159.         R8 ^= RAX;
  1160.         RAX = R8;
  1161.         RAX >>= 0x1A;
  1162.         R8 ^= RAX;
  1163.         RAX = R8;
  1164.         RAX >>= 0x34;
  1165.         R8 ^= RAX;
  1166.         RAX = 0x9A89C5674FFB7774;
  1167.         R8 ^= RAX;
  1168.         RAX = 0x0;
  1169.         RAX = _rotl64(RAX, 0x10);
  1170.         RAX ^= R9;
  1171.         RAX = _byteswap_uint64(RAX);
  1172.         RAX = readMemory<uint64_t>(RAX + 0x11);
  1173.         R8 *= RAX;
  1174.         RAX = 0x91F3B14EA4FDE6D1;
  1175.         R8 *= RAX;
  1176.         RAX = 0xA4CB864A0E00D31A;
  1177.         R8 ^= RAX;
  1178.         return R8;
  1179.     }
  1180.     case 14: {
  1181.         uint64_t RBP_NEG_0x78 = imageBase;
  1182.         // pushfq
  1183.         // push rbx
  1184.         // pop rbx
  1185.         // pop rbx
  1186.         RCX = imageBase + 0x461ECA5D;
  1187.         RBP_NEG_0x78 = RCX; // mov [rbp-78h],rcx
  1188.         R10 = readMemory<uint64_t>(imageBase + 0x67FB1F9);
  1189.         RAX = imageBase;
  1190.         R8 -= RAX;
  1191.         R8 += 0xFFFFFFFFFFFF7BD5;
  1192.         R8 += RBX;
  1193.         RAX = R8;
  1194.         RAX >>= 0x6;
  1195.         R8 ^= RAX;
  1196.         RAX = R8;
  1197.         RAX >>= 0xC;
  1198.         R8 ^= RAX;
  1199.         RAX = R8;
  1200.         RAX >>= 0x18;
  1201.         R8 ^= RAX;
  1202.         RAX = R8;
  1203.         RAX >>= 0x30;
  1204.         R8 ^= RAX;
  1205.         RAX = R8;
  1206.         RAX >>= 0x22;
  1207.         R8 ^= RAX;
  1208.         RCX = 0x0;
  1209.         RCX = _rotl64(RCX, 0x10);
  1210.         RCX ^= R10;
  1211.         RAX = RBX;
  1212.         RAX *= RBP_NEG_0x78; // imul rax,[rbp-78h]
  1213.         RCX = _byteswap_uint64(RCX);
  1214.         RAX += R8;
  1215.         R8 = readMemory<uint64_t>(RCX + 0x11);
  1216.         R8 *= RAX;
  1217.         RAX = 0x63B31A1DCE69F77D;
  1218.         R8 *= RAX;
  1219.         RAX = 0x343FE360E5370467;
  1220.         R8 += RAX;
  1221.         RAX = 0xA12AF9348C1AD707;
  1222.         R8 *= RAX;
  1223.         return R8;
  1224.     }
  1225.     case 15: {
  1226.         R9 = readMemory<uint64_t>(imageBase + 0x67FB1F9);
  1227.         RAX = imageBase;
  1228.         RAX += 0xEF9A;
  1229.         RAX += RBX;
  1230.         R8 ^= RAX;
  1231.         RAX = 0x3231A3180BAD9379;
  1232.         R8 -= RAX;
  1233.         RAX = 0x0;
  1234.         RAX = _rotl64(RAX, 0x10);
  1235.         RAX ^= R9;
  1236.         RAX = _byteswap_uint64(RAX);
  1237.         R8 *= readMemory<uint64_t>(RAX + 0x11);
  1238.         R8 ^= RBX;
  1239.         RAX = 0xF8BCB6CC9131BD90;
  1240.         R8 ^= RAX;
  1241.         RAX = 0x87C739185401C56F;
  1242.         R8 *= RAX;
  1243.         RAX = R8;
  1244.         RAX >>= 0x1F;
  1245.         R8 ^= RAX;
  1246.         RAX = R8;
  1247.         RAX >>= 0x3E;
  1248.         R8 ^= RAX;
  1249.         R8 ^= RBX;
  1250.         return R8;
  1251.     }
  1252.     }
  1253. }
  1254.  
  1255. extern "C" auto get_bone_index(uint32_t index, uint64_t imageBase) -> uint64_t
  1256. {
  1257.     uint64_t RAX = imageBase, RBX = imageBase, RCX = imageBase, RDX = imageBase, R8 = imageBase, RDI = imageBase, RSI = imageBase, R9 = imageBase, R10 = imageBase, R11 = imageBase, R12 = imageBase, R13 = imageBase, R14 = imageBase, R15 = imageBase, RBP = 0, RSP = 0;
  1258.  
  1259.     RBX = index;
  1260.     RCX = RBX * 0x13C8;
  1261.     RAX = 0x9C92F0E69464C391;
  1262.     R11 = imageBase;
  1263.     RAX = _umul128(RAX, RCX, &RDX);
  1264.     R10 = 0x1CA24BE426242F17;
  1265.     RDX >>= 0xC;
  1266.     RAX = RDX * 0x1A29;
  1267.     RCX -= RAX;
  1268.     RAX = 0x16CE99808323F2A3;
  1269.     R8 = RCX * 0x1A29;
  1270.     RAX = _umul128(RAX, R8, &RDX);
  1271.     RDX >>= 0xA;
  1272.     RAX = RDX * 0x2CE6;
  1273.     R8 -= RAX;
  1274.     RAX = 0x8618618618618619;
  1275.     RAX = _umul128(RAX, R8, &RDX);
  1276.     RAX = R8;
  1277.     RAX -= RDX;
  1278.     RAX >>= 0x1;
  1279.     RAX += RDX;
  1280.     RAX >>= 0x4;
  1281.     RCX = RAX * 0x15;
  1282.     RAX = 0x3E22CBCE4A9027C5;
  1283.     RAX = _umul128(RAX, R8, &RDX);
  1284.     RAX = R8;
  1285.     RAX -= RDX;
  1286.     RAX >>= 0x1;
  1287.     RAX += RDX;
  1288.     RAX >>= 0x9;
  1289.     RCX += RAX;
  1290.     RAX = RCX * 0x670;
  1291.     RCX = R8 * 0x672;
  1292.     RCX -= RAX;
  1293.     RAX = readMemory<uint16_t>(RCX + R11 + 0x68086E0);
  1294.     R8 = RAX * 0x13C8;
  1295.     RAX = R10;
  1296.     RAX = _umul128(RAX, R8, &RDX);
  1297.     RAX = R10;
  1298.     RDX >>= 0xA;
  1299.     RCX = RDX * 0x23C3;
  1300.     R8 -= RCX;
  1301.     R9 = R8 * 0x36D0;
  1302.     RAX = _umul128(RAX, R9, &RDX);
  1303.     RDX >>= 0xA;
  1304.     RAX = RDX * 0x23C3;
  1305.     R9 -= RAX;
  1306.     RAX = 0x95024AB90638887F;
  1307.     RAX = _umul128(RAX, R9, &RDX);
  1308.     RCX = R9;
  1309.     R9 &= 0x1;
  1310.     RDX >>= 0xC;
  1311.     RAX = RDX * 0x1B7D;
  1312.     RCX -= RAX;
  1313.     RAX = R9 + RCX * 2;
  1314.     RSI = readMemory<uint16_t>(R11 + RAX * 2 + 0x6810E10);
  1315.     return RSI;
  1316. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement