作者归档:softsim

Android系统电话相关的几个权限

android.permission.MODIFY_PHONE_STATE
修改电话状态:开机,MMI等。 不包括打电话
此权限, 只能为系统应用 所获取。 第3方开发应用不能获得此权限

iccOpenLogicalChannel 需要此权限 或者 有运营商权限 (hasCarrierPrivileges)

android.permission.READ_PHONE_STATE
读取电话状态:包括移动网络信息,电话当前的状态

getSubscriberId 需要
1) READ_PRIVILEGED_PHONE_STATE
2) READ_PHONE_STATE
3) hasCarrierPrivileges()
4) 默认的短信应用
5) android.permission.USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER

getSimSerialNumber
1) READ_PRIVILEGED_PHONE_STATE
2) READ_PHONE_STATE
3) hasCarrierPrivileges

从 Android 10 开始,应用必须具有 READ_PRIVILEGED_PHONE_STATE 特许权限才能访问设备的不可重置标识符(包含 IMEI 和序列号)。

Android系统仅会向使用平台密钥进行签名的应用以及特权系统应用授予 READ_PRIVILEGED_PHONE_STATE 权限。

两点要求:

1)app使用平台签名

2) app是特权系统应用(放在 /system/priv-app目录?)

特许权限白名单,以向特权应用授予 READ_PRIVILEGED_PHONE_STATE 权限

如果应用是预加载(预装到系统)的特权应用,则需要获得在 AndroidManifest.xml 中声明的 READ_PRIVILEGED_PHONE_STATE 权限。此外,该应用还需要将此特许权限列入白名单。

特权应用是位于系统映像某个分区上 priv-app 目录下的系统应用。各 Android 版本中,该分区为:

  • Android 8.1 及更低版本 – /system
  • Android 9 及更高版本 – /system, /product, /vendor

/etc/permissions/priv-app 应该实际解析为 partition/etc/permissions/priv-app

早期版本中,设备制造商几乎无法控制可对特权应用授予哪些签名|特许权限。从 Android 8.0 开始,制造商必须在 /etc/permissions 目录下的系统配置 XML 文件中明确授予特许权限。从 Android 9 开始,实现人员必须明确授予或拒绝授予所有特许权限,否则设备将无法启动。

privapp-permissions.xml 文件只有在与特权应用位于同一分区时才能授予或拒绝授予该应用权限。例如,如果 /vendor 分区上的应用请求特许权限,则只能由同样位于 /vendor 上的 privapp-permissions.xml 文件来同意或拒绝该请求。

应用的权限白名单可列在位于 frameworks/base/etc/permissions 目录下的单个或多个 XML 文件中,如下所示:

  • /etc/permissions/privapp-permissions-OEM_NAME.xml
  • /etc/permissions/privapp-permissions-DEVICE_NAME.xml

对于如何组织内容,没有严格的规则。设备实现人员可以决定内容结构,只要 /system/priv-app 下的所有应用均列入白名单即可。例如,Google 针对由 Google 开发的所有特权应用提供了一个白名单,并建议使用以下组织方式:

  • 对于已包含在 Android 开源项目 (AOSP) 树中的应用,请将其权限列在 /etc/permissions/privapp-permissions-platform.xml 中。
  • 对于 Google 应用,请将其权限列在 /etc/permissions/privapp-permissions-google.xml 中。
  • 对于其他应用,请使用以下格式的文件:/etc/permissions/privapp-permissions-DEVICE_NAME.xml

https://source.android.com/devices/tech/config/perms-whitelist?hl=zh-cn

PermissionManagerService.java

PhoneSubInfoController.java

ContextImpl.java

public int checkPermission(String permission, int pid, int uid) {
….
am.checkPermission(permission, pid, uid);

https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/permission/PermissionManager.java

am.checkPermission(permission, pid, uid);

ActivityManagerService.checkPermission

com.android.server.am.ActivityManagerService

public static int checkComponentPermission(String permission, int uid,
int owningUid, boolean exported) {
….

https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/pm/permission/PermissionManagerService.java

public int checkPermission(String permName, String pkgName, int userId) {

https://gowa.club/Android/Android%E7%9A%84%E6%9D%83%E9%99%90%E6%A3%80%E6%9F%A5%E8%BF%87%E7%A8%8B.html

https://lishuaiqi.top/2017/07/06/Permission3-checkPermissions/#1-3-checkPermission

高通可穿戴芯片

Snapdragon Wear 1100: Cortex-A7 1.2G LTE Cat1 Modem 发布于2016年,没人用

Snapdragon Wear 1200: Cortex-A7 1.3G LTE M1/NB1 Modem 发布于2017年,也没人用

Snapdragon Wear 2100: 4核Cortex A7 (就是Qualcomm Technologies, Inc MSM8909W) 1.2G X5 Modem(Cat 4) 发布于2016年

Snapdragon Wear 2500: 4x ARM Cortex A7 , 其实也是8909w

Snapdragon Wear 3100: MSM8909w (Cortex A7*4 1.2G) X5 Modem(Cat4) 协处理器QCC 1100 发布于2018年

其中 MSM890w 来源于 发布于2014年9月9日的 Snapdragon 210(MSM8909),CPU和基带规格一致

Snapdragon Wear 3100: 来源于 SDM425 (Cortext A53) X5 Modem

华米智能手表2(Nexo) 参数:https://www.amazfit.com/cn/nexo.html

1.39 英寸 AMOLED 454*454分辨率

高通 Snapdragon Wear 2500 4核A7 1.1GHz

512MB LPDDR3

4G eMMC (用户可用空间约 1GB)

Bluetooth 4.2 + BLE

出门问问 TicWatch Pro 4G/LTE 参数

https://www.chumenwenwen.com/product/ticwatchpro-parameter.html

https://www.mobvoi.com/us/pages/ticwatchpro4g

Qualcomm® Snapdragon Wear™ 2100,在 /proc/cpuinfo里显示Qualcomm Technologies, Inc MSM8909W

显示屏1:AMOLED屏 400*400像素/287ppi
显示屏2:单色液晶屏

Ticwatch Pro 4G 2020版  型号:WF20066

Ticwatch Pro 2021 4G版   型号:

Ticwatch Pro 4G 2019   型号: WF11016

TicWatch Pro 4G (catshark)安装Magisk

1. 手机上安装Wear OS By Google, 蓝牙配对激活手表

2. 手表上在待机界面下滑,调出设置界面,  设置→系统→关于→版本号(注意是下面的版本号,不是上面的版本),狂点,即可打开开发者模式

3. 设置→开发者选项,打开 ADB调试

4. PC上运行

adb reboot bootloader
fastboot oem unlock

然后在手表上,用 音量键 (下面那个按钮) 选择 unlock, 然后用 电源键 (上面那个按钮) 选择确定。

5. 手表会重启,并恢复出厂设置,按照步骤1,重新激活手表

6. 下载 twrp
https://dl.twrp.me/catshark/twrp-3.5.0_9-0-catshark.img.html

7. 启动到recovery

adb reboot bootloader
fastboot boot  twrp-3.5.0_9-0-catshark.img

8. 下载Magisk v21.4
https://github.com/topjohnwu/Magisk/releases/download/v21.4/Magisk-v21.4.zip

9.

adb sideload Magisk-v21.4.zip

5G频谱

3GPP定义的频率范围分为FR1和FR2
FR1也就是Sub 6G, 低于6G Hz的频段   450 MHz ~ 6000 MHz
FR2 24.350GHz ~ 52.6 GHz

1. 700MHz频段(694~790MHz)
全球性使用的低频5G频段

2. L波段(1427~1518MHz)
所有国家和地区确定的新的全球波段
3. 2496 MHz – 2690 MHz
许多国家和地区确定的全球波段,但这频段已经给LTE使用,在中国这一频段分配了160MHz给中国移动。
2515-2575MHz、2635-2675MHz为新增频段
2575-2635MHz频段为重耕中国移动现有的TD-LTE(4G)频段

3300~3400MHz     欧美外的许多国家和地区确定的全球波段
C波段(3400~3600MHz) 所有国家和地区确定的全球波段, 中国这个频段分给了中国电信和中国联通
3.4-3.5 给中国电信
3.5-3.6 给中国联通

C波段(3600~3700MHz) 许多国家和地区确定的全球波段
4800~4990MHz     为亚太地区少数几个国家确定的新频段,在中国分配了100MHz给中国移动

n1 1.920-1.980 2.11-2.17

https://zhuanlan.zhihu.com/p/82704664

703-743/758-798MHz频段号为n28。(703MHz-748MHz/758MHz-803MHz的频段号为n28)
n1 重耕 2.1G
n41 重耕 2.6G
n78 新的 3.3g

debian和openwrt下驱动mt7601u网卡

mt7601u是ralink(mediatek) 2012年推出的一款usb接口 150 Mbps速率的802.11b/g/n无线网卡,主要规格:

嵌入式高性能32位risc微处理器

55nm CMOS工艺

高集成射频 1T1R模式

支持150MbpsPHY速率

集成高效开关调节器

紧凑型5mm×5mm QFN40L封装

Debian中只需要安装 firmware-misc-nonfree

apt install  firmware-misc-nonfree

firmware-ralink现在由 firmware-misc-nonfree提供

重启后,即可以收到信号

OpenWRT编译配置

Kernel modules –> Wireless Drivers –> kmod-mt7601u

配置文件

/etc/config/wireless

config wifi-device 'radio1'
	option type 'mac80211'
	option path 'platform/101c0000.otg/usb1/1-1/1-1:1.0'
	option disabled '0'

config wifi-iface 'default_radio1'
	option device 'radio1'
	option network 'wan'
	option mode 'sta'
	option ssid 'uplink'
	option encryption 'psk2'
	option key '12345678'

/etc/config/network

config interface 'wan'
	option proto 'dhcp'

Linux网卡流量统计

ifconfig可以获取
但现在新的系统,默认安装iproute2包,没有ifconfig命令了
ifconfig命令,实际从

 
/sys/class/net/wwan0/statistics/rx_bytes
/sys/class/net/wwan0/statistics/tx_bytes

这两个文件,获取的流量统计信息

wwan0是我的usb 4G网卡的名称

vscode开发Java控制台应用

0. 下载 vscode

https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64

1.解压缩 后 直接运行

dpkg -x  code_1.52.1-1608136922_amd64.deb  app
cd app/user/share/code
chown root:root chrome-sandbox
chmod 4755 chrome-sandbox
./code

3.配置Java环境
Ctrl+Shift+P 调出 Command Palette, 输入命令

Java: Configure Java Runtime

选择 Java: Configure Java Runtime.

4.创建Java项目

Java: Create Java Project

选择No build tools
或者
Maven

mitmproxy捕获手机ssl流量

一. 安装mitmproxy
1. 安装python3-venv

apt install python3-venv

2. 获取源代码

git clone https://github.com/mitmproxy/mitmproxy.git
cd mitmproxy
./dev.sh 

3. 激活python3虚拟环境,并执行

. venv/bin/activate  
mitmdump 

二. 上传证书到 手机
1. 运行mitmproxy后,会自动在 ~/.mitmproxy 目录下生成证书:
mitmproxy-ca.pem  证书和私钥
mitmproxy-ca-cert.pem  PEM格式的证书
mitmproxy-ca-cert.cer  跟PEM格式的证书完全一样,只是扩展名不同

2.制作一个Android兼容的证书
2.1 获得mitmproxy证书的hash值

openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.pem | head -1

会显示 hash值为 c8750f0d

注意,要用 -subject_hash_old 选项,而不是 -subject_hash 这样才会得到 openssl 0.9 兼容的hash值

2.2 android证书文件名 以.0结尾

cat mitmproxy-ca-cert.pem > c8750f0d.0
openssl x509 -inform PEM -text -in mitmproxy-ca-cert.pem -noout >>  c8750f0d.0

一步到位

hashed_name=`openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.cer | head -1` && cp mitmproxy-ca-cert.cer $hashed_name.0

3. 将证书放入 /system/etc/security/cacerts/

adb push c8750f0d.0 /data/local/tmp/
adb shell
su 
# mount -o remount,rw /system
# setenforce 0
#  mv /data/local/tmp/c8750f0d.0 /system/etc/security/cacerts/ 
# chmod 644 /system/etc/security/cacerts/c8750f0d.0
# chown root:root /system/etc/security/cacerts/c8750f0d.0
#  setenforce 1
# mount -o remount,ro /system

如果是用Magisk来root的,上述命令中有些应该适当修改

mount -o remount,rw /sbin/.magisk/mirror/system_root

三.让手机通过usb上网
1. 手机开启无线数据,或者开启wifi

2. 手机开启usb共享,PC上启用usb网卡

3. PC上启用有线连接

ip addr add 192.168.1.158/24 dev eno1
ip route add default via 192.168.1.1 dev eno1
ip route  del default via 192.168.42.129

4. 在手机上给usb网卡重新分配ip

ip addr del 192.168.42.129/24 dev rndis0 
ip addr add 10.42.0.2/24 dev rndis0

5. 手机上 修改路由表 (rmnet_data3根据实际情况修改)

ip route add 10.42.0.0/24 dev rndis0 table rmnet_data3
ip route delete default table rmnet_data3
ip route add default via 10.42.0.1 table rmnet_data3

ip -6 route  del default  table rmnet_data3

6. PC上开启转发

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -n -L

7. PC上给usb网卡重新分配地址

ip addr del 192.168.42.140/24 dev usb0
ip addr add 10.42.0.1/24 dev usb0

8. 在手机上检测

ping 10.42.0.1

9. 手机上设置私人DNS

四. PC上配置mitmproxy环境
1. 将80和443端口的流量都重定向给 mitmproxy

iptables -t nat -A PREROUTING  -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING  -p tcp --dport 443 -j REDIRECT --to-port 8080

2.透明模式启动mitmproxy

mitmproxy --mode transparent --showhost

五. 用frida解除 ssl pinning

frida -U -f com.sinovatech.unicom.ui -l ../ssl.js --no-pause

trojan nginx wordperss共存

/etc/trojan/config.json

{
“run_type”: “server”,
“local_addr”: “192.168.0.1”,
“local_port”: 443,
“remote_addr”: “127.0.0.1”,
“remote_port”: 443,

…}

local_addr这里可以改为 :: 表示任意地址

nginx配置

server {
server_name softs.im;

listen 127.0.0.1:443 default_server;

因为在worpress里有 wp-includes/load.php
function is_ssl() {
}
判断是否支持ssl
如果端口监听在443, 就认为是ssl