96辅助游戏论坛 - 游戏修改器、MOD教程与精品资源分享

 找回密码
 立即注册
3768744486
2308599660
查看: 687|回复: 5

[Windows] 影子Mono注入器

[复制链接]
发表于 2026-9-27 07:46 | 显示全部楼层 |阅读模式
本帖最后由 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. 启动游戏,点【&#128260; 刷新】,工具会自动扫描并选中游戏进程
  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
   退出码可用于脚本判断,详见【命令行模式】小节。


1.png
如果不回复说明在睡觉

你的赞助就是我坚持的动力

回复

使用道具 举报

发表于 2026-9-27 10:12 | 显示全部楼层
勤劳的小蜜蜂
回复 支持 反对

使用道具 举报

发表于 2026-9-27 10:13 | 显示全部楼层
感谢分享
回复

使用道具 举报

发表于 2026-9-27 19:26 | 显示全部楼层
可以可以的
方便他人,方便自己。
回复 支持 反对

使用道具 举报

发表于 2026-9-27 21:35 | 显示全部楼层
请问一下为什么我识别不到进程 也无法复制
回复 支持 反对

使用道具 举报

 楼主| 发表于 2026-9-28 16:03 | 显示全部楼层
dpfdpf 发表于 2026-9-27 21:35
请问一下为什么我识别不到进程 也无法复制

这是unity mono游戏注入器,只能识别mono游戏
如果不回复说明在睡觉

你的赞助就是我坚持的动力

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|96辅助游戏论坛

GMT+8, 2026-11-6 17:18 , Processed in 0.052351 second(s), 24 queries .

Powered by Discuz! X3.4

© 2016-2023 Comsenz Inc.

快速回复 返回顶部 返回列表