易班v5.1.9 登录及易点名分析
前言
站在巨人的肩膀上
工具:算法助手、反射大师、Charles
脱壳
使用反射大师dump dex文件
登录协议
Charles抓包,抓到的登录数据如下:
ct, app, token, authCode
搜索关键词,找到如下处:
可以看到ct、app、token、authCode是固定的
sig
sig的生成逻辑如下:
一个简单的设备标识生成
identity
identity则是调用了友盟+的设备Oaid获取
password
密码的RSA加密如下:
可以看到,公钥是从JNI层获取的,相关代码如下:
主要做了一个签名校验,如果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即可得到密码
登录成功后返回如图:
对于易点名来说,重要的信息有两个,分别是access_token和user_id
易点名
流程抓包分析
当我们在手机上点击易点名后,易班向另一个域名www.yibanyun.cn 的/Yiqiandao发送请求,抓取请求如下:
首先,我们的请求被304重定向到了f.yiban.cn,同时被设置了一个PHPSESSID用以标识会话,转到该请求,如下:
注意到这里的headers有多个重要数据,包括登录时返回的access_token,分别在authorization、logintoken、cookie的loginToken中出现
同时这个请求也将我们重定向到了/iapp/index,如下:
注意到这里请求头部中有signature,代码中定位到如下位置:
其中sign如下:
String sign = xj.a(User.getCurrentUser().getUserId() + '_' + strLoadSession + '_' + System.currentTimeMillis() + '_' + ((int) Math.floor(new Random().nextDouble() * 10000.0d)));
跟踪该加密函数,代码如下:
发现是DES加密,密钥以存储在代码中
继续重定向回了www.yibanyun.cn 下的/Mobile/yiban/index,请求如下:
最终将我们重定向回了最初请求的地址/Yiqiandao,不同的是,相较于初次请求,在Cookies中包含了PHPSESSID
该请求返回的页面会发送请求到/yiqiandao/index/get_scene_list以拉取所有签到,请求如下:
例如:
最终签到请求网址为/yiqiandao/index/sign_save,请求如下:
该POST请求发送的数据如下:
包含了签到场景的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)
写的很烂,仅做流程验证用途,部分信息已抹去,需要自行填充

















