DeFexNN/NightcoreLiosImgui
GitHub: DeFexNN/NightcoreLiosImgui
面向 Android Unity IL2CPP 游戏的生产级 ImGui 修改框架,支持三种注入模式并集成全面的反作弊绕过机制。
Stars: 0 | Forks: 0
# 🌙 NightcoreLios — ImGui Overlay 游戏增强套件
一个生产级的 Android Unity 游戏增强工具,包含 **Dear ImGui** 渲染
overlay、IL2CPP runtime 内省、Dobby inline hook、Zygisk/Magisk
模块注入,以及全面的反作弊绕过架构。
三种注入变体,一套代码库。使用 C++17 (NDK)、Java (Android SDK)
和 OpenGL ES 3.0 构建。
## 理念
NightcoreLios 展示了复杂的 Android 游戏
修改的完整生命周期:从进程注入到 ImGui overlay 渲染,从 IL2CPP
符号解析到 100 多个反作弊补丁,从 Zygisk systemless 模块
到服务端身份验证。
该代码库被组织为一个 **单一共享核心**,具有三种注入
变体,证明了干净的架构允许相同的渲染引擎、
菜单系统和游戏逻辑通过不同的部署
机制来交付,而无需代码重复。
## 三种注入变体
```
┌─────────────────────────────────────────────────────────────────┐
│ Shared Core │
│ │
│ ImGui Renderer · Menu UI · ESP Engine · Game Hacks │
│ IL2CPP Resolver · Memory Patches · Anti-Cheat Bypass │
│ Font Rendering · Theme Engine · Auth System │
└──────────────┬──────────────────────────────────────────────────┘
│
┌─────────┼──────────┐
│ │ │
┌────┴────┐ ┌──┴───┐ ┌───┴──────────┐
│INJECT │ │INJECT│ │MODULE_LIOS │
│LIOS │ │LITE │ │ │
│ │ │ │ │ │
│JNI_OnLoad│ │APK │ │Zygisk Module │
│APK-based│ │based │ │Magisk-based │
│Overlay │ │AES │ │Systemless │
│Activity │ │auth │ │dlopen hook │
└─────────┘ └──────┘ └──────────────┘
```
## 架构
```
┌──────────────────────────────────────────────────────────────┐
│ Injection Phase │
│ │
│ JNI_OnLoad / Zygisk → Auth → Poll libil2cpp.so │
│ │ │
│ ▼ │
│ Hook eglSwapBuffers (Dobby inline hook) │
│ Hook InputConsumer::initializeMotionEvent (touch capture) │
│ Hook RegisterNatives::nativeInjectEvent (Java input) │
│ offsets_load() → 100+ MemoryPatch + Il2Cpp method hooks │
└──────────────────────────────────────────────────────────────┘
│
┌──────────────────────────────────────────────────────────────┐
│ Render Loop (every frame) │
│ │
│ eglSwapBuffers hook → │
│ ├── glInit() (one-time: ImGui context, fonts, theme) │
│ ├── LoadMenu() → build ImGui draw data │
│ │ ├── ESP Tab (box, skeleton, health, distance) │
│ │ ├── Weapon Tab (no recoil, fast shoot, bullet mag) │
│ │ ├── Player Tab (fly, speed, aimbot, auto-farm) │
│ │ └── Settings Tab (theme, save/load config) │
│ └── ImGui_ImplOpenGL3_RenderDrawData() → composite │
└──────────────────────────────────────────────────────────────┘
│
┌──────────────────────────────────────────────────────────────┐
│ Game Manipulation │
│ │
│ Battle_Update hook → player tracking, damage logging │
│ PlayerController hook → fly, speed, sticky, stealth │
│ Gun hooks → no recoil, fast shoot, aim assist │
│ Vehicle hooks → fly car, speed boost │
│ Monster hooks → collision bypass, damage │
│ Builder hooks → force build, rotation control │
│ ~100 bypass hooks → CheatMgr, MailMgr, HeartBeat │
└──────────────────────────────────────────────────────────────┘
```
## 代码示例
### eglSwapBuffers Hook — 每一帧注入 ImGui (C++)
```
EGLBoolean (*old_eglSwapBuffers)(EGLDisplay dpy, EGLSurface surface);
EGLBoolean hook_eglSwapBuffers(EGLDisplay dpy, EGLSurface surface) {
eglQuerySurface(dpy, surface, EGL_WIDTH, &glWidth);
eglQuerySurface(dpy, surface, EGL_HEIGHT, &glHeight);
if (!imguiInitialized) {
glInit(); // one-time: ImGui::CreateContext, fonts, theme
imguiInitialized = true;
}
// Start new ImGui frame
ImGui_ImplOpenGL3_NewFrame();
ImGui_ImplAndroid_NewFrame(glWidth, glHeight);
ImGui::NewFrame();
LoadMenu(); // build all ImGui UI elements
ImGui::EndFrame();
ImGui::Render();
ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());
return old_eglSwapBuffers(dpy, surface);
}
```
### IL2CPP Runtime 内省
```
// Resolve Unity IL2CPP functions dynamically — works across game updates
void* resolve_il2cpp_function(const char* klass, const char* method, int args) {
auto domain = r_il2cpp_domain_get();
auto assembly = r_il2cpp_domain_assembly_open(domain, "Assembly-CSharp");
auto image = r_il2cpp_assembly_get_image(assembly);
Il2CppClass* clazz = r_il2cpp_class_from_name(image, "", klass);
const MethodInfo* mi = r_il2cpp_class_get_method_from_name(clazz, method, args);
return (void*)mi->methodPointer;
}
// Usage:
auto update_fn = (UpdateFunc)resolve_il2cpp_function(
"BattleWorld", "Update", 0);
```
### Dobby Inline Hook 模式
```
#include
// Hook any function with signature-compatible replacement
void* (*old_PlayerController_Update)(void* instance);
void hook_PlayerController_Update(void* instance) {
// Get player position, apply fly/speed/stealth modifications
auto transform = Component_GetTransform(instance);
auto position = Transform_GetPosition(transform);
if (settings.fly) {
position.y += flySpeed * deltaTime;
Transform_SetPosition(transform, position);
}
if (settings.speed) {
// Modify movement speed multiplier
*speedPtr = speedMultiplier;
}
return old_PlayerController_Update(instance);
}
// Install hook
DobbyHook(resolve_il2cpp_function("PlayerController", "Update", 1),
(void*)hook_PlayerController_Update,
(void**)&old_PlayerController_Update);
```
### 反作弊绕过(系统化)
```
// Hook every anti-cheat traffic serialization method to empty stubs.
// The game still thinks it's reporting — it just sends nothing.
// Pattern: Hook C*_Serializer::Marshal → return without serializing
#define ANTI_CHEAT_HOOK(name) \
DobbyHook(resolve_il2cpp_function("C" #name "Inspect", "OnInspIn", 1), \
(void*)dummy_bypass, (void**)&old_##name);
ANTI_CHEAT_HOOK(Application) // CApplicationInspect::OnInspIn
ANTI_CHEAT_HOOK(HeartBeat) // CHeartBeat::OnInspIn
ANTI_CHEAT_HOOK(ReportRole) // CReportRoleCheating::OnInspIn
ANTI_CHEAT_HOOK(CheckMemory) // memory integrity verification
ANTI_CHEAT_HOOK(CheckRoot) // root detection bypass
ANTI_CHEAT_HOOK(CheckEmulator) // emulator detection bypass
// ... 100+ more
void dummy_bypass(void* instance) {
return; // literally nothing
}
```
### 带有自定义 Widget 的 ImGui 菜单
```
#include "Garbage/Tabs.h"
#include "Garbage/ColorPicker.h"
static int currentTab = 0;
void LoadMenu() {
ImGui::SetNextWindowPos({50, 50}, ImGuiCond_FirstUseEver);
ImGui::SetNextWindowSize({600, 400}, ImGuiCond_FirstUseEver);
ImGui::Begin("NightcoreLios", nullptr,
ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoCollapse);
// Custom animated tab bar
CustomTabs("ESP\0Weapon\0Player\0Vehicle\0Settings\0", ¤tTab);
switch (currentTab) {
case 0: // ESP
ImGui::Checkbox("Box ESP", &settings.box);
ImGui::Checkbox("Skeleton", &settings.skeleton);
ImGui::Checkbox("Health Bar", &settings.healthBar);
ImGui::ColorEdit3("Box Color", settings.boxColor);
break;
case 1: // Weapon
ImGui::Checkbox("No Recoil", &settings.noRecoil);
ImGui::Checkbox("Fast Shoot", &settings.fastShoot);
ImGui::SliderFloat("Aim FOV", &settings.aimFov, 1, 360);
break;
// ... more tabs
}
ImGui::End();
}
```
### ESP 渲染(World-to-Screen)
```
void DrawESP() {
for (auto& player : players) {
// World to screen transformation
Vector2 screenPos;
if (!WorldToScreen(player.position, screenPos)) continue;
Vector2 headPos;
WorldToScreen(player.position + Vector3(0, player.height, 0), headPos);
float boxHeight = abs(screenPos.y - headPos.y);
float boxWidth = boxHeight * 0.4f;
if (settings.box) {
DrawBox(screenPos.x - boxWidth/2, headPos.y,
boxWidth, boxHeight, settings.boxColor);
}
if (settings.skeleton) {
DrawSkeleton(player, settings.skeletonColor);
}
if (settings.healthBar) {
DrawHealthBar(screenPos.x - boxWidth/2 - 4, headPos.y,
boxHeight, player.health, player.maxHealth);
}
DrawText(screenPos.x, headPos.y - 10,
player.name + " [" + std::to_string((int)player.distance) + "m]",
settings.textColor);
}
}
```
### Zygisk 模块入口点
```
#include "zygisk.hpp"
class MyModule : public zygisk::ModuleBase {
public:
void onLoad(Api* api, JNIEnv* env) override {
this->api = api;
env->GetJavaVM(&vm);
}
void preAppSpecialize(AppSpecializeArgs* args) override {
auto dir = env->GetStringUTFChars(args->app_data_dir, nullptr);
isTargetGame = strstr(dir, "com.herogame.gplay.lastdayrulessurvival");
env->ReleaseStringUTFChars(args->app_data_dir, dir);
// Only inject into target game — no other app affected
}
void postAppSpecialize(const AppSpecializeArgs* args) override {
if (!isTargetGame) return;
std::thread(hack_thread).detach(); // start cheat logic
}
};
REGISTER_ZYGISK_MODULE(MyModule)
```
## 功能矩阵
| 类别 | 功能 | 机制 |
|----------|---------|-----------|
| **ESP** | Box、Skeleton、Health Bar、Distance、Weapon | ImGui draw list、world-to-screen 数学计算 |
| **Weapon** | No Recoil、Fast Shoot、Bullet Magnet、Aimbot | 通过 Il2Cpp 进行 Gun method hook |
| **Player** | Fly、Speed、Sticky、Stealth、Auto-Farm | PlayerController Update hook |
| **Vehicle** | Fly Vehicle、Speed Boost | VehicleMonitor Update hook |
| **Building** | Force Build、Rotation Control | BuilderBehaviour hook |
| **Monsters** | Collision Bypass、Damage Multiplier | MonsterController hook |
| **Anti-Cheat** | 100 多个绕过补丁 | CheatMgr、MailMgr、HeartBeat hook stub |
| **Auth** | Key 验证、HWID 绑定 | AES-CBC + PHP 后端 |
| **UI** | 动画选项卡、颜色选择器、水印 | 自定义 ImGui widget |
## 技术栈
| 层级 | 技术 |
|-------|-----------|
| 语言 | **C++17** (NDK)、Java (Android SDK) |
| UI | **Dear ImGui** (OpenGL ES 3.0 backend) |
| Hook 引擎 | **Dobby** (inline hook)、Cydia Substrate |
| 内存 | KittyMemory、`/proc/[pid]/maps`、`process_vm_readv` |
| 注入 | JNI_OnLoad、Zygisk/Magisk 模块 |
| 游戏引擎 | Unity + **IL2CPP** scripting backend |
| Auth | libcurl + OpenSSL、AES-CBC |
| 字符串保护 | 编译时 XOR (`OBFUSCATE.h`) |
| 字体 | 内置 TTF(6 种字体,支持中文) |
*"Overlay 世界。掌控游戏。"*
标签:Android逆向, IL2CPP, ImGui, Inline Hook, JS文件枚举, SSH蜜罐, 反作弊对抗, 客户端加密, 游戏外挂, 进程注入