本帖最后由 FatPigs 于 2021-2-13 23:37 编辑
第一步:用DnSpy打开Terraria.exe.很惊喜,Tr并没有加混淆,这表明去除它的Steam验证会变得容易许多。
第二步:在项目上右键转到入口点,在可疑的语句上下断点,直到有关于Steam的报错停下,锁定Steam验证的语句。
根据找到的内容:SocialAPI.Initialize(null);,再定位到SocialAPI类里的Initialize方法。
[C#] 纯文本查看 复制代码 public static void Initialize(SocialMode? mode = null)
{
if (mode == null)
{
mode = new SocialMode?(SocialMode.None);
mode = new SocialMode?(SocialMode.Steam);
}
SocialAPI._mode = mode.Value;
SocialAPI._modules = new List<ISocialModule>();
SocialAPI.JoinRequests = new ServerJoinRequestsManager();
Main.OnTickForInternalCodeOnly += SocialAPI.JoinRequests.Update;
SocialMode mode2 = SocialAPI.Mode;
if (mode2 != SocialMode.Steam)
{
if (mode2 == SocialMode.WeGame)
{
SocialAPI.LoadWeGame();
}
}
else
{
SocialAPI.LoadSteam();
}
foreach (ISocialModule socialModule in SocialAPI._modules)
{
socialModule.Initialize();
}
}
根据调用方法传递的参数(null)可知会执行
[C#] 纯文本查看 复制代码 mode = new SocialMode?(SocialMode.None);
mode = new SocialMode?(SocialMode.Steam);
再分析下面的语句,得到思路:避免执行SocialAPI.LoadSteam();就可以跳过Steam验证。
而我们只需要把
[C#] 纯文本查看 复制代码 mode = new SocialMode?(SocialMode.Steam);
这一行注释掉,就可以避免执行SocialAPI.LoadSteam();
编辑之后保存为Terraria-NoSteam.exe,一切顺利。
关掉Steam后,双击打开保存后的 Terraria-NoSteam.exe 没有报错,顺利进入了游戏!
非常的简单 |