penguinflamingo46153-alt/Penguin-Injectable-Ghost-Client

GitHub: penguinflamingo46153-alt/Penguin-Injectable-Ghost-Client

一个开源的 C++ JNI 可注入 Minecraft 1.8.9 客户端框架,用于教学演示原生代码与 JVM 互操作、内存 Hook 及 OpenGL 覆盖层渲染。

Stars: 4 | Forks: 2

# 🐧 Penguin Client Base - C++ JNI 可注入版 (Minecraft 1.8.9) **免责声明与目的:** 本项目严格作为一个**教育框架和开源基础**。其旨在演示 C++ 与 JVM 的互操作性、内存 Hook 以及 OpenGL 渲染覆盖层。 **这不是一个完全成品的恶意作弊软件。** 它是一个旨在供开发者和逆向工程爱好者学习、构建并添加自己模块的基础。欢迎随时 Fork、研究和扩展它! ## ✨ 功能解析(教学实现) 当前源码包含了基础逻辑,用于演示如何安全地操控 JVM 并绕过基础的服务器端检查。 * 🎨 **自定义 ImGui 框架:** 一个高度定制、带有动画效果的 ImGui 菜单,包含动态按键绑定捕获、RGB 开关以及游戏内的 Active Modules HUD 覆盖层。 * ⚔️ **KillAura 逻辑:** 演示了通过随机化来模拟人类行为(最小/最大 CPS、基础攻击距离 + 方差、FOV 角度),以及 W-Tap、Auto-Crit 和 Block-Hit 数据包机制。 * 🛡️ **AntiBot:** 展示了如何读取和过滤实体属性(UUID、存在刻数、不可见名称),以避免攻击服务器端的 Anti-Cheat NPC。 * 🏃 **SafeWalk:** 与玩家的移动和 `onGround` 标志进行交互。包含 Sneak、Breezily(带有自定义点击延迟和减速乘数)等子模式。 * 🖱️ **AutoClicker:** 模拟鼠标左/右键的人类点击模式,具有 Jitter/Butterfly 模拟以及破坏方块兼容性。 * 🧱 **Anti-Knockback (Velocity):** 在受到伤害时操控 `motionX/Y/Z` 字段。它包含一个 `Human Error Chance` 参数,偶尔会承受正常的击退,使其具有极高的隐蔽性。 ## 🏗️ 技术解析与架构 本节解释了 C++ DLL 如何与正在运行的 Java Virtual Machine (JVM) 交互,以读取、修改和扩展 Java 应用程序的 runtime 行为。 ### 前置条件与工具 1. **一个 C++ 编译器**,目标平台为 x64/x86 Windows (MSVC),生成 DLL。 2. **Java Native Interface (JNI) 头文件**(`jni.h`, `jni_md.h`),来自与目标 JVM 版本匹配的 JDK。 3. **MinHook**,用于在 runtime 拦截 Win32/OpenGL 函数。 4. **Dear ImGui**(OpenGL2 + Win32 后端),用于绘制覆盖层窗口。 5. **MCP (Mod Coder Pack) 映射表**,用于将混淆的游戏函数/字段转换为人类可读的名称。 ### 核心架构:两个世界 根本的挑战在于:你的代码运行在 C++ DLL 中,而游戏运行在 Java VM 上。这是两个具有独立内存空间的 runtime。 ### 设计模式与注意事项 * **Singleton 缓存:** 在 `if (bFirstTime)` 块中缓存一次 `jfieldID`、`jmethodID`。绝不要在每帧中去查找它们。 * **全局引用:** 使用 `env->NewGlobalRef(localRef)` 来保持 Java 对象在跨帧时的活跃状态(这对于 `Minecraft` singleton 至关重要)。 * **错误处理:** 在 JNI 调用后始终使用 `env->ExceptionCheck()` 和 `env->ExceptionClear()`,以防止 JVM 崩溃。 * **安全卸载:** 禁用 MinHook -> 恢复 WndProc -> 关闭 ImGui -> 分离 JVM 线程 -> FreeLibraryAndExitThread。 ## 🛠️ 如何构建与扩展 由于这是一个基础框架,我们鼓励您添加自己的功能! 1. 克隆代码库并在 **Visual Studio 2022** 中打开 `.vcxproj` 文件。 2. 确保您的系统上已安装 **Java JDK**。 3. 调整项目的 **Include Directories**,使其指向您 JDK 的 `include` 和 `include/win32` 文件夹。 4. 将项目构建为 **Release** 配置(根据您的目标 JVM 架构选择 x64 或 x86)。 5. 使用任何标准的 DLL 注入器将编译好的 `.dll` 注入到 `javaw.exe` 进程中。