-
-
[原创]某魔改tg的黑灰样本分析报告
-
发表于: 2小时前 16
-
nubseufhp.apk 安全分析报告
分析日期:2026-08-12
分析对象:nubseufhp.apk
总体风险:HIGH
结论:该样本不是官方 Telegram,而是经过 Native 加壳、资源混淆和随机改名的 Teamgram/DH171 私有客户端。它使用自定义认证协议和第三方代理基础设施,并具备由服务端远程开启完整 TL 请求/响应日志上传的能力,不应承载真实账号或敏感通信。
!!!AI 水文预警 没有干货,只有黑灰样本分析取证流程。
很神奇的样本,似乎是魔改的私有tg分支,还真是弄啥的都有
样本提取 1b9K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4L8$3k6A6L8r3g2Q4x3X3g2A6L8#2)9J5c8X3c8Q4x3V1k6g2e0g2k6$3d9W2V1`.
0. 手法
某笔记软件引流,通过特殊的wx二维码跳转界面引导下载安装包后在app内完成黑灰业务流程
1. 样本信息
- APK SHA-256:
b48d1ce86096b4116f470467ad2d59a2a03e1a47a9807497f08fab7f030307ed - 文件大小:
53,672,768字节 - 包名:
bbp.rnyjfghajcnxlb.tjjfxejqqcmdfop - 应用名:
NtqOrf - 版本:
171.5.12,versionCode19 - minSdk:21
- targetSdk:34
- ABI:仅
arm64-v8a - 签名:APK Signature Scheme v2/v3 有效,无 v1 签名
- 证书 SHA-256:
0673583f7889a09da5f09a4698712c2b5dc35d1ffb8a822a5095833a8638b679 - 证书 DN:全部为随机字符串,不属于 Telegram 官方签名身份
- 当前设备安装来源:
com.coloros.filemanager
虽然包名和前台品牌为随机字符串,但以下证据表明其真实代码基于 Teamgram/Telegram:
- 主界面仍为
org.telegram.ui.LaunchActivity - 外部存储目录为
Teamgram - 动态节点请求使用
User-Agent: TeamGram/1.0 - BuildConfig 包含
DH171-vip-Android - 默认 Telegram 链接被替换为
webestim.me、teamgram.net和NtqOrf.net
2. 分析方法
- 使用 JADX 1.5.5 对原始 APK 反编译。
- 识别
libnpewswag.soNative 壳及壳入口Application。 - 从运行后目录
app_npewswag只读提取 5 个解密 DEX。 - 对解密 DEX 再次执行 JADX,共恢复约 36,411 个 class definitions 和 11,201 个 Java 文件。
- 结合
aapt、apksigner、dumpsys package、进程映射和 TCP 套接字进行交叉验证。 - 从
libgojni.so构建参数中恢复客户端内嵌 RSA 私钥,离线解密代理启动配置。 - 未读取聊天数据库、账号配置、媒体文件或其他用户内容。
分析产物:
- JADX 源码:
/tmp/nubseufhp-real-jadx-b48d1ce8 - 解密 DEX:
/tmp/nubseufhp-unpacked-b48d1ce8 - Go 代理库:
/tmp/nubseufhp-native-b48d1ce8/libgojni.so
3. 关键链路
用户输入账号/密码
-> 密码执行无盐 MD5
-> 自定义 TL_auth_signIn(附带 device_id)
-> Telegram native ConnectionsManager
-> 强制入口 127.0.0.1:60171
-> libgojni.so 私有 Go 代理
-> *.sdkbhtog171.xverse66.com:30171
-> 阿里云代理节点
启动时还会:
- 请求
c96K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6A6M7q4)9J5k6i4y4T1i4K6u0r3K9i4l9`.获取公网出口 IP。 - 初始化 OpenInstall,获取并持久化渠道邀请码。
- 从华为云 OBS 拉取加密节点配置。
- 向自定义后端请求注册类型和用户权限配置。
- 根据服务端返回值决定是否开启日志、通话、消息编辑/删除/转发等功能。
4. 风险发现
| # | Category | Title | Severity | Confidence | Evidence (Source -> Sink) | Recommendation | Location |
|---|---|---|---|---|---|---|---|
| 1 | sensitive_data_exposure | 服务端可远程开启完整 TL 请求/响应日志并上传到任意 URL | HIGH | 0.99 | 自定义后端返回 PermissionConfig -> enableWriteLog 和 logUrl 写入运行配置 -> 每次请求完成后调用 dumpResponseAndRequest -> FileLog 使用 Gson 序列化完整请求/响应 -> 每 300 秒打包所有 .txt -> OkHttp 上传到服务端指定 URL。登录请求中包含手机号、验证码、用户名、MD5 密码和设备 ID;其他日志还包含登录令牌、购买令牌、对话 ID、位置及设备信息。 |
移除远程日志开关;生产环境禁止记录认证请求、令牌和消息对象;上传目标必须固定为受控 HTTPS 域名并启用证书固定;对历史日志和服务端存量执行清理审计。 | UserPermissionConfigManager.java:[61, 99], ConnectionsManager.java:[855, 873], FileLog.java:[345, 390], LogUpLoadManager.java:[159, 249] |
| 2 | weak_crypto | 用户密码使用无盐 MD5 后直接作为认证凭据 | HIGH | 0.99 | 用户输入的 8-16 位密码 -> Utilities.MD5(password) -> 写入 TL_auth_signIn.password -> sendRequest 发往自定义后端。固定、无盐 MD5 可被离线字典和彩虹表快速恢复,且相同密码产生相同凭据。 |
使用服务端挑战协议和抗 GPU 的密码派生算法,例如 Argon2id;每个账户使用随机盐;不要把可重放的固定哈希作为长期认证凭据;现有用户凭据应强制轮换。 | LoginNewActivity.java:[209, 263] |
| 3 | sensitive_data_exposure | 所有协议连接被强制导入第三方私有 Go 代理 | HIGH | 0.98 | Application.onCreate 无条件初始化 Go SDK -> 本地监听 127.0.0.1:60171 -> ConnectionsManager 调用 native_setProxyEntryPoint(60171) -> 运行时连接到 8.138.244.148:30171、8.148.248.251:30171。同时认证 TL constructor 已被修改为包含用户名、密码、邀请码和设备 ID,无法视为官方 Telegram 直连协议。 |
不在真实账号上使用该客户端;若业务必须使用代理,应公开协议、服务运营方和数据处理范围,执行独立 Native 审计、端到端抓包验证、证书固定和节点透明度审计。 | ApplicationLoader.java:[570, 582], ConnectionsManager.java:[543, 551], ConnectionsManager.simple.java:[865, 924] |
| 4 | sensitive_data_exposure | 认证和代理层使用稳定设备指纹 | MEDIUM | 0.99 | Android ID、序列号、Build 硬件字段、ABI、屏幕分辨率/密度,以及小米设备分支中的公网 IP 或时间值 -> SHA-1 生成并持久化 device_id -> 同时写入登录/注册请求及 Go 代理 deviceUUID。该标识可跨会话关联用户和设备。 |
仅采集完成明确功能所需的最小字段;使用可轮换、按服务域隔离的随机标识;提供明确告知、删除和重置机制;禁止把公网 IP 和硬件指纹组合成长期认证标识。 | DeviceIdHelper.java:[46, 80], DeviceIdHelper.java:[102, 140], LoginNewActivity.java:[248, 257] |
| 5 | hardcoded_secret | 代理控制面私钥和对称密钥可从客户端恢复 | MEDIUM | 0.99 | Java 层内置 RSA 加密启动载荷 -> libgojni.so 通过 Go -ldflags 内嵌完整 RSA 私钥 -> 私钥可离线恢复并解密载荷 -> 得到代理域名、端口、SDK 版本和 AES key。任何持有 APK 的人都能解密控制面配置。 |
客户端只应持有公开验证材料,不得分发私钥;立即轮换现有 RSA/AES 密钥;控制面配置采用服务端签名、客户端公钥验证的模式;为每个版本和租户隔离密钥。 | ConnectionsManager.java:[543, 551] |
5. 远程控制能力
服务端通过自定义 TL_auth_getPermissionConfigs 返回任意键值配置。客户端已实现的远程开关包括:
enableWriteLog:开启完整请求/响应日志和周期上传。logUrl:指定日志上传地址,代码未限制协议或主机。allowVoiceCall/allowVideoCall:控制语音和视频通话。createChannel:控制频道/群组创建能力。privateMsgEdit/groupMsgEdit:控制消息编辑。privateMsgDelete/groupMsgDelete:控制消息删除。privateMsgForward/groupMsgForward:控制消息转发。isPrivilegeUser:控制特权用户能力。show_online_status:控制在线状态展示。groupAvatarClick/groupLocation:控制群组资料和位置功能。
这不是 Android 运行时权限系统,而是由私有后端决定客户端能力的业务控制面。
6. 网络与 IOC
样本身份:
- 包名:
bbp.rnyjfghajcnxlb.tjjfxejqqcmdfop - 应用名:
NtqOrf - 原始应用族:Teamgram / DH171
- 壳库:
libnpewswag.so - 私有代理库:
libgojni.so - 解壳目录:
app_npewswag - 本地代理端口:
127.0.0.1:60171
确认的基础设施:
*.sdkbhtog171.xverse66.com:301718.138.244.148:30171,阿里云8.148.248.251:30171,阿里云119.13.113.34:443,华为云香港,运行时观察到连接05562a6c1f780527.obs.ap-southeast-1.myhuaweicloud.comwebestim.meteamgram.netNtqOrf.netNtqOrf.bet
节点缓存 URL:
666K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1j5H3y4e0f1$3x3X3p5$3j5K6q4X3y4K6R3H3y4e0t1%4i4K6u0W2L8$3u0K6i4K6u0W2j5i4m8Q4x3X3c8K6L8%4g2@1K9r3g2S2M7%4c8Q4x3X3b7I4i4K6u0W2L8i4W2Z5N6h3q4%4k6h3W2U0L8r3!0#2k6q4)9J5k6h3y4G2L8g2)9J5c8U0t1H3y4o6R3$3x3$3c8U0y4X3j5H3j5U0f1J5k6o6u0Q4x3X3g2V1j5i4b7`.
离线解密后的代理启动配置(敏感密钥已省略):
{
"app_domain": "*.sdkbhtog171.xverse66.com",
"app_domain_port": 30171,
"app_name": "dh171",
"sdk_version": "4.0.1",
"AES-key": "<redacted>"
}
7. 权限与当前设备状态
样本声明了联系人、通话记录、电话状态、录音、摄像头、前后台定位、悬浮窗和安装 APK 等高敏权限。多数权限也可由 Telegram 类应用的正常功能解释,因此仅凭声明不能认定恶意。
分析时设备状态:
- 应用已安装并运行。
- 所有危险运行时权限均为未授权。
- 未发现样本已获得联系人、电话、录音、摄像头或定位权限的证据。
- 安装级网络、开机启动、前台服务、广告 ID 等权限已按 Android 机制自动授予。
8. 处置建议
P0:
- 不要使用真实账号登录,不要授予任何敏感权限。
- 若已输入过密码,立即修改该密码;如密码在其他服务复用,应同步轮换。
- 若使用过手机号/Telegram 登录,通过可信官方客户端终止其他会话。
- 在受影响设备上卸载该包,并确认
bbp.rnyjfghajcnxlb.tjjfxejqqcmdfop数据目录被清除。
P1:
- 在网络侧阻断本报告列出的域名、IP 和端口,并保留 DNS、流量及安装来源日志。
- 对已使用过该客户端的设备执行账号会话、联系人权限、悬浮窗和未知应用安装权限复核。
- 若需要取证,在卸载前保全 APK、
app_npewswag、sdk_cache.json、应用日志和进程内存。
P2:
- 对
libgojni.so和libtmessages.49.so做进一步 Native 数据流审计。 - 使用抓包和 Frida 验证本地
60171入口前后的载荷边界,确认代理是否能读取应用层明文。 - 对私有后端的认证、日志存储、节点控制、密钥管理和数据删除策略执行服务端审计。
9. 分析限制
- 本次没有获得服务端代码,无法判断服务端如何存储、使用或转发账号和消息数据。
- 已证明全部连接经过第三方代理,但未证明代理层能够直接读取所有 MTProto 内层明文。
- 已证明服务端具备开启完整请求/响应日志上传的能力,但未读取当前账号缓存,未确认本次运行是否已收到
enableWriteLog=1。 - 未发现可直接证明后台静默录音、静默拍照或主动窃取联系人数据的代码链路。
- 因此,本报告结论是“高风险、不可作为可信通信客户端”,而不是仅凭当前证据将其定性为特定恶意软件家族。
10. 后续链路追踪
查询时间:2026-08-12
当前归属结论:公开信息尚不能给出最终个人或公司法定名称,但已能高置信关联出同一运营集群,并形成可向域名注册商、阿里云和华为云申请数据保全及实名调取的证据链。
10.1 xverse66.com 注册链路
公开 WHOIS/RDAP 结果:
- 域名:
xverse66.com - Registry Domain ID:
2988963959_DOMAIN_COM-VRSN - 注册时间:
2025-06-04T13:21:21Z - 到期时间:
2028-06-04T13:21:21Z - 注册商:Gname.com Pte. Ltd.
- Registrar IANA ID:
1923 - 注册人国家字段:
HK,CN - 注册人姓名、组织、地址、电话和邮箱:
Redacted for privacy - 状态:
clientTransferProhibited - DNS:使用
share-dns.com/share-dns.net系列名称服务器 - DNSSEC:未启用
公开记录只能确认 Gname 持有完整注册资料,不能直接确认注册人法定名称。可使用以下渠道:
- ICANN Lookup
- ICANN RDRS 非公开注册数据申请
- Gname 注册人邮件转发
- Gname 滥用投诉
- 邮箱:
complaint@gname.com
10.2 TLS 证书反向关联
对 8.138.244.148:30171 和 8.148.248.251:30171 使用 a.sdkbhtog171.xverse66.com 作为 SNI 建立 TLS 连接时,两个节点返回完全相同的证书:
- Subject CN:
sdk33.01hd1.com - Issuer:
Let's Encrypt YR1 - Serial:
0524E0EB655609DF1E44A6071A44C194629F - SHA-256:
1E:A7:34:E3:F7:7F:46:EF:AB:84:52:38:CB:A4:F5:B3:D7:90:1D:CE:9C:E2:DA:5B:CF:F2:4F:E9:6C:D9:EC:A5 - 生效时间:
2026-06-29T04:50:55Z - 失效时间:
2026-09-27T04:50:54Z
该证书证明两个阿里云节点与 01hd1.com 存在直接控制关系。域名验证型证书只能证明签发时的域名控制权,不能单独证明法定主体。
10.3 01hd1.com 注册链路
公开 WHOIS/RDAP 结果:
- 域名:
01hd1.com - Registry Domain ID:
2963514449_DOMAIN_COM-VRSN - 注册时间:
2025-03-01T10:00:12Z - 到期时间:
2027-03-01T10:00:12Z - 注册商:Gname.com Pte. Ltd.
- Registrar IANA ID:
1923 - 注册人国家字段:
HK,CN - 注册人信息:
Redacted for privacy - DNS:同样使用
share-dns.com/share-dns.net系列名称服务器 - DNSSEC:未启用
证书透明度记录还发现以下子域名:
index.01hd1.comsdk.01hd1.comsdk33.01hd1.comtyugchqp.01hd1.comvhtgqpy.01hd1.com
xverse66.com 与 01hd1.com 具备以下共同特征:
- 注册商相同。
- 注册人国家字段相同。
- 注册信息均开启隐私隐藏。
- DNS 服务体系相同。
- 注册时间均集中在 2025 年。
xverse66.com指向的两个业务节点返回01hd1.com证书。
因此,可以高置信判断两个域名属于同一运营集群或同一基础设施供应链;在取得注册商或云账号实名记录前,不能将其直接等同于同一个法定主体。
10.4 云资源归属
阿里云节点:
8.138.244.1488.148.248.251- APNIC 网段:
8.128.0.0至8.159.255.255 - NetName:
ALICLOUD - 资源管理方:Aliyun Computing Co. LTD / Alibaba.com Singapore E-Commerce Private Limited
- 滥用联系:
abuse@alibaba-inc.com
华为云节点:
119.13.113.34- APNIC 网段:
119.13.112.0至119.13.127.255 - NetName:
Huawei-Cloud-HongKong - 资源管理方:HUAWEI INTERNATIONAL PTE. LTD.
- 滥用联系:
hwssecurity@huaweicloud.com
OBS 对象:
d08K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1j5H3y4e0f1$3x3X3p5$3j5K6q4X3y4K6R3H3y4e0t1%4i4K6u0W2L8$3u0K6i4K6u0W2j5i4m8Q4x3X3c8K6L8%4g2@1K9r3g2S2M7%4c8Q4x3X3b7I4i4K6u0W2L8i4W2Z5N6h3q4%4k6h3W2U0L8r3!0#2k6q4)9J5k6h3y4G2L8g2)9J5c8U0t1H3y4o6R3$3x3$3c8U0y4X3j5H3j5U0f1J5k6o6u0Q4x3X3g2V1j5i4b7`.
公开响应特征:
- 对象允许匿名读取,HTTP 状态为
200。 Last-Modified: Tue, 11 Aug 2026 15:13:06 GMTETag: "c5e2dccafb7af1327aef1db6727eeed4"Content-Length: 80- 桶根目录返回
403 AccessDenied - 响应未公开 OBS 租户账号或法定主体
阿里云、华为云是资源提供方,不应在没有租户资料的情况下被写成 App 运营主体。
10.5 公开查询工作流
第一步:备案主体查询。
- 工信部 ICP/IP/域名备案系统:使用
xverse66.com、01hd1.com、主办单位名称或备案/许可证号查询。 - 站长之家 ICP:辅助查询域名及同一主体名下其他备案。
- 爱站 ICP:辅助反查备案主体和关联域名。
- 备案源头:支持域名、单位名称和备案号。
当前自动查询未得到 xverse66.com 或 01hd1.com 的明确备案主体记录。工信部官方查询存在人机验证,应人工完成验证码复核;未检出记录不等于已经证明“无备案”。
第二步:获得主办单位名称后的工商和司法核验。
- 国家企业信用信息公示系统:法定代表人、统一社会信用代码、股东、注册地址、变更和经营异常。
- 信用中国:行政许可、行政处罚和失信记录。
- 电信业务市场综合管理系统:核验 ICP/EDI 等增值电信业务许可证。
- 中国执行信息公开网:被执行和失信记录。
- 中国裁判文书网:公开裁判文书。
第三步:域名和证书历史关联。
- ICANN Lookup:当前 RDAP 注册记录。
- crt.sh:查询
%.01hd1.com、%.xverse66.com。 - Cert Spotter:补充证书透明度记录。
- SecurityTrails:历史 DNS、NS、子域名和 WHOIS,部分功能收费。
- DomainTools、WhoisXML API、WhoisFreaks:历史 WHOIS 和反向注册信息,通常收费。
第四步:网络资产和样本关联。
- Censys:搜索证书 SHA-256、
sdk33.01hd1.com、IP 和端口。 - FOFA、Shodan、ZoomEye、Hunter:反查相同证书、服务 Banner、IP 和关联域名。
- VirusTotal、urlscan.io、AlienVault OTX:历史 DNS、安全样本、URL 和基础设施关系。
- Wayback Machine:查询旧网页页脚、备案号、联系方式和隐私政策。
建议优先使用以下搜索值:
xverse66.com
01hd1.com
sdk33.01hd1.com
8.138.244.148
8.148.248.251
119.13.113.34
1EA734E3F77F46EFAB845238CBA4F5B3D7901DCE9CE2DA5BCFF24FE96CD9ECA5
05562a6c1f780527
204863dc6f0b52d2.dat
10.6 实名数据保全与调取
公开 OSINT 已无法继续获得注册人法定名称。后续应先提出“数据保全”,再根据合法依据申请“数据披露”,防止域名转移、实例释放或日志过期。
向 Gname 申请保全:
xverse66.com、01hd1.com的注册人实名/KYC。- 注册账号、代理商或 reseller 信息。
- 注册及续费付款记录。
- 注册、登录、修改 DNS 和修改联系人信息时的 IP、时间和 User-Agent。
- 历史注册资料及隐私保护启用时间。
向阿里云申请保全:
8.138.244.148:30171、8.148.248.251:30171在指定时间段的租户账号。- ECS/负载均衡/弹性 IP 实例 ID、创建和释放时间。
- 云账号实名、付款主体、登录 IP、操作审计和安全组变更。
- TLS 证书部署记录和关联域名。
向华为云申请保全:
119.13.113.34在指定时间段的云账号和资源实例。- OBS 桶
05562a6c1f780527的所有者账号、创建时间、区域和操作日志。 - 对象
204863dc6f0b52d2.dat的上传、覆盖和下载日志。 - 云账号实名/KYC、付款主体、登录 IP 和操作审计。
普通投诉通常只能触发转发、下架、限制或内部调查,云厂商和注册商一般不会直接向个人披露客户实名。涉及诈骗、账号窃取或数据泄露时,应向公安机关提交材料,由有权机关向 Gname、阿里云和华为云调取。
10.7 建议保全的证据包
- 原始 APK 及 SHA-256。
- APK 签名证书摘要。
- 5 个解密 DEX 和
libgojni.so摘要。 - RSA 启动配置解密过程说明,敏感密钥单独封存。
sdk_cache.json原件及 SHA-256。- OBS URL、ETag、Last-Modified 和响应头。
- 运行时
ss/netstat输出、进程 PID、设备时间和时区。 - 两个
30171节点的完整 TLS 证书、序列号和 SHA-256。 - WHOIS/RDAP 原始响应及查询时间。
- 工信部备案查询截图和查询时间。
- 分析报告版本及生成时间。
证据中的时间应统一换算并记录为 UTC,同时保留原始本地时间和设备时区,避免云厂商无法按时间窗口定位租户。
结尾
耗子尾汁
冰与火的战歌:Windows内核攻防实战高级班!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。