LinuxDo 新帖推送
177 subscribers
248K photos
308K links
Download Telegram
标题: 300美金一个月的Grok 4.2 Heavy天气卡片
作者: #Dax
板块: #开发调优
编号: 1633632
帖子: https://linux.do/t/topic/1633632
时间: 2026-02-21 23:10:34
摘要:
模型:Grok 4.2 Heavy(这个模型只有300刀的Heavy订阅才能用,对标ChatGPT-Pro或Gemini-Ultra)

很难想象,作为世界第四大人工智能公司,xAI在Coding领域甚至没上桌…
标题: 智谱支持退款了!!!
作者: #0.6
板块: #开发调优
编号: 1633637
帖子: https://linux.do/t/topic/1633637
时间: 2026-02-21 23:11:53
摘要:
如题,刚才智谱发布道歉信,不过我不关心这个,重要的是承诺过几天开放退款窗口.
想要退的佬抓紧,搞不好人一多也得搞延迟退.
标题: 逆向解析 ColorOS 离线号码库 (一):12-Bit 极限压缩的归属地查询算法
作者: #006lp
板块: #开发调优
编号: 1633643
帖子: https://linux.do/t/topic/1633643
时间: 2026-02-21 23:14:51
摘要:
逆向解析 ColorOS 离线号码库 (一):12-Bit 极限压缩的归属地查询算法
-1. 声明
本文首发于 Asahi Blog (这个月有人恶意刷流量,导致流量被刷没了,暂时无法访问),由于是第一次想起来记录一下分析过程,可能会出现用词不当、不分主次、逻辑不明等各种错误,以及入机式发言,希望各位佬友批评指正。
0. 前言
最近在开发一个项目时,需要用到中国大陆电话号码归属地以及运营商查询的 API。在调研了网络上现有的 API 后,我发现它们要么存在严格的并发限制和 API Key 双重校验,要么底层的数据库不够完整和准确。
但我们平时使用的智能手机,在没有网络的情况下依然能在来电几毫秒内准确显示号码归属地,它们是如何做到的?与其依赖受限的网络 API,不如直接从手机系统自带的拨号软件中提取离线数据库。
1. 理论依据与通用架构
在原生的 Android 系统中,来电归属地等本土化功能其实比较薄弱。但国内的手机厂商(如 OPPO、小米、vivo 等)都基于此构建了一套非常成熟的 “本地离线查询 + 云端辅助” 机制。
这类系统实现“归属地与运营商”查找的通用技术架构一般如下:
a. 核心原理:基于“号段”的离线映射
中国大陆的手机号码分配有着严格的规律。通常,前 3 位决定了基础运营商,而前 7 位决定了具体的地级市归属地和运营商细分。厂商会在系统级的核心应用(如 ContactsProvider.apk 或独立的 Telephony 服务)中内置一个高度压缩的离线数据库(通常是 .db、.dat 格式或自定义的二进制文件)。




号段示例 (前7位)
运营商
归属地




138 0010
中国移动
北京


186 0210
中国联通
上海


189 0200
中国电信
广东广州



b. 代码层面的查询流程
当我们在拨号盘输入号码,或者收到来电时,系统的跨进程查询流程通常如下:

提取特征:系统前端首先清洗输入的号码(去除 +86、空格、破折号等格式字符),然后截取前 7 位核心号段。
IPC 跨进程通信:UI 层不会直接去读取底层离线文件,而是通过构建特定的 Uri,向系统的底层内容提供者(ContentProvider)发起查询请求。
底层解析返回:底层的服务应用接收到请求后,通过查表或特定算法解析二进制数据文件,将计算出的“归属地”和“运营商”字段打包,原路返回给 UI 层进行渲染显示。

2. 寻找并定位离线数据库
以我所使用的设备 OPPO Find X6(ColorOS 16.0 系统) 为例。
通过在系统中进行关键词检索,我很快定位到了专门负责处理归属地逻辑的系统应用——号码归属地 (com.oplus.phonenoareainquire)。幸运的是,作为系统内建的基础服务,该应用并未进行深度的加固或高强度混淆,这为我们的静态分析提供了极大的便利。
提取并解压该应用的 APK 文件后,在 /assets 目录下,我如愿以偿地找到了两个核心数据文件:

PhoneNumberData_3_1_0.dat (归属地数据库)
CarrierData_1_0.dat (运营商数据库)

