分类目录归档:未分类

SGP.22 eUICC信息

EUICCInfo1是EUICCInfo2的子集。
EUICCInfo1 是在 卡片被 authenticated前,发送给RSP服务器的信息。
EUICCInfo2 是卡片完整的信息, 只有euicc和rsp双方相互认证完成后,才会发给RSP.

LPA可以在任何时候向 euicc取得这些信息。

Profile Package Versions 包版本
Specification Version Numbers 规范版本
Firmware version 固件版本
Available amount of non-volatile memory 可用的存储空间大小
UICC capabilities  能力
ETSI TS 102 241 version    102.241规范版本
GlobalPlatform version   GP版本
RSP capabilities     RSP能力
Lists of supported eSIM CA RootCA Public Key Identifiers    支持的根证书公钥标识符 列表
eUICC Category   类别
Forbidden PPRs  
Protection Profile version
SAS Accreditation Number
Certification Data Object
TRE properties
TRE product reference
LPA Mode
EUM specific information


euicc download profile

1. 拥有要下载的profile的运营商,通过调用 ES2.DownloadProfile 功能(输入数据为 SM-SR的标识符和地址,这些应该由运营商提供)。
默认情况下, profile处于disabled状态。当然,运营商可以要求SM-DP在最后启用新下载的profile

2. 受到请求的 SM-DP ,应该调用ES3.GetEIS

3. SM-SR 应基于EID来取得 euicc的 EIS信息。 如果在它的系统里,没有这张euicc的信息,应该返回一个错误。
错误信息最终返回给运营商,运营商终止 profile下载过程

4. EIS信息中, 卡上的ISD-P 用 smdp-id 将此卡与 特定的SM-DP关联起来, 如果SM-SP尝试删除此euicc旧有的profile

5. SM-DP检查 euicc是否满足download profile的一些要求。
1) uicc的特性是否同profile兼容
2) uicc的ram/storage是否够用
3) uicc是否认证过(certified)

SM-DP应该验证 EIS信息中 关于该uicc的ECASD的证书, 使用CI签发的EUM的证书,来验证 ECASD证书的 PK.ECASD.ECKA密钥

6. SM-DP调用ES3.CreateISDP

7.

esim激活二维码

扫描esim服务提供商的二维码 来下载esim数据,比自己手动收入 激活码来下载,要容易得多。

购买esim服务后,一般会收到一封电子邮件,里面含有完整的激活字符串 和/或 它的二维码,比如

LPA:1$esim.wo.com.cn$A1B2C3D4

其中 SM-DP+ 的地址就是 esim.wo.com.cn

激活码是 A1B2C3D4
确认码是 空, 也就是没有

这些内容在 SGP.22 规范中定义

中国移动

LPA:1$esim.yhdzd.chinamobile.com:8001$

既没有 激活码,也没有确认码

中国联通

LPA:1$esim.wo.com.cn$1.3.6.1.4.1.47814.101.8

没有激活码,
有确认码,为 1.3.6.1.4.1.47814.101.8

java.util.Base64与 android.util.Base64

java.util.Base64 是在 Java 8 中添加的, Android早期是基于 Java 7的,所以自己搞了个android.util.Base64
android的base64编码后,默认会添加换行符号 “\n”

Base64.encodeToString(byte_array, Base64.NO_WRAP)

指定 NO_WRAP 参数,就不会换行
就同

Base64.getEncoder().encodeToString(byte_array)

的编码结果一样了

TMPI生成

ETSI TS 133 220 V17.4.0 (2023-01) 第44页

FC = 0x01
P0 = gba-me 也就是 十六进制 67 62 61 2d 6d 65 , Ks_NAF 和 Ks_ext_NAF都用这个参数
L0 = P0的长度, 6字节, 也就是 00 06
P1 = RAND
L1 = RAND的长度,16字节, 也就是00 10
P2 = IMPI ,以 UTF-8 编码
L2 = IMPI的长度, 不大于 65535
P3 = BSF_Id , 以 UTF-8 编码
L3 = BSF_Id的长度,小于 65535


BSF_Id 就是生成 B-TID的 BSF 服务器,在DNS系统的完整名称(比如 bsf.mnc002.mcc460.pub.3gppnetwork.org), 同Ua安全协议标识符
01 00 00 01 00 的拼接

Ks就是 CK IK的拼接。
TMPI 就是 TEMP@tmpi.org
其中 TEMP是 KDF输出的最前面的24个字节的 base64编码

python代码如下

s = fc + p0 +l0 + p1 + l1 + p2 + l2 + p3 + l3
k = ck +ik
h = hmac.new(k, digetmod=hashlib.sha256)
h.update(s)
temp = h.diget()[:24]
tmpi = base64.b64encode(temp).decode() + '@tmpi.bsf.3gppnetwork.org'

Ua安全协议标识符

Ua安全协议标识符 是一个5个字节的 字符串(string).
第1个字节,表示, 制定该Ua安全协议的 组织。
后面的4个字节,则指 该组织 定义的某种安全协议。

组织者字节
01 = 3GPP
02 = 3GPP2
03 = Open Mobile Alliance
04 = GSMA


01 00 00 00 00 = 按照TS 33.221定义的安全协议
01 00 00 00 01 = TS 33.246
01 00 00 00 02 = TS 24.109 定义的 Ua security protocol HTTP digest authentication
01 00 00 00 03 = TS 26.237 定义的 Ua security protocols used with HTTP-based security procedures for
MBMS user services
01 00 00 00 04 = TS 26.237定义的 Ua security protocols used with SIP-based security procedures for
MBMS user services

01 00 00 01 00 = Generation of TMPI
0x01,0x00,0x01,yy,zz = TS 33.222定义的 Ua security protocol for “Shared key-based UE authentication with
certificate-based NAF authentication” 或者 “Shared key-based mutual authentication between UE and NAF” for TLS 1.2 (see above for Ua security protocol identifier for TLS 1.3 with shared keys)
这里, “yy,zz” 是保护机制 CipherSuite code, 定义在 IANA 加密套件的TLS CipherSuites的定义的值。 RFC 8446
比如, The TLS 1.2 CipherSuite TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 的值是 { 0xC0,0x2B }

( 0x01,0x00,0x02,yy,zz )


Lineage编译环境

bison build-essential curl flex g++-multilib gcc-multilib git git-lfs gnupg
liblz4-tool libncurses libncurses-dev
libssl-dev libxml2 libxml2-utils lzop pngcrush rsync
zip zlib1g-dev

ccache

尤其是 git-lfs 要装上, 不然

aosp内置frida gadget的两种方法

方法1: https://www.mobibrw.com/2021/28588

将 gadget
bullhead/out/target/product/bullhead/system/lib/
bullhead/out/target/product/bullhead/system/lib64/
两个目录中
libgood.so

touch libgood.config.so
内容为

{
  "interaction": {
    "type": "listen",
    "address": "127.0.0.1",
    "port": 27042,
    "on_load": "resume"
  }
}

没有这个配置文件,默认也是采用这个配置。

只需要监听子进程,不需要在Zygote中加载,因此只需要在源代码 frameworks/base/core/jni/com_android_internal_os_Zygote.cpp 的com_android_internal_os_Zygote_nativeForkAndSpecialize函数中增加加载代码:

位于
framework/base/core/jni/com_android_internal_os_Zygote.cpp

在 build/make/target/product/handheld_system.mk 添加对 so的复制

=======================
https://www.sunofbeach.net/a/1620356163351797762

修改app的启动流程,在启动期间去加载so。

在frameworks/base/core/java/android/app/ActivityThread.java中的handleBindApplication

方法中,找到Application创建之前的位置,经过我的测试onCreate之后加载so也可以的!加入如下代码:

这阶段主要是判断app是否需要持久化hook,不是所有的app都需要这样,正常流程。
==================

http://zhuoyue360.com/crack/78.html

================
https://blog.csdn.net/Crazy__Hope/article/details/123113405

pixel3 build aosp

0. 在Debian bookworm 准备编译环境

apt install git gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5   libx11-dev  libxml2-utils  unzip fontconfig

1. 安装repo

apt install repo
或者
curl -o ~/bin/repo https://storage.googleapis.com/git-repo-downloads/repo 
检查版本, 2.15版本以上
repo version

3. 查看要构建的 Pixel版本

https://source.android.com/docs/setup/about/build-numbers?hl=zh-cn#source-code-tags-and-builds

SP1A.210812.016.C2 android-12.0.0_r34 Android12 Pixel 3、Pixel 3 XL 2021-10-05
选择 SP1A.210812.016.C2 android-12.0.0_r34

https://developers.google.com/android/drivers#bluelinesp1a.210812.016.c2

https://dl.google.com/dl/android/aosp/google_devices-blueline-sp1a.210812.016.c2-47172864.tgz
https://dl.google.com/dl/android/aosp/qcom-blueline-sp1a.210812.016.c2-7c544085.tgz

4. 下载源代码, 选择 r34

mkdir aaos_on_phone
cd aaos_on_phone
repo init -u https://android.googlesource.com/platform/manifest -b android-12.0.0_r34 --use-superproject --partial-clone --partial-clone-exclude=platform/frameworks/base --clone-filter=blob:limit=10M
repo sync -j8 -c -q

新的 –use-superproject –partial-clone 很有用,只下载有用的部分,会加快下载速度

5.下载并解压缩 专有二进制文件和补丁程序 (供应商映像和 Qualcomm 驱动程序)

curl --output - https://dl.google.com/dl/android/aosp/google_devices-blueline-sp1a.210812.016.c2-47172864.tgz  | tar -xzvf -
tail -n +315 extract-google_devices-blueline.sh | tar -zxvf -

curl --output - https://dl.google.com/dl/android/aosp/qcom-blueline-sp1a.210812.016.c2-7c544085.tgz | tar -xzvf -
tail -n +315 extract-qcom-blueline.sh | tar -xzvf -

6. 编译

. build/envsetup.sh
lunch aosp_blueline-userdebug
m

make -j8

7. 刷入手机

adb reboot bootloader
fastboot -w flashall

因为 $ANDROID_PRODUCT_OUT 变量设置为 out/target/product/blueline , 所以可以用上面的命令

编译内核

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
repo init --depth 1 -u https://aosp.tuna.tsinghua.edu.cn/kernel/manifest -b android-msm-crosshatch-4.9-android11
repo sync -j20

https://hqw700.github.io/2021/01/02/aosp-kernel-build/
https://hqw700.github.io/2021/01/01/aosp-build/