分析某移动请求加密方式

本帖最后由 laodan 于 2019-8-30 10:06 编辑

注:此加密方式并非和10086.cn加密方式相同,仅提供思路学习。

地址:https://ngcs.cmcc-cs.cn:29090/ha/dist/module/bandOrder.html#/

界面如下:

没有什么功能可以说的,只是通过手机号检测是否可以安装宽带的一个API接口。
去年的时候这个接口还可以进行任意的手机号套餐及姓名首字母查询。发到吾爱之后秒失效。

输入手机号,自动弹出是否已经安装了宽带或者符合条件。

浏览器F11,进行抓取请求包。

得到URL:

https://ngcs.cmcc-cs.cn:29090/ha/api//busimngFront/broadbandNumFilter/checkPhone

请求:

{"phoneNum":"bWR4N2VMR2lvV054cm5XWEhJTXpmZ21zczJERzViQ3lYNlBmZ0xXWEVOUnVncE5ncDJuMEs0MEpFQWZmSk1XTWFDNERnbUcvYkduNitONFJkdkZWMDVQWDdHcDVYcFB6UjY0bjd2T1hKaE9iT1ZLSGg4S0lsbWpYblR1MXBGbEU5SDlzUzd3dUlmdzBqTTZKREJwU1Ztbkp4eVZKWDNYZkoyYWlveTFPRzkwPQ=="}

确定请求里面是手机号的加密格式,第一眼看上去为base64编码方式。但通过手机号进行编码转换长度不够。

那么有可能是先进行了加密然后通过base64二次编码。

找关键字

通过JS文件查找关键字,对JS代码进行查询。

关键字嘛,可以以phoneNum或者checkPhone进行。一个是请求中的json数据,一个是请求Url中的数据。

右键查看源文件,找到所有的JS文件,CTRL+F搜索关键字。

phoneNum关键字有点多,换下一个。

寻找到了五个结果,看此处应该就是我们需要找的,看到了ajax post请求。

复制全部代码,进行JS格式化。

[JavaScript] 纯文本查看 复制代码

var e = document.getElementById("handleNum").value;   //获得元素handleNum的值,就是手机号,并转到变量e中
if ("" != e && 11 == e.length) {                      //判断e的长度,是否为11位。11位是手机号嘛。
    var t = new JSEncrypt,                             //创建对象。
    n = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCrFbqMVDuNE3mpySKGtjgC3Aha4HXxTZBcaia3jL2dKLl+H+1rHr6tsqIamhtai4LGTcD9mp1QMPyMF+p5ElxSJ8Q1oqPKS29Cu6pAIGsWNS1wVvw0ogdK2qF8ttf8yEC4fH8luYvPVkVNHYs8n/tQ5qPNjHxTGOSORgItRtBBWQIDAQAB";
    //变量n值
    t.setPublicKey(n);  //设定公钥值为n
    var r = A.Base64.encode(t.encrypt(e));  //r变量就是加密后的编码,在这个地方可以看到先是经过了一次rsa加密,rsa的公钥为变量n。而后又经过了一次base64的编码。才是正确的内容。
//为什么会知道先是经过了rsa加密呢?先不说这一处中的代码函数中所显示的rsa加密,而且源代码中还调用了一个JS文件,jsencrypt.min.js,通过此JS文件可以判断出为RSA加密方式。
    fetch("/ha/api//busimngFront/broadbandNumFilter/checkPhone", {
        method: "POST",
        headers: {
            Accept: "application/json",
            "Content-Type": "application/json"
        },
        body: JSON.stringify({
            phoneNum: r    //请求中,json中的r就是加密后的内容。这就清楚了。
r         })

那么这个原理就清楚了。

测试

添加上文的中公钥,输入待加密的字符,加密得

p2J3g2LMXU+4jNfkgmobJ+CaYbiCVk+zf8ALEIKVRXkhVlSK1m2NKAAYOZDgUNMYl7ufdnzsxOPxqnZxl87IoeIgTeU2nqPqUff3tW1Un6MvyLT6bnZVjE9lOAdm4NoSwomoXTn5ScLK0+YbbvgyMCLSFtmMWgxm69enPVaKRC0=

再进行base64的编码得:

cDJKM2cyTE1YVSs0ak5ma2dtb2JKK0NhWWJpQ1ZrK3pmOEFMRUlLVlJYa2hWbFNLMW0yTktBQVlPWkRnVU5NWWw3dWZkbnpzeE9QeHFuWnhsODdJb2VJZ1RlVTJucVBxVWZmM3RXMVVuNk12eUxUNmJuWlZqRTlsT0FkbTROb1N3b21vWFRuNVNjTEswK1liYnZneU1DTFNGdG1NV2d4bTY5ZW5QVmFLUkMwPQ==

用精易助手测试一下

成功返回数据,至于功能嘛,没卵用,可以看河南省任何一个的手机号是否符合宽带的办理条件。

快升级了。

THE END
喜欢就支持以下吧
点赞0
分享
评论 抢沙发
  • 管埋员

    昵称

  • 取消
    昵称