风云令版本 1.6.0 (当前最新版本高于1.6.0)
初始化
1. 初始化一对公私钥
2. 访问 http://otp.aliyun.com/cltsvr/init?dk=867064012051759&ot=android&ov=4.1.1&rn=0&ver=1.6.0
其中 dk 是client端预先生成的一对公私钥的公钥部分,用于服务器端加密信息
返回值:
1 2 3 4 5 6 |
{ "code": 0, "desc": "success", "sdata": "6A4B582249C63F11CD9D4A349D820E129D916BDF030C1560E5217A23E87AEEBD81E724BF00FD6978FC1B9ACFA40BAE2A15E73DAEA7966623549D9DE76C1C1C39455D739546C13F574F5F60211F4D24FCDBA164EA40FB5F5FF3872C27490BB974865E911C91A86BF017CF3304F1AC096BDB69428A7D168328F223630FA1D4B3792014DF65F45C7555B3D44D3870635DE1798DF9AF60815130373D53DAF506104905FE911EBC233CFCDA489524D48A0BCE8A7F14F4C3FDACFF86A9F19AA8A17125BAEFF8ABD52F737E40D71246B69BD6918EEC1D862579E470D1BAEB916DF4274056A258E269CAD863C8592CCDBDA200A5CA883A7A35168CEA74449C904D1F3EE2", "svrtm": "1434256821" } |
其中: sdata就是服务器使用client端的公钥加密后的信息; svrtm: 是服务器端时间,用于能和client端时间同步
3. 解密sdata:
该解密可能是普通的非对称解密(有可能不是),反编译不出来
4. sdata解密后的数据
sdata解密后先做一次urldecode,得到的是json格式的数据,包含如下内容:
1 2 3 4 5 |
paramDkBase.setSession_key(localJSONObject2.getString("ssnkey")); paramDkBase.setBid(localJSONObject2.getString("bid")); paramDkBase.setTmkey(Long.parseLong(localJSONObject2.getString("tmkey"))); paramDkBase.setSerial_id(localJSONObject2.getString("sn")); paramDkBase.setRn(Integer.parseInt(localJSONObject2.getString("rn"))); |
5. 稍后再看sdata中的各项数据是如何使用的
(看似 sdata是用服务器端的私钥加密的,然后用预埋在client里面的server的公钥来解密; 只是这样的逻辑太傻了吧。。。,不过尝试用该过程来解密sdata却没有成功)
校准时间
http://otp.aliyun.com/cltsvr/sync?sn=23579425AAM735A6&otp=947668&rn=0
其中:
sn: 序列号
otp: 当前的动态密码
返回值:
1 2 3 4 5 6 |
{ "code": 0, "desc": "success", "sdata": "84B6C9E5401820FA77E557C8072FF323FD4C01DC1DF21E7640698BC43277ECE5D42302EF513D34D4D2E532868AC412ED0E6753B91C7B3E9ABE4A58D70B3BA1F46BD11DC1D197BA527AE82BC2A2776E01FDC380F4012BC0D56141328D11D29341D491C858E004619B8F13DDDAC322DC873FEFA69A89433835B4F9A5B77BF9550E56B6DCFF2A20EA431EF9DCB681753B495C5CFA0A1ED180363B81A6278F9F43FEC8262C3BF2D29C6CDDE33CE828A209E5243957304776FA4E1F6D105B38E69231BAAED13A3FBB742A8DEC4EB989F44A837B21DC4109D07FE1238064682E617381414AD07554F7C3D9DA40C8364E5495C52D18A633F2B6FE1B7BA7BB51A4E7F957", "svrtm": "1434301701" } |
查看绑定的账号:
http://otp.aliyun.com/cltsvr/qrypst?sn=23579425AAM735A6&otp=974831
返回值:
1 2 3 4 5 6 |
{ "code": 0, "desc": "success", "list": [], "total": 0 } |
卸载后重新安装:
init 的请求参数完全一样:说明client端的公私钥是写死的,没有临时生成
返回结果不同,序列号也不同:说明随机号中有随机成分(当然也要避免序列号重复)
serviceRsa类中有一些decod是在处理client的privatekey,这部分反编译不出来,比较麻烦