吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 23566|回复: 222
收起左侧

[.NET逆向] fiddler everywhere 4.6.2 去除授权校验

    [复制链接]
cqc520 发表于 2023-9-24 18:54
本帖最后由 cqc520 于 2023-12-11 09:38 编辑

变更记录

变更 时间
修正错别字以及一处多余图片 2023年12月11日

前言

官方上了安全措施,对大量文件进行hash校验,所以搞起来些许有些麻烦了。

这篇文章的实践是在Windows下进行的。

在过程中涉及到一些断点调试,根据变量值判断当前程序所处状态来寻找关键修改点;

因此,在Linux,Mac下面操作起来可能不是很方便。

不过,我的步骤都有截图,我在每个修改后面都标了step,你可以根据其中的16进制来查找替换。

另外,我不清楚DLL是否通用,通用的话直接复制就行了。

0 前置信息

0.1 大致思路

  1. 修改文件,使得一些篡改检测失效
  2. 搭建本地简易服务器伪造响应

0.2 本文常用IL对应十六进制

IL指令 十六进制
ret 0x2A
ldc.i4.0 0x16
ldc.i4.1 0x17
ldc.i4.2 0x18
nop 0x00

1 安装启动

  1. 下载v4.6.2并安装
  2. 默认安装在C盘,但是会存在操作权限问题不方便后面修改文件
  3. 移动文件到自定义的目录
  4. 打开软件

    pic/1-1

    pic/1-1

2 尝试开启控制台

查看安装文件夹的内容,可以很确定这是一个基于Electron的应用,那么它就能够开启控制台。

开启控制台后,我们能通过F5即时刷新页面,免去修改过程中重开的麻烦。

使用 VS Code 打开软件目录

pic/2-1

pic/2-1

