前言

最近在逛某宝的“老王电子数码DIY"库存品店,发现了一个6块6毛钱的随身WIFI,觉得挺便宜的就购入了,到手之后做了一些很简单的分析,发现其可以解锁并且正常使用,以下为分析和解锁的流程。

初步

以下为刚刚到手的样子,很明显是某出境随身WIFI租赁公司租赁韩国SKT运营商的产品。
收到时候没有电池,不过这个设备支持完全USB供电,仅需5V2A即可。
URoadUnl_Preview
翻到背面,可以看到型号为LFM300R和SN,IMEI等信息
URoadUnl_Infos
通过型号,成功通过网页时光机找到了这个机器的官方指南
URoadUnl_OfficialDoc
在这里请留意你的设备IMEI的最后四位数和IMEI上方的SN,之后解锁流程中需要使用

初探

直接插入我们自己的SIM卡,由于店家在商品介绍里面就有写是网络锁,所以肯定是不能直接使用的。
URoadUnl_SimErrLight
设备上的指示灯也显示是告警状态
然后我们通过http://192.168.1.1来登录到用户面板

用户面板用户名为user,密码为左侧贴纸上的Wi-Fi PSK密码

进入用户面板之后可以在右上方点击ENG切换到英文界面
URoadUnl_SimErrWeb
在这里我们可以看到已经读卡,但是仅限于读到了ICCID,网络状态为Inactive无法使用

管理员面板

在官方指南里面其实有提到如何进入管理员面板,但是并未提到里面的详细设定,仅仅表明了可以手动安装系统更新,漏洞就出现在这里
我们只需要一点点后壳上的信息即可进入管理员面板

http://192.168.1.1:4XXXX (XXXX为你设备的IMEI最后四位数)
管理员面板用户名为admin,密码为IMEI上方的SN序列号

URoadUnl_Login
在上方栏中找到Basic -> Account & System Setting -> Manual Update
URoadUnl_AdminPanelUpdate
选择更新包后即可开始更新
URoadUnl_Updating
更新完成后会提示以下界面,等待设备重新启动即可更新到2017年8月编译的最新版本
URoadUnl_UpdateOk

解锁

在管理员面板中稍微做了下发掘,就找到了网络锁解锁选项,我觉得可能韩国人根本没有想好好锁这个机器吧
URoadUnl_SimSettings
修改以下两个选项
LTE -> LTE Management -> Ignore USIM 改为Enable
LTE -> LTE Management -> Connection Setting 改为Automatic
选项需要一个一个进行修改,改完一个之后需要按一次Apply然后等待系统重启后再修改下一个选项
URoadUnl_Restart
执行完成这两个修改之后这个设备的网络锁即告解除

设定APN

继续进入管理员面板
URoadUnl_AuthSettings
找到LTE -> Authentication Setting -> APN Profile
即可新增自己的APN并且应用了,应用之后重启再次进入管理员面板,即可看到已经连上了数据网络
URoadUnl_LTEInfo

LTE调试

这个设备也可以看到很详细的LTE基站/频点等信息
在LTE -> LTE Debug Screen点选ON即可看到
URoadUnl_LTEDebug.png

5Ghz Wi-Fi

这个设备也支持5Ghz频段,但是只可双频单发,可以让Wi-Fi协商速度到300Mbps
可在Wireless -> Basic Setting -> Frequency中改为5Ghz,也可以修改是否开启省电模式等设置
URoadUnl_5GWifi

配置

SoC: GCT GDM7243M 单核1Ghz ARMv7
RAM: 256MB
WLAN: Marvell SD8897 SDIO总线
LTE频段: FDD-LTE B3/B5(LTE Cat.4)
隐藏频段: FDD-LTE B4/B13
AP系统: Linux 3.10.38 uClibc构建
BP系统: T-KERNEL (ITRON)
支持作为USB RNDIS网卡

下载

官方文档(韩文):OV6NZ5_URoad-LFM300_Upgrade_Manual.pdf
LFM300 V13011版本固件:OV6NZ5_URoad-LFM300_SKT_WEB_v13011.enc
LFM300R V12811版本固件:OV6NZ5_URoad-LFM300R_SKT_WEB_v12811.enc
手机APP(无法兼容新的Android版本):URoad_LFM300_1.3.0.apk


Description

There's no further technical introduction needed; those who understand this code will naturally know its use.

import struct

def makeKcjPropQuery(src, buffer):
    totalSize = len(src) + len(buffer) + 14
    dataBLK = bytearray(totalSize)
    struct.pack_into('I', dataBLK, 0, 547486795)
    dataBLK[4] = 1
    struct.pack_into('H', dataBLK, 5, len(src))
    struct.pack_into('H', dataBLK, 7, len(buffer))
    dataBLK[9:9+len(src)] = src.encode()
    dataBLK[9+len(src):9+len(src)+len(buffer)] = buffer
    dataBLK[-1] = 0x7E
    return dataBLK.hex()

kcjPropName = "rw_eut_su_time"
buffer = bytearray([0] * 1)
hexData= makeKcjPropQuery(kcjPropName, buffer[1:])
print("Query Command for " + kcjPropName + " is " + hexData)

介绍
由于经常有获取各种奇奇怪怪设备的各种特化信息的需求,故写了这个小工具App来解决这些事情。
此App支持获取的信息有
设备基本信息
eUICC(eSIM)支持情况
广升OTA用设备信息
Knox位状态,CSC配置版本,安全原则版本
AVB状态,VNDK版本,模块更新版本
通用内核镜像支持情况,启动磁盘信息
实际Android版本检测

包信息
包名:com.yuu.maklumat
Android Target版本需求: 14(34)
Android 版本最低需求: 5.0(21)
界面语言支持:中文(简体/繁體),英文,马来文
平台支持:Android Normal/Android TV

截图
Maklumat_Screenshot_1.9

下载
下载

更新日志

版本号更新时间更新日志
2.0(10)2024/02/011.修复无法获取AOSP模块更新版本的问题
2.修复在一些设备上无法获取启动设备信息的问题
3.升级AGP到8.2.2
1.9(9)2023/11/071.首次公开发布
2.添加马来文支持
1.8(8)2023/10/271.添加Android版本低于M时的安全补丁版本获取支持
2.修复设备信息处的一个错误
3.升级Grade
4.添加启动设备信息和基带信息检测
5.提升Target SDK版本从33至34
1.7(7)2023/10/251.整体重构

大概在2019年年末,从当时的上级处拿到了一批很早期的电纸书。其中就包括好几台巴诺(Barnes & Noble)书店所推出的Nook一代,仔细整理了一番发现还不止有WiFi版本,甚至还有一台WiFi/3G版。所以开始对其折腾,通过篡改基本底层固件的方式打开了ADB,才发现其本体是基于Android 1.5魔改的系统,当初是想将其修复成为正常电子书使用,所以尝试对一些系统APP进行了汉化,但是后来因为许许多多的乱七八糟事情混合在一起,这个事情在完成了不到40%的情况下就被搁置至今了,设备也分别赠送给了好几个朋友。所以这篇文章的目的仅仅是为了公布当初已经做完的部分,还有一些当时的素材。

部分完成的效果

NOOKCHN_WifiConnect
NOOKCHN_Browser
NOOKCHN_Settings
NOOKCHN_USBStorage
下载素材和软件包


提示

本文章中所提供的方法仅供开发者调试使用,其使用后产生的任何法律和硬件损坏等后果与本人和马来西亚电讯公司(Telekom Malaysia Berhad)无关。

Alert

The methods provided in this article are intended for developer debugging purposes only. Any legal consequences and hardware damages arising from their use are not the responsibility of the author and Telekom Malaysia Berhad.

Amaran

Kaedah yang disediakan dalam artikel ini hanya untuk tujuan penyahpepijatan pembangun sahaja. Sebarang akibat undang-undang dan kerosakan perkakasan yang timbul daripada penggunaannya tidak menjadi tanggungjawab pengarang dan Telekom Malaysia Berhad.

2024更新

HP40A3在2024年7月更新到P3.1.4_20240311版本(Android 12)后,密码被修改了

前言

由于搬家到了新的屋子,新的屋子客厅里有个电视,有一天与好友聊到如何利用起这个电视,好友提到他那边有一个闲置的Unifi Plus Box,来自于办理TM家宽的附带产品,历经几日之奔波,这个电视盒子最终到了我手上。

加注

感谢某位网友提供的关键数据,这个分析流程在基于Android12的新版Unifi Plus Box(创维HP43A)也可用,但有可能会被其自带的远控更新设置后变为不可用状态,请恢复出厂设置后再尝试。

特殊

到手后,发现其采用的是Amlogic S905X2的SoC,有4核心A53,主频为1.8Ghz,2GB的运行内存和16GB的闪存,Android版本为9,在大多数电视盒子中都属于较高配置。
首先尝试执行系统更新,没想到居然接收到了更新到Android 10的大版本更新,对于我这种熟悉中国电视和电视盒子市场的人来说是颇为惊讶的,从来没有在这类型的设备上看到过有Android大版本更新。执行更新之后,发现了更多奇妙,于是则开始了以下的流程。

开发者选项密码?

正常情况下,如果想对这个盒子深挖,首要就是要打开USB调试,不管是无线还是有线调试。
然而当我尝试以正常方式打开开发者选项时,其弹出了一个与AOSP完全不同的密码输入界面。
UTVCK_Password1
当然目前是不知道实际的密码是什么的,其为什么会有个密码也不是很明确,也无法进行后续的分析了。

获取系统包

UTVCK_GetBFg
后来一天与另一位朋友闲聊,他跟我说他逆向了Google的OTA分发系统的API,问我有没有需求来测试一下,我就想到这个盒子系统更新时候的界面十分原生,其内置的阉割版本Google Play商店也可以下载到AIDA64来获取到当前软件版本的编译指纹,于是我就把编译指纹发给了这位朋友,于是得到了以下结果。

{
    "code": 200,
    "message": "success",
    "data": {
        "title": "New software version is now available. ",
        "url": "https://android.googleapis.com/packages/ota-api/package/xxxxxxxxxxxxxxxxxxxxxx.zip",
        "size": "803.6 MB",
        "size_num": 842585223,
        "fail": "Upgrade failed!",
        "inst": "Upgrade successfully!",
        "desc": "<b>A new software update is available.</b> <br>1. Fix issue Error code 01999 of unifi tv application <br> 2. Update Android TV security patch<br> <br><b>Note: The update may take up to 10 minutes to complete. You will not be able to use the TV during the update. Thank you for your patience.</b> <br>"
    }
}

(请私信我以取得完整链接以作他用)
成功拿到了完整的系统更新包!!

逆向TvSettings

首先我们打开获取到的ZIP包,依据个人经验,这类密码一般存在于系统设置之本体。
UTVCK_InsideOfPkg
所以首先从SYSTEM分区镜像中找到TvSettings的apk
UTVCK_GetTvSettings
找到之后,我们需要一个特征来找到这个密码部分
尝试在密码输入框内胡乱输入,其输出了一个有“Password is error!!”的Toast信息,我们就以此入手
UTVCK_PasswordErr
在Jadx中以字符串搜索Password is error这个字符串,很快得到了有效回应
UTVCK_JadxSearchStr
打开这个代码段后,得益于Jadx强大的反编译能力,我们可以得到非常清晰的程序逻辑,分析这些判断语句,很容易即可得到密码。
输入进密码输入框,开发者选项成功被启用!
UTVCK_DevSettingsPass

USB调试密码?

但是当尝试打开USB调试时,其又出现了跟前面一样密码输入框,输入上一个判定中得到的密码,又一次提示密码错误。
尝试找到了开发者模式中USB调试开关的逻辑,会发现有一个额外的source判定
再混合前面所提到的逻辑语句得到的字符串密码,成功打开了USB调试!
UTVCK_ADBAuthPass

后记

以上则为这个电视盒子如何打开开发者选项和USB调试的办法了
其实历经以上分析,发现这个盒子还有个很特别的点,其几乎用了可谓是”围追堵截“的办法来屏蔽Netflix,关于这个事情如何解决,请等待我的后续更新了!