Fiddler Everywhere的crack实践
written by SJTU-XHW
本人学识有限,解析难免有错,恳请读者能够批评指正,本人将不胜感激!
本文如有侵权,请联系作者删除
众所周知,Fiddler 是一个无比好用的、免费的网络调试代理工具,可以方便地进行抓包、代理服务等基本操作。最近在看到一些文章介绍 Fiddler 的使用时无意间发现 Fiddler everywhere 的软件,UI 制作更加用心,而且功能更加强大,可惜的是会订阅收费。在受到 Github@msojocs(好像停更了)的指引下,我开始了对 Fiddler-Everywhere 软件的 “学习”。
声明:本文不含有实际的观点导向 或者 建议,如有侵权,请联系删除;
在尽情使用的同时,欢迎大家订阅官网正版的 Fiddler everywhere;
工作环境准备
要进行 crack 实践,必然得从反编译入手;
首先了解到 Fiddler Everywhere 是使用 C# 编写的程序,所以事先必须准备关于 C# 的运行环境 和 反编译程序;
Windows 自带 .net
运行库不够用,需要下载 dotnet-sdk
,再将开发包里的反编译程序 ilasm
和 ildasm
设置到环境变量中使用;当然,如果不想下载各种运行库,也可以使用 dnSpy
反编译工具;
dnSpy
解压即用:dnSpy.rar,也可上 Github 上找同名的开源项目;
Linux 用户如果觉得直接装的系统环境中没啥问题,可以使用 .net
官网的方式安装 dotnet-sdk
和 反编译工具 ilasm (ildasm)
Linux 用户如果不想 .net
直接装到系统环境里面,可以使用本人配置的 dockerfile 构建镜像,然后进去操作;(这里只是用来隔离一个环境,然而 docker 并不是这么用的,所以不上传到 docker Hub 上去了)
- 在 Linux 任意发行版上配置好 docker,在某个新目录下写好
Dockerfile
;
1 | FROM alpine |
构建镜像:
1
docker build -t crackImage .
之后只需等待 Fiddler Everything 装好再修改就行;
反编译
开始前需要安装 Fiddler Everything 正版软件 4.0.1 版本(为什么是这个版本,后面介绍);
安装完成后记住安装根目录:Windows 在“快捷方式 -> 打开文件所在目录” 寻找,Linux 在安装目录寻找;
⚠ 注意:进行反编译前,请注册一个 Fiddler 账户,并且打开软件、“开始试用” 再关闭,不然无法进行 crack;
后面的步骤会以 Windows 为例,需要修改的部分 linux 也相同,不过 linux 用的是 ildasm
(将动态链接库反编译为 *.il
文本)和 ildasm
(将 *.il
编译为 动态链接库)。语法:
1 | ildasm <libFilename> --output=<outputFile> |
下面介绍 Windows 的详细做法:
根据 Github 上的高手找到的 Fiddler Everything 授权验证的代码区域:
1 | # 这是授权认证的入口处变量定义的位置 |
⚠ 本人还发现,这种方法必须是 4.0.1,官方在 4.3 以后已经移除了文件校验函数所在的 Fiddler.WebUi.Helper
命名空间中的 ScriptHelper
类;
下面是本人的详细步骤:
修改授权认证的入口处变量的定义(位于 Fiddler Everything 根目录下的
resources\app\out\WebServer\ClientApp\dist\main.xxxxxx.js
,这里的 “XXX” 在每一版本中都不同,需要自行在目录下确认);有工程经验的同学会发现,
dist
文件夹一般是javascript
源 或者typescript
编译后所存放的目录,这里修改生成文件在 JS 开发中是不妥当的:生成代码堆砌在一起难以阅读,并且下一次生成不会保存修改;但这次是 crack,并且以后不会再编译项目,所以这么改没关系。如图,使用搜索工具查找到更新授权信息的函数
updateUserLicense
定义(第一个匹配才是定义,后面的都是引用):紧接着在函数的第一句前加上如下一段语句:
1
2
3
4<param>.licenseInfo.currentLicense = "Pro";
<param>.licenseInfo.hasExpiredTrial = false;
<param>.licenseInfo.isTrialAvailable = false;
<param>.licenseInfo.hasValidLicense = true;其中 “\” 需要替换成你的文件里所看到的这个函数的参数(在上面我的图里,这个参数名叫
ve
,因此把 “\” 换成 “ve”),效果如下图:反编译 文件校验的函数所在的动态链接库(位于根目录下
resources\app\out\WebServer\Fiddler.WebUi.dll
);打开
dnSpy
C# 反编译工具,导入该动态链接库(Linux 同学这步替换为ildasm
反编译该文件为*.il
),搜索反编译码,找到命名空间Fiddler.WebUi.Helper
,再在其中找到类ScriptHelper
,查看到这个类的两个方法:1
2// Token: 0x06000943 RID: 2371 RVA: 0x0001C678 File Offset: 0x0001A878
internal static bool TryOpenClientMainScript(out string error);1
2// Token: 0x06000944 RID: 2372 RVA: 0x0001C8E0 File Offset: 0x0001AAE0
internal static bool TryOpenElectronMainScript(out string error);将其中的
try{} catch{}
块全部删除,它们的作用是校验启动脚本的正确性,应该将其删除,最终函数将直接返回true
,如下图:记得将再将该库编译回去、保存这个模块;
比如这是我编译出来的动态链接库:Fiddler.WebUi.dll;
反编译 验证账户激活函数所在的动态链接库(位于根目录下
resources\app\out\WebServer\FiddlerBackendSDK.dll
);继续使用
dnSpy
打开该库,找到命名空间FiddlerBackendSDK.User
,再定位到其中的一个类UserClient
,找到其中的方法GetBestAccount
,将函数体中的判断语句直接换为返回true
,换好后如图:这是我编译出来的动态链接库:FiddlerBackendSDK.dll;
禁用自动更新(位于根目录下
resources\app\out\main.js
);找到这么一行语句:
1
e.settingsService.get().autoUpdateSettings.disabled
替换为:
1
true||e.settingsService.get().autoUpdateSettings.disabled
如图:
到目前为止,再次打开 Fiddler Everywhere 就完成的本次实践 ~