TGViewer
Channel Public Channel
南宫雪珊

南宫雪珊

@vvb2060_channel

@vvb2060Channel
Subscribers
3.76K
Photos
38
Videos
0
Links
42
Recent Posts 19 shown
Post #105 1.63K
我挺不解为什么有Android项目把aab也发布给最终用户。这是给商店用的中间产物,它只构建到一半,甚至没签名!虽然对于开发者而言这是最终产物,但对用户来说不是呀。面向用户的拆分包应该用 gradlew :app:makeApkFromBundleForRelease 命令构建,输出路径为 app/build/intermediates/apks_from_bundle/release/makeApkFromBundleForRelease/bundle.apks,这才是真正的官方的apks文件。它的格式由toc.pb描述,这是一个protobuf文件,BuildApksResult 结构公开在 https://github.com/google/bundletool/blob/master/src/main/proto/commands.proto#L12 ,安装器解析后可以挑选合适的拆分包安装。
  • 👍 41
  • 🤣 18
  • ❤ 2
  • 😁 1
  • 🤯 1
Post #104 3.13K
南宫雪珊 https://github.com/yaap/system_sepolicy/commit/8a5c1598ca6ff593d2561bb799d7ec88c24a5107 虚拟机权限 MANAGE_VIRTUAL_MACHINE 和 USE_CUSTOM_VIRTUAL_MACHINE 是 development 权限,可以使用pm grant授予,意味着第三方应用可以不解锁bootloader运行自定义虚拟机。Android 16 DP2 已经提供了官方Debian虚拟机,只是终端极其难用,还是等民间高手开发第三方app吧。目前可以安装ssh然后用正经终端应用连接。
https://github.com/yaap/system_sepolicy/commit/8a5c1598ca6ff593d2561bb799d7ec88c24a5107
虚拟机权限 MANAGE_VIRTUAL_MACHINE 和 USE_CUSTOM_VIRTUAL_MACHINE 是 development 权限,可以使用pm grant授予,意味着第三方应用可以不解锁bootloader运行自定义虚拟机。Android 16 DP2 已经提供了官方Debian虚拟机,只是终端极其难用,还是等民间高手开发第三方app吧。目前可以安装ssh然后用正经终端应用连接。

SELinux上下文限制了第三方应用的能力,主要是虚拟机内外共享文件夹功能。难办,这终端应用它有特权上下文 vmlauncher_app 。


https://extv.github.io/Podroid/guide/backends.html
原来已经有人写好了,可惜它的终端也不好用。
extv.github.io Backends: QEMU & AVF · Podroid docs How to choose between QEMU (TCG) and AVF (pKVM), how to grant AVF permissions, and what differs between the two backends.
  • 😱 15
  • ❤ 7
Post #102 5.13K
建议在打开Android Studio之前手动启动adb服务,否则AS会启动一个调试日志全开的adb服务,它和手机之间的mdns日志将持续大量输出,使日志文件不断增大。
检测方式: adb server-status ,trace_level 一行应该是空的。
  • 🤨 37
  • 🤯 27
  • 🫡 3
  • ❤ 1
  • 😁 1
Post #101 6.28K
南宫雪珊 GitHub养号能不能正常一点,在KeyAttestation仓库看见这些提问很难绷住的
我发现没一个GitHub客户端在加载速度和展示信息丰富度上比网页快和多,网页操作体验远好于原生客户端。现在有通行密钥,客户端已经没用,该卸载了。
  • 👍 75
  • 🤣 23
  • 💯 5
  • 😇 2
  • ❤ 1
Post #100 5.97K
GitHub养号能不能正常一点,在KeyAttestation仓库看见这些提问很难绷住的
  • 😁 110
  • ❤ 1
  • 💩 1
Post #98 5.56K
验签盲点:追加的apk签名

在apk反破解对抗中,验签一般会解析v2签名块,验证并提取其中签名证书与预期值对比,而不会完整计算apk的内容hash,因为完整性已经由系统保证并且过于耗时。如果某修改后apk保留原签名不变,但能通过系统验证正常安装,一般认为这需要核心破解。它严重依赖设备环境,破解apk难以传播,通常可以忽略。但是Android的签名验证系统可能与大多数人的认知不同,使得这个假设可以在普通系统上成立。

在v2签名后,Android陆续推出了v3.0和v3.1等签名方案,并认为新方案比老方案更好,施加了防剥离措施,避免版本降级。具体而言,如果签名时包含v3,会在v2块内添加备注,能识别v3的系统在v2内发现备注即证明v3被剥离。注意这里不会验证反向情况:如果v2内没有备注,证明v3由外部添加。Android 仅防御剥离,不防御追加:只要发现存在v3,就不会解析v2签名块。对于只包含v2签名块的apk,攻击者可以保留v2不变,添加v3签名。修改版apk在Android9+正常安装而验签代码校验v2时不会发现异常。