./resources/app/out 文件夹中搜索内容 BrowserWindow(

在每个结果后面加上 xx.webContents.openDevTools();, 其中xx要替换为具体变量

在VS Code控制台输入内容回车 & '.\Fiddler Everywhere.exe', 尝试启动软件;

没有反应,重试也不行;

那就撤销修改再启动,欸,可以。

那说明它自带的启动器有做文件修改校验,得想办法跳过。

3 替换Electron

由于软件是基于Electron的,那么我们可以试试用Electron官方的软件包去启动。

3.1 下载Electron

  1. 打开地址:Electron Release
  2. 选一个顺眼的下载,我选当前较新的 v26.2.2

3.2 替换Electron

  1. 删除原有的文件,除了 resources 文件夹
  2. 将下载的Electron中的文件赋值过去,除了 resources 文件夹
  3. 控制台输入 & '.\electron.exe' 回车,欸启动了。

    pic/3/2-1

    pic/3/2-1

  4. 此时去重试第二步,你会发现,闪退了,这时候就到第4步了。

4 移除main.js的校验

4.1 定位错误位置

  1. 查看控制台输出,可以发现有一个报错 Unable to start server process, closed with code:252

    pic/4/1-1

    pic/4/1-1

  2. 搜索该字符串并局部格式化代码

  3. 可以看出,该处启动了一个外部程序,但是这个程序执行失败了

  4. 加一个日志打印看看输出

    pic/4/1-2

    pic/4/1-2

  5. 输出了程序路径以及执行参数:resources\app\out\WebServer\Fiddler.WebUi.exe --port=16225 --logDirectory=Path\To\Logs --verboseLogging=false --logMaxSize=4194304

  6. 拼接并执行,表现与日志记录一致

      PS D:\Software\Fiddler Everywhere\resources\app\out\WebServer> ./Fiddler.WebUi.exe --port=16225 "--logDirectory=C:\Users\msojocs\AppData\Roaming\Fiddler Everywhere\Logs" --verboseLogging=false --logMaxSize=4194304
      Error while calculating application port! Contact Support
      PS D:\Software\Fiddler Everywhere\resources\app\out\WebServer> $LastExitCode 
      252

    4.2 找出main.js校验关键点

  7. dnSpy 启动!

  8. 填写路径参数

    pic/4/2-1

    pic/4/2-1

  9. 通过断点调试,可以找到图中的一个hash比较代码,我们需要把flag置成总是正确的

    pic/4/2-2

    pic/4/2-2

  10. 正常情况下,Equals返回为true,取反就是false,也就是说flag总是false是需要达到的结果;

    IL代码中使用0与Equals比较,Equals取值有0和1,要让比较结果总是false,就把固定值0换成2;

    ldc.i4.0 换成 ldc.i4.2

  11. 你可以尝试再dnSpy中修改代码保存,这是行不通的,会报错,所以只能修改二进制代码。

4.3 解除main.js校验

直接在 VS Code 里面搜索十六进制,直到是唯一值(0x16FE013A),然后把 0x16 改成 0x18。(step1, Fiddler.WebUi.dll)

前面有个十六进制地址,但那是包含偏移量的,所以与实际有差别。你可以直接打开一个新的这个dll,那么地址会是正确的,但是不如搜索来的快。

pic/4/2-3

pic/4/2-3

改完之后,替换原文件,执行命令。

你会发现错误变了,原来它还对自身进行修改检测。

Unhandled exception. System.TypeInitializationException: The type initializer for '<Module>' threw an exception.
 ---> System.Exception: Fiddler.WebUi is tampered.
   at Fiddler.WebUi.Identifiers.AlgoSchemaID.ReflectProcessor()
   at StopAnnotation()
   at .cctor()
   --- End of inner exception stack trace ---

4.4 定位WebUi的监测点并跳过检测

粗略浏览上一步报错的方法 Fiddler.WebUi.Identifiers.AlgoSchemaID.ReflectProcessor,就是检查有没有被篡改,篡改抛出异常,否则直接返回。

那直接返回就行了,把开头的 2B 05 修改为 2A 00。(step2, Fiddler.WebUi.dll)

最后,启动,OK。

pic/4/2-4

pic/4/2-4

5 伪造服务器

5.1 试着伪造一个请求数据

控制台按下F5,可以看到一个 versions 请求,先伪造它试试

pic/5/1-1

pic/5/1-1

使用js创建一个简单的服务器

(() => {
  const http = require('http')
  const path = require('path')
  const fs = require('fs')
  http.createServer((req, res) => {
    res.setHeader('Content-Type', 'application/json; charset=utf-8')
    const fullPath = req.url
    const url = new URL(fullPath, 'http://127.0.0.1:5678')
    console.log(url.pathname)
    let data = ''
    if (url != null) {
      const loc = path.resolve(__dirname, `./file/${url.pathname}`)
      if (fs.existsSync(loc + '.json')) { // 在后面加上.json后缀,存在就用这个
        data = fs.readFileSync(loc + '.json').toString()
      }
      else if (fs.existsSync(loc)) { // 直接使用原始路径
        data = fs.readFileSync(loc).toString()
      }
    }

    res.end(data)
  }).listen(5678)
})();

之后请求地址会由 https://api.getfiddler.com/versions 变成 http://127.0.0.1:5678/api.getfiddler.com/versions

搜索 https://api.getfiddler.com 替换成 http://127.0.0.1:5678/api.getfiddler.com

为versions地址创建对应文件并把刚刚的响应体复制进去;按下F5,没有什么意外发生。

5.2 移除UI层的签名验证

虽然没有什么异常发生,但是查看日志会发现有报错(日志在 Help->Open Logs Folder):

[Error] [Angular] Not able to fetch the minimum supported FE version. Error: Cannot find signature!

搜素相关文本,可以看到一个 verifyResponse 的验证方法在检查签名;

搜索 verifyResponse,发现只有两个结果;那么很明显一个实现,一个调用,把调用删了就行。

pic/5/2-1

pic/5/2-1

再按下F5,发现日志开始报错。

重启软件无法启动,跟之前情况一样,应该是检测到main.xxx.js被修改了。

5.3 移除mian.xxx.js的检测

使用dnSpy调试,与之前一致,把 ldc.i4.0 换成 ldc.i4.2。(step3, Fiddler.WebUi.dll)

pic/5/3-1

pic/5/3-1

启动 Fiddler.WebUi.exe,成功。

启动 electron.exe 发现自动退出登录了。

重新登录账户,又会自动退出,再日志中看到如下信息:

看来在dll中也有对之前出现的签名进行验证。

[Error] [NETCore] Unexpected backend error.
FiddlerBackend.Contracts.ValidationException: Unable to verify response signature
   at FiddlerBackendSDK.Core.Http.Client.SignedResponseHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
   at Microsoft.Extensions.Http.Logging.LoggingScopeHttpMessageHandler.<SendAsync>g__Core|5_0(HttpRequestMessage request, CancellationToken cancellationToken)
   at System.Net.Http.HttpClient.<SendAsync>g__Core|83_0(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationTokenSource cts, Boolean disposeCts, CancellationTokenSource pendingRequestsCts, CancellationToken originalCancellationToken)
   at FiddlerBackendSDK.Core.Http.Client.AuthenticatedHttpClient.<>c__DisplayClass10_0`1.ConnectionDescriptorListener.MoveNext()

5.4 移除dll中的响应数据签名验证

由于这是在使用中发生的检测,所以此处要使用“附加到进程”的方式进行调试。(你可能需要打开dnSpy选项中的“调试从进程内存加载的文件”)

  1. FiddlerBackend.Contracts.ValidationException 的开头下断点
  2. 重新登录,可以看见参数内容与日志内容吻合。

    pic/5/4-1

    pic/5/4-1

  3. 点击上一个堆栈,可以发现检测到一个字符串为空,大概率是那个签名。

    pic/5/4-2

    pic/5/4-2

  4. 此处不对判空做修改,因为跳过判空,它肯定要去计算签名是否正确,这样改动有点麻烦,最好改动是像上面一样的微小改动。

    所以,我们补一个签名上去,在它判断签名是否正确的if分支那里做修改。

  5. 在服务器的 res.setHeader 前面或后面添加以下代码,然后重启服务器。这是随便拦截的一个签名,格式一定是正确的。

    res.setHeader('Signature', 'SignedHeaders=content-type, Signature=AAAAWzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABNsAzGwa7Q3iTZFqv3xYHemw/qxkwk0sIC/usJVi7713VJv0B1JbfuiDXxHfScNyyQjkuaHKtwbn5qUeHjFwpGbEwT7g2t3hdiBTpJ+406wmIST7bK+eY/HU283penaNN9dDWv/ndsvDHCEcckxvSb7XwFBcdy0/Nq3RC9FKAPug')

  6. 重新登录,触发了异常断点显示“响应数据被篡改”。

    pic/5/4-3

    pic/5/4-3

  7. 去调用堆栈的上一个看看,发现外面有个if分支,看名字以及异常内容应该就是计算响应体是否篡改的。

    pic/5/4-4

    pic/5/4-4

  8. 点进去看看,可以看到返回的是 ecdsa.VerifyData 的结果,那直接返回1就得了,不管它的计算结果。

    pic/5/4-5

    pic/5/4-5

  9. 返回1,就把 0x11 0x03 修改成 0x17 0x00 (step1, FiddlerBackendSDK.dll)

    pic/5/4-6

    pic/5/4-6

  10. 重启electron,不出意外,报错了。

    [NETCore] Error checking offline license: System.TypeInitializationException: The type initializer for '<Module>' threw an exception.
    ---> System.Exception: FiddlerBackendSDK is tampered.
      at ivwASk28iRuKml2oWx.cFY8uLIGhyRee236nI.OJS7J8FnH()
      at .cctor()
      --- End of inner exception stack trace ---
      at Fiddler.WebUi.Services.Backend.BackendService.GetOfflineLicense()
      at System.Runtime.CompilerServices.AsyncMethodBuilderCore.Start[TStateMachine](TStateMachine& stateMachine)
      at Fiddler.WebUi.Services.Backend.BackendService.GetOfflineLicense()
      at Fiddler.WebUi.Hubs.FiddlerHub.CheckOfflineLicense()

5.5 移除dll中的自身验证

打开 ivwASk28iRuKml2oWx.cFY8uLIGhyRee236nI.OJS7J8FnH,粗略查看代码,也是一堆Hash计算验证。

找到关键点:

pic/5/5-1

pic/5/5-1

故技重施,把0改成2:(step2, FiddlerBackendSDK.dll)

pic/5/5-2

pic/5/5-2

重启electron,ok没有严重报错,剩下就是补全响应体了。

5.5 响应体数据获取

这个你要一个个复现是很麻烦的,我是注册了一个新账户;

然后把请求记录全记录下来,塞在服务器里面,然后只要修改一下过期时间就能用了。

很OK啊。

pic/5/6-1

pic/5/6-1

6 最后

可以把服务器代码嵌在main.js开头,这样开启软件的时候就会自动启动欺骗服务器。

部分相关文件已上传至github: https://github.com/msojocs/fiddler-everywhere-enhance

还有部分请自行修改。

免费评分

参与人数 38吾爱币 +36 热心值 +36 收起 理由
xiaomumu + 1 + 1 我很赞同!
caiwei + 1 + 1 谢谢@Thanks!
T4DNA + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
cheesecat + 1 + 1 谢谢@Thanks!
柏林961 + 1 + 1 谢谢@Thanks!
gaoqiai888 + 1 + 1 我很赞同!
萌萌哒的小白 + 2 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
nyazhou + 1 + 1 用心讨论,共获提升!
ofyue + 1 + 1 我很赞同!
huixiang + 1 厉害了,大神
xpj4186 + 1 + 1 4.8需要你
YorkWaugh + 1 + 1 谢谢@Thanks!
simleXL + 1 谢谢@Thanks!
1595901624 + 2 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
lcymzzZ + 1 + 1 谢谢@Thanks!
ye4241 + 1 + 1 用心讨论,共获提升!
a7935 + 1 + 1 我很赞同!
yuanfei + 1 + 1 我很赞同!
kingjing + 1 我很赞同!
5omggx + 1 用心讨论,共获提升!
fengbolee + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
抱歉、 + 1 用心讨论,共获提升!
zozoz + 1 + 1 谢谢@Thanks!
ziji145 + 1 + 1 谢谢@Thanks!
xiaoxiancai + 1 + 1 热心回复!
jamessteed + 1 + 1 谢谢@Thanks!
CC520CC + 1 + 1 用心讨论,共获提升!
alentonly + 1 + 1 谢谢@Thanks!
qqycra + 1 + 1 用心讨论,共获提升!
pojieit + 1 + 1 用心讨论,共获提升!
Mark82II + 1 + 1 我很赞同!
FDE9 + 1 + 1 用心讨论,共获提升!
zhczf + 1 + 1 我很赞同!
DaveBoy + 1 + 1 鼓励转贴优秀软件安全工具和文档!
yiyuh95 + 1 热心回复!
coder9527 + 1 + 1 热心回复!
shengruqing + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

不知道改成啥 发表于 2023-9-24 23:39
楼主应该是搜索.BrowserWindow(
然后在他后面加上当前这个对象.webContents.openDevTools()

比如:
this.noProxyWin || (this.noProxyWin = new mn.BrowserWindow({
        height: 400,
        show: !1,
        width: 400
}), await this.noProxyWin.webContents.session.setProxy({
        proxyRules: null,
        mode: "direct",
        pacScript: null,
        proxyBypassRules: null
}))
//加上下面这句
noProxyWin.webContents.openDevTools();,

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
a472691 + 1 + 1 热心回复!

查看全部评分

qqycra 发表于 2023-10-3 16:34
WuYaowang 发表于 2023-10-3 16:23
对,我知道fiddler everywhere 是收费的,想知道的是,以前是没有fiddler classic ,有的是Fiddler Web D ...

我查了下,新版本叫 Fiddler Classic,老的叫Fiddler Web Debugger,他们是1个软件

免费评分

参与人数 1吾爱币 +1 收起 理由
WuYaowang + 1 谢谢@Thanks!

查看全部评分

joker丨 发表于 2023-12-22 16:32
大佬,我刚才试了一下5.1版本,发现rule界面编辑的时候,分辨率有问题,窗口特别小,能修复一下嘛
 楼主| cqc520 发表于 2023-9-24 19:34
szwangbin001 发表于 2023-9-24 19:20
这个是不是一定要登录才能用的,内网登录不了账号。

公司就去买正版。
DaveBoy 发表于 2023-12-24 18:23
本帖最后由 DaveBoy 于 2024-1-3 15:31 编辑
Alohaq 发表于 2023-12-23 21:35
4.6.1破解起来是不是相比4.6.2简单很多啊?大佬考虑再发个教程吗?

如图为两个版本的使用方式(基本上按这个来没问题,个别地方有问题请自行领悟),这两个版本之间的版本应该也差不多

4.6.1

4.6.1

5.1.0

5.1.0

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
yuanfei + 1 + 1 谢谢@Thanks!
Alohaq + 1 + 1 谢谢@Thanks!

查看全部评分

 楼主| cqc520 发表于 2023-9-25 09:16
geniusrot 发表于 2023-9-25 02:29
我想知道,这个能抓到软件的网络访问包么?还是只能抓走系统代{过}{滤}理的?

Windows系统的设置里面就是全局的,所有的请求都会进去;
除了一些自建适配器的软件,vm ware之类的(但是也有办法管理)。
Linux有时候要export一下,mac我不清楚。
(我的回复内容是我所知的,可能有些错误。)
usbiz 发表于 2024-3-7 17:17

厉害厉害,刚好捣鼓捣鼓
szwangbin001 发表于 2023-9-24 19:20
这个是不是一定要登录才能用的,内网登录不了账号。
DaveBoy 发表于 2023-9-24 19:34
我现在还用的4.0.1,主要我不知道github上4.6.2那几个要怎么用,要说直接覆盖的话,step1、step2这种文件看着又像是逆向过程的中间文件。不像401windos那几个文件直接一覆盖,改下main的去更新就行了
qqycra 发表于 2023-9-24 20:59
这个最好用了,就是x很麻烦,还要求登录。我都不用它了,用fiddler classic 和 花瓶。
 楼主| cqc520 发表于 2023-9-24 21:53
qqycra 发表于 2023-9-24 20:59
这个最好用了,就是x很麻烦,还要求登录。我都不用它了,用fiddler classic 和 花瓶。

现在伪造服务器响应数据就是做了本地化;
登录那一步也能做本地化,但是对我来说可有可无,文章里面就没弄。
qqycra 发表于 2023-9-24 21:56
cqc520 发表于 2023-9-24 21:53
现在伪造服务器响应数据就是做了本地化;
登录那一步也能做本地化,但是对我来说可有可无,文章里面就没 ...

步骤多了复杂了,把想白嫖的都吓走了。大佬你文章适合想学习的人。
无闻无问 发表于 2023-9-24 22:15
厉害啊,大佬,谢谢分享
孤狼微博 发表于 2023-9-24 22:21
谢谢大佬分享,越来越麻烦觉得我该放弃了
头像被屏蔽
moruye 发表于 2023-9-24 23:00
厉害厉害,刚好捣鼓捣鼓
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 11:08

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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