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