diff --git a/ligma-cheat/ligma-bypass/bypass/bypass.h b/ligma-cheat/ligma-bypass/bypass/bypass.h deleted file mode 100644 index 61a8eb9c4..000000000 --- a/ligma-cheat/ligma-bypass/bypass/bypass.h +++ /dev/null @@ -1,36 +0,0 @@ -#pragma once -#include -#include -#include -#include -#include "../ligma.h" - -#define HWID_VALUE "what do you call nuts on your chin? a dick down your throat you fucking retard!" -#define offset_emulator_check 0x000D7B4 -#define offset_ischeat_packet 0x00128E0 -#define offset_mshook_function 0x0010358 -#define offset_fopen_got 0x23ECC - -namespace ligma -{ - namespace bypass - { - inline void* fopen_ptr = nullptr; - inline void* system_prop_get = nullptr; - inline void* loadbufferx = nullptr; - inline void* loader_dlopen_ptr = nullptr; - - // every shithook you make you will need a mutex. - inline std::mutex fopen_mutex; - inline std::mutex system_prop_mutex; - inline std::mutex loadbufferx_mutex; - inline std::mutex dlopen_mutex; - inline std::function il2cpp_callback; - - void init(const std::function& callback); - void* dlopen_hook(const char* filename, int flags); - FILE* fopen_hook(const char* path, const char* mode); - int system_property_hook(const char* name, char* value); - int loadbufferx_hook(void* L, const char* buff, size_t sz, const char* name, const char* mode); - } -} \ No newline at end of file diff --git a/ligma-cheat/ligma-bypass/hooks/got_hook.h b/ligma-cheat/ligma-bypass/hooks/got_hook.h deleted file mode 100644 index 215d709e7..000000000 --- a/ligma-cheat/ligma-bypass/hooks/got_hook.h +++ /dev/null @@ -1,46 +0,0 @@ -#include -#include -#include -#include -#include - -#define LOGI(...) ((void)__android_log_print(4, "ligma", __VA_ARGS__)) -#define LOGW(...) ((void)__android_log_print(5, "ligma", __VA_ARGS__)) - -namespace ligma -{ - namespace hook - { - // - // TODO this doesnt work yet, needs to be debugged! - // - inline void* got_hook(elf32_hdr* module_base, const std::pair& module_info, void* new_ptr) - { - if (!module_base || !module_info.first || !module_info.second || !new_ptr) - return {}; - - const auto orig_module_base = dlopen(module_info.first, RTLD_NOW); - const auto orig_ptr = dlsym(orig_module_base, module_info.second); - - const auto shstrtab_header_offset = module_base->e_shoff + module_base->e_shstrndx * sizeof(elf32_shdr); - const auto shstr_header = reinterpret_cast(reinterpret_cast(module_base) + shstrtab_header_offset); - - const auto shstr_section = reinterpret_cast(module_base) + shstr_header->sh_offset; - auto section_header = reinterpret_cast(reinterpret_cast(module_base) + module_base->e_shoff); - - for (auto idx = 0u; idx < module_base->e_shnum; ++idx) - { - if (strcmp(shstr_section + section_header->sh_name, ".got")) - { - for (auto section_value = reinterpret_cast(module_base) + section_header->sh_offset; - section_value < reinterpret_cast(module_base) + section_header->sh_size; section_value += 0x8) - if (*reinterpret_cast(section_value) == orig_ptr) - *reinterpret_cast(section_value) = new_ptr; - break; - } - section_header++; - } - return orig_ptr; - } - } -} \ No newline at end of file diff --git a/ligma-cheat/ligma-bypass/hooks/shithook.h b/ligma-cheat/ligma-bypass/hooks/shithook.h deleted file mode 100644 index bdeaaa5cb..000000000 --- a/ligma-cheat/ligma-bypass/hooks/shithook.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - MIT License - - Copyright (c) 2020 xerox - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in all - copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - SOFTWARE. -*/ - -#pragma once -#include -#include -#include -#include -#include - -#define PAGE_START(ptr) reinterpret_cast(reinterpret_cast(ptr) >> 12 << 12) -#define ARM_JMP_CODE 0xE51FF004 - -namespace ligma -{ - namespace hook - { - class detour - { - public: - detour(void* addr_to_hook, void* jmp_to, bool enable = true) - : - hook_addr(addr_to_hook), - detour_addr(jmp_to), - hook_installed(false) - { - reinterpret_cast(jmp_code)[0] = ARM_JMP_CODE; // LDR PC, [PC, #-4] - reinterpret_cast(jmp_code)[1] = jmp_to; - memcpy(org_bytes, hook_addr, sizeof(org_bytes)); - if (enable) install(); - } - - void install() - { - if (hook_installed.load()) - return; - - if (!mprotect(PAGE_START(hook_addr), getpagesize(), PROT_READ | PROT_WRITE | PROT_EXEC)) - { - memcpy((void*)((long)hook_addr), jmp_code, sizeof(jmp_code)); - mprotect(PAGE_START(hook_addr), getpagesize(), PROT_READ | PROT_EXEC); - cacheflush(reinterpret_cast(hook_addr), reinterpret_cast(hook_addr) + getpagesize(), NULL); - hook_installed.exchange(true); - } - } - - void uninstall() - { - if (!hook_installed.load()) - return; - - if (!mprotect(PAGE_START(hook_addr), getpagesize(), PROT_READ | PROT_WRITE | PROT_EXEC)) - { - memcpy(hook_addr, org_bytes, sizeof(jmp_code)); - mprotect(PAGE_START(hook_addr), getpagesize(), PROT_READ | PROT_EXEC); - cacheflush(reinterpret_cast(hook_addr), reinterpret_cast(hook_addr) + getpagesize(), NULL); - hook_installed.exchange(false); - } - } - - ~detour() { uninstall(); } - bool installed() { return hook_installed; } - void* hook_address() { return hook_addr; } - void* detour_address() { return detour_addr; } - private: - std::atomic hook_installed; - void* hook_addr, * detour_addr; - - unsigned char jmp_code[8]{}; - std::uint8_t org_bytes[sizeof(jmp_code)]; - }; - - // this is jank, but needed because the OS isnt initalizing statics/inlined globals... :| - inline std::map>* get_hooks() - { - static std::map> hooks{}; - return &hooks; - } - - inline void make_hook(void* addr_to_hook, void* jmp_to_addr, bool enable = true) - { - if (!addr_to_hook) - return; - - get_hooks()->insert({ - addr_to_hook, - std::make_unique( - addr_to_hook, - jmp_to_addr, - enable - ) } - ); - } - - inline void enable(void* addr) - { - if (!addr) - return; - get_hooks()->at(addr)->install(); - } - - inline void disable(void* addr) - { - if (!addr) - return; - get_hooks()->at(addr)->uninstall(); - } - - inline void remove(void* addr) - { - if (!addr) - return; - get_hooks()->erase(addr); - } - } -} diff --git a/ligma-cheat/ligma-bypass/ligma.h b/ligma-cheat/ligma-bypass/ligma.h deleted file mode 100644 index 1407d69e2..000000000 --- a/ligma-cheat/ligma-bypass/ligma.h +++ /dev/null @@ -1,8 +0,0 @@ -#pragma once -#include -#include "utils/utils.h" -#include "hooks/shithook.h" -#include "hooks/got_hook.h" - -#define LOGI(...) ((void)__android_log_print(4, "ligma", __VA_ARGS__)) -#define LOGW(...) ((void)__android_log_print(5, "ligma", __VA_ARGS__)) \ No newline at end of file diff --git a/ligma-cheat/ligma-bypass/ligma.vcxproj b/ligma-cheat/ligma-bypass/ligma.vcxproj deleted file mode 100644 index aa311e768..000000000 --- a/ligma-cheat/ligma-bypass/ligma.vcxproj +++ /dev/null @@ -1,224 +0,0 @@ - - - - - Debug - ARM - - - Release - ARM - - - Debug - ARM64 - - - Release - ARM64 - - - Debug - x64 - - - Release - x64 - - - Debug - x86 - - - Release - x86 - - - - {15c1c992-4566-4d40-a856-b536b81299e4} - Android - ligma - 14.0 - Android - 3.0 - ligma-bypass - - - - StaticLibrary - true - Clang_5_0 - android-22 - ARM - - - StaticLibrary - false - Clang_5_0 - android-22 - ARM - - - StaticLibrary - true - Clang_5_0 - android-22 - ARM - - - StaticLibrary - false - Clang_5_0 - android-22 - ARM - - - StaticLibrary - true - Clang_5_0 - android-22 - ARM - - - StaticLibrary - false - Clang_5_0 - android-22 - ARM - - - StaticLibrary - true - Clang_5_0 - android-22 - ARM - - - StaticLibrary - false - Clang_5_0 - android-22 - ARM - - - - - - - - - - - - - - - - - - - - - - - - - NotUsing - pch.h - c++1z - - - - - - - - - NotUsing - pch.h - c++1z - - - - - - - - - NotUsing - pch.h - c++1z - - - - - - - - - NotUsing - pch.h - c++1z - - - - - - - - - NotUsing - pch.h - c++1z - - - - - - - - - NotUsing - pch.h - c++1z - - - - - - - - - NotUsing - pch.h - c++1z - - - - - - - - - NotUsing - pch.h - c++1z - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/ligma-cheat/ligma-bypass/ligma.vcxproj.filters b/ligma-cheat/ligma-bypass/ligma.vcxproj.filters deleted file mode 100644 index bb1f06627..000000000 --- a/ligma-cheat/ligma-bypass/ligma.vcxproj.filters +++ /dev/null @@ -1,45 +0,0 @@ - - - - - {8fc1c384-bc0c-40ad-91fd-d12eb8f15083} - - - {a802d5b1-4373-45ec-9899-a56dcab8effb} - - - {d02af610-3abc-497e-8875-d1f51f60a27d} - - - {3a6ff0eb-0b42-4eae-a5c7-3dad52e2c026} - - - {e62eb3d6-ce1d-418e-8ea3-264cb68767c5} - - - {388138af-158e-4b7c-9eae-98b54b9d4146} - - - - - source\bypass - - - - - headers\bypass - - - headers\hooks - - - headers\hooks - - - headers\utils - - - headers - - - \ No newline at end of file diff --git a/ligma-cheat/ligma-bypass/ligma.vcxproj.user b/ligma-cheat/ligma-bypass/ligma.vcxproj.user deleted file mode 100644 index 88a550947..000000000 --- a/ligma-cheat/ligma-bypass/ligma.vcxproj.user +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/ligma-cheat/ligma-bypass/utils/utils.h b/ligma-cheat/ligma-bypass/utils/utils.h deleted file mode 100644 index 21b4add6e..000000000 --- a/ligma-cheat/ligma-bypass/utils/utils.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once -#include -#include -#include - -namespace ligma -{ - namespace utils - { - inline void iterate_memory(const std::function&, const std::string& protection)>& callback) - { - std::fstream maps("/proc/self/maps"); - std::pair memory_range; - std::string page_perms; - while (maps >> memory_range.first >> memory_range.second >> page_perms) - { - maps.ignore(std::numeric_limits::max(), '\n'); // skip to next line :) - callback(memory_range, page_perms); - } - maps.close(); - } - } -} \ No newline at end of file diff --git a/ligma-cheat/ligma-cheat.sln b/ligma-cheat/ligma-cheat.sln index ca70a54b4..4ca4ccc6d 100644 --- a/ligma-cheat/ligma-cheat.sln +++ b/ligma-cheat/ligma-cheat.sln @@ -5,8 +5,6 @@ VisualStudioVersion = 16.0.30320.27 MinimumVisualStudioVersion = 10.0.40219.1 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ligma-cheat", "ligma-cheat\ligma-cheat.vcxproj", "{C563FAFC-30B9-43A1-ACEE-33CCD40FA562}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ligma-bypass", "ligma-bypass\ligma.vcxproj", "{15C1C992-4566-4D40-A856-B536B81299E4}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|ARM = Debug|ARM @@ -35,22 +33,6 @@ Global {C563FAFC-30B9-43A1-ACEE-33CCD40FA562}.Release|x64.Build.0 = Release|x64 {C563FAFC-30B9-43A1-ACEE-33CCD40FA562}.Release|x86.ActiveCfg = Release|x86 {C563FAFC-30B9-43A1-ACEE-33CCD40FA562}.Release|x86.Build.0 = Release|x86 - {15C1C992-4566-4D40-A856-B536B81299E4}.Debug|ARM.ActiveCfg = Debug|ARM - {15C1C992-4566-4D40-A856-B536B81299E4}.Debug|ARM.Build.0 = Debug|ARM - {15C1C992-4566-4D40-A856-B536B81299E4}.Debug|ARM64.ActiveCfg = Debug|ARM64 - {15C1C992-4566-4D40-A856-B536B81299E4}.Debug|ARM64.Build.0 = Debug|ARM64 - {15C1C992-4566-4D40-A856-B536B81299E4}.Debug|x64.ActiveCfg = Debug|x64 - {15C1C992-4566-4D40-A856-B536B81299E4}.Debug|x64.Build.0 = Debug|x64 - {15C1C992-4566-4D40-A856-B536B81299E4}.Debug|x86.ActiveCfg = Debug|x86 - {15C1C992-4566-4D40-A856-B536B81299E4}.Debug|x86.Build.0 = Debug|x86 - {15C1C992-4566-4D40-A856-B536B81299E4}.Release|ARM.ActiveCfg = Release|ARM - {15C1C992-4566-4D40-A856-B536B81299E4}.Release|ARM.Build.0 = Release|ARM - {15C1C992-4566-4D40-A856-B536B81299E4}.Release|ARM64.ActiveCfg = Release|ARM64 - {15C1C992-4566-4D40-A856-B536B81299E4}.Release|ARM64.Build.0 = Release|ARM64 - {15C1C992-4566-4D40-A856-B536B81299E4}.Release|x64.ActiveCfg = Release|x64 - {15C1C992-4566-4D40-A856-B536B81299E4}.Release|x64.Build.0 = Release|x64 - {15C1C992-4566-4D40-A856-B536B81299E4}.Release|x86.ActiveCfg = Release|x86 - {15C1C992-4566-4D40-A856-B536B81299E4}.Release|x86.Build.0 = Release|x86 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/ligma-cheat/ligma-bypass/bypass/bypass.cpp b/ligma-cheat/ligma-cheat/bypass/bypass.cpp similarity index 77% rename from ligma-cheat/ligma-bypass/bypass/bypass.cpp rename to ligma-cheat/ligma-cheat/bypass/bypass.cpp index e0c8189a0..10e6fde51 100644 --- a/ligma-cheat/ligma-bypass/bypass/bypass.cpp +++ b/ligma-cheat/ligma-cheat/bypass/bypass.cpp @@ -12,12 +12,12 @@ namespace ligma { il2cpp_callback = callback; fopen_ptr = dlsym(dlopen("libc.so", RTLD_NOLOAD), "fopen"); - loader_dlopen_ptr = dlsym(dlopen("libdl.so", RTLD_NOLOAD), "__loader_dlopen"); + dlopen_ptr = dlsym(dlopen("libdl.so", RTLD_NOLOAD), "dlopen"); system_prop_get = dlsym(dlopen("libc.so", RTLD_NOLOAD), "__system_property_get"); loadbufferx = dlsym(dlopen("libxlua.so", RTLD_NOW), "luaL_loadbufferx"); - LOGI("loader_dlopen_ptr = %p", loader_dlopen_ptr); - ligma::hook::make_hook(loader_dlopen_ptr, reinterpret_cast(&dlopen_hook)); + LOGI("loader_dlopen_ptr = %p", dlopen_ptr); + ligma::hook::make_hook(dlopen_ptr, reinterpret_cast(&dlopen_hook)); ligma::hook::make_hook(loadbufferx, reinterpret_cast(&loadbufferx_hook)); ligma::hook::make_hook(fopen_ptr, reinterpret_cast(&fopen_hook)); ligma::hook::make_hook(system_prop_get, reinterpret_cast(&system_property_hook)); @@ -55,22 +55,23 @@ namespace ligma // this is used to gain code execution exactly when il2cpp.so is loaded... // __attribute__((noinline)) - void* loader_dlopen_hook(const char* filename, int flags, const void* caller_addr) + void* dlopen_hook(const char* filename, int flags) { LOGI("dlopen called, filename = %s", filename); dlopen_mutex.lock(); - ligma::hook::disable(loader_dlopen_ptr); + ligma::hook::disable(dlopen_ptr); - // do not resolve imports, this might cause another library to be loaded. - // that means it will call dlopen which means it will be stuck in std::mutex::lock (2 lines above this comment) - const auto result = dlopen(filename, RTLD_LAZY); + const auto result = dlopen(filename, reinterpret_cast(RTLD_NEXT)); if (strstr(filename, "libil2cpp.so") != NULL) - ligma::hook::enable(loader_dlopen_ptr); + { + ligma::hook::enable(dlopen_ptr); + dlopen_mutex.unlock(); + } else + { + dlopen_mutex.unlock(); il2cpp_callback(reinterpret_cast(result)); - - // wait until callback is done before we start loading anything else... - dlopen_mutex.unlock(); + } return result; } diff --git a/ligma-cheat/ligma-cheat/bypass/bypass.h b/ligma-cheat/ligma-cheat/bypass/bypass.h index 61a8eb9c4..83a261db9 100644 --- a/ligma-cheat/ligma-cheat/bypass/bypass.h +++ b/ligma-cheat/ligma-cheat/bypass/bypass.h @@ -18,7 +18,7 @@ namespace ligma inline void* fopen_ptr = nullptr; inline void* system_prop_get = nullptr; inline void* loadbufferx = nullptr; - inline void* loader_dlopen_ptr = nullptr; + inline void* dlopen_ptr = nullptr; // every shithook you make you will need a mutex. inline std::mutex fopen_mutex; diff --git a/ligma-cheat/ligma-cheat/libligma.a b/ligma-cheat/ligma-cheat/libligma.a deleted file mode 100644 index f596fe3f7..000000000 Binary files a/ligma-cheat/ligma-cheat/libligma.a and /dev/null differ diff --git a/ligma-cheat/ligma-cheat/ligma-cheat.vcxproj b/ligma-cheat/ligma-cheat/ligma-cheat.vcxproj index da09a1b04..006b20522 100644 --- a/ligma-cheat/ligma-cheat/ligma-cheat.vcxproj +++ b/ligma-cheat/ligma-cheat/ligma-cheat.vcxproj @@ -35,6 +35,7 @@ + @@ -153,12 +154,12 @@ c++1z - libligma.a;%(AdditionalDependencies) + %(AdditionalDependencies) adb logcat -c -adb push C:\Users\xerox\source\repos\ligma-cheat\ARM\Release\libligma_cheat.so /data/app/com.activision.callofduty.shooter-1/lib/arm/libligma.so +adb push $(SolutionDir)\ARM\Release\libligma_cheat.so /data/app/com.activision.callofduty.shooter-1/lib/arm/libligma.so start cmd /k "title 'ligma filter' & adb logcat | findstr ligma" @@ -176,12 +177,12 @@ adb shell am start -n com.activision.callofduty.shooter/com.tencent.tmgp.cod.Per c++1z - libligma.a;%(AdditionalDependencies) + %(AdditionalDependencies) adb logcat -c -adb push C:\Users\xerox\source\repos\ligma-cheat\ARM\Release\libligma_cheat.so /data/app/com.activision.callofduty.shooter-1/lib/arm/libligma.so +adb push $(SolutionDir)\ARM\Release\libligma_cheat.so /data/app/com.activision.callofduty.shooter-1/lib/arm/libligma.so start cmd /k "title 'ligma filter' & adb logcat | findstr ligma" @@ -199,12 +200,12 @@ adb shell am start -n com.activision.callofduty.shooter/com.tencent.tmgp.cod.Per c++1z - libligma.a;%(AdditionalDependencies) + %(AdditionalDependencies) adb logcat -c -adb push C:\Users\xerox\source\repos\ligma-cheat\ARM\Release\libligma_cheat.so /data/app/com.activision.callofduty.shooter-1/lib/arm/libligma.so +adb push $(SolutionDir)\ARM\Release\libligma_cheat.so /data/app/com.activision.callofduty.shooter-1/lib/arm/libligma.so start cmd /k "title 'ligma filter' & adb logcat | findstr ligma" @@ -222,12 +223,12 @@ adb shell am start -n com.activision.callofduty.shooter/com.tencent.tmgp.cod.Per c++1z - libligma.a;%(AdditionalDependencies) + %(AdditionalDependencies) adb logcat -c -adb push C:\Users\xerox\source\repos\ligma-cheat\ARM\Release\libligma_cheat.so /data/app/com.activision.callofduty.shooter-1/lib/arm/libligma.so +adb push $(SolutionDir)\ARM\Release\libligma_cheat.so /data/app/com.activision.callofduty.shooter-1/lib/arm/libligma.so start cmd /k "title 'ligma filter' & adb logcat | findstr ligma" @@ -245,12 +246,12 @@ adb shell am start -n com.activision.callofduty.shooter/com.tencent.tmgp.cod.Per c++1z - libligma.a;%(AdditionalDependencies) + %(AdditionalDependencies) adb logcat -c -adb push C:\Users\xerox\source\repos\ligma-cheat\ARM\Release\libligma_cheat.so /data/app/com.activision.callofduty.shooter-1/lib/arm/libligma.so +adb push $(SolutionDir)\ARM\Release\libligma_cheat.so /data/app/com.activision.callofduty.shooter-1/lib/arm/libligma.so start cmd /k "title 'ligma filter' & adb logcat | findstr ligma" @@ -268,12 +269,12 @@ adb shell am start -n com.activision.callofduty.shooter/com.tencent.tmgp.cod.Per c++1z - libligma.a;%(AdditionalDependencies) + %(AdditionalDependencies) adb logcat -c -adb push C:\Users\xerox\source\repos\ligma-cheat\ARM\Release\libligma_cheat.so /data/app/com.activision.callofduty.shooter-1/lib/arm/libligma.so +adb push $(SolutionDir)\ARM\Release\libligma_cheat.so /data/app/com.activision.callofduty.shooter-1/lib/arm/libligma.so start cmd /k "title 'ligma filter' & adb logcat | findstr ligma" @@ -291,12 +292,12 @@ adb shell am start -n com.activision.callofduty.shooter/com.tencent.tmgp.cod.Per c++1z - libligma.a;%(AdditionalDependencies) + %(AdditionalDependencies) adb logcat -c -adb push C:\Users\xerox\source\repos\ligma-cheat\ARM\Release\libligma_cheat.so /data/app/com.activision.callofduty.shooter-1/lib/arm/libligma.so +adb push $(SolutionDir)\ARM\Release\libligma_cheat.so /data/app/com.activision.callofduty.shooter-1/lib/arm/libligma.so start cmd /k "title 'ligma filter' & adb logcat | findstr ligma" @@ -314,12 +315,12 @@ adb shell am start -n com.activision.callofduty.shooter/com.tencent.tmgp.cod.Per c++1z - libligma.a;%(AdditionalDependencies) + %(AdditionalDependencies) adb logcat -c -adb push C:\Users\xerox\source\repos\ligma-cheat\ARM\Release\libligma_cheat.so /data/app/com.activision.callofduty.shooter-1/lib/arm/libligma.so +adb push $(SolutionDir)\ARM\Release\libligma_cheat.so /data/app/com.activision.callofduty.shooter-1/lib/arm/libligma.so start cmd /k "title 'ligma filter' & adb logcat | findstr ligma" diff --git a/ligma-cheat/ligma-cheat/ligma-cheat.vcxproj.filters b/ligma-cheat/ligma-cheat/ligma-cheat.vcxproj.filters index 560a908d7..c3c69edb9 100644 --- a/ligma-cheat/ligma-cheat/ligma-cheat.vcxproj.filters +++ b/ligma-cheat/ligma-cheat/ligma-cheat.vcxproj.filters @@ -16,11 +16,17 @@ {f14fc099-f6a5-4dc9-8512-320e1dbe206a} + + {742fd78d-91c1-449a-a790-95a32404ea5d} + source + + source\bypass +