aHR0cHM6Ly9tYmFuay5qamViYW5rLmNuL2pqY2NiV2ViL2luZGV4Lmh0bWwjL2ZpbmFuY2lhbE1hbmFnZS9saXN0P2ZpcnN0RmxhZz0zJnNlY29uZEZsYWc9JnNvcnRGbGFnPSZwcmRUeXBlRmxhZz0mY2xhc3NpZnlMaXN0VmFsdWU9JlBkQXJyYXlWYWx1ZT0mY2xhc3N0b3A9dHJ1ZQ==
包分析
抓包看到的四个api的请求url皆为https://mbank.jjebank.cn/api
请求由请求头中的Operation-Type
控制来返回不同的数据
第一个请求返回的是秘钥:Operation-Type: com.ifp.web.getKeys
第二个请求返回的是时间:Operation-Type: com.ifp.common.getSystemTime
(暂未发现有什么用)
第三个请求返回的是自营/代销的标签:Operation-Type: com.ifp.finance.caChlDxTaInfoQry
第四个请求返回的是列表数据:Operation-Type: com.ifp.finance.caChlAllProductFastQry
秘钥也可以由console.log的日志打印获取,数据相同,暂时没有看到有变化
{"reqPub": "04826c127e6ceef2a9e0fd90aec74c7cbf03bc7b8faefb8da5a44d2be991ef4c68a6d627325f0fbb0637fc4a90191c582e635cab2c76a67fcf9f7b437516be633d","key4": "6a3384d668faa83b637c345da0c3af20","rspPri": "072abe909728779c1b5b741d61ba7bcdf06881c559fc24f5344bfaa38a632c4f"
}
请求加密逻辑:
g是sm2
、_是sm4
、y是sm3
sm2可以用js中的require('sm-crypto').sm2;
(加密后的长度与请求数据的长度不一样,但仍然可以返回数据)
sm3,sm4
可以用gmssl库中的sm3,sm4
publicKey
就是reqPub
privateKey
就是rspPri
c可以拿一次生成好的固定写死
数据解密逻辑:
t.data.SecKey
就是reponse
中返回的SecKey
privateKey
就是rspPri
t.data.SecData
就是reponse
中返回的SecData
解密后到的i就是需要的数据