本帖最后由 dddfr 于 2025-3-4 15:30 编辑
为了实现全屋IPTV,针对这个盒子做了一系列研究,前期发的贴子有:
打开ADB:传送门
ROOT:传送门
准备工作都做全了,这次主要分享一下IPOE认证过程。
这款盒子DHCPv4和v6都有认证,主要研究v4,经抓包后发现option60是伪动态的,所谓伪动态是指每次开机验证码是变化的,但通过抓包重放后仍能通过验证,从使用层面抓到数据之后就可以了,但作为职业强迫症患者必需得给它整明白。
一般安卓的DHCP服务都放在init.rc里,但开发者可能为了避免破解不知道给藏哪了,通过PS查到DHCPv4用的是udhcpc,v6用的是dhclient,v4的文件在/system/bin/opt/bin中。
option60加密过程无非放在两个地方,一是java层,二是native层。java层经大量反编译,没找到有价值的代码,仅是将用户名和密码存到prop里,这是services.jar中EthernetService.java的片段
- public void setDhcpOption60(boolean setEnable, String login, String password) {
- if (checkPermission()) {
- if ("aosp".equals(SystemProperties.get("ro.product.target", "aosp"))) {
- Log.e(TAG, "dhcpplus is not enabled");
- return;
- }
- if (this.DEBUG) {
- Log.d(TAG, "setDhcpOption60(" + setEnable + ", " + login + ", " + password + ")");
- }
- ContentResolver cr = this.mContext.getContentResolver();
- Settings.Secure.putInt(cr, "option60_on", setEnable ? 1 : 0);
- Settings.Secure.putString(cr, "option60_login", login);
- Settings.Secure.putString(cr, "option60_password", NetworkUtils.passwdEncode(password));
- }
- }
复制代码 中间通过大量的Binder绕来绕去,最终来到这里。目前的状况可能是java层把相关数据放到prop里,再由native层计算option60密文。
先查了一下libnetutils.so,java层是通过这个文件里的dhcp_do_request调用DHCP服务的
没有发现加密过程,只是把相关参数压到prop里,确认DHCP确实是udhcpc。继续反编译udhcpc,这个文件export函数只有一个start入口函数,没什么参考了,继续查找string,关键字dhcp, option, aes, des, md5等,找到3des和md5的字串,经反复核查,最终锁定黄色函数。
整理一下加密流程:
下一步准备研究EPG验证过程
|