本帖最后由 dddfr 于 2025-3-4 15:30 編輯
為了實(shí)現(xiàn)全屋IPTV,針對(duì)這個(gè)盒子做了一系列研究,前期發(fā)的貼子有:
打開ADB:傳送門
ROOT:傳送門
準(zhǔn)備工作都做全了,這次主要分享一下IPOE認(rèn)證過程。
這款盒子DHCPv4和v6都有認(rèn)證,主要研究v4,經(jīng)抓包后發(fā)現(xiàn)option60是偽動(dòng)態(tài)的,所謂偽動(dòng)態(tài)是指每次開機(jī)驗(yàn)證碼是變化的,但通過抓包重放后仍能通過驗(yàn)證,從使用層面抓到數(shù)據(jù)之后就可以了,但作為職業(yè)強(qiáng)迫癥患者必需得給它整明白。
一般安卓的DHCP服務(wù)都放在init.rc里,但開發(fā)者可能為了避免破解不知道給藏哪了,通過PS查到DHCPv4用的是udhcpc,v6用的是dhclient,v4的文件在/system/bin/opt/bin中。
option60加密過程無(wú)非放在兩個(gè)地方,一是java層,二是native層。java層經(jīng)大量反編譯,沒找到有價(jià)值的代碼,僅是將用戶名和密碼存到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));
- }
- }
復(fù)制代碼 中間通過大量的Binder繞來(lái)繞去,最終來(lái)到這里。目前的狀況可能是java層把相關(guān)數(shù)據(jù)放到prop里,再由native層計(jì)算option60密文。
先查了一下libnetutils.so,java層是通過這個(gè)文件里的dhcp_do_request調(diào)用DHCP服務(wù)的
沒有發(fā)現(xiàn)加密過程,只是把相關(guān)參數(shù)壓到prop里,確認(rèn)DHCP確實(shí)是udhcpc。繼續(xù)反編譯udhcpc,這個(gè)文件export函數(shù)只有一個(gè)start入口函數(shù),沒什么參考了,繼續(xù)查找string,關(guān)鍵字dhcp, option, aes, des, md5等,找到3des和md5的字串,經(jīng)反復(fù)核查,最終鎖定黃色函數(shù)。
整理一下加密流程:
游客,如果您要查看本帖隱藏內(nèi)容請(qǐng) 回復(fù)
下一步準(zhǔn)備研究EPG驗(yàn)證過程
|