logo NodeSeekbeta

Emby官方安卓客户端(包含TV)破解教程

一:认证服务器搭建

你需要将自建域名(如 sub.66.al,可以直接使用此域名,不需要再次搭建)解析到你的服务器,并在服务器上配置 Nginx 或 Caddy。由于 Emby 验证请求使用了特定的 API 路由,我们直接让 Web 服务器拦截 these 路由并返回固定合法的 JSON 会员状态。

方案 A:Caddy (v2) 配置
sub.66.al {
    # 开启自动 HTTPS 证书申请与续签
    tls [email protected]

    # 1. 定义命名匹配器:统一拦截三个核心认证路由
    @emby_auth_routes path /admin/service/registration/validateDevice /admin/service/registration/validate /admin/service/registration/getStatus

    # 2. 统一处理跨域请求头(CORS)与响应内容类型
    header @emby_auth_routes {
        Access-Control-Allow-Origin "*"
        Access-Control-Allow-Headers "*"
        Access-Control-Allow-Methods "*"
        Access-Control-Allow-Credentials "true"
        Content-Type "application/json"
    }

    # 3. 使用顶层 respond 直接精简返回(无需在内部嵌套 header 块)
    
    # 核心验证接口 1:设备状态验证
    respond /admin/service/registration/validateDevice `{"cacheExpirationDays":3650,"isLicensed":true,"licenceStatus":"Licensed","message":"Device Valid","resultCode":"GOOD"}` 200
    
    # 核心验证接口 2:高级特权、金徽章状态验证
    respond /admin/service/registration/validate `{"featId":"","isLicensed":true,"licenceStatus":"Licensed","registered":true,"expDate":"2099-01-01","key":""}` 200
    
    # 核心验证接口 3:查询整体订阅状态
    respond /admin/service/registration/getStatus `{"deviceRecordCount":9999,"registeredUsersCount":9999,"isLicensed":true,"licenceStatus":"Licensed","isTrial":false,"deviceStatus":"","planType":"Lifetime","subscriptions":{}}` 200

    # 4. 兜底默认响应
    fallback {
        respond `{"error":"Emby Auth Server Running"}` 404 {
            header Content-Type "application/json"
        }
    }
}
方案 B:Nginx 配置

如果你更倾向于使用 Nginx,可以使用以下配置。同样在顶层配置了完善的跨域及数据类型响应头:

server {
    listen 80;
    server_name sub.66.al;
    # 强制跳转 HTTPS
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name sub.66.al;

    # SSL 证书路径(请替换为你的实际路径)
    ssl_certificate /etc/nginx/certs/sub.66.al.crt;
    ssl_certificate_key /etc/nginx/certs/sub.66.al.key;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # 统一提取公共响应头配置
    add_header Access-Control-Allow-Origin "*" always;
    add_header Access-Control-Allow-Headers "*" always;
    add_header Access-Control-Allow-Methods "*" always;
    add_header Access-Control-Allow-Credentials "true" always;
    default_type application/json;

    # 核心验证接口 1:设备状态验证
    location /admin/service/registration/validateDevice {
        return 200 '{"cacheExpirationDays":3650,"isLicensed":true,"licenceStatus":"Licensed","message":"Device Valid","resultCode":"GOOD"}';
    }

    # 核心验证接口 2:高级特权、金徽章状态验证
    location /admin/service/registration/validate {
        return 200 '{"featId":"","isLicensed":true,"licenceStatus":"Licensed","registered":true,"expDate":"2099-01-01","key":""}';
    }

    # 核心验证接口 3:查询整体订阅状态
    location /admin/service/registration/getStatus {
        return 200 '{"deviceRecordCount":9999,"registeredUsersCount":9999,"isLicensed":true,"licenceStatus":"Licensed","isTrial":false,"deviceStatus":"","planType":"Lifetime","subscriptions":{}}';
    }

    # 其他默认请求返回 404
    location / {
        return 404 '{"error":"Emby Auth Server Running"}';
    }
}

二:Android 客户端重打包

当认证服务器准备就绪后,我们需要对官方的 Android 或 Android TV 客户端进行修改,将其代码内请求的域名 mb3admin.com 替换为我们刚才搭建好的 sub.66.al。

准备工具环境

在执行以下命令前,请确保你的 Linux / 终端环境中安装了以下依赖工具:

  • wget:用于下载官方客户端。
  • apktool:用于反编译和回编译 APK。
  • openjdk (包含 keytool):用于生成数字签名证书。
  • zipalign & apksigner:Android SDK 自带工具,用于字节对齐和 APK 签名。
apt-get update
sudo apt install -y zipalign apksigner apktool

详细操作

请按顺序在终端中执行以下步骤:

# 1. 下载官方最新版 Emby Android 客户端,此处以arm64-v7a举例(32位)
wget https://github.com/MediaBrowser/Emby.Releases/raw/master/android/emby-android-google-arm64-v7a-release.apk

# 2. 查看下载的文件和当前目录状态
ls -al

# 3. 使用 apktool 反编译 APK(-r 参数表示不反编译资源文件,能大幅加快处理速度并减少报错)
apktool d -r emby-android-google-armeabi-v7a-release.apk

# 4. 进入反编译出来的源码目录
cd emby-android-google-armeabi-v7a-release/

# 5. 全局搜索并替换官方验证域名为你的自建域名
find . -type f -exec sed -i 's/mb3admin\.com/sub\.66\.al/g' {} +

# 6. 返回上一级目录
cd ..

# 7. 将修改后的源码文件夹回编译,输出为未对齐的临时包 tv.apk
apktool b emby-android-google-armeabi-v7a-release

# 8. (可选) 备份或复制一份生成的原始未对齐包
cp emby-android-google-armeabi-v7a-release/dist/emby-android-google-armeabi-v7a-release.apk tv.apk

# 9. 创建你专属的自签名证书(生成的 key.jks 有效期为 100 年,密码自定义,流水线示例默认为后面输入的签名密码),其他信息直接回车,最后no的一步填yes回车即可
keytool -genkey -v -keyalg RSA -keysize 2048 -validity 36500 -keystore key.jks -alias key

# 10. 使用 zipalign 工具对 APK 进行 4 字节对齐优化(这是 Android 发布的硬性要求,能大幅优化运行内存占用)
zipalign -v -p 4 tv.apk tv-aligned.apk

# 11. 使用 apksigner 进行 V2/V3 签名,输出最终的安装包 tv-final.apk
# 这里假设你在第 9 步设置的 keystore 密码为 123456
apksigner sign --ks key.jks --ks-pass pass:123456 --out tv-final.apk tv-aligned.apk
12
  • @J1ang #1 手机版不能用了柴柴,按钮都按不了

  • EMBY 验证会员居然没有加密

  • @Agonie0v0 #4 我是115直链emby自建服,官方客户端用视频自带特效字幕,直链可以播放,浏览器和三方的不行,需要服务器转码导致播放很卡,服务器cpu直接满载。为了解决这个问题,甚至搭建了jellyfin,也不行。最后是用官方安卓端解决的,后面有些视频没字幕,需要破解官方客户端,就自己搞了下

  • 所以为什么不用DNS来实现?

  • @czy #2 可以试试,感觉tv就他最完善

  • @regbat #8 我的意思是将通过DNS官方的验证域名解析指向你本地服务器响应json,这样不也可以吗?不过验证域名和更新域名是同一个,这样以后便不能更新了,官方的联网功能也都不能用了,但是这是部署在自己服务器的更新也没啥用,官方也没什么特别的服务

12

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72657位seeker

🎉欢迎新用户🎉