UICC规范

智能卡,UICC终端就诶口; 物理和逻辑特性 TS 102.221 APDU 命令 和 响应

UMTS/LET USIM卡特性 TS 131.102 USIM文件EF内容

3GPP2 C.P0065-B v2.15 CSIM 文件内容

3GPP2 C.P0074-B v0.2 CDMA多模卡

Removable User Identity Module for Spread Spectrum Systems

https://people.dsv.su.se/~jary4935/abtpd/iso7816_4.html#table52

Most Used Smart Card Commands – APDU


http://cardwerk.com/smart-card-standard-iso7816-4-section-5-basic-organizations/

android vpn api

VpnService.Builder addAllowedApplication (String packageName)
添加一个允许访问VPN连接的应用.
如果这个方法至少被调用了一次, 那么 只有被这个方法添加了的应用 被运行访问VPN连接.
如果这个方法从来都没有被调用, 那么, 所有的应用都可以访问VPN连接.
如果VPN没有运行, 那些没有添加的应用才可以访问网络. 也就是说, VPN运行时, 那么没有添加的应用是不可以访问网络的?

VpnService.Builder 只能设置允许列表 或者 不允许列表 (当然, 也可以两者都不设置)
——————

VpnService.Builder addDisallowedApplication (String packageName)

默认所有应用都可以访问VPN. 当用addDisallowedApplication 添加一个被拒绝的应用后, 如果VPN服务没有运行,这个被拒绝的应用才可以访问网络

——————–

VpnService.Builder allowBypass ()

允许所有的应用 忽略这个VPN连接.
默认情况下, 从apps的所有流量 都转发给 VPN接口 . apps是没办法 避开VPN的.
如果这个方法被调用, apps可以用 类似 bindProcessToNetwork(Network) 的方法, 来直接从底层网络来手法数据.

Android手机换IP调内网

1) 飞行模式 会断开所有网络连接,包括wifi
2) 换APN 从3gnet换到wonet,cmnet
3) 开关”移动数据网络”

对于无线通信模块,可以用AT命令控制, 实现类似的模式
1) AT+CFUN=0
2) AT+CGDCONT=1,”IP”,”3gnet” 有些模块不支持 在线切 apn, 必须先CFUN=0
3) AT+CGACT=0,1 去激活 数据域, 或者 AT+CGATT=0 离网

用Frida分析QQ浏览器

AppInfoHolder.getAppInfoByID(AppInfoID.APP_INFO_GUID);

Java.perform(function () {
    var AppInfoHolder = Java.use("com.tencent.mtt.AppInfoHolder");
    var AppInfoID = Java.use("com.tencent.mtt.AppInfoHolder$AppInfoID");
    var ret= AppInfoHolder.getAppInfoByID(AppInfoID.valueOf("APP_INFO_GUID"));
    send(ret);
});

79a0f38cfabccce3adf856d913b788cb

实际是调用 com.tencent.mtt.businesscenter.config.QBAppInfoProvider 的 public String getAppInfoById(AppInfoID arg4) {

case 6: {
v0 = d.a().e();
break;
}

也就是在 com.tencent.mtt.base.wup.d 中

GuidRsp g;

存在于

    public static File getQBSdcardGuidDir() {
        File v0 = new File(FileUtils.getSDcardDir().getAbsolutePath() + "/QQBrowser/.Application");
        if(v0 != null && !v0.exists()) {
            v0.mkdirs();
        }

        return v0;
    }

也就是 /storage/emulated/0/QQBrowser/.Application

python zlib库

支持
zlib 压缩格式 (RFC 1950) 没有头部
deflate 压缩格式 (RFC 1951)
gzip 压缩格式 (RFC 1952)

gzip压缩

gzip_compress = zlib.compressobj(9, zlib.DEFLATED, zlib.MAX_WBITS | 16)
gzip_data = gzip_compress.compress(text) + gzip_compress.flush()

gzip解压缩
zlib.decompress(gzip_data, zlib.MAX_WBITS|16)
=================

deflate_compress = zlib.compressobj(9, zlib.DEFLATED, -zlib.MAX_WBITS)
deflate_data = deflate_compress.compress(text) + deflate_compress.flush()

zlib.decompress(deflate_data, -zlib.MAX_WBITS)

====================

zlib_compress = zlib.compressobj(9, zlib.DEFLATED, zlib.MAX_WBITS)
zlib_data = zlib_compress.compress(text) + zlib_compress.flush()

zlib.decompress(zlib_data)

=====================

中兴微4G模块修改IMEI

基于ZX297520/7510的模块都可以这样改
AT^MODIMEI=860249030020244

change imei for 860249030020244 comand AT^MODIMEI=860249030020244
and enter unlock code 4C71E0331EA09E32

中兴 的MIFI ZTE MF920就是用7520芯片

AT^SETIMEI= 据说也可以

AT^READIME 读取 IMEI

at^readimei

359179076088185

QQ浏览器Token处理

com.tencent.mtt.businesscenter.config.QueenInfoProviderImpl

public void refreshToken(IRefreshQueenTokenCallback arg3) {

}
===========================================================
com.tencent.mtt.external.tencentsim.auth. tokenHandler
com.tencent.mtt.external.tencentsim.auth.MTT TokenInfoReq (com/qq/taf/jce/JceStruct.java)
com/tencent/common/wup/WUPTaskClient
com.tencent.mtt.base.wup XPOST

JCE-WUP协议

TARS除了支持客户端通过JCE生成类的调用方式,还可以发起WUP数据包协议调用。

什么是WUP:

1. WUP(wireless uni-protocol)无线统一协议
2. 基于JCE编码的命令字(Command)层协议封装
3. UniPacket实现请求与回应包对象的封装, 支持协议动态扩展
4. 序列化的数据可用于网络传输或者持久化存储
5. 支持直接调用TARS的服务端

对应于WUP,TARS有相同的概念TUP。相关工具类为TARSUniPacket,封包、解包、调用TARS服务方式完全一样。

https://github.com/Tencent/TARS/blob/master/docs/TARS_tup.md

TARS编码协议是一种数据编解码规则,它将整形、枚举值、字符串、序列、字典、自定义结构体等数据类型按照一定的规则编码到二进制数据流中。对端接收到二进制数据流之后,按照相应的规则反序列化可得到原始数值。

TARS编码协议使用一种叫做TAG的整型值(unsigned char)来标识变量,比如某个变量A的TAG值为100(该值由开发者自定义),我们将变量值编码的同时,也将该TAG值编码进去。对端需要读取变量A的数值时,就到数据流中寻找TAG值为100的数据段,找到后按规则读出数据部分即是变量A的数值。

TARS编码协议的定位是一套编码规则。tars协议序列化之后的数据不仅可以进行网络传输,同时还可以存储到数据库中。

TUP组包协议是TARS编码协议的上层封装,定位为通信协议。它使用变量名作为变量的关键字,编码时,客户端将变量名打包到数据流中;解码时,对端根据变量名寻找对应的数据区,然后根据数据类型对该数据区进行反序列化得到原始数值。

TUP组包协议内置一个TARS编码协议的Map类型,该Map的关键字就是变量名,Map的值是将变量的数据值经过TARS编码序列化的二进制数据。

TUP组包协议封装的数据包可以直接发送给Tars服务端,而服务端可以直接反序列化得到原始值。

TARS组包协议是对RequestPacket(请求结构体)和ResponsePacket(结果结构体)使用TARS编码协议封装的通信协议。结构体包含比如请求序列号、协议类型、RPC参数序列化之后二进制数据等重要信息。

http://dldir1.qq.com/hudongzhibo/im/IM_Android_SDK_3.1.2.zip

Linux命令行连接蓝牙鼠标

#!/bin/bash

# enable bluetooth
# systemctl start bluetooth
# sleep 1

# run the program bluez
echo -e 'connect EE:B4:FE:39:27:AC\nversion\nlist\nshow\ndevices\npaired-devices\nquit' | bluetoothctl

有一款蓝牙鼠标在断开后,必须 长按 鼠标底部的 配对键 3秒, PC才可通过蓝牙控制器 扫描到 鼠标设置

用 empty 解决延时的问题

#!/bin/bash

empty -f -L /dev/shm/empty.log -i /dev/shm/empty.in -o /dev/shm/empty.out bluetoothctl

if [ $? = 0 ]; then
	if [ -w $fifo_in -a -r $fifo_out ]; then
		empty -w -v -i /dev/shm/empty.out -o /dev/shm/empty.in -t 1 "Mouse" "connect EE:B4:FE:39:27:AC\n"
		#sleep 1
		#empty -s -o /dev/shm/empty.in "connect EE:B4:FE:39:27:AC\n"
		sleep 3
		cat /dev/shm/empty.log
		rm /dev/shm/empty.log
	fi
else
	echo 'failed to start bluectrl'
fi