同理可得,对于v3签名块,可以修改minsdk和maxsdk让系统跳过原始签名者,验证攻击方追加的签名者。这比上文情况更弱,如果应用的验签代码校验签名者会发现外部minsdk和maxsdk与受签名保护的副本不一致或者签名异常,但常见验证代码只读取第一个签名者的证书,易受攻击。

总结:系统校验并保证的签名者可能与开发者预期不一致。建议手动实现签名解析时应该完整遍历整个apk签名块,任何额外的块和已知签名块内额外的签名者都是被攻击信号。如果这不可行,例如签名由Play管理,开发者应该完整校验至少一个签名者,即计算apk内容hash。

另外,关于Android系统只防御剥离不防御追加的情况,我认为这是威胁模型定义问题。它防御的威胁是某一签名算法发现缺陷后被更高版本签名方案禁用。由于v3没有禁用任何v2支持的算法,因此它们安全性相同,即使没有防剥离功能,也不会存在任何有效攻击,这只是Google习惯性加上去的降级防御,所以不认为升级也需要阻止。

备注,其实源戳签名(0x6dff800d)可以防御追加,但是它被弃用了,只支持v2和v3.0。由于维护停止,不能识别v3.1以及v3.2,系统不会验证它们是否由外部添加。
  • 👍 35
  • 😍 3
  • ❤ 2
  • 👌 1
Post #96 4.84K
chrome 和 webview 已经停止使用静态库 trichromelibrary,可能因为它俩版本号一直无法同步?
  • 👍 39
  • 🤔 19
  • 👏 2
  • ❤ 1
Post #95 16K
Post #94 5.93K
南宫雪珊 备注:其实Android系统允许不存在K0。即可以在轮换后量子密钥对时,两个签名者的谱系没有共同单一祖先K0,也可以仅有v3.2块并且没有轮换历史。但apksigner不允许,你签不出这样的apk。 备注2:其实Android系统允许在v2块使用单一后量子签名,代价是不论minsdk值,apk都只能在Android17+安装。这种情况apksigner能成功签名。 备注3:如果使用后量子签名时遇到 java.io.IOException: DER input not an octet string 报错,说明JDK版本太低…
成功在v2使用后量子签名,并且正常安装
  • 🥰 19
  • ❤ 3
  • 👍 2
  • 🤔 2
Post #92 8.34K
南宫雪珊 Android17支持apk的后量子密码签名方案,即v3.2签名,但这个签名方案很别扭。 一般来说,目前是传统算法签名,升级应该添加一个后量子算法密钥对,轮换过来就好。或者apk只运行在Android17以上,不用轮换,直接用新生成的后量子密钥对签名。 可惜,不是这样的。 你需要先生成一个传统算法密钥对K0,作为被轮换者;再生成第二个传统算法密钥对C_K1,作为v3.2签名块的一部分;接着生成一个后量子密钥对PQC_K1,作为v3.2签名块另外一部分。然后为被轮换者K0分别生成到新签名块2张证书的轮换谱…
备注:其实Android系统允许不存在K0。即可以在轮换后量子密钥对时,两个签名者的谱系没有共同单一祖先K0,也可以仅有v3.2块并且没有轮换历史。但apksigner不允许,你签不出这样的apk。

备注2:其实Android系统允许在v2块使用单一后量子签名,代价是不论minsdk值,apk都只能在Android17+安装。这种情况apksigner能成功签名。

备注3:如果使用后量子签名时遇到 java.io.IOException: DER input not an octet string 报错,说明JDK版本太低 ,不支持BC使用的RFC 9881私钥格式。要么加载BC换掉SunJSSE,要么升级JDK 25到最新补丁版。 java.security包含 jdk.mldsa.pkcs8.encoding 字段说明支持RFC 9881。
  • 😁 32
  • 🤯 12
  • ❤ 2
  • 🔥 1
Post #91 6.85K
Android17支持apk的后量子密码签名方案,即v3.2签名,但这个签名方案很别扭。
一般来说,目前是传统算法签名,升级应该添加一个后量子算法密钥对,轮换过来就好。或者apk只运行在Android17以上,不用轮换,直接用新生成的后量子密钥对签名。

可惜,不是这样的。
你需要先生成一个传统算法密钥对K0,作为被轮换者;再生成第二个传统算法密钥对C_K1,作为v3.2签名块的一部分;接着生成一个后量子密钥对PQC_K1,作为v3.2签名块另外一部分。然后为被轮换者K0分别生成到新签名块2张证书的轮换谱系,即K0→C_K1和K0→PQC_K1。最后,用K0生成v3.1或者v3块,用C_K1和PQC_K1生成v3.2块。
总结:v3块需要1个签名者,v3.2块需要2个签名者,累计3个密钥对。即使是只在Android17上运行的全新app,也得走完这套流程。别想偷懒,K0和C_K1不能相同,否则无法通过验证。

