Fiddler .Net逆向
软件简介
是近来比较流行的 Electron 框架界面,比较方便开发,然后界面比较优美,代价是用户直接能看到源码。
破解过程
激活
审一下写在前端的代码,搜一下 License,果然发现了有关函数。
直接在函数入口点对激活信息进行覆盖,这一步过后其实已经成功破解了。但是软件在启动时会对每个模块load的数据进行校验,所以继续深入。
校验绕过
.Net 是一种建立在虚拟机上执行的语言,它直接生成 MSIL 的中间语言,再由 .Net 编译器 JIT 解释映象为本机代码并交付 CPU 执行。它和 Java 是同一种机制的语言。 这种语言的优点是:开发者不需要去考虑程序在哪里运行,只需要把功能做出来,虚拟机会在任何地方实现功能。 这是一个很好的想法,但虚拟机的中间语言由于带了大量的“元数据”(meta-data)信息,所以也极容易被反编译。
可以理解为可乐把配方分发到每个厂子,虽然每个厂子都可以配货,却让配方的保密性大大降低
最终在 Fiddler.WebUi.dll
中的 ScriptHelper
类的 TryOpenClientMainScript
方法中发现了校验过程。
如图,如果在 Line 35 校验失败的话,加载进程将终止。
License 验证
FiddlerBackendSDK.dll
的 UserClient
类的 public AccountDTO GetBestAccount(UserWithBestAccountDTO user)
方法中给出了一个非常简单的账号验证。
public AccountDTO GetBestAccount(UserWithBestAccountDTO user)
{
if (user.BestEverywhereAccountId != null)
{
return user.Accounts.FirstOrDefault((UserAccountDTO x) => x.Id == user.BestEverywhereAccountId.Value);
}
return null;
}
将 x.Id == user.BestEverywhereAccountId.Value
改为 true
即可 bypass
删除更新机制
在 main.js 中替换版本号或者直接防止进入函数即可