赞
踩
点击上方↑↑↑蓝字[协议分析与还原]关注我们
“ 介绍连信会话加密密钥的协商过程。”
公号内之前已经对协议的框架和协议内的数据格式进行了介绍,有需要可以回顾下:
本文对连信的会话加密密钥协商过程进行介绍。
连信使用过程中,包括长连接和短链接内的数据,均使用AES CBC加密,而加密的密钥key和向量iv,则是在登录即打开APP时进行协商,从服务器下发。
连信登录过程分为两种,第一种为之前在当前手机上没有登录过,使用手机号进行登录,第二种为在当前手机上已经登录,保存有验证信息。
01
—
auth_login登录
第一种在验证码之后,使用账号进行登录验证,iphone版使用的url是:
https://short.lianxinapp.com/webuic/auth/v13/auth_login.json
报文类似这样:
请求部分的Content-Encrypted-ZX的值为1表示请求体加密,Content-CKey-Version表示RSA加密密钥的版本,Content-CKey内的内容为RSA加密的AES ECB密钥,请求体使用这个key加密。
请求体内的内容如下:
- dfp={
- "teamid":"",
- "isJailbreaking":False,
- "channel":channel,#"appstore",
- "simulator":"0",
- "dylib":"",
- "bundleid":bundleid,#"com.zenmen.palmchat",
- "resolution":resolution,#"640-1136",
- "ip":localip#"192.167.2.88"
- }
- dfpstr=json.dumps(dfp)
-
-
- payload={
- 'channelId':channel,#'appstore',
- 'idfa': idfa,
- 'sdid':sdid,
- 'deviceId': dhid,
- 'hashKey': hashKey,
- 'appList':'{}',
- 'platform': Resource,#'iphone',
- 'versionCode':vcode,#'200404',
- "did": dhid,
- "idfv": idfv,
- "authKey": authKey,
- "dfp":dfpstr
- }
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png)
Content-CKey内数据的RSA加密密钥根据Content-CKey-Version版本值不同而不同,其中一个版本为:
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDhCalnroo3exCtNnDnk66dCGCiq/WVjYdwmlyPCubzRBD+0MZbQUpaZzWqguQ1XAxgFai/Qod+L0ALS7UptvXhCHxAY+Wh6mco876S9RDpMUcZvj0Ma1UK0o/StNvrJOOyZWRWQhXir/T93rkavKVu/VJqJFFOcq4sz9WqhjeDOwIDAQAB
当然,url内的版本vxx的值在RSA密钥不同时也有差异。
响应体解密后内容包括一些服务器上的信息和后续加密用的key和iv:
"{\n \"resultCode\":0,\n \"data\":{\n \"uid\":\"490xxx92\",\n \"skey\":\"kp1bppYcF1yA0W6Z\",\n \"iv\":\"B5le192ZOPZZ2chq\",\n \"sessionId\":\"34daxxx7e56b10fca16993\",\n \t\"refreshKey\":\"iMvq3kwJXbQh0Wlt\",\n \"account\":\"\",\n \t\"nickname\":\"\u53e4\u53e4\u602a\u602a\",\n \t\"pyInitial\":\"GGGG\",\n \t\"pyQuanPin\":\"GuGuGuaiGuai\",\n \"headImgUrl\":\"https://avatar.cdn.lianxinapp.com/avatar2/u/c/2020/5/1/e/a/1cbc07gefxxx7a63205f38f-q9nbqj.crop\",\n \"headIconUrl\":\"https://avatar.cdn.lianxinapp.com/avatar2/u/c/2020/5/1/e/a/1cbc0xxx5af48e08f9357a63205f38f-q9nbqj_small.crop\",\n \t\"signature\":\"\u5f53\u7136\",\n \"ic\":\"1\",\n \"privacyConfig\":\"0\",\n \"phone\":\"438xxxx4\",\n \"sex\":0,\n \"country\":\"\",\n \"province\":\"\",\n \"city\":\"\",\n \"birthday\":\"\",\n \t\"age\":0,\n\t \"hobby\":\"\",\n \"email\":\"\",\n \"syncKey\":\"1\",\n \"version\":\"17030009\",\n \"newUser\":1,\n \"hintStyle\":0,\n \"showUserStyle\":0,\n \"exid\":\"V1qYdxxx-jn8gv\"\n }\n}"
02
—
token登录
第二种在每次打开APP时进行登录验证,iphone版使用的url是:
https://short.lianxinapp.com/token/v10/ak
报文类似这样:
和auth_login登录一样,请求部分的Content-Encrypted-ZX的值为1表示请求体加密,Content-CKey-Version表示RSA加密密钥的版本,Content-CKey内的内容为RSA加密的AES ECB密钥,请求体使用这个key加密。
请求体内的内容如下:
- payload={
- 'ckey':aesecbkey,
- 'sessionId': sessionId,
- 'sdid':sdid,
- 'refreshKey': refreshKey
- }
Content-CKey内数据的RSA加密密钥与auth_login相同。
url内的版本vxx的值在RSA密钥不同时也有差异。
响应体解密后内容包括后续加密用的key和iv:
"{\"key\":\"LlGQmBfQurP1X13p\",\"iv\":\"uJt76oWLOlrvKV7z\",\"sync\":0,\"exid\":\"5d1kNyyPPxxxx1-JgG55\",\"resultCode\":0}"
这个过程相当于更新了一次key和iv,后续的数据加密均使用这对key和iv进行。
03
—
结束
密钥的协商过程就这样子,关键是找到RSA公钥,文中的公钥是连信ios版内的测试版公钥,为避免麻烦,它的正式公钥就不放了。
别忘点“在看”、“赞”和“分享”
新的规则,及时收推文要先给公号星标
别忘了星标一下,不然就错过了
长按进行关注,时刻进行交流。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。