这就完了吗?没有。
如果要轮换后量子签名,你也需要同时生成2种算法的新密钥对,即C_K2和PQC_K2,然后分别为它们建立交叉信任谱系:K0→C_K1→PQC_K1→C_K2和K0→C_K1→PQC_K1→PQC_K2。总之,到当前证书为止,传统和量子2个签名者的谱系之前的证书必须完全相同。

谱系能不能收敛到单一后量子签名者呢,设计上是可以的,但Android17不行,v3.0签名块阻止后量子证书,只有v3.2块允许存在。而v3.2块强制必须且仅能有2个签名者:传统和后量子。
虽然v3块在设计上允许添加新类型证书,用SDK级别排除无法识别的Android版本,但这个功能从未发挥作用,每次都添加新签名块来解决问题,可惜啊可惜。
  • 🤯 50
  • 🗿 3
  • ❤ 2
  • 😴 2
  • 😁 1
  • 😇 1
Post #90 28.2K
app-release.apk15.9 KB
特权隔离

本应该是Android系统中最受限的隔离进程,却拥有众多特权,非常奇妙。

0. 随机uid,曾经的magiskhide绕过方案,magisk已处理。
https://t.me/magiskalpha/255

1. app zygote的setuid权能在selinux关闭时不受限制,已失效。
https://t.me/vvb2060_Channel/81

2. app zygote可以检测selinux状态,ksu已处理。
https://t.me/magiskalpha/714

3. app zygote native没有unshare,和init挂载命名空间相同,无法隐藏。
https://t.me/vvb2060_Channel/60

现在,我们又发现了一个隔离进程的特权:遍历进程。隔离进程拥有gid 3009,可以不受限访问/proc。
这是从隔离进程诞生起就拥有的能力,但10年来无人发现。2020年Project Zero偶然发现app zygote拥有gid 3009,可惜的是,没有发现存在时间更久的隔离进程有一模一样的问题,并且修复补丁特意忽略了隔离进程情况,只对is_child_zygote清空groups,真是哭笑不得。

由于我们在某加固壳中观察到了野外利用,因此决定直接公开该漏洞细节。我们还编写了一个poc,以检测root为例: https://github.com/LSPosed/Privisolated
  • 🤯 135
  • 👍 30
  • 🤣 15
  • ❤ 7
Post #89 7.49K
网上的资料都说 io_uring 因为漏洞过多,被Google在全部生产内核禁用,包括Android。但是 Android 2022 年就开始用 io_uring 了,当然仅限root进程:fastbootd、snapuserd、logd、statsd。

毕竟io_uring可以把OTA快照合并从15分钟减少到38秒,这等性能提升,无论如何也不该忽视。
https://cs.android.com/android/_/android/platform/system/fs/fs_mgr/+/beb8a96b61c38c9ddfa99e266abfb4718b67f86f
  • 😁 41
  • 🔥 5
  • 👍 4
  • ❤ 1
  • 👏 1
Post #87 8.2K
chrome 现在明确区分本地网络和本机回环
  • 😁 49
  • 👍 25
  • 👀 4
  • ❤ 2
Post #86 8.59K
内部存储空间(显示为设备名字),由外部存储设备(com.android.externalstorage)提供给SAF。
最近/图片/视频/音频/文档,由媒体选择工具(com.android.providers.media.module)提供给SAF。
下载由下载管理器(com.android.providers.downloads)提供给SAF。
SAF本身(com.android.documentsui) 并无存储访问权限,它只是中介,让用户浏览并且授权的界面。

同一个文件,显示在SAF不同位置,代表不同的来源和不同的URI,甚至文件类型也不同。例如下载管理器说某文件的类型是application/octet-stream,但在外部存储设备看来它是application/zip。通过SAF选择特定文件类型时需要注意这一点。

(补充一下老频道的帖子 https://t.me/vvb2060Channel/910
  • ❤ 23
Post #85 15.4K
截止2025年12月,最低SDK级别28(Android 9)可以覆盖95%的设备。
SDK级别23(Android 6)已经是10年之前的版本。
  • 👍 39
  • 😭 20
  • ❤ 2
Older posts →

About this channel

How can I read @vvb2060_channel without a Telegram account?
TGViewer shows the public web preview Telegram publishes for 南宫雪珊: recent posts, photos, videos and the subscriber count, with no app, login or account.
How many subscribers does 南宫雪珊 have?
南宫雪珊 (@vvb2060_channel) has 3.76K subscribers on Telegram, refreshed roughly every 30 minutes.
Does 南宫雪珊 know I viewed it here?
No. Public channel previews carry no viewer identity, and TGViewer has no accounts or tracking of what you look up.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →