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