要使用本教程的方案,你需要一些基础知识:
1、web服务器搭建
2、ngix/apache静态页面
3、基础的linux知识
4、ssl证书签发
需要的条件:
1.一台基于linux的主机或者云服务器
2、开放80端口的公网ip(非必须)
3、一台基于openwrt或其他开放系统ssh的路由器
那么现在开始教程:
先说下实现的原理,为了研究思路,博主花了800多块买了终身会员,通过在虚拟机里面安装emby并网卡抓包以及f12查看源码发现:
当我们使用、注册会员功能时,我们的客户端会向mb3admin.com发送带有设备id和激活码的请求,服务器返回设备已激活的信息,客户端收到信息后启用会员功能,这也就是我们在没有网络的情况下无法使用离线转码等会员功能的原因。
通过抓包发现,主要会从以下几个地方发送请求:
1、mb3admin.com/admin/service/registration/getStatus
这个连接主要用于获取会员状态:
因为我是终身会员,所以输出:
2、mb3admin.com/admin/service/registration/validate
这个用于获取会员过期日
3、mb3admin.com/admin/service/registration/validateDevice
这个是验证设备
因为服务器端返回的信息都是明文,所以我们有两种思路:
1是重放攻击,原理是将服务端返回的信息截取收集,然后需要验证的时候广播给客户端
2是直接搭建一个假的mb3admin.com网站,把原本向mb3admin.com的流量导向我们的假网站
然后你会发现第一种思路基本行不通,因为连接使用了https,在https,每个socket连接都会验证证书,交换密钥。攻击者截获请求,重新发送,因为socket不同,密钥也不同,要用这种发送估计就需要中间人攻击?
那么我们现在做的就是搭建一个假的mb3admin.com
可以搭建在本地,也可以搭建在服务器端
服务器需要安装apache/ngix,openssl,配置静态
搭建web和配置静态自行寻找教程,比如我的博客就不是html静态页,因为没必要弄
弄成静态页面你就看不到那个php了
由于服务器太贵了,博主的服务器昨天宕机,今天下午才修好,并且国内服务器绑域名还要备案(我们这不需要绑),所以本教程主要讲如何在本地建服务器并实现https访问
首先在本地一台linux主机上搭建好web,并安装openssl签发根证书,使用根证书签发好mb3admin.com证书,如果不会就百度线上证书签发,签发后把证书安装到你的电脑上的受信任的根证书签发机构。
nginx的配置参考:http://nginx.org/en/docs/http/configuring_https_servers.html
在路由器上使用dns工具或者直接把客户端的那台机器的hosts里面添加web主机的ip mb3admin.com
比如我这里web主机的ip是192.168.1.123,在hosts里面添加:
192.168.1.123 mb3admin.com
伪静态写法(其实就是照抄抓包返回的值):mb3admin.com/admin/service/registration/validateDevice返回值:{“cacheExpirationDays”: 7,”message”: “Device Valid”,”resultCode”: “GOOD”}
默认是7天一个轮回,可以把这个值改高点,免得回回验证
mb3admin.com/admin/service/registration/getStatus返回:{“deviceStatus”:””,”planType”:””,”subscriptions”:{}}
mb3admin.com/admin/service/registration/validate返回:{“featId”:””,”registered”:true,”expDate”:”2020-07-07″,”key”:”abcdefg29achijklmn0c598opqrst1e7″}
json写法参考:https://www.runoob.com/js/js-json.html
博主原本想直接在路由器openwrt上搞个web页,但由于博主使用lede的源码编译了openwrt,由于源码问题,反正搞了好久都装不上ssl和apache,于是放弃了
后续补充,博主已经靠自己签发根证书,然后用根证书签发mb3admin.com证书实现emby crack,并且重新编译openwrt,在路由器搭建了假站
配置如下:
location /admin/service/registration/validateDevice
return 200 '{"cacheExpirationDays": 3650,"message": "Device Valid (limit not checked)","resultCode": "GOOD"}';
location /admin/service/registration/validate
return 200 '{"featId": "","registered": true,"expDate": "2099-01-01","key": ""}';
location /admin/service/registration/getStatus
return 200 '{planType: "Lifetime", deviceStatus: 0, subscriptions: []}';
location /admin/service/appstore/register
return 200 '{"featId": "","registered": true,"expDate": "2099-01-01","key": ""}';
location /emby/Plugins/SecurityInfo
return 200 '{SupporterKey: "", IsMBSupporter: true}';
注意跨域访问的问题:
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers *;
add_header Access-Control-Allow-Method *;
add_header Access-Control-Allow-Credentials true;