├── README.md ├── Vector3.h └── main.cpp /README.md: -------------------------------------------------------------------------------- 1 | # Standoff2 2 | Standoff 2 Masskill and Telekill source 3 | Version Standoff 2 : 0.15.0 4 | 5 | 6 | Used for your Mod Menus 7 | 8 | If you want to create Masskill and Telekill for other games - change offsets 9 | -------------------------------------------------------------------------------- /Vector3.h: -------------------------------------------------------------------------------- 1 | class Vector3 { 2 | public: 3 | float x; 4 | float y; 5 | float z; 6 | Vector3() : x(0), y(0), z(0) {} 7 | Vector3(float x1, float y1, float z1) : x(x1), y(y1), z(z1) {} 8 | Vector3(const Vector3 &v); 9 | ~Vector3(); 10 | }; 11 | Vector3::Vector3(const Vector3 &v) : x(v.x), y(v.y), z(v.z) {} 12 | Vector3::~Vector3() {} 13 | 14 | int GetPlayerTeam(void* player) { 15 | return *(int*)((uint64_t)player + 0x14); 16 | } 17 | 18 | Vector3 get_position(void* transform) { 19 | if (!transform) 20 | return Vector3(); 21 | 22 | Vector3 position; 23 | 24 | static const auto get_position_injected = reinterpret_cast(getAbsoluteAddress("libil2cpp.so", 0x277913C));//UnityEngine.CoreModule 25 | get_position_injected(transform, position); 26 | 27 | return position; 28 | } 29 | 30 | void set_position(void* transform, Vector3 test) { 31 | 32 | if (transform) { 33 | static const auto set_position_injected = reinterpret_cast(getAbsoluteAddress("libil2cpp.so", 0x27791F4));//UnityEngine.CoreModule 34 | set_position_injected(transform, test); 35 | } 36 | } 37 | 38 | void* get_transform(void* player) { 39 | if (!player) 40 | return NULL; 41 | 42 | static const auto get_transform_injected = reinterpret_cast(getAbsoluteAddress("libil2cpp.so", 0x1E5DB98));//UnityEngine.CoreModule 43 | 44 | return (void*)get_transform_injected(player); 45 | } 46 | 47 | Vector3 GetPlayerLocation(void *player){ 48 | Vector3 location; 49 | location = get_position(get_transform(player)); 50 | 51 | return location; 52 | } 53 | 54 | void* myPlayer = NULL; 55 | void *enemyPlayer = NULL; 56 | 57 | -------------------------------------------------------------------------------- /main.cpp: -------------------------------------------------------------------------------- 1 | /* 2 | * Credits: 3 | * 4 | * Octowolve - Mod menu: https://github.com/z3r0Sec/Substrate-Template-With-Mod-Menu 5 | * And hooking: https://github.com/z3r0Sec/Substrate-Hooking-Example 6 | * VanHoevenTR A.K.A Nixi: https://github.com/LGLTeam/VanHoevenTR_Android_Mod_Menu 7 | * MrIkso - Mod menu: https://github.com/MrIkso/FloatingModMenu 8 | * Rprop - https://github.com/Rprop/And64InlineHook 9 | * MJx0 A.K.A Ruit - KittyMemory: https://github.com/MJx0/KittyMemory 10 | * */ 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | #include 29 | #include 30 | #include 31 | #include 32 | #include 33 | #include 34 | #include 35 | #include 36 | #include 37 | #include "Includes/Logger.h" 38 | #import "Includes/Utils.h" 39 | #include "Includes/Strings.h" 40 | #include 41 | #if defined(__aarch64__) 42 | #include 43 | #else 44 | 45 | #include 46 | 47 | #endif 48 | 49 | #include "KittyMemory/MemoryPatch.h" 50 | #include "Includes/Logger.h" 51 | 52 | extern "C" { 53 | JNIEXPORT jboolean JNICALL 54 | Java_uk_lgl_modmenu_FloatingModMenuService_EnableSounds( 55 | JNIEnv *env, 56 | jobject activityObject) { 57 | return true; 58 | } 59 | 60 | JNIEXPORT jstring JNICALL 61 | Java_uk_lgl_modmenu_FloatingModMenuService_Title( 62 | JNIEnv *env, 63 | jobject activityObject) { 64 | jstring str = env->NewStringUTF("Your Name"); 65 | return str; 66 | } 67 | 68 | JNIEXPORT jstring JNICALL 69 | Java_uk_lgl_modmenu_FloatingModMenuService_Icon( 70 | JNIEnv *env, 71 | jobject activityObject) { 72 | 73 | //Use https://www.base64encode.org/ to encode your image to base64 74 | 75 | std::string str = "iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAMAAAC3Ycb+AAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAADeUExURUdwTAC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwC8DwAAAAC8D2XRAEiaABIyADl6AGDJACNSAD6FACthAAYcAE6kAAEQADNtAFi3AACyDVzAAAglAABCAQC3DQAIAACgClKtAACTCAAwAWPNAABLAgBnBBxCAABzBQCoCwBbAwB8BgBSAl/EAAAZAACZCUyfAAA6AQCOCECJAACGB0aVAEOQADVzABg7AC5nAChbACleAGmQvrQAAAAZdFJOUwDwCxYgcZUr3/nosNDHBKSHVP1jM7lIe0FRwZXpAAAbvElEQVR42u2deX/iqhrH475vUdtJWp06NlXjrlat3Zdpz3n/b+je9qgGAgmJBFD5/XPu59apwLfwLDyAohyg8pHEWTlWjBcy1Ww2mQ6FQvq3QqFQOpnNVjOFeDFWPktE8opUoApXSrF4Jpv+GX5dVXWcNj9K5zLxWKkSlkNHW5FfsXgurfuQ+h+YeOwsKoeRyvKUKBWrSZ2GQrl4uSKXsX3mRSmeS+l0lcrFSxE5tN6VKBeSeiBSdT1ZKCfkEHuAEcuE9KAVysQkFKJlqpDWWSldkMuX89Q4z6k6W6m5czlR0KoUk2svlS0RXU8WK3L4YRrxpM5TybhkYlmpinxprJkU5dr1Y8Vj2T1Hsv1/LQaL7//s+ZuysVO38fmzTMq73egNRm/z2ar7bD4YGizjwXzurmbzt9Gg59meqKnM2QnH8pFzb2a8N3ibL7tmXyNV3+wu52+ewKh68vxEp8mvDHlapPc4X40Nza+M8Wr+SI4llfl1cjTCZVLL0X6ZdR9+/ty1PfXQnb2QWpls+aRy9pEiWTS+mE+bGl01p/MFWRRfPJmVKxonWasG866hBSOjOx+QrFzxk9hCqRTczXj7LjAYOyh37suXWjj6cLGSccXxODM1NjJnj65IMpXTxvGyMjSWMqYvp4sk4YbjbdrX2Ks/fXNDcpQ5laiL7RiteNBYM1mNXGzJ0Zn3cNHRs1osDY2vjKWjN5wqHlVcko85bcn27saaCBrfOQXzodjxJLlKTtn1Acelyr50OcUnydKR2PKqQwJRkMlhnSYOecdq4riNR3tmaOLJmLWP2JSU8EmrxUoTVSu8gU8f9LoVzeDj8a4msrr4GD5zsC6wg281Gmuiazw6Nn8rkTtgHM5Icgdo3PPnqcPG4YgkdX5okySB2xAcPGuHpGdcYJI9rEkSw0yPRVc7NHXRHpeaih2Qc1XFxB1L7RC1xMQl1UNxt0oY52re1w5T/TnG3TqImCQcx9jypna4amKsezx8qNb8AI0HkSkR3raX0dZ8ph2+ZmgHuCz4coVK7D6a2jHIfESmgAVetqLI5aq30o5FK+QOVlZUb+sM6V29PGjHIwNZoxI6EzMYRK1W7ZV2XFqhghJVwCAxXED6uoZ2bDKQHnBBNEMSQaV2e0vtGLVEWZKcWKXZCVQZw6CpHaeaqIxjMiG6OZ9rx6u52Ka9jDDn7a52zOoibLsqSoxYRMWChnbcMlBRYlGIrUGUe3WnHb9QBVwF/huJ4epRx+Ze4/Yqb/c3jHB3F6Z2GjIXiLts+BKJILJXL33tVNRHZFKyPAOSaPI4M+375OTVZFQkHr2pdlqa9sQhguDRHmunprE9IuFEJGGvox48aKenB3siJZ0QY36M+topqj8SYY4geLxpp6o3/kQQPOba6WrOm0gkeeLurrv7m2QZj4Tt8eBSO20t7REiu5gdkS+ZaqeuqX0TkRWRvD2f2NWkurYIscoo91uQPMiI6AU++1G9ZwnjR889HjtWZdvfgeSxJWIbm+B3dUuqXK+82JGgj5AkQpKHJyKhBOOAUPq7Lt5voAGiPQBZSgRuEWKQ4UhB5kt8ZFGCc35jMp/oK9MYVG38mSrz7b6y8WowRaZR2MEayaHHCN6xCgWRi7dleAd9OfIY9QcMMr/w8fP2gxx4rB7gyod44BmT3lgOu4PGvYBzKImUDAj3ChBTiWANiAxAvIYjdM0IbEBe5IB7dn5pmpESXN8uHSwfrlYpsAikJx0sIlerF1Q0UpUZd1+Cc/HVgFJYMoPlN6sVC8TjfZQDTazHAHzfPOTxtg05zsQyoIg9S6Ew6FwaEIpm5Jz6giUNyF5mZO9FKw9t2g7kEHsUFI3k8lQ9rF5TjrBHNXs0PS04JJQ1Dd61pBkeZuQe4f6C9g8z9HJY0uOl4vv6z2mFoXO2wV1h0qxZhTBUZg0l0yD62H+yf8ZANoH+X90KOqPrOxFfZJJzv3pvXUCatF4/wQ9dXqB1/3RjEHzsW/bPNKzfUN/8v1f0u/hCpyYeCkF6gSxYtSFm/N4NjWyk7//xC6TFCojRoxKMVBksWLV77AC2SP/0L758ArkwGQGBF60qDYseTE6x5TCCH6RAJjWfQG5YAYGzjH7seh4qdA/kEqw/ZOPsAuTi0ieQJ2ZATOh+mvzeMXowVQ3XjuNcJwXy2yeQ331WQOCaB+/xegSM0RfBeFj3juP8RArk4tYfEOvgBwykD94+F/J8aiTOIuluWEz4+2vjW6+XHZQXtB3F+8ZGH9d2s7792KRhEwrIKzMgcCLeaw1KNMUiZ2JuR2ZoobQl0kEAsbqqX9t//hf+2G/8l1qBtNgBgTIoKY8pLehoTkBJ3hoyRntHjCoSSNNmbbwCuaixA9Lc5xhPQmWyK1Wz/Yl/65UUiLY/kL/sgEB7VWrCf5a33Q8ciDUiaDAEcs0QSL/tO+tbUdnsgvAHMjHYAYF2RtSK3wmy0I4XyMU/DIFoC59TBJog3WMG8sESSNfnFMmwqmsQAEiHJRCo4iHjb4I8HzWQi0+WQJ59TZECs310EYDUWQKBosOCnyB9fLRA7oEcARsgY3CKRL1nsQItNOELZP0/miyBQFOEJKMVYTdBOANZb8b8YQoEnCKpiNfKhmArsfgCMX9bd7cYAYGmSNFr6c/4iIE0/8vf37MFMvZYElRmeTiHM5Ab6+4WKyDQ9rrrhQJZlodBOAMxral/ZkDAcD3rwuMXoyyWEEDWNS8ttkCgjNYvL1mT1ZEDaVjKs9gBAYq01IwHn7etHSyQSR3QDRrIleXL2QHR2uSe7znbC02CAwKpgwayrnp5YgxkRnzsECyO6xlHD+RyV57FEAhY6utUNHfG+EHbPYHU9gbytWPAEAj0jO4ZaZ53LDqQV9s/9wqkuSvPYglkTLgtApp0BgdufQD5fb3RcFdRt8lHeQaiDbeUWQIBN6rwZj3G1Of1BwStml8g9e2/ZwpkRVboC0TpPe1wgHQ0v0But+VZTIFoPZJoPcH8jXpaQOx1u5NbQJ84IFpnU57FFgho1hMkiffx4QDpPGj+InVtU7c6MTS2QMYkSfgkyzQWRSD3n5p/IP9uyrPYAgETWklkUFhhf2cDFSBPprYHEGOyLs9iDASsYqy476UbggKZdCxqDS//1pCDTQxk7fh2WAMx3PfWk+yvjds3dYIfbHIgaxCfjIGAW7moNavCOggRBMi6DXXWQKZua1aR/YolBJD1LtWQNZB+z8XPSnK49kcIIB/rWIYxEPDm66RLVLg6ISDrXaohayBT59jwnMOKJQaQ/m/QjWYFpO+8TZXjcde+EEC0Jz5AwDuCcnDmXeWwYgkC5IYTEGDNUiNON80YJwXE5AQEiA3VssNeIbPLxMUAAl1JxAwIWMMInRVJc3k+RxAgDU5AgOqTtIPTa54YkCtOQEy84xtjWh8nGhDwUiJ2QMCKuRj2Nr+7kwNyyQnIHe7ev3yIz4t4+951QgvIFycggOMbyuMyvQYHIA2XUQ0WSJMTEAOX8Y1xegBhFwG0dvfbNO9J78uiBkQb8gEC1mfFMIcQGL4Q0rdsjA8vf/Q0/O14oxwhkMmlTXUHIHVOQOaYCsY0ryd0vN+5SAgEoaEDkFtOQLroSCTByYTY8nqQ/jIDonX4ADHQkUiZ2xs6V4739prsgLzzAQIakTKy3oTtI1NDknpEBkD+5QRkjqw9yfJ7l9vE3zV+3WcIZF2exRzIFFXjm08xuIAUpyZmDCcN9EgHBMQyVZkCAa4qTeURYWFPY63PxvB+AsLoPNVNjS2QOh8gYBl8BWHT5UvpbPWCsOpxLnshUj+aIax6Tr6syk9dRKUDkOqVb9ez1QOQ8P3vSj++Nv3UBVj1qO1wunwsnbVGtiPrMfkYNE/NbRn4OI8SOamNrCek1YLNyRrLEWKssc3NSvPKvUt9y5qBV7+3RMLSyRLIzQpDu1MDOT7MNYCyWUCZ9ZscH+Z6g54AjclMFl/NIL83zm93SupbUyi9mJFerzh+r5pRlJxMLfLVAxSIAGFIX44Pe4G1WXmVy0EEqZ2shxJUJSLDEKECEbDCYSRHh4OAbXVwN0TGhTwEHNsBS07kbgj3yFAG6vwFXC4H3sokt6e4h+pg5kTWAPEQ8PwneIXDsxwdzrkTHUxlmXJ0OAi4P0CmsvjrAQ9EprJ4CDjXBh7WkYPDRQCQpAQiFpC0BCIWkJDMvnNXWwKRQKRIgaQkEO6yviWiMH/ERUoCkUCk/AORNkQwINLLkm6vlARyQEBkLou/ZLZXZCByP0QwIDl5Bpe3DLmnLpYeZNWJWDLxdVnyRBsPjfGVi7JQjoee8bW98hAuD03x1e9LOToctMSfD5HHEXhohj9BdSdHh4Pu8GcM5aW9PASeMZSncLkLPIUrz6lzF3hOnfwmB7O2ESag3/68hsiJNWtWNd0+4PhRGg0za3jZP2MgW2ogvsLaBMNpQHaCXtkhTmbtLrq/R/7c8jjLH+gn77ZHKSat10/wQ3XsLfqtj1tHIL4a5nRtv/0zDWRLLdf2bx/OurR88A/RBf/wXSfEtwFZuoAcoFcMkBru0ZZ3gwzI92tUTdoN8wakFSCQMfQwGPF9WZYu1FE/b6GB1PAPf7UMUiAXrSblhnkDcmEGBwS+L4v4oPql/SkOYCW/QANpOfT8gxiI9cU2Kg3zCOQmOCDwjXLEdy5amjdBGKkvNJA/jsNcIwZy8Um3YR6BPAUHBL5zsUIaiFi78I/zjy1Arh1HuU4OpEG3YR6B/O4HBgS+lZT43t5LzFqz1j0aCPHTkW5AhnQb5hGIdUgpA4Hv7SW+2draPPtLUNa3Mi39Niz/5v218a3Xyw7q9+yA/P2z0dff3QTr0G3Y7pHWhk2oX/waFBDD9tgn6d3vl5jFH/EH/gdhUS1/4UYHMcp19O/e+gQTug3z9Iwx5k+HChD73e+kryNcYl5F/U9DdL/RD3S/I0YDA+TdtpDQaZhXIJZW0QVifx2B9P2QSycv1Ji4AXF7wh4D5NUjENKGeQbyNyAg9vdDzggv+QOaB3fjnws3IFZPvkEOpOERCGnDPAO5DgiI/YUd0jeoQL8E+ooPUYCQNswzkF2IQxeI/Q0q0lfaLp3CgpYwQAgb5hnILsShCgTxShvpO4aXDmFB7UIYIIQN8w7kIxAgqHcMCV/6hEIpINt3Iw4QwoZ5B9IJBAjqpU/Ct3AvcX37v54EAkLWMO9Attk0qkBQb+ESvhYNNe/d+rPfAgEha5gPIPUggKBeiyZ8T33TvJY9lXEF/IQXEE8N8wTkHrBONIEg31MHD+1M3Zp33bHlw9ej9soXiKeGeQJyCVgnmkCsu1Nqds0DtOpz136/21Ln6/TEFWcgXhrmCcgf4F/TBDJH2HTIqg9c+/0Fh67NdejU5wzES8M8ATF/WwebJpABwqZDL+dhM/DbfpubbkJfPNQ4A/HSME9AmtfWohaKQPrAyCc2QMAtka5bvzfR7xWUka3zBuKlYd6A3FiLWigC6SLi9G9lSIzIrt+v0J5NZ9Nc3kA8NMwbENOalqEIZA6VAG0UIzEiu35fgXs2n9sqNd5APDTMG5D13GvRBjKw5d4RoSHOiOz6vdljMIGhfOIPxEPDPAJpWH4xPSDA9u0mLPwJDUMEkciu3xtv8gsoLLnhD8RDw3Z76nVAN2ggV5ZO0AMC1MiF8jsgSpXg2I6l33Xrl/cn23HkDoS8Ybiqkw4ayLp25YkuEOCoTtXCAzQibdd+31prm692PeEOhLxhXoFc7sqz6AFpY0wIHImYbv3e1DrdWna9P0QAQt4wr0C+diNLDYiJiUJskcjMtd9PliRFa9dX/kCIG+YVSHPnUVMDsrSVZO0EXOjw6Nrvv7vdOdOyL8QfCHHDvAJZ+wstmkAerYNeAIGU3B1fa79ru43/L8vOKX8gxA3zDKS+bRwtIIDTq5ZBIBHVtVzO2u9NDPzP9v9uiAGEuGGegdxuy7NoAQGcXjUCAgErHV5c+/2+NZj3lq8UAAhpw3ZxyC2gTxyQNeprekBeEPUNO527rllAv/9skhS31gyrAEBIG+YxUt+inhgaJSBgpvccBgI6viu3fjc3g1e37kEIAIS0Yd6B/LtZDCkBmTo4vd9KulWUAv3e+JQ3Q+sunQBASBvmHcg6UfZBCwhwcipp4wHe04Ras8B+r6Ou64l1p0AEIIQN8w5k7fh2KAHpA/UmRTuQituaBfb7CvBN1ntpIgAhbJgPIOsWftIBMsVletFr1qNbv/sTxCEAEYAQNswHkHVf6nSAjFxWLKj2BLFmgf0GD8LciAOEsGE+gKzN05AKEHArJI4CAq5ZS7d+A0fFTIGAkDXMD5D10YYGDSBL1xULWrMWbv2+RRzAEwIIWcP8AFmbpyENIAvXFQv2s8Yu/bYeN/4QCQhZw/wA6UOVwnsAAY56onwse2x459ZvS2H5v0IBIWqYHyBwLf0eQO5cokJEjW/Prd+WoxcPQgEhapgvIDfUgABBSBbDA9zItYUicL9r9kNLYgAhapgvICYtICsdu3kL5OBTTvVZcL93x/caYgEhapgvINCJRf9AgHqsVAQHBKxghM26rd+vnbWuBANC0jB/QBp0gIAmPYPlAR5Zh826rd92CQKEpGH+gFzRAQKa9DM8kDwQivQMCQQ+R3pPA4gBmPRkHg8E2qaaSSAwkEsaQGbOW1N4s96mCST4u05YAPmiAaRNaNLtZn1FEUgD1VOqtwGxANJ0A2JtxF80EMDnVTOOPJRfOtbz9dXvnefe2l2S17xH1HiggfRb7gPHEgiQS7YM87ZHvy1ln7vb126xPq/+yxkIGK0DT+746nffslc0vPzR0/C3LfkHAGnsatFfW8j6HJpAJpc21R2A1NFAdu2cDJ/++y3Dji3p/CPgQR18lI48AArsU/nqN8s7F/0BcfgqFJBbNBDnuz4n2HpFvewGJJzGBYf+gDw5tvQvOZC6GEC0DhJInfiPCQwK02E3IFASfrQvkCvHvxyTHEhNECDvSCDmxKntX7itW1ziHe/5WqaIPyDa0KGhVs/LBciHJgiQf5FArBfM29TCThAXnxe1tz7aF4iJv2v8uk8MZGiIAsRyiaMVSB9vRTo17ASJE/BQoip6ivgEojUxfZ+Ad785AZl8OD1swhaIZcqD4V4Ds2o9mdgJokZJgIBnRXZTxC8QTftsDO/B1k46T3XonBYOyKRzXa9pmjhA6riUoVl/6kDdvB82PvHFP/CZEJwqqi6f/wxGYAyiVsiAQPkT+VIYPQ1IN0Icp0hXDiQldf1NEHiKLORIUtLC3wSxTRH5RC4dLf1OEHiKtPtyMCmo3/Y7QRQlAU6RuRxNCpqDEyThBQgUi+hNOZx7q6n7iUG24XpKJ3w0QYpQYEyYinoDAmW0pOtL2eUly2IBSd+QdH0DdHlDEa9AoEJfxycnpdwFlv7gy3lJi+ZwdzZJkQm8icm5OA4n8D4azBVBUmQCN9L1kqL4UFV3vd1Bikzg8QPwNj8P0SHo+vYMObA+BRbz6qmEPyBQvYPDWy9SznrRvVY2EJUEyUXLp8BLG0hKfwjtelsuWr4WrDYNi47K+soMCoWcibcsry2lBcbrcmfEh8BdED0U3QcIHK/3ZNrXq5q9vWN0IF7P6bLiYS+BdQ16Lr8fEDgYkXtVHgXuSvkPQXDHDmUi3pueodE735uHks9K35eax5vN7w/EtmjJLKPvnCKFBQvhaUkz4teA7Oth4dK+0owQCtq19ZvkdQ8Pew9ysAn00KMaEjrktPSFrJxzVx+KQPbKYbnUoMhMPIHe9D3rTBwT8ZDvK2seXAVVNejZME0gNt8X/8q31I+gPRBaHi/uQgFd743loDtoDBl09wsC9jYjbelqkUfodA0IxowMpKtF7GBRNiDoaETuH2IF7RHSjECAGxlV6Hve5NATObzqmRKM4KSWzGoRZbCopbBcj/HIcIQkAPF6NMeTYc/BXyarHmAt4SHKhYMDokSSugwQPQWEejKiBKkE7GrJXDwgOOOuhxJKsCrBrpa8C8UieAtdV0tK0IJzKJKIA48AMiauNfG63pNE1jzgBJb/Ovf9nN+etCM/9qPH0OEFCoOqurTsBPZcr+bZAEGEI9L7tfu7wQYgLplfeZhnZRuRLDseqADxxLMotnxJ0AGhLRdvJ3LKmca5nUdUUXgTOd1s/Bt/HkoeQWR0mnuI/ZEtPk8z5/Gd1krbiAxOcZ/9YWAbh3RC4SHEHGmfXi3KuC3AeoUn0ju1gGTaE4cHksiJub92d1flyENRIvYIUX85HdPef7F3PxtReAqRRdEXp2LaHxY6z3wJhog903gq2V97dlfXq7x5KEq+YG/WSUTtc0S/C3lFABURLXs89rO6xiOi10VFDJVVe9vax71sPdujD10tK6LoLHRiyxZquQqdKeKogghI9MGx3lTTHCB6m6woIimCcH/13nHWNS4R3pWeiyhiKYxytvTR8dl2Y4TqaCGsCKcYwrTr7WPLbU0R1lxXY4qIQpp2/eWYJonxootuzoFcYxbV3N7x1D+sUNZDz0YVURWOoxqsPx7HvfHmI7J38bAisMopZKOPISc/Q/YsVVbEVgK5bOmLQw/cuwtkv7IJRXRhli19dMhhYnOkH+BytT1CEkK3fn6oO1f9ObpDoZJyGIpW0R1oH2bkvmyju1ONKgejGNq2H6IpwRgPPRVTDkkY267rg8M63fM8wPTjAKw5tJF4jpkk+uhwarfGGFuup87zysEpkdMPGwkWh55LKIeofCx0wEiwONRULK8cqKIZHBH9UWzz3n3EtjwTVQ5YpTS2YwtxM/PTAbbV6ZJy2AoXU9jOtWcipuaNWRvb4lQxrBy8ElUdrzvRjMn4zqG11YRyFColHTo5EGm7ZDVwaGmypByLHPyt7x0sQabJ+K7n0MrQ4fpWyKoUB1PybeCXvK2JsVw4NTBVjChHpmjcEYk+mvJLBvenI8e2peJR5QgVLaiO3dbfuDDpT996js1SC0eJ48fhckOiv0zZrl3G9MWlRWohoRyxEhk3JPrjjFVNhDl7dGuMmjlqHN+quM4SXW/fdYOeKEb3ru3aDrVQUU5AbuZ9HZ/MA4PS784HBC04UlOOdoLTuk4EZUq7NKI5JYKh6+njc3QdU1zlrE6m9susS+cU6UN39tIm/NZsOaycmn5lUjqpeqP5aux/BTPGq/moR/xtqcwv5SQVOU/qXtQbvM2XXZM8WOmb3eX8bdDz9C3J84hyssqfeZgmFjCjt/ls1X02H+xw+g/mc3c1m7+NPIJYT46zvHLaisSy+n5q/1+LweL7P3v+pmwsokgpSqKY1PkrWUxIFLtwMc6XSTJekRAgc1LhNk+SRUkDs3ad51TGMNTcuVypHG18qZBmRiNdKEkrTjJRYtVQ4DBC1ZicGl6glAvBmZRkoSxh+Fq+4rkUZRapXFwuU3s5X4lSsUpnroRy8XIlL4d0byTfc+VXLJ7zb+zTuXjsLCqHkrbClVIsnsmmPYDIxGOlyiFl0v8HKtOuZ5Ocqs4AAAAASUVORK5CYII="; 76 | return env->NewStringUTF(str.c_str()); 77 | } 78 | 79 | JNIEXPORT jint JNICALL 80 | Java_uk_lgl_modmenu_FloatingModMenuService_IconSize( 81 | JNIEnv *env, 82 | jobject activityObject) { 83 | return 70; 84 | } 85 | 86 | JNIEXPORT jobjectArray JNICALL 87 | Java_uk_lgl_modmenu_FloatingModMenuService_getFeatureList( 88 | JNIEnv *env, 89 | jobject activityObject) { 90 | jobjectArray ret; 91 | 92 | // Note: Do not translate the first text 93 | // Usage: 94 | // Text_(text) 95 | // Button_[feature name] 96 | // SeekBar_[feature name]_1_3 97 | 98 | const char *features[] = { 99 | "Text_Your Text", 100 | "Button_Telekill", 101 | "Button_Masskill", 102 | "ButtonHide_Icon invisible"}; 103 | 104 | int Total_Feature = (sizeof features / 105 | sizeof features[0]); //Now you dont have to manually update the number everytime; 106 | 107 | ret = (jobjectArray) env->NewObjectArray(Total_Feature, env->FindClass("java/lang/String"), 108 | env->NewStringUTF("")); 109 | int i; 110 | for (i = 0; i < Total_Feature; i++) 111 | env->SetObjectArrayElement(ret, i, env->NewStringUTF(features[i])); 112 | return (ret); 113 | } 114 | 115 | // fancy struct for patches for kittyMemory 116 | struct My_Patches { 117 | // let's assume we have patches for these functions for whatever game 118 | // like show in miniMap boolean function 119 | MemoryPatch GodMode; 120 | // etc... 121 | } hexPatches; 122 | 123 | bool feature1 = false, feature2 = false; 124 | bool telekill = false; 125 | bool masskill = false; 126 | 127 | const char *libName = "libil2cpp.so"; 128 | 129 | JNIEXPORT void JNICALL 130 | Java_uk_lgl_modmenu_FloatingModMenuService_Changes( 131 | JNIEnv *env, 132 | jobject activityObject, 133 | jint feature, 134 | jint value) { 135 | 136 | LOGD("Feature: %d | Value: = %d", feature, value); 137 | 138 | // You must count your features from 0, not 1 139 | switch (feature) { 140 | // The category was 0 so "case 0" is not needed 141 | case 1: //Telekill 142 | telekill = !telekill; 143 | break; 144 | case 2: //Masskill 145 | masskill = !masskill; 146 | break; 147 | } 148 | } 149 | 150 | bool exampleBooleanForToggle = false; 151 | bool GameManagerLateUpdateHookInitialized = false; 152 | 153 | void (*old_Player_update)(void* player); 154 | void Player_update(void* player) { 155 | bool isMine = *(bool *) ((uint64_t) player + 0x2C); 156 | 157 | if (isMine) { 158 | myPlayer = player; 159 | } 160 | 161 | if (myPlayer) { 162 | if (GetPlayerTeam(myPlayer) != GetPlayerTeam(player)) { 163 | enemyPlayer = player; 164 | } 165 | } 166 | if (enemyPlayer) { 167 | 168 | if (masskill) { 169 | Vector3 PlayerLocation = GetPlayerLocation(myPlayer); 170 | 171 | set_position(get_transform(enemyPlayer), 172 | Vector3(PlayerLocation.x, PlayerLocation.y, 173 | PlayerLocation.z + 1)); 174 | 175 | } 176 | } else { 177 | enemyPlayer = NULL; 178 | return; 179 | } 180 | 181 | if (enemyPlayer) { 182 | 183 | if (telekill) { 184 | Vector3 enemyLocation = GetPlayerLocation(enemyPlayer); 185 | 186 | set_position(get_transform(myPlayer), 187 | Vector3(enemyLocation.x, enemyLocation.y, 188 | enemyLocation.z - 1)); 189 | } 190 | } 191 | old_Player_update(player); 192 | } 193 | 194 | // ---------- Hooking ---------- // 195 | 196 | // we will run our patches in a new thread so our while loop doesn't block process main thread 197 | // Don't forget to remove or comment out logs before you compile it. 198 | void *hack_thread(void *) { 199 | LOGI("I have been loaded. Mwuahahahaha"); 200 | 201 | // loop until our target library is found 202 | ProcMap il2cppMap; 203 | do { 204 | il2cppMap = KittyMemory::getLibraryMap(libName); 205 | sleep(1); 206 | } while (!il2cppMap.isValid()); 207 | 208 | // now here we do our stuff 209 | // let's say our patches are meant for an arm library 210 | // http://shell-storm.org/online/Online-Assembler-and-Disassembler/ 211 | /* Armv7: 212 | * mov r0, #0 213 | * bx lr 214 | * Arm64: 215 | * mov x0, #0x0 216 | * ret 217 | */ 218 | // bytes len = 8 219 | 220 | // This is to tell the compiler to compile that code for arm64 only if compiling arm64 lib. 221 | // And else, compile for armv7 lib only 222 | // You may wonder why there is no target for x86. 223 | // x86 is not our high priority and it is being deprecated 224 | 225 | // by default MemoryPatch will cache library map for faster lookup when use getAbsoluteAddress 226 | // You can disable this by passing false for last argument 227 | //gPatches.canShowInMinimap = MemoryPatch("libil2cpp.so", 0x6A6144, "\x01\x00\xA0\xE3\x1E\xFF\x2F\xE1", 8, false); 228 | 229 | #if defined(__aarch64__) //Compile for arm64 lib only 230 | hexPatches.GodMode = MemoryPatch(libName, 0xA672EE, 231 | "\x00\x00\x80\xD2\xC0\x03\x5F\xD6", 8); 232 | // also possible with hex & no need to specify len 233 | hexPatches.GodMode = MemoryPatch::createWithHex("libil2cpp.so", 0xA672EE, "000080D2C0035FD6"); 234 | 235 | // spaces are fine too 236 | hexPatches.GodMode = MemoryPatch::createWithHex("libil2cpp.so", 0xA672EE, "00 00 80 D2 C0 03 5F D6"); 237 | 238 | // ---------- Hook ---------- // 239 | 240 | #else //Compile for armv7 lib only. Do not worry about greyed out highlighting code, it still works 241 | 242 | // ---------- Hook ---------- // 243 | 244 | MSHookFunction((void *) getAbsoluteAddress(libName, 0xBC9C20), (void *) Player_update, 245 | (void **) &old_Player_update); //Standoff.Player(Player Update) 246 | #endif 247 | LOGI("I found the il2cpp lib. Address is: %p", (void *) findLibrary(libName)); 248 | 249 | LOGD("===== New KittyMemory Patch Entry ====="); 250 | LOGD("Patch Address: %p", (void *) hexPatches.GodMode.get_TargetAddress()); 251 | LOGD("Patch Size: %zu", hexPatches.GodMode.get_PatchSize()); 252 | LOGD("Current Bytes: %s", hexPatches.GodMode.get_CurrBytes().c_str()); 253 | 254 | LOGD("Loaded..."); 255 | return NULL; 256 | } 257 | 258 | JNIEXPORT jint JNICALL 259 | JNI_OnLoad(JavaVM *vm, void *reserved) { 260 | JNIEnv *globalEnv; 261 | vm->GetEnv((void **) &globalEnv, JNI_VERSION_1_6); 262 | 263 | // Create a new thread so it does not block the main thread, means the game would not freeze 264 | pthread_t ptid; 265 | pthread_create(&ptid, NULL, hack_thread, NULL); 266 | 267 | return JNI_VERSION_1_6; 268 | } 269 | 270 | JNIEXPORT void JNICALL 271 | JNI_OnUnload(JavaVM *vm, void *reserved) {} 272 | --------------------------------------------------------------------------------