易班v5.1.9 登录及易点名分析

前言

站在巨人的肩膀上

工具:算法助手、反射大师、Charles

脱壳

使用反射大师dump dex文件

登录协议

Charles抓包,抓到的登录数据如下:

image-20251126211213943

ct, app, token, authCode

搜索关键词,找到如下处:

image-20251127093424783

可以看到ctapptokenauthCode是固定的

sig

sig的生成逻辑如下:

image-20251127094147772

一个简单的设备标识生成

identity

identity则是调用了友盟+的设备Oaid获取

image-20251127094415631

password

密码的RSA加密如下:

image-20251127094449273

可以看到,公钥是从JNI层获取的,相关代码如下:

image-20251209210622843

主要做了一个签名校验,如果apk没有被修改过,则返回正确的公钥

(有趣的是,在5.1.8版本中对该so文件进行了代码混淆,而5.1.9版本中并没有混淆)

想要获取公钥,可以使用反射大师拦截,或frida主动调用该函数,或手动实现上方的异或算法

python脚本如下:

a = [  0x78, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0x79, 0x00, 
  0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 
  0x5F, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7D, 0x00, 
  0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 
  0x0F, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x0C, 0x00, 
  0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 
  0x26, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x47, 0x00, 
  0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x7B, 0x00, 0x00, 0x00, 
  0x71, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x7D, 0x00, 
  0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 
  0x73, 0x00, 0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x75, 0x00, 
  0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 
  0x5E, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x78, 0x00, 
  0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 
  0x7A, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x52, 0x00, 
  0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 
  0x76, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x21, 0x00, 
  0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 
  0x41, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x13, 0x00, 
  0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 
  0x78, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x1B, 0x00, 
  0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 
  0x2A, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x75, 0x00, 
  0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 
  0x01, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x14, 0x00, 
  0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 
  0x17, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x6C, 0x00, 
  0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 
  0x55, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x62, 0x00, 
  0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 
  0x36, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x67, 0x00, 
  0x00, 0x00, 0x2E, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 
  0x64, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x04, 0x00, 
  0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 
  0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x00, 
  0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 
  0x36, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x4A, 0x00, 
  0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 
  0x2E, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x05, 0x00, 
  0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 
  0x5A, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x76, 0x00, 
  0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 
  0x51, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x12, 0x00, 
  0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 
  0x17, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x5A, 0x00, 
  0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 
  0x49, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x44, 0x00, 
  0x00, 0x00, 0x6E, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 
  0x33, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x33, 0x00, 
  0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 
  0x77, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x51, 0x00, 
  0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 
  0x7E, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x28, 0x00, 
  0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 
  0x07, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x69, 0x00, 
  0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 
  0x51, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x2D, 0x00, 
  0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 
  0x61, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x0D, 0x00, 
  0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 
  0x56, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x11, 0x00, 
  0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 
  0x59, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x79, 0x00, 
  0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 
  0x7C, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x59, 0x00, 
  0x00, 0x00, 0x4A, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 
  0x45, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x59, 0x00, 
  0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 
  0x29, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x34, 0x00, 
  0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 
  0x2E, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x5C, 0x00, 
  0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 
  0x5B, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x75, 0x00, 
  0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 
  0x6B, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 
  0x07, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x78, 0x00, 
  0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 
  0x7D, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x59, 0x00, 
  0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 
  0x0E, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x03, 0x00, 
  0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 
  0x7D, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x55, 0x00, 
  0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 
  0x78, 0x00, 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, 0x51, 0x00, 
  0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 
  0x4D, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x59, 0x00, 
  0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 
  0x52, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x2A, 0x00, 
  0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x14, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x53, 0x00, 
  0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 
  0x79, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x07, 0x00, 
  0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 
  0x4D, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 0x41, 0x00, 
  0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 
  0x6E, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x76, 0x00, 
  0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 
  0x77, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x4D, 0x00, 
  0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x4A, 0x00, 0x00, 0x00, 
  0x37, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x20, 0x00, 
  0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 
  0x22, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x26, 0x00, 
  0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 
  0x31, 0x00, 0x00, 0x00, 0x6C, 0x00, 0x00, 0x00, 0x75, 0x00, 
  0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 
  0x7D, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x11, 0x00, 
  0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 
  0x26, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x7A, 0x00, 
  0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 
  0x4F, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x1D, 0x00, 
  0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 
  0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0C, 0x00, 
  0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 
  0x41, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x31, 0x00, 
  0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 
  0x5D, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x17, 0x00, 
  0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 
  0x46, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x2A, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 
  0x22, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x36, 0x00, 
  0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 
  0x40, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x50, 0x00, 
  0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 
  0x57, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x31, 0x00, 
  0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 
  0x44, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x7F, 0x00, 
  0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 
  0x44, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x64, 0x00, 
  0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 
  0x43, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x55, 0x00, 
  0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 
  0x50, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x3C, 0x00, 
  0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 
  0x50, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x69, 0x00, 
  0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 
  0x43, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x59, 0x00, 
  0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 
  0x79, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x65, 0x00, 
  0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 
  0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 
  0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 
  0x60, 0x00, 0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x04, 0x00, 
  0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 
  0x60, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x25, 0x00, 
  0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 
  0x7F, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x10, 0x00, 
  0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 
  0x54, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x6A, 0x00, 
  0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 
  0x15, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x59, 0x00, 
  0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 
  0x2E, 0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x56, 0x00, 
  0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 
  0x53, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x6C, 0x00, 
  0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 
  0x5F, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x4E, 0x00, 
  0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3D, 0x00, 0x00, 0x00, 
  0x2A, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x46, 0x00, 
  0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x1B, 0x00, 0x00, 0x00, 
  0x59, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x6C, 0x00, 
  0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 
  0x4B, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x2B, 0x00, 
  0x00, 0x00, 0x3D, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 
  0x0D, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x50, 0x00, 
  0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 
  0x54, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x05, 0x00, 
  0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x63, 0x00, 
  0x00, 0x00, 0x4B, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 
  0x75, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3C, 0x00, 
  0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 
  0x26, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x7B, 0x00, 
  0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 
  0x7E, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x6B, 0x00, 
  0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 
  0x12, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x4A, 0x00, 
  0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 
  0x66, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x06, 0x00, 
  0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 
  0x42, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x36, 0x00, 
  0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 
  0x03, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x4F, 0x00, 
  0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 
  0x57, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x07, 0x00, 
  0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 
  0x68, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x71, 0x00, 
  0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 
  0x0E, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0E, 0x00, 
  0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 
  0x01, 0x00, 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x66, 0x00, 
  0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 
  0x5C, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  0x5E, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x71, 0x00, 
  0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 
  0x2A, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x12, 0x00, 
  0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 
  0x0C, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x08, 0x00, 
  0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 
  0x07, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x51, 0x00, 
  0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 
  0x46, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x5E, 0x00, 
  0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 
  0x17, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x65, 0x00, 
  0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 
  0x6E, 0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x0D, 0x00, 
  0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 
  0x18, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x1C, 0x00, 
  0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 
  0x5C, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x54, 0x00, 
  0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 
  0x54, 0x00, 0x00, 0x00, 0x4F, 0x00, 0x00, 0x00, 0x5F, 0x00, 
  0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 
  0x36, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x68, 0x00, 
  0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 
  0x31, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x2E, 0x00, 
  0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 
  0x12, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x48, 0x00, 
  0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x6F, 0x00, 0x00, 0x00, 
  0x54, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x5B, 0x00, 
  0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 
  0x22, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x1B, 0x00, 
  0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 
  0x5A, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x6C, 0x00, 
  0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 
  0x42, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x0E, 0x00, 
  0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 
  0x0F, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x09, 0x00, 
  0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 
  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x20, 0x00, 
  0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x6A, 0x00, 0x00, 0x00, 
  0x0F, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x54, 0x00, 
  0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 
  0x6A, 0x00, 0x00, 0x00, 0x1D, 0x00, 0x00, 0x00, 0x30, 0x00, 
  0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 
  0x0B, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0F, 0x00, 
  0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 
  0x0D, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x59, 0x00, 
  0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 
  0x37, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x23, 0x00, 
  0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x2B, 0x00, 0x00, 0x00, 
  0x5F, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x2B, 0x00, 
  0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 
  0x73, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x52, 0x00, 
  0x00, 0x00, 0x4D, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 
  0x72, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x4D, 0x00, 
  0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 
  0x50, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x30, 0x00, 
  0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 
  0x7F, 0x00, 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, 0x53, 0x00, 
  0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 
  0x7C, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x16, 0x00, 
  0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 
  0x06, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x4C, 0x00, 
  0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x2D, 0x00, 0x00, 0x00, 
  0x50, 0x00, 0x00, 0x00, 0x5A, 0x00, 0x00, 0x00, 0x5D, 0x00, 
  0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
  0x43, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x45, 0x00, 
  0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 
  0x3D, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x51, 0x00, 
  0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 
  0x13, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x41, 0x00, 
  0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 
  0x61, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x60, 0x00, 
  0x00, 0x00, 0x0B, 0x00, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x00, 
  0x04, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x66, 0x00, 
  0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 
  0x53, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x7F, 0x00, 
  0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 
  0x0E, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x58, 0x00, 
  0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 
  0x7A, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x4F, 0x00, 
  0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 
  0x78, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x56, 0x00, 
  0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 
  0x74, 0x00, 0x00, 0x00, 0x5D, 0x00, 0x00, 0x00, 0x58, 0x00, 
  0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 
  0x2F, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x53, 0x00, 
  0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 
  0x02, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x27, 0x00, 
  0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, 0x00, 
  0x53, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 0x0D, 0x00, 
  0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 
  0x7E, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x46, 0x00, 
  0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 
  0x0B, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x63, 0x00, 
  0x00, 0x00, 0x4A, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 
  0x60, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x71, 0x00, 
  0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 
  0x5A, 0x00, 0x00, 0x00, 0x6D, 0x00, 0x00, 0x00, 0x25, 0x00, 
  0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 
  0x20, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x24, 0x00, 
  0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x5B, 0x00, 0x00, 0x00, 
  0x5C, 0x00, 0x00, 0x00]
