吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 16538|回复: 264
上一主题 下一主题
收起左侧

[原创] Fiddler Everywhere 5.7.1永久试用版

    [复制链接]
跳转到指定楼层
楼主
5683 发表于 2024-4-10 15:30 回帖奖励
根据4.6.2的思路(fiddler everywhere 4.6.2 去除授权校验 - 『脱壳破解区』 - 吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn),将5.7.1的试用天数改为999999


一、控制台启动
这部分和4.6.2的差别不大
主要做两件事,一是去除Fiddler.WebUi.dll中的对文件篡改的校验,二是去除Fiddler.WebUi.dll文件自身被篡改的校验
虽然修改的地方变了,但是调试方式是一致的,所以过程就不赘述了,大家可以直接参考4.6.2的,这里直接贴出修改点
1. 文件篡改校验修改点

从下面的参数可以看到,A_0和A_1就是要进行对比的两个Hash值,通过修改二进制,直接将它变成A_0与A_0的对比


2. Fiddler.WebUi.dll自篡改校验修改点

这里粗暴点,直接将它变成 null == null,即永远返回 true




改完之后成功开启控制台


二、代{过}{滤}理服务器
4.6.2中,接口数据没有详细说是怎么抓的,在处理5.7.1过程中,这部分自己摸索了一遍

首先,在Network中可以看到,是有两个接口的,分别是 /versions和 /users,这两个接口也可以看到一些关于试用时间的相关数据,
只不过伪造了这两个接口后并不能进入到首页页面

而后在调试过程中,发现有些接口是直接从后端,也就是dll文件中直接发起的,这部分接口控制台无法抓取,
好在后端发起的接口的域名部分,依旧是前端 main.*.js 中控制的,
所以就有了个思路:起个代{过}{滤}理服务,将域名改成代{过}{滤}理服务地址,也就是127.0.0.1:port,代{过}{滤}理中将其转到真实地址,期间输出相关返回信息,用以构造接口数据

代{过}{滤}理转发可以继续使用node.js,不过要注意,如果需要引入非node自身的依赖包,需要手动到npm资源站下载js版依赖(ts的es6语法会引发报错),
下载后install下,通过绝对路径进行引入,方便起见,本人使用了flask,通过设置请求拦截器,转发并输出响应信息
[Python] 纯文本查看 复制代码
@server.before_request
def handle_before_request():
    print('请求:(%s)%s' % (request.method, request.url))
    print('请求路径:%s' % request.path)
    url = request.url.replace('http://127.0.0.1:56789', URL)
    headers = {'Host': 'api.getfiddler.com'}
    keys = [
        'Host',
        'Api-Version',
        'Authorization',
        'Accept-Encoding',
        'Traceparent',
        'Content-Type',
        'Content-Length',
        'Connection',
        'Sec-Ch-Ua',
        'Accept',
        'Sec-Ch-Ua-Mobile',
        'User-Agent',
        'Sec-Ch-Ua-Platform',
        'Sec-Fetch-Site',
        'Sec-Fetch-Mode',
        'Sec-Fetch-Dest',
        'Accept-Encoding',
        'Accept-Language'
    ]
    for key in keys:
        if request.headers.get(key) is not None:
            headers[key] = request.headers.get(key)
    if 'Host' in headers:
        headers['Host'] = 'api.getfiddler.com'
    res = {}
    if request.method == "GET":
        res = requests.get(url, headers=headers)
    elif request.method == "POST":
        data = request.get_json()
        res = requests.post(url, json=data, headers=headers)
    g.res_headers = dict(res.headers)
    print('响应头(%s):%s' % (request.path, res.headers))
    # 最开始['/versions', '/users'],后续拿到一个接口就把该接口加上
    if request.path not in ['/versions', '/users', '/users/sign-in', '/trials/Everywhere/availability', '/push-notifications-configuration',
                            '/composer-collections',
                            '/snapshots',
                            '/events',
                            '/rulesets'
                            ]:
        r = None
        try:
            r = res.json()
        except Exception as e:
            ...
        if r is not None:
            print('响应数据-json(%s):%s' % (request.path, r))
            print('----------------------------------------------------------------------------')
            # h = dict(res.headers)
            # del h['Content-Encoding']
            # del h['Vary']
            # return res.content, 200, h
            return jsonify(r), 200, {
                'Content-Type': 'application/json; charset=utf-8',
                # 'Transfer-Encoding': 'chunked',
                'Connection': 'keep-alive',
                'Date': 'Fri, 05 Apr 2024 10:21:02 GMT',
                'Server': 'Kestrel',
                # 'Content-Encoding': 'gzip',
                # 'Vary': 'Accept-Encoding',
                'X-Date': 'Fri, 05 Apr 2024 10:21:02 GMT',
                'Signature': 'SignedHeaders=content-type;x-date, Signature=AAAAWzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABNsAzGwa7Q3iTZFqv3xYHemw/qxkwk0sIC/usJVi7713VJv0B1JbfuiDXxHfScNyyQjkuaHKtwbn5qUeHjFwpGYeSjYg07lS2j6uB6+K9EvBaf20D/Ra5CEA54/wqToSaXObvZFcZktqPq1rJ6ZbzEo4fljlk/ys8UzMje/YD0lz',
                'api-supported-versions': '1.0',
                'X-Cache': 'Miss from cloudfront',
                'Via': '1.1 88cabd6b8652306789c6bc8090fbcb1a.cloudfront.net (CloudFront)',
                'X-Amz-Cf-Pop': 'FRA56-P6',
                'Alt-Svc': 'h3=":443"; ma=86400',
                'X-Amz-Cf-Id': '9-7P1_bxpKtz2Vfu8sxbarAPcigAEdVVOiVWgzICZuYgZvZm3Z_crA=='
            }
        else:
            print('响应数据-text(%s):%s' % (request.path, res.text))
            print('----------------------------------------------------------------------------')
            return res.text


