金币17092
积分8766
注册时间2018-11-17
最后登录2026-11-4
|
本帖最后由 Struggle 于 2026-9-29 18:04 编辑
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
影子Mono注入器 —— 简洁 · 稳定 · 智能识别 · 可隐身
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
影子Mono注入器 v1.0.2.zip
(413.56 KB, 下载次数: 137)
环境组件:
.NET 4.7.2
【工具简介】
一款面向 Unity / Mono 游戏的 DLL 注入工具。
自动识别 Mono 进程、自动分析注入入口点、一键注入 & 卸载。
并且针对"架构不匹配"、"进程重启"等常见坑做了专门处理。
内置【伪装程序集名】+【AppDomain 摘除】+【混淆原名字】+【伪造 filename】
四项隐身能力,可在运行时隐藏注入的 DLL,规避常见的程序集 / 路径检测。
同时提供命令行模式,方便脚本化 / 批量操作。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【核心功能】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
一键扫描 Mono 进程
三层过滤 + 多线程并行,200 个进程扫描不到 1 秒。
只列出与你架构匹配的 Mono 进程,不再被一堆无关进程干扰。
自动识别注入入口点
直接读取 DLL 的 PE 元数据,智能打分选出入口方法。
支持 Load / OnLoad / Initialize / Init / Start / Main 等常见命名,
类名含 Loader / Bootstrap / Injector 等会自动加分。
不用再手动翻源码找入口。
自动识别卸载入口
注入的同时自动扫描 Unload / OnUnload / Shutdown / Dispose 等,
优先匹配与注入相同的类,一点即可卸下,不用手动填。
架构自动匹配
明确区分 x86 / x64,架构不对直接给你提示,不会让你盲目点下去。
(Windows 硬性限制:x64 注入器只能注入 x64 进程,反之亦然)
进程重启自动重连
目标游戏重启后,注入器会在 2 秒内自动识别并重新选中,
不用每次重启游戏都手动刷新一遍。
自动保存配置
上次用的 DLL、命名空间、类名、方法名,以及各项隐身开关的状态,
下次打开自动填好。常驻一款游戏的朋友用起来非常顺手。
拖拽 & 快捷键
DLL 路径可以直接拖进窗口;进程名可以直接打字输入。
Ctrl + R 刷新进程
Ctrl + Enter 一键注入
Esc 退出
命令行模式(新增)
支持通过命令行注入,无需打开图形界面。可用于:
· 脚本 / 批处理自动化注入
· 一次性注入,不常驻 GUI
· 与启动器 / 补丁程序集成
用法:
影子Mono注入器.exe --pid <PID> --dll <PATH> [选项]
影子Mono注入器.exe --name <NAME> --dll <PATH> [选项]
常用参数:
-p, --pid <PID> 目标进程 PID
-n, --name <NAME> 目标进程名(如 game.exe)
-d, --dll <PATH> 要注入的 DLL 路径
--ns <NS> 命名空间(可选,不填自动分析)
--class <CLASS> 类名(可选,不填自动分析)
--method <METHOD> 方法名(默认 Load)
--unlink 注入后从 AppDomain 摘除
--fake-name <NAME> 伪装程序集名
--obfuscate 混淆原名字
--fake-filename 伪造 filename
-q, --quiet 只输出错误
-h, --help 显示帮助
示例:
影子Mono注入器.exe --pid 1234 --dll Mod.dll
影子Mono注入器.exe --name game.exe --dll Mod.dll --unlink --obfuscate
影子Mono注入器.exe --name game.exe --dll Mod.dll --fake-name System.Configuration
退出码:
0 成功
1 用法错误(参数缺失 / 架构不匹配等)
2 注入失败
3 目标进程找不到
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【隐身 / 防检测】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
★ 四项可独立使用,也可任意组合(推荐全开)。
① 伪装程序集名(防检测)
注入时把 DLL 在 Mono 运行时里的程序集名替换成伪装名
(例如写成 System.Configuration、System.Xml.Linq 这类系统库名)。
之后无论是 AppDomain.GetAssemblies() 还是按名反射查找,
看到的都是一个普通系统库,规避基于"程序集名"的简单扫描。
默认关闭,勾选开关并填写伪装名后生效。
② 注入后从 AppDomain 摘除
注入完成后,把该程序集从 Mono 的 domain_assemblies 链表中移除,
使 AppDomain.CurrentDomain.GetAssemblies() 列举不到它。
即使程序集仍在运行、DLL 功能完全正常,
但枚举列表里已经看不到你的 DLL,达到"隐身"效果。
默认关闭,勾选开关后生效。
③ 混淆原名字(防按名查找)(新增)
把 DLL 在 Mono 运行时里的原始名字字符串【原地覆写】为随机字符,
使基于"名字字符串"的查找彻底失效。
与第①项的区别:
· ①(伪装名) 只换指针指向,原名"Loader"的字符串本身还在内存里;
· ③(混淆) 把原名那串字节直接擦掉,搜索字符串也搜不到。
两项搭配使用时效果最佳:
指针层面指向"System.Configuration"(防按名查),
字符串层面原名被抹掉(防内存扫描)。
默认关闭,勾选开关后生效。
④ 伪造 filename(防遍历检测)(新增)
把 MonoImage.filename 字段指向一个系统库的真实路径,
例如 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Configuration.dll。
反作弊 / 检测工具遍历"已加载 DLL 路径"时,看到的会是一个普通系统库,
而不是你的 Mod DLL 路径。
与第①项配合时,伪装名会自动映射到同名的系统库路径;
若只开④不开①,工具会从预设系统库中随机挑一个。
默认关闭,勾选开关后生效。
★ 以上四项都只在 Mono 托管层隐藏 DLL 的"身份信息",
不影响 DLL 自身的功能、稳定性与调用时序。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【使用步骤】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 以【管理员身份】运行本工具
(重要!否则很多进程的模块读不到)
2. 启动游戏,点【🔄 刷新】,工具会自动扫描并选中游戏进程
3. 拖入或选择你的 DLL 文件,工具会自动分析并填好
命名空间 / 类名 / 方法名
4. (可选)按需勾选隐身开关:
· 【注入后从 AppDomain 摘除】
· 【伪装程序集名】+ 填写伪装名
· 【混淆原名字】
· 【伪造 filename】
—— 只在本地调试时全部不勾即可
5. 点【注入】,看到绿色的 "[成功] 已注入" 就完成了
6. 想卸载时点【卸载】,前提是本次会话内注入过(句柄还在)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【常见问题】
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Q: 扫描不到游戏进程?
A: ① 先确认游戏是 Mono 后端(不是 IL2CPP,IL2CPP 没有 mono.dll)
② 确认工具已经"以管理员身份运行"
③ 确认游戏架构和注入器架构一致(工具会明确提示)
④ 可以直接在进程框手动输入进程名,例如 "PEAK.exe"
Q: 提示"架构不匹配"?
A: Windows 系统的硬性限制——64 位注入器无法向 32 位进程注入,
反过来也一样。请使用对应架构的注入器版本。
Q: 点注入失败,提示"找不到类"或"找不到方法"?
A: DLL 里的类名 / 方法名和填写的不一致。
可能是命名空间写错了,或者目标方法是私有的(必须是 public static)。
Q: 卸载按钮一直是灰的?
A: 必须先注入成功一次,本工具才会记录程序集句柄。
如果是先前的会话注入的,或者游戏重启过,句柄就失效了,
需要重新注入一次再卸载。
Q: 四项隐身开关要不要开?会不会互相冲突?
A: 不会冲突,四项完全独立,可以任意组合。
推荐组合:
· 只在本地调试、不担心被检测 → 全部不勾,日志更清晰
· 想最小化隐藏 → 只勾【伪装程序集名】
· 想彻底隐身 → 四项全勾
· 只想针对某一种检测 → 对照【隐身 / 防检测】小节的逐项说明按需勾
Q: 勾了【伪装程序集名】为什么 GetName() 还是原名?
A: 需要同时开启开关 + 填写伪装名才会生效。
如果两个条件都满足仍不生效,说明当前 Mono 版本布局不同,
可在工具日志里看 [改名] 输出定位问题。
Q: 勾了【混淆原名字】怎么验证?和【伪装名】有什么不同?
A: 区别与验证方法:
· 【伪装名】只让 GetName() 返回假名,用 Cheat Engine 搜原名字符串
"Loader" 依然能搜到(因为字符串还在,只是没人指向);
· 【混淆】会把 "Loader" 这串字节原地覆写成随机字符,
CE 搜 "Loader" 应该搜不到,搜随机字符能找到。
如果两者一起勾,两种效果都会同时出现。
Q: 勾了【伪造 filename】怎么验证?
A: 用 CE 搜你的 DLL 真实路径片段(如 "MyMod.dll")应该搜不到;
搜假路径片段(如 "Framework64")可以搜到。
如果游戏进程里本来就有 "Framework64" 字符串,
需要结合地址范围判断,看新出现的那个是否在 Mono 堆区。
Q: 命令行模式怎么用?
A: 直接带参数运行即可,不会弹出界面。
带 --help 会显示所有支持的参数。
建议用 --name 而非 --pid,因为游戏每次启动 PID 都会变。
典型批处理:
影子Mono注入器.exe --name game.exe --dll Mod.dll ^
--fake-name System.Configuration --obfuscate --fake-filename --unlink
退出码可用于脚本判断,详见【命令行模式】小节。
|
-
|