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

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7278|回复: 50
上一主题 下一主题
收起左侧

[MacOS逆向] 破解Emby Server/Client For iOS/MacOS/Linux/Android 通杀方案

  [复制链接]
跳转到指定楼层
楼主
QiuChenly 发表于 2023-10-23 00:20 回帖奖励
本帖最后由 QiuChenly 于 2024-3-8 02:52 编辑

破解Emby Server For macOS 4.7.14.0

Emby 全平台全版本通杀hook代码 解锁所有限制

在本地手机/电脑上已测试通过。此方案通杀iOS/MacOS/Linux/Android 全平台,只要你找得到apploader加载我的代码就可以bypass,因为用的原理是js原生api拦截。

我发现网上这些搞Emby Server / Client 破解的一个个都只会dllspy然后提取资源 替换网址 然后mitm或者自己搭建一个api接口。
而且大部分还是误人子弟,瞎改。进而还衍生出所谓的B站大佬发点修改后的Emby Apk 言语之际居然比我还狂-----如果改改html也是大佬的话。

原理: 利用html初始化后的事件进行jsvm层的api劫持。

2024.03.08 全平台通杀代码无需反编译 by QiuChenly

/Applications/EmbyServer.app/Contents/Resources/dashboard-ui/apploader.js   
function onDone(): 函数开头加入以下拦截代码
// 重写全局的 fetch 函数
        //powered by QiuChenly use node module hook
        (window.fetch1 = window.fetch),
          (window.fetch = (url, options) => {
            console.log("加载的URL是:", url);
            //如果url 包含 https://mb3admin.com/admin/service/registration/validateDevice 则直接返回
            /*
           
{
            status: 200,
            headers: $response.headers,
            body: '{"cacheExpirationDays":999,"resultCode":"GOOD","message":"Device Valid"}'
        }
           */
            if (
              url ===
                "https://mb3admin.com/admin/service/registration/getStatus"[color=#d4d4d4] ||

              url.includes(
                "https://mb3admin.com/admin/service/registration/validateDevice"[/color]
              )
            ) {
              return new Promise((resolve, reject) => {
                resolve({
                  status: 200,
                  headers: {
                    get: () => "application/json",
                  },
                  json: () => {
                    return {
                      cacheExpirationDays: 999,
                      resultCode: "GOOD",
                      message: "Device Valid",
                      // 上半部分是分开的
                      deviceStatus: 0,
                      planType: "超级会员",
                      subscriptions: [
                        {
                          autoRenew: true,
                          store: "秋城落叶",
                          feature: "all",
                          planType: "超级会员",
                          expDate: "直到2099年12月31日以后",
                        },
                      ],
                    };
                  },
                });
              });
            }
            return window.fetch1(url, options);
          });

示例App获取地址: https://github.com/MediaBrowser/Emby.Releases/releases/download/4.7.14.0/embyserver-osx-x64-4.7.14.0.zip

1. 初步分析

在设置中有一个专业版订阅,我们看下:

点击保存我们发现

https://mb3admin.com/admin/service/registration/validateDevice?xxxx 后面是随机生成的不可逆的hash数据,所以我没打码。

这个app我们打开,可以看到非常怀疑是前端页面资源直接返回到浏览器的


dashboard-ui很明显。
我们用vscode搜索一下看看:

还真搜索到了,这么容易就破解了吗?我不信。

2. 修改文件不起作用

我们上一步找到的接口文件,如果我们伪造数据返回岂不是就能解锁专业版?我们试试。

本地我们起了个3000端口服务,看看能不能收到数据包。
保存,重启app,订阅:


此时神奇的一幕发生了,无论我怎么修改这个js文件的内容,永远不起作用,这是为什么呢?

答案只有一个,这个js文件无论内容是什么都不重要,重要是的这个文件存在就可以了,只要app拦截页面访问请求,在代码中构造一个内嵌的js文件,就可以做到这种效果。那么是哪个文件呢?

当然是我们最爱的暴力搜索辣!

由于dll文件无法被Sublime Text搜索到,我不知道是不是我的设置问题,所以我手动一个个文件放到HexFriends里面搜索字符串:

终于搜索到了。

这个文件是Emby.Web.dll,是C#动态库,那么我们有请windows和dnSpy上场!


在解析完成后,我们看到资源文件中果然出现了一个同名文件,我们导出这个文件:

我们放到vscode中格式化后,可以看到这个请求的逻辑是:


如果这个接口走通了,那么直接

        return (
                  appStorage.setItem(
                    cacheKey,
                    JSON.stringify({
                      lastValidDate: Date.now(),
                      deviceId: params.deviceId,
                      cacheExpirationDays: response.cacheExpirationDays,
                      lastUpdated: Date.now(),
                    })
                  ),
                  Promise.resolve()
                );

那么我们直接返回这个数据不就得了?
于是我插入了这一段修改后的代码:


其作用是伪造了服务器返回的数据,让他走逻辑成功。

最后复制保存为js文件,切记文件名要和导出的文件名一致,重新把这个文件导入进dll中:

在弹出的窗口中选择自己保存的同名文件即可。

最后保存文件修改:


我这里保存过了,所以“全部保存”是灰色的,修改后一定要选择全部保存后才会对dll进行实际修改哦!

保存文件后替换app里的同名文件试试:


打开app我们在再试一遍:

这里打开f12后一定要长按左键清空浏览器缓存刷新,否则js文件可能不是最新的。

但是我们发现重新输入后这里好像没有发生变化,依然是让你订阅并告诉你没有有效订阅。
我们定位到/Applications/EmbyServer.app/Contents/Resources/dashboard-ui/embypremiere/embypremiere.js文件看一下,同样是暴力搜索这里不再赘述:


我们注意到这里有一个IsMBSupporter, 这好像是一个非常关键的词。

也就是说,如果IsMBSupporter不为true,那么所有逻辑是不会往下走的。于是就显示出了“无效的订阅”字样,我们试着改一下:

30行我们强制设置为true,并且下面伪造了一个http数据返回,让他正确读取到订阅信息。

我们保存,重新打开app看一下:


还是一样 清空页面缓存强制刷新,点击保存按钮后可以看到直接就出现了付费版订阅。

至此,破解完毕,只需要修改一个js文件和一个dll文件中的js资源文件即可。

总结

        return (
                  appStorage.setItem(
                    cacheKey,
                    JSON.stringify({
                      lastValidDate: Date.now(),
                      deviceId: params.deviceId,
                      cacheExpirationDays: response.cacheExpirationDays,
                      lastUpdated: Date.now(),
                    })
                  ),
                  Promise.resolve()
                );
                return new Promise((resolve) =>
                    resolve({
                      deviceStatus: 0,
                      planType: "超级会员",
                      subscriptions: [
                        {
                          autoRenew: true,
                          store: "秋城落叶",
                          feature: "all",
                          planType: "超级会员",
                          expDate: "且会员资格永远不会失效",
                        },
                      ],
                    })
                  );

修改好的文件仅供参考:
https://github.com/QiuChenlyOpenSource/InjectLib/tree/main/EmbyServer

免费评分

参与人数 21威望 +1 吾爱币 +38 热心值 +19 收起 理由
magicalsch + 1 谢谢@Thanks!
pojun1006 + 1 + 1 谢谢@Thanks!
kodesu + 1 鼓励转贴优秀软件安全工具和文档!
aocimaxx + 1 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
paramax + 1 谢谢@Thanks!
bjbcqy + 1 + 1 Emby.Server.Implementations.dll 还有一个硬解的
雨潮潮 + 1 谢谢@Thanks!
chablino + 1 + 1 强强强
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
pidan瓜 + 1 + 1 谢谢@Thanks!
瞄帕斯 + 2 + 1 热心回复!
iheanran + 1 + 1 我很赞同!
fox + 1 + 1 秋秋可爱捏
luoxiaokai67 + 1 + 1 谢谢@Thanks!
Vike + 1 + 1 用心讨论,共获提升!
gz7uuuuuuuuu + 1 谢谢@Thanks!
三滑稽甲苯 + 2 + 1 用心讨论,共获提升!
lgc81034 + 1 谢谢@Thanks!
pjy612 + 1 + 1 重拾初心
hrh123 + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

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

推荐
ljchit 发表于 2024-2-29 19:06
感谢。顺着大佬的思路来确实清晰不少。这个破解应该还有地方可以搞。群晖的可以开通硬解,估计应该是和大佬的一个思路来的,也是返回信息来调动的。
推荐
pjy612 发表于 2023-10-23 00:25
本帖最后由 pjy612 于 2023-10-23 00:30 编辑

大佬这是 谈成功了... 还是 谈失败了...

===================================
看了一眼项目。。。似乎 大佬 已被 19岁小妹妹 击穿。。。 现在是重拾初心了? 加油!

免费评分

参与人数 1吾爱币 +1 收起 理由
女人于我何加焉 + 1 心中无女人,破解自然神

查看全部评分

3#
yaphoo 发表于 2023-10-23 08:15
4#
daiqing 发表于 2023-10-23 09:04
linux下访问地址如果一样,是不是可以用MitM破解呢?
5#
qiangxinglin 发表于 2023-10-23 09:25
daiqing 发表于 2023-10-23 09:04
linux下访问地址如果一样,是不是可以用MitM破解呢?

应该是可以的, IOS就是基于mitm做的破解
6#
jerry828 发表于 2023-10-23 09:31
感谢分享,学习了!
7#
白白io 发表于 2023-10-23 10:22
大佬牛逼  测试了   虽然显示有效订阅  但是无法正常硬解
8#
sunnybank3037 发表于 2023-10-23 10:42
感谢大佬分享!
9#
xiaozitwo 发表于 2023-10-23 10:52
大哥牛叉啊思路很清晰
10#
harryhou 发表于 2023-10-23 12:42
学习了!感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

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

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

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

GMT+8, 2024-4-28 08:55

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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