调试过程中的几个问题
1. 转发时的报错
转发时的请求头选项Host要修正为api.getfiddler.com,而不是127.0.0.1
2. 响应结果被篡改

找到报错位置,最后一行改成返回true



3. FiddlerBackendSDK.dll的自篡改校验



4. 返回值引起的报错
接口/trials/Everywhere/availability的返回值要改成true,表示还在试用期,false会触发报错


5. 响应头引起的报错
开始想着尽量不动响应头,其实是给自己挖了坑
首先是"Content-Encoding": "gzip",这个响应头会触发后端采用```zip```算法去解析结果,而我们是直接构造的数据返回,显然无法被解析;
还有就是/snapshots和/composer-collections这两接口一直提示System.InvalidOperationException: The stream was already consumed. It cannot be read again.费了好大劲,最后发现是响应头引起的,只保留签名相关响应头就可以了


三、伪造服务器
将代{过}{滤}理服务器抓取的数据,重新构造成相关json文件,开启main.js中的伪造服务器,好了,完工








免费评分

参与人数 57吾爱币 +59 热心值 +46 收起 理由
dennyyang + 2 + 1 我很赞同!
lgd8220 + 1 鼓励转贴优秀软件安全工具和文档!
Dolts + 1 + 1 谢谢@Thanks!
walkingyu + 1 用心讨论,共获提升!
ZiZi123 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
牧尘凉凉 + 1 热心回复!
Huibq120 + 1 谢谢@Thanks!
kuchen + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!今日的分就给你吧!
mhaitao + 1 + 1 我很赞同!
loue9420 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
gracezp + 1 + 1 谢谢@Thanks!
apolloth + 1 + 1 谢谢@Thanks!
aaa661179 + 1 + 1 热心回复!
Clousa95 + 1 + 1 谢谢@Thanks!
那些年打的飞机 + 1 + 1 谢谢@Thanks!
highdolphin + 1 + 1 用心讨论,共获提升!
janken + 1 + 1 热心回复!
bugof52pj + 1 谢谢@Thanks!
xn213 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
xn2113 + 1 + 1 鼓励转贴优秀软件安全工具和文档!
blindcat + 1 + 1 谢谢@Thanks!
lyslxx + 1 + 1 我很赞同!
moonrabbit + 1 + 1 谢谢@Thanks!
ahaneo + 1 + 1 谢谢@Thanks!
ag129 + 1 + 1 用心讨论,共获提升!
XG123114 + 1 我很赞同!
KUBSU + 1 <bionic>谢谢@<bbb>Tha</bbb>nks!</bionic>
windsing + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
423 + 1 + 1 谢谢@Thanks!
xuemantian0304 + 1 谢谢@Thanks!
grrr_zhao + 1 + 1 谢谢@Thanks!
bingshen + 1 + 1 谢谢@Thanks!
坡婆子 + 1 + 1 用心讨论,共获提升!
bullshit + 1 + 1 谢谢@Thanks!
hybcrp + 1 + 1 谢谢@Thanks!
Atnil + 1 + 1 谢谢@Thanks!
emmmmo + 1 热心回复!
Damocles0 + 1 + 1 用心讨论,共获提升!
浮尘晓梦 + 1 谢谢@Thanks!
xlwllm + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
freezon + 1 我很赞同!
5omggx + 1 + 1 用心讨论,共获提升!
Issacclark1 + 1 谢谢@Thanks!
libo4026 + 1 用心讨论,共获提升!
abclihongzhi + 1 谢谢@Thanks!
爱飞的猫 + 7 + 1 可以尝试直接在 .net 模块内填充数据,跳过本地反代哦
procurve + 1 + 1 谢谢@Thanks!
阳明呀 + 1 + 1 热心回复!
chinawolf2000 + 1 + 1 热心回复!
marcyan + 1 谢谢@Thanks!
qiguanghui8817 + 1 热心回复!
Marcel007 + 1 + 1 热心回复!
RickSanchez + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
0120 + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
freezer + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
SVIP008 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!今日的分就给你吧!
wwb66668 + 1 + 1 谢谢@Thanks!

查看全部评分

本帖被以下淘专辑推荐:

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

推荐
liyabo 发表于 2024-4-10 18:44
可以直接发完整文件吗
推荐
SVIP008 发表于 2024-4-10 18:23
推荐
dj8888 发表于 2024-4-10 18:34
推荐
 楼主| 5683 发表于 2024-4-11 19:13 |楼主
wunaihe 发表于 2024-4-11 19:04
谢谢大佬分享,官方下载升级成5.8了。

这么快啊 上周还是571
5#
jlbslqqs 发表于 2024-4-10 17:32
永久试用就是一直用不要钱了。牛
6#
luanssss 发表于 2024-4-10 18:03
可以直接放出文件吗?
7#
duduhao 发表于 2024-4-10 18:05
太感谢学习中
8#
 楼主| 5683 发表于 2024-4-10 18:23 |楼主
luanssss 发表于 2024-4-10 18:03
可以直接放出文件吗?

我看发帖规则写着不能直接发成品
9#
Laurenceo278 发表于 2024-4-10 18:58
学习是学习了,可惜没成品,
10#
nidiexixi 发表于 2024-4-10 19:00
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

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

GMT+8, 2024-4-29 23:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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