本节我们先将目光聚焦在归属地文件 PhoneNumberData_3_1_0.dat 上。
不出所料,使用普通的文本编辑器打开它后是一堆乱码。为了让系统在极短的时间内完成检索,厂商并没有使用纯文本或标准的 SQLite 格式,而是采用了一种自定义的高强度压缩二进制数据结构。
不过,通过分析文件底层的字节流,我们依然能窥探到一些明文线索:

文件头 (Header):文件最开头明文存储了一串数字 817820250424。在大多数安卓号段库中,这通常代表着数据库的版本号或最后更新的编译时间戳。
数据字典区 (Tail):在文件靠后的尾部数据区,清晰地暴露出了中国大陆的城市长途区号及地名(采用 GBK 编码)。例如:010、020、021(分别对应北京、广州、上海),以及成百上千个地级市的区号。

3. 提取读取规则与字典表
既然无法直接阅读,那没招了,试试 Jadx 逆向吧。
在 Jadx 中全局搜索字符串 "PhoneNumberData_3_1_0.dat",很快定位到了负责初始化的 PhoneNoInquireDatabaseHelper.java 类。在它的 c() 方法中,揭示了文件头部的读取规则:
public void c(SQLiteDatabase sQLiteDatabase, String str) throws Throwable {
File fileA = b.a(PhoneNoInquireProvider.f300w);
InputStream inputStreamOpen = this.f740d.getResources().getAssets().open("PhoneNumberData_3_1_0.dat");
FileOutputStream fileOutputStream = new FileOutputStream(fileA);
byte[] bArr = new byte[102400];
Log.i("PhoneNoDbHelper", "copy PhoneNumberData.dat to /data/data/");
while (true) {
int i3 = inputStreamOpen.read(bArr);
if (i3 == -1) {
break;
} else {
fileOutputStream.write(bArr, 0, i3);
}
}
inputStreamOpen.close();
fileOutputStream.close();
FileInputStream fileInputStream = new FileInputStream(fileA);
DataInputStream dataInputStream = new DataInputStream(a(fileInputStream));
byte[] bArr2 = new byte[12]; // 读取前 12 个字节作为版本号
int i4 = dataInputStream.read(bArr2, 0, 12);
String str2 = new String(bArr2, "UTF-8"); // 对应我们看到的 817820250424
Log.i("PhoneNoDbHelper", "version =" + str2 + ", versionLength = " + i4);
try {
ContentValues contentValues = new ContentValues();
contentValues.put("ver", str2);
sQLiteDatabase.insert("version", null, contentValues);
} catch (Exception e3) {
Log.e("PhoneNoDbHelper", BuildConfig.FLAVOR + e3);
}
File fileA2 = b.a(PhoneNoInquireProvider.f301x);
InputStream inputStreamOpen2 = this.f740d.getResources().getAssets().open("ExtendNumber.dat");
FileOutputStream fileOutputStream2 = new FileOutputStream(fileA2);
while (true) {
int i5 = inputStreamOpen2.read(bArr);
if (i5 == -1) {
break;
} else {
fileOutputStream2.write(bArr, 0, i5);
}
}
inputStreamOpen2.close();
fileOutputStream2.close();
f(dataInputStream, sQLiteDatabase);
File fileA3 = b.a(PhoneNoInquireProvider.f302y);
InputStream inputStreamOpen3 = this.f740d.getResources().getAssets().open("city_name_table.txt");
FileOutputStream fileOutputStream3 = new FileOutp
标题: 怎么cc中转一堆动物
作者: #_042
板块: #搞七捻三
编号: 1633646
帖子: https://linux.do/t/topic/1633646
时间: 2026-02-21 23:15:54
摘要:
狐狸 老虎 鸭子 马 猴子 猫
标题: 初二人山人海的古城,今天补上
作者: #lzy1216
板块: #活动
编号: 1633647
帖子: https://linux.do/t/topic/1633647
时间: 2026-02-21 23:17:10
摘要:
虽然人多,但绝对值得一去,大家猜猜是哪里?
标题: 想问下竞技场的opus4.6能力和正版差距大吗?
作者: #qweas123
板块: #搞七捻三
编号: 1633648
帖子: https://linux.do/t/topic/1633648
时间: 2026-02-21 23:17:50
摘要:
平时想用来聊聊天
标题: 趁着过年去看大佛!
作者: #chihirohj
板块: #运营反馈
编号: 1633654
帖子: https://linux.do/t/topic/1633654
时间: 2026-02-21 23:20:33
摘要:
去的庐山旁边的东林大佛,近处看还是很震撼的,也祝大家新年快乐,万事胜意!
标题: 豫园灯会.小登也来
作者: #一摩尔氚
板块: #活动
编号: 1633658
帖子: https://linux.do/t/topic/1633658
时间: 2026-02-21 23:21:46
摘要:
喵呜,明天回校了。祝佬们新年快乐,码力十足
标题: 这手柄居然还能有后续
作者: #丛雨
板块: #搞七捻三
编号: 1633659
帖子: https://linux.do/t/topic/1633659
时间: 2026-02-21 23:21:49
摘要:
从手柄驱动和蓝牙驱动问题各占一半,垃圾手柄浪费我时间继续讨论:
最近模拟器更新惹,能正确识别陀螺仪方向惹。咱原来硬编码反倒没法正常用惹,让哈基米给咱加了个内核参数把。让咱可以随便更改IMU传感器的摆放方向。

于是咱寻思惹,既然都改惹,干脆合并下上游吧。手动合并linux6主线里面的hid-nintendo到咱自己的修改版内核模块中。
结果老是弹警告,手柄还一卡一卡的。
[ 972.015595] nintendo 0005:057E:2009.0007: joycon_enforce_subcmd_rate: exceeded max attempts
[ 972.207519] nintendo 0005:057E:2009.0007: joycon_enforce_subcmd_rate: exceeded max attempts


听从哈基米的建议给修好了喵。

但是现在又不行了,本来 /dev/input/js0 节点能生成的。现在合并主线的驱动反倒又没法生成joysitck节点了。我又不懂内核开发,而且这个哈基米也不懂。就只能跟着提交历史挨个降级测试。

真的有一种无力感,咱又不懂编程。完全看不懂。
明明是我玩电脑,怎么变成电脑玩咱了。好累,咱又不懂c语言也不懂内核开发,更不会编程。就非得让咱修bug。
等咱改好了打算整理下代码开源了喵。
标题: 0成本💰让朋友用上你电脑的大模型|教程
作者: #Folia
板块: #开发调优
编号: 1633661
帖子: https://linux.do/t/topic/1633661
时间: 2026-02-21 23:23:51
摘要:
【纯干货】只需3步!让朋友连上你本地部署的大模型
假设你是一位恰好拥有足够算力的尊贵 Mac 用户,在自己设备上丝滑部署了大模型。在朋友羡慕嫉妒恨的哀嚎中,你开始思考:如何让好朋友也能白嫖我的算力呢?
这里以 Mac + LM Studio 为例,分享一个超级简便的分享方法:利用 Cloudflare Tunnel 穿透!
不需要搭服务器 不需要注册 不需要花一毛钱!

将 LM Studio 变成服务器端

打开 LMS 下载所需模型,在 Developer 页面点击开启服务器(Start Server)。
在右侧服务器设置中:开启 Serve on local network / enable CORS。
此时你的端口 IP 会从 localhost 变成你设备的真实 IP 地址(比如 192.168.x.x:1234)。



测试连通性:用手机连接同一个 WiFi,打开浏览器输入网址 http://你的IP地址:1234/v1/models,如果能返回一串显示当前加载模型的代码,就说明成功啦!


安装隧道获取临时地址(魔法开始!)

打开终端(Terminal),输入 brew install cloudflared (如果没有安装过 homebrew 的话要先安装哦)。
安装完毕后启动隧道,在终端输入: cloudflared tunnel --url http://localhost:1234
运行后,终端里会跳出一大堆日志。往下找,有一个方框框起来的、以 trycloudflare.com 结尾的网址,复制它!发给你朋友!



朋友端:像平常调用 API 一样设置 让朋友打开他惯用的前端(比如酒馆 / Chatbox / AstrBot 等):

API 地址 (Base URL): 刚才发的那个临时网址加上 /v1(例如 https://xxxx.trycloudflare.com/v1)
API Key: 随便填(比如 123)
模型名称: 有些软件会自动获取,有些需要手动填入和你 LM Studio 里加载一模一
标题: CloudflareTools加了一点点功能 一键开启邮箱路由Catch-All配置
作者: #洗头佬
板块: #开发调优
编号: 1633662
帖子: https://linux.do/t/topic/1633662
时间: 2026-02-21 23:24:07
摘要:
1.新增docker部署
2.新增dns申请免费ssl证书
3.新增邮箱路由开启
4.新增Catch-All配置



github.com






GitHub - xkatld/cloudflare-tools: Cloudflare Tools 是一个全栈 Web 应用,提供 Cloudflare...

Cloudflare Tools 是一个全栈 Web 应用,提供 Cloudflare 账户的批量管理功能,包括域名、DNS、SSL、规则、缓存等多种操作,后端用 Go + Gin,前端用原生 JavaScript + Vite。