b = "5b09b51379dfd0aa6059028fe2e6e5fa"
c = ""
#  for ( i = 0LL; i != 736; ++i )
# *(v6 + i) = a5b09b51379dfd0[i & 0x1F] ^ byte_3B20[4 * i];
for i in range(736):
    c += chr(ord(b[i & 0x1f]) ^ a[4 * i])

print(c)

得到公钥后,使用RSA1024加密后编码为base64即可得到密码

登录成功后返回如图:

image-20251209212014015

对于易点名来说,重要的信息有两个,分别是access_tokenuser_id

易点名

流程抓包分析

当我们在手机上点击易点名后,易班向另一个域名www.yibanyun.cn /Yiqiandao发送请求,抓取请求如下:

image-20251209212157296

首先,我们的请求被304重定向到了f.yiban.cn,同时被设置了一个PHPSESSID用以标识会话,转到该请求,如下:

image-20251209212717125

注意到这里的headers有多个重要数据,包括登录时返回的access_token,分别在authorizationlogintoken、cookie的loginToken中出现

同时这个请求也将我们重定向到了/iapp/index,如下:

image-20251209212909374

注意到这里请求头部中有signature,代码中定位到如下位置:

image-20251210195245956

其中sign如下:

String sign = xj.a(User.getCurrentUser().getUserId() + '_' + strLoadSession + '_' + System.currentTimeMillis() + '_' + ((int) Math.floor(new Random().nextDouble() * 10000.0d)));

跟踪该加密函数,代码如下:

image-20251210195329617

发现是DES加密,密钥以存储在代码中

继续重定向回了www.yibanyun.cn 下的/Mobile/yiban/index,请求如下:

image-20251209213033959

最终将我们重定向回了最初请求的地址/Yiqiandao,不同的是,相较于初次请求,在Cookies中包含了PHPSESSID

image-20251210192614700

该请求返回的页面会发送请求到/yiqiandao/index/get_scene_list以拉取所有签到,请求如下:

image-20251210192742952

例如:

image-20251210192828221

最终签到请求网址为/yiqiandao/index/sign_save,请求如下:

image-20251210193025631

该POST请求发送的数据如下:

image-20251210193159018

包含了签到场景的id,登录时的user_id,签到的时间,详细地址,经纬度等信息

该请求返回的code为200且msg为空表示签到成功,若签到失败会在msg中给出原因。

脚本

import requests
import base64
from Crypto.Cipher import PKCS1_v1_5 as Cipher_pksc1_v1_5
from Crypto.PublicKey import RSA
from Crypto.Cipher import DES
import time
import random
import datetime

key = b'wxlqhlcb'
def pad(text):
    while len(text) % 8 != 0:
        text += ' '
    return text

def des_encrypt(str):
    global key
    des = DES.new(key, DES.MODE_ECB)
    padded_text = pad(str)
    return base64.b64encode(des.encrypt(padded_text.encode('utf-8')))

public_key = 'MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzq0rgsM++ZxLRGHpdfreHu6UXhdlUS5P2WOxRG14qU8/iWSb/CkOqgOl8AGcOhlthkvolCdpUvVcVsVUxBv0YRN0Jb64zPrn5aLVwQT4RJn5tXvoqLdHIXis7pljXAMDPVZOVlWJkDMk8YU6HDaAMqsD6l5p9lg2LMP4OhMgaPX+CkO370LB5vRjJTHp03n+IqfxXoC7DEd+kxRIEM2CEDgUSYDJBDgwBvGALZmvB/a1b0im9t1P/EmnuE7uN9NRFoWyVpOiEwo/Ti7rmJGfqNT3vvtfWo4nXsm1rYQXsPayoKDSRaba3gFY/1SYWLAuSO2q2da5ZCcsAk5RKy0Vc1hUg8n6y0YLAvuzoXY5VyNMXkhH5Zc5Kg64b5RxILeZpZG0MV7GFY3sw//k7SNgdarKT8A0Iv3l3lfguX3HNi6dkf97kS/EiA0tbkIB/JNjv13mq8HL7LijRt2hkKqPPhQW88xC/exZilU5pAavoZOPuZIOTUHqtpRq4ZeKl+wDf+e5lPYFDpihWGjplGpa4BOSmGeo/SyVFPji9QF4Pk0DRJF/NjwJoAC60xHAVt5Z4gQSOOOjNZDCswA0ry2Le8m5cv5vPGY75uVrGqALQ6Xm961PPc5cJ1q7tmEZMj+z5HE7tgAdhiPI6acKgrAv+1k4N0OVqKamMS+PVpD05hUCAwEAAQ=='

def encrypt(password):
    global public_key
    public_key = '-----BEGIN PUBLIC KEY-----\n' + public_key + '\n-----END PUBLIC KEY-----'
    rsakey = RSA.importKey(public_key)
    cipher = Cipher_pksc1_v1_5.new(rsakey)
    cipher_text = base64.b64encode(cipher.encrypt(password.encode()))
    return cipher_text.decode()


def login():
    data = {'app': '1', 'sig': '*******', 'ct': '2', 
        'password': encrypt('*******'), # 登录密码
        'authCode':'', 'identify': '*******', 'v': "5.1.9", 
        'mobile': '*******', 	# 手机号
        'sversion': '***', 'device': '*****', 'apn': 'wifi', 'token': ''}
    header = {'VersionCode': '3227', 'AppVersion': '5.1.9', 'User-Agent': 'YiBan/5.1.9(3227) Mozilla/5.0 (Linux; *********; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/117.0.0.0 Mobile Safari/537.36',
            'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'm.yiban.cn', 'Accept-Encoding': 'gzip', 'Connection': 'Keep-Alive'}
    r = requests.post('https://m.yiban.cn/api/v4/passport/login', data=data, headers=header)
    j = r.json()
    token = j['data']['access_token']
    userid = j['data']['user']['user_id']
    return [token, userid]


a = login()
token = a[0]
user_id = a[1]
# 请求首页
header = {'Authorization':'Bearer ' + token,'loginToken':token,
          'VersionCode': '3227', 'AppVersion': '5.1.9', 'User-Agent': 'YiBan/5.1.9(3227) Mozilla/5.0 (Linux; ******; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/117.0.0.0 Mobile Safari/537.36',
          'Host': 'm.yiban.cn', 'Accept-Encoding': 'gzip', 'Connection': 'Keep-Alive'}
r = requests.get('https://m.yiban.cn/api/v4/home', headers=header)
j =  r.json()
apps = j['data']['hotApps']
for i in range(len(apps)):
    # 易签到
    if apps[i]['name'].find('\u6613\u70b9\u540d') != -1:
        url = apps[i]['url']
        session = requests.Session()
        header = {'Host': 'www.yibanyun.cn',
                'Connection': 'keep-alive',
                    'sec-ch-ua':'"Android WebView";v="117", "Not;A=Brand";v="8", "Chromium";v="117"',
                    'sec-ch-ua-mobile':'?1',
                    'sec-ch-ua-platform': '"Android"',
                    'Upgrade-Insecure-Requests': '1', 
                    'User-Agent': 'Mozilla/5.0 (Linux; ******; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/117.0.0.0 Mobile Safari/537.36 yiban_android/5.1.9;webank/h5face;webank/2.0',
                'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
                'X-Requested-With': 'com.yiban.app',
                'Sec-Fetch-Site': 'none',
                'Sec-Fetch-Mode': 'navigate',
                    'Sec-Fetch-User': '?1', 
                    'Sec-Fetch-Dest': 'document',
                'Accept-Encoding': 'gzip, deflate, br',
                'Accept-Language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7'
            }
        session.headers.clear()
        session.headers.update(header)
        # WHY????
        r = session.get('https://www.yibanyun.cn/Yiqiandao', params={'sid': '5013'},  verify=False, allow_redirects=False)
        if r.is_redirect:
            url = r.headers['Location']
            sign = des_encrypt(str(user_id) + '_' + token + '_' + str(int(round(time.time() * 1000))) + '_' + str(int(round(random.random() * 10000))))
            #des, key=wxlqhlcb, iv=000000000000000
            header = {'Host': 'f.yiban.cn', 'authorization': 'Bearer ' + token, 'logintoken': token, 'appversion': '5.1.9', 'signature': sign}
            session.headers.update(header)
            session.cookies.update({'loginToken': token, 'client': 'android'})
            r = session.get(url, verify=False, allow_redirects=False)
            if r.is_redirect:
                url = r.headers['Location']
                sign = des_encrypt(str(user_id) + '_' + token + '_' + str(int(round(time.time() * 1000))) + '_' + str(int(round(random.random() * 10000))))
                header = {'Host': 'f.yiban.cn',  'appversion': '5.1.9', 'signature': sign}
                session.headers.update(header)
                r = session.get(url, verify=False, allow_redirects=False)
                if r.is_redirect:
                    url = r.headers['Location']
                    session.headers.pop('appversion')
                    session.headers.pop('signature')
                    session.headers.pop('authorization')
                    session.headers.pop('logintoken')
                    session.headers.update({'Host': 'www.yibanyun.cn'})
                    session.cookies.pop('loginToken')
                    session.cookies.pop('client')
                    r = session.get(url, verify=False, allow_redirects=True)
                    session.headers.update({'Accept': 'application/json', 
                        'X-Requested-With': 'XMLHttpRequest',
                        'Sec-Fetch-Site': 'same-origin', 
                        'Sec-Fetch-Mode': 'cors', 
                        'Sec-Fetch-Dest': 'empty', 
                        'Referer': 'https://www.yibanyun.cn/Yiqiandao?sid=5013'})
                    r = session.get('https://www.yibanyun.cn/yiqiandao/index/get_scene_list?page=1&size=500', verify=False)
                    b = r.json()['scene_list']
                    for i in range(len(b)):
                        if b[i]['name'].find('寝室') != -1:
                                scene_id = b[i]['id']
                                timea = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
                                data = {'submit_obj': '{"uuid":"","scene_id":\"' + str(scene_id) +'\","user_id":\"' + str(user_id) +'\","time":\"' + timea + '\","address":"黑龙江省********","photo":"","sign_in_latLng":{"lat":*******,"lng":*******}}'}
                                b = session.post('https://www.yibanyun.cn/yiqiandao/index/sign_save?_=' +str(int(round(time.time() * 1000))) , verify=False, data=data)

写的很烂,仅做流程验证用途,部分信息已抹去,需要自行填充