<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <author>
    <name>oxygen</name>
    <email>oxygen@123741.xyz</email>
  </author>
  <generator uri="https://hexo.io/">Hexo</generator>
  <icon>https://www.gravatar.com/avatar/9bf678147af7b66a4346c7db4ee90f35</icon>
  <id>https://123741.xyz/</id>
  <link href="https://123741.xyz/" rel="alternate"/>
  <link href="https://123741.xyz/atom.xml" rel="self"/>
  <rights>All rights reserved 2026, oxygen</rights>
  <title>Oxygen's Blog</title>
  <updated>2026-07-24T04:20:28.566Z</updated>
  <entry>
    <author>
      <name>oxygen</name>
      <email>oxygen@123741.xyz</email>
    </author>
    <category term="软件工具" scheme="https://123741.xyz/categories/%E8%BD%AF%E4%BB%B6%E5%B7%A5%E5%85%B7/"/>
    <category term="SimHub" scheme="https://123741.xyz/tags/SimHub/"/>
    <category term="逆向工程" scheme="https://123741.xyz/tags/%E9%80%86%E5%90%91%E5%B7%A5%E7%A8%8B/"/>
    <category term="Mono.Cecil" scheme="https://123741.xyz/tags/Mono-Cecil/"/>
    <category term="模拟赛车" scheme="https://123741.xyz/tags/%E6%A8%A1%E6%8B%9F%E8%B5%9B%E8%BD%A6/"/>
    <content>
      <![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><strong>SimHub</strong> 是一款广泛应用于模拟赛车（如《神力科莎》、《F1》等）的仪表盘、外设及震动板控制软件。本文介绍的 <strong>SimHub Auto Activator</strong> 工具基于 <strong>Mono.Cecil</strong> 内存动态 IL 修改技术，实现了对最新版授权逻辑的自动化热补丁，原生支持 <strong>Base 基础版</strong> 与 <strong>Motion 动感版</strong> 功能。</p><span id="more"></span><h2 id="软件下载"><a href="#软件下载" class="headerlink" title="软件下载"></a>软件下载</h2><ul><li><strong>最新二进制发布包</strong>：<a href="https://imgs.123741.xyz/file/1784866227784_SimHub_Auto_Activator_v1.0.0.zip">SimHub_Auto_Activator_v1.0.0.zip</a></li></ul><hr><h2 id="核心特性"><a href="#核心特性" class="headerlink" title="核心特性"></a>核心特性</h2><ul><li><strong>动态内存热补丁</strong>：自动提取主程序清单嵌入资源中的原生 <code>SimHub.Licensing.dll</code>，在内存中完成 MSIL 指令修改后重新打包写回，完全避免了替换旧版 Mock DLL 带来的接口缺失与崩溃风险。</li><li><strong>构造函数防护</strong>：安全清空 <code>LicenceInfo</code> 类构造函数主体并注入基类 <code>System.Object</code> 默认构造函数调用，规避混淆保护下私有字段未初始化引发的 <code>NullReferenceException</code> 异常。</li><li><strong>自适应寻路算法</strong>：优先通过 Windows 注册表 <code>SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\SimHub_is1</code> 获取安装路径，并集成了默认安装路径与运行目录的多级回退策略。</li><li><strong>静默无感启动</strong>：基于 PowerShell 与 VBScript 混合驱动，仅在软件版本升级或时间戳变动时请求一次管理员提权（UAC）以刷新补丁和 NGEN 缓存，日常启动无任何弹窗打扰。</li></ul><hr><h2 id="项目结构与文件说明"><a href="#项目结构与文件说明" class="headerlink" title="项目结构与文件说明"></a>项目结构与文件说明</h2><ul><li><code>ReplaceResource/</code>：基于 Mono.Cecil 实现 IL 注入与资源重封包的 C# 源代码项目。</li><li><code>ReplaceResource.exe</code>：编译就绪的 Release 可执行二进制工具。</li><li><code>SimHubLauncher.ps1</code> &#x2F; <code>SimHubLauncher.vbs</code>：版本差异检测与静默热补丁启动器。</li><li><code>activate_simhub.bat</code>：自动化部署、注册表寻路与桌面快捷方式生成脚本。</li></ul><hr><h2 id="依赖库说明"><a href="#依赖库说明" class="headerlink" title="依赖库说明"></a>依赖库说明</h2><p>项目直接引入了 <strong>Mono.Cecil</strong> 官方套件，允许在无需 C# 源码的前提下在 MSIL 中间语言层面对 <code>.NET</code> 程序集进行反编译与二进制重构：</p><ul><li><code>Mono.Cecil.dll</code>：核心元数据读写库，负责解析程序集结构、指令集与写回磁盘。</li><li><code>Mono.Cecil.Rocks.dll</code>：扩展工具库，简化对泛型类型（如 <code>List&lt;T&gt;</code>）的动态构造与方法体扩展。</li><li><code>Mono.Cecil.Pdb.dll</code> &#x2F; <code>Mono.Cecil.Mdb.dll</code>：Windows PDB 与 Mono MDB 调试符号维护支持。</li></ul><hr><h2 id="安装与使用步骤"><a href="#安装与使用步骤" class="headerlink" title="安装与使用步骤"></a>安装与使用步骤</h2><ol><li>下载 <code>SimHub_Auto_Activator_v1.0.0.zip</code> 并解压至任意临时目录。</li><li>右键 <code>activate_simhub.bat</code> 选择 <strong>“以管理员身份运行”</strong>。</li><li>脚本会自动读取注册表定位 SimHub 根目录、部署启动器并应用初次热补丁，同时在桌面创建 <code>SimHub (Auto Activated)</code> 快捷方式。</li><li>日常启动：双击桌面上的 <code>SimHub (Auto Activated)</code> 快捷方式即可启动。</li></ol><hr><h2 id="实现原理"><a href="#实现原理" class="headerlink" title="实现原理"></a>实现原理</h2><p>根据 <code>ReplaceResource</code> 模块的 C# 源码实现，核心热补丁流程分为以下四个阶段：</p><h3 id="1-WoteverCommon-dll-签名校验劫持"><a href="#1-WoteverCommon-dll-签名校验劫持" class="headerlink" title="1. WoteverCommon.dll 签名校验劫持"></a>1. WoteverCommon.dll 签名校验劫持</h3><p>工具使用 <code>Mono.Cecil</code> 扫描 <code>WoteverCommon.AssemblyHelper</code> 类，定位到 <code>RSACryptoServiceProvider::VerifyData</code> 公钥签名校验方法：</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs csharp"><span class="hljs-comment">// 查找 VerifyData 验证调用后的条件跳转指令</span><br><span class="hljs-keyword">if</span> (instr.OpCode == OpCodes.Callvirt &amp;&amp; <br>    instr.Operand.ToString().Contains(<span class="hljs-string">&quot;RSACryptoServiceProvider::VerifyData&quot;</span>))<br>&#123;<br>    <span class="hljs-keyword">var</span> nextInstr = instructions[i + <span class="hljs-number">1</span>];<br>    nextInstr.OpCode = OpCodes.Br_S; <span class="hljs-comment">// 将条件短跳转 Brtrue_S 改为无条件短跳转 Br_S</span><br>&#125;<br></code></pre></td></tr></table></figure><p>将紧随其后的条件短跳转 <code>Brtrue_S</code> 劫持为无条件短跳转 <code>Br_S</code>，跳过底层强签名合法性校验。</p><h3 id="2-嵌入式-Licensing-dll-内存抽取与-MSIL-重构"><a href="#2-嵌入式-Licensing-dll-内存抽取与-MSIL-重构" class="headerlink" title="2. 嵌入式 Licensing.dll 内存抽取与 MSIL 重构"></a>2. 嵌入式 Licensing.dll 内存抽取与 MSIL 重构</h3><p><code>SimHubWPF.exe</code> 主程序将官方授权逻辑储存在名为 <code>SimHubWPF.Resources.SimHub.Licensing.dll</code> 的嵌入资源（<code>EmbeddedResource</code>）中。补丁工具在内存中对其进行提取与重构：</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs csharp"><span class="hljs-comment">// 1. 清空 LicenceInfo 构造函数</span><br><span class="hljs-keyword">var</span> licenceInfoCtor = licenceInfoType.Methods.FirstOrDefault(m =&gt; m.Name == <span class="hljs-string">&quot;.ctor&quot;</span>);<br>licenceInfoCtor.Body.Instructions.Clear();<br><span class="hljs-keyword">var</span> il = licenceInfoCtor.Body.GetILProcessor();<br>il.Emit(OpCodes.Ldarg_0);<br>il.Emit(OpCodes.Call, module.ImportReference(<span class="hljs-keyword">typeof</span>(<span class="hljs-built_in">object</span>).GetConstructor(Type.EmptyTypes)));<br>il.Emit(OpCodes.Ret);<br><br><span class="hljs-comment">// 2. 强制授权状态返回 true</span><br>forceBoolMethod(globalManagerType, <span class="hljs-string">&quot;get_HasBaseLicense&quot;</span>, <span class="hljs-literal">true</span>);<br>forceBoolMethod(globalManagerType, <span class="hljs-string">&quot;HasActiveMotionLicence&quot;</span>, <span class="hljs-literal">true</span>);<br>forceBoolMethod(globalManagerType, <span class="hljs-string">&quot;HasMotionLicence&quot;</span>, <span class="hljs-literal">true</span>);<br></code></pre></td></tr></table></figure><p>重写 <code>get_Features</code> 和 <code>get_FeaturesNames</code> 返回同时包含 <code>Base</code> 与 <code>Motion</code> 授权的 <code>List</code> 集合，最后将修改后的字节数组重新封包为 <code>EmbeddedResource</code> 塞回主程序，并抹除对 <code>SimHub.Licensing</code> 的强签名依赖。</p><h3 id="3-主程序授权检测点劫持"><a href="#3-主程序授权检测点劫持" class="headerlink" title="3. 主程序授权检测点劫持"></a>3. 主程序授权检测点劫持</h3><p>在 <code>SimHubWPF.exe</code> 模块中动态注入恒真辅助静态方法 <code>SimHubWPF.IgnoreMarker.GetTrue()</code>：</p><figure class="highlight csharp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs csharp"><span class="hljs-keyword">var</span> getTrueMethod = <span class="hljs-keyword">new</span> MethodDefinition(<br>    <span class="hljs-string">&quot;GetTrue&quot;</span>,<br>    MethodAttributes.Public | MethodAttributes.Static,<br>    module.TypeSystem.Boolean<br>);<br>ilProc.Emit(OpCodes.Ldc_I4_1); <span class="hljs-comment">// 加载 int 1 (true)</span><br>ilProc.Emit(OpCodes.Ret);     <span class="hljs-comment">// 返回</span><br></code></pre></td></tr></table></figure><p>随后遍历主程序全量类与方法，扫描对 <code>GlobalLicenseManager</code> 授权校验属性（如 <code>get_HasBaseLicense</code>）的 <strong>15 处</strong> 调用位置，统一替换为对 <code>GetTrue()</code> 的静态 <code>call</code> 指令。</p><h3 id="4-NGEN-原生映像缓存清理"><a href="#4-NGEN-原生映像缓存清理" class="headerlink" title="4. NGEN 原生映像缓存清理"></a>4. NGEN 原生映像缓存清理</h3><p>在 Windows 平台中，.NET CLR 运行时会优先优先加载全局 <code>C:\Windows\assembly\NativeImages_*</code> 缓存中的原生映像（NGEN）。为了防止运行时 bypass 物理修改后的二进制文件，补丁更新后会自动调用 <code>ngen.exe</code> 清理缓存：</p><figure class="highlight cmd"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs cmd">ngen.exe uninstall &quot;C:\Program Files (x86)\SimHub\SimHubWPF.exe&quot;<br></code></pre></td></tr></table></figure><hr><h2 id="免责声明"><a href="#免责声明" class="headerlink" title="免责声明"></a>免责声明</h2><p>本项目仅用于逆向工程与 .NET IL 字节码注入技术交流，请支持正版软件。</p>]]>
    </content>
    <id>https://123741.xyz/posts/simhub-activator/</id>
    <link href="https://123741.xyz/posts/simhub-activator/"/>
    <published>2026-07-24T12:13:00.000Z</published>
    <summary>
      <![CDATA[<p><strong>SimHub</strong> 是一款广泛应用于模拟赛车（如《神力科莎》、《F1》等）的仪表盘、外设及震动板控制软件。本文介绍的 <strong>SimHub Auto Activator</strong> 工具基于 <strong>Mono.Cecil</strong> 内存动态 IL 修改技术，实现了对最新版授权逻辑的自动化热补丁，原生支持 <strong>Base 基础版</strong> 与 <strong>Motion 动感版</strong> 功能。</p>]]>
    </summary>
    <title>SimHub 智能自适应激活器 v1.0.0 发布与使用指南</title>
    <updated>2026-07-24T04:20:28.566Z</updated>
  </entry>
  <entry>
    <author>
      <name>oxygen</name>
      <email>oxygen@123741.xyz</email>
    </author>
    <category term="随笔" scheme="https://123741.xyz/categories/%E9%9A%8F%E7%AC%94/"/>
    <category term="Hexo" scheme="https://123741.xyz/tags/Hexo/"/>
    <category term="Cloudflare" scheme="https://123741.xyz/tags/Cloudflare/"/>
    <content>
      <![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>欢迎来到我的博客！这是通过 Hexo 静态博客引擎构建的第一篇文章。</p><span id="more"></span><h2 id="关于本站"><a href="#关于本站" class="headerlink" title="关于本站"></a>关于本站</h2><p>本博客采用全自动 CI&#x2F;CD 流程构建与部署：</p><ul><li><strong>博客引擎</strong>: <a href="https://hexo.io/">Hexo</a></li><li><strong>托管平台</strong>: Cloudflare Workers (Assets)</li><li><strong>自动化构建</strong>: GitHub Actions</li></ul><p>只要将 Markdown 文章提交并推送到 GitHub 仓库的 <code>main</code> 分支，GitHub Actions 就会自动触发编译并秒级发布至 Cloudflare 全球边缘节点。</p><hr><p><em>Hello World, Hello Cloudflare Workers!</em></p><h2 id="联系方式"><a href="#联系方式" class="headerlink" title="联系方式"></a>联系方式</h2><ul><li><strong>Email</strong>: <a href="mailto:&#111;&#120;&#121;&#x67;&#101;&#110;&#x40;&#49;&#50;&#51;&#x37;&#52;&#49;&#46;&#x78;&#121;&#122;">oxygen@123741.xyz</a></li></ul>]]>
    </content>
    <id>https://123741.xyz/posts/6a3f2b1c/</id>
    <link href="https://123741.xyz/posts/6a3f2b1c/"/>
    <published>2026-07-23T14:32:00.000Z</published>
    <summary>
      <![CDATA[<p>欢迎来到我的博客！这是通过 Hexo 静态博客引擎构建的第一篇文章。</p>]]>
    </summary>
    <title>Hello World</title>
    <updated>2026-07-24T04:20:28.566Z</updated>
  </entry>
</feed>
