Android官方支持多屏协同,可以让app在远程客户端上显示,示例项目:
https://cs.android.com/android/platform/superproject/+/main:development/samples/VirtualDeviceManager/
chrome 122 可以关闭 JIT 了
相关阅读 https://microsoftedge.github.io/edgevr/posts/Super-Duper-Secure-Mode/
https://github.com/Chainfire/injectvm-binderjack/blob/master/README.md
SUI 和 LSPosed 的实现原理
// 现在看来,用cmd su替换su也不是多麻烦吧
https://issuetracker.google.com/37097003
Option to override / discard consumer proguard configs from libraries
最近几个月 gradle 本体下载是不是变慢了?因为从2023年9月26日起,下载链接301到了GitHub Release。
https://github.com/gradle/gradle-distributions/releases
(怎么你也没钱了
小米的澎湃搞了一个和 Key Attestation 有点类似的东西,不过只能看是否解锁bootloader,全程使用 json,乏善可陈。硬件层接口的包装器在 com.xiaomi.trustservice 这个app里面,没开R8混淆,接口设计一目了然。
小米没有公布验签算法和公钥,需要上传到小米服务器才能知道签名是否正确,没意思。
https://dev.mi.com/distribute/doc/details?pId=1746
如何讲一个 Xposed 笑话?
Xposed/82 (Zygisk; KernelSU like Magisk) EdXposed/0.5.1.4 LSPosed/1.9.2 (LSPlant, like SandHook and YAHFA)
https://support.google.com/googleplay/android-developer/answer/10183279
最初由Google相机使用的反hook技术内测了,终于Google也开始做加固。Google不认为dex需要保密,主要是反破解和反调试。
(Google相机没开反破解,只开了字符串抽取防止 libpairipcore.so 被剥离
Android14半修复了此问题
限制现已经移入ExternalStorageProvider后端,与平台版本绑定,但其正则表达式"(?i)^/storage/[^/]+/(?:[0-9]+/)?Android/(?:data|obb|sandbox)$"
没有匹配子文件夹情况,因此可以继续用Android13的方法绕过。
相关提交 https://android.googlesource.com/platform/frameworks/base/+/8b55dd05ce694a97123fafa3f01c4f4dfe4854d9
但DocumentsUI前端已经彻底修复,其正则表达式"^/Android/(?:data|obb|sandbox).*"
匹配了子目录情况。已经被推送apex更新的设备可以尝试卸载更新,该前端修复对全部Android11+设备有效。
相关提交 https://android.googlesource.com/platform/packages/apps/DocumentsUI/+/070e14547db2e03590e295ac25b76cfb9f45fc78 注意阅读代码里面的注释
这个问题将于Android15彻底完成修复,不可绕过。
https://dumps.tadiphone.dev/dumps/xiaomi/shennong/-/blob/missi_phone_cn_only64-user-14-UKQ1.230804.001-V816.0.9.0.UNBCNXM-release-keys/system_ext/etc/init/mi-32bit-trans.rc
小米14在纯64位CPU上对32位程序使用了转译。Tango is a binary translation system for GNU/Linux and Android which allows unmodified 32-bit ARM programs to run on 64-bit only ARM processors.
https://www.kernel.org/doc/html/latest/admin-guide/binfmt-misc.html
https://www.amanieusystems.com/technology
系统调用清单
https://www.chromium.org/chromium-os/developer-library/reference/linux-constants/syscalls/
错误号清单
https://www.chromium.org/chromium-os/developer-library/reference/linux-constants/errnos/
官方通用系统调用清单
https://github.com/torvalds/linux/blob/master/include/uapi/asm-generic/unistd.h
Android系统调用清单
https://cs.android.com/android/platform/superproject/+/main:bionic/libc/SYSCALLS.TXT
Android libc符号清单
https://cs.android.com/android/platform/superproject/+/main:bionic/libc/libc.map.txt
https://android-review.googlesource.com/q/topic:%22unlocked-only-storage%22
正在开发的新功能,可能会在Android 15上线
在现有的 /data/user 凭据加密存储和 /data/user_de 设备加密存储外,新增 /data/storage_area 锁屏加密存储。
该存储空间内的文件,只能在解锁屏幕后打开。屏幕锁定期间无法打开文件,应用进程只能使用现有文件描述符。
Android 远程 lldb 连接记录
PC 端
adb push ndk\toolchains\llvm\prebuilt\windows-x86_64\lib\clang\17\lib\linux\aarch64\lldb-server /data/local/tmp
Android 端
su
cd /data/local/tmp
chmod +x lldb-server
./lldb-server p --server --listen unix-abstract:///debug
supolicy --live "allow adbd magisk unix_stream_socket connectto"
或者使用路径模式
./lldb-server p --server --listen unix://debug
chmod 666 debug
chcon u:object_r:magisk_file:s0 debug
PC 端
cd ndk\toolchains\llvm\prebuilt\windows-x86_64\python3
..\bin\lldb
(lldb) platform select remote-android
(lldb) platform connect unix-abstract-connect:///debug
如果使用路径模式
(lldb) platform connect unix-connect:///data/local/tmp/debug
等等,没有完全反编译确认细节。小米也可能不是把JSON送进TEE让TA填充 unlock_l2 字段然后签名。如果仅仅在用户空间从TEE获取解锁状态,这可以被定制内核篡改。
(以我对这套系统的草台程度判断,不是没有可能
https://letsencrypt.org/2023/07/10/cross-sign-expiration
小知识,Android Chrome 115 起启用自带根证书库,120 起强制启用,是Chrome支持平台中最晚启用的。
可访问 https://valid-isrgrootx2.letsencrypt.org/ 测试,它不受 Android 13 信任,但受 Chrome 根证书存储库信任。
因此 2024 年 6 月后,不论是Firefox还是Chrome都不会有网页访问问题。
libprocessgroup: Use cgroup.kill
https://android-review.googlesource.com/c/platform/system/core/+/2875240
cgroup 原子 kill,感觉可以向后移植到非 Android14。
内核补丁 https://lore.kernel.org/all/20210503143922.3093755-1-brauner@kernel.org/
keystore负责用户空间内密钥管理,keymaster负责安全环境内密钥管理,这是Android11及之前的情况。Android12起,keystore替换为rust编写的keystore2,keymaster替换为keymint。
安全环境有两个:TEE和StrongBox,分别在binder标识符里叫做default和strongbox。
用户空间内程序随Android版本升级而升级,安全环境内程序几乎不会升级,由硬件供应商实现,AOSP制定其API规范。
在带证明的密钥生成时,需要提供证明密钥和其证书链。即用证明密钥对生成的密钥签发一张证明证书,一般的非对称密钥是自签名证书。keymaster只支持设备persist分区内的工厂证明密钥。它在工厂生产时注入,至少每10万台设备使用一个相同密钥,因为这是不可欺骗的标识符。证明密钥的根证书由Google生成并公示,由Google审查设备后对其TEE和StrongBox提供证明签名。如果设备出现漏洞导致私钥泄露,Google将吊销证书。由于工厂证明密钥不可更新,因此该型号设备永远无法再使用密钥证明。
为了解决此问题,Android12重写时引入了远程证明密钥,简称RKP,Remote Key Provisioning远程密钥供应。keystore2支持自定义证明密钥,接受3种情况:RKP,User和None。
RKP是默认情况。工厂生产时在设备TEE和StrongBox中生成密钥对并提取公钥,新方案可与旧方案共存。此公钥是不可欺骗的设备唯一标识符。设备开机后由rkpd app请求TEE和StrongBox生成CSR,CSR包括对设备状态的证明,由安全环境私钥签名。rkpd app将CSR发送到服务器,服务器验证后返回多个用公钥加密的证明密钥和其证书链。与至少10万台设备相同相比,新方案每台设备,每个应用,每两个月都不同。如果设备出现漏洞,服务器可暂停签发证书直到设备升级,私钥泄露也仅影响单独设备。
如果RKP获取证明密钥失败,例如rkpd app的密钥池用完,也没有及时完成网络请求,keystore2可能回退到None。如果keymint无法读取工厂证明密钥,可能本来就没有,也可能文件丢失,那么证明失败。(如果TEE本来就没有,应该设置remote_provisioning.tee.rkp_only=1以防止keystore2回退,strongbox同理)
最后一种User,指用户应用提供的证明密钥。应用可以生成或者导入一个密钥及其证书链,在生成新密钥对时指示安全环境使用它作为证明密钥。该密钥的用途必须限制为仅证明签名,以防止签署任意证书。当证明密钥本身就是带证明的密钥时,认证证书可以追溯到可信信任根。
现在看来,这东西是RKP。而DEVICE_UNIQUE_ATTESTATION指用StrongBox私钥签名证书,可作为不可欺骗的设备唯一标识符,仅对OEM有意义,因为如果没有提前知道StrongBox公钥,无法判定证书是否真实。
Читать полностью…DeviceConfig xml 文件架构定义
https://cs.android.com/android/platform/superproject/+/main:frameworks/base/core/xsd/permission.xsd
看来有人偷懒了,缺失 component-override 等 tag
https://cs.android.com/android/platform/superproject/+/main:frameworks/base/services/core/java/com/android/server/SystemConfig.java
奇怪的小知识:
IP地址 1.0.0.1 在浏览器HSTS预加载列表中,但1.1.1.1因它是IP地址而被移出了预加载列表。
https://hstspreload.org/?domain=1.1.1.1