京东post登陆参数js分析,密码加密的RSA加密实现

JavaScript028

京东post登陆参数js分析,密码加密的RSA加密实现,第1张

老规矩先用错误信息登陆一下抓一下包,看看有那些post字段:

大概我们就知道我们要分析的字段有nloginpwd其余字段还不清楚,就在上下在看看其他数据包,根据pubkey我们猜测加密方式大概是RSA,继续查看其他数据包,找到一个有价值的get包

信息是:

没有发现明确的关键字,但是可以猜想bg、challenge、patch应该和我们的加密参数相关,但是不确定,只有继续分析加密的js片段:

其中好几个字段都是$("#??")格式,这种表示是来自页面的,那在看看网页源码

果然发现了很多有价值的东西在post表单中的,其中只有两个参数是需要单独获取的,其余都是从html源码里面解析出来的

authcode来源

是获取的源码中的一个值,再看源码

看样子是在验证码操作的时候触发的一个请求,返回的authcode的值,查看authcode请求的数据包

这个请求看起来不是那么友好,有好几个疑似加密字段,这个参数暂时放放,继续分析我们的passWord的加密。

继续深入getEntryptPwd($('#nloginpwd').val()),查看源码

核心的就两行

encrypt.setPublicKey(pubKey)return encrypt.encrypt(pwd)这必定是RSA加密无疑了,继续查看源码,单独的一个源码文件,一共3300多行,删减版如下

JSEncrypt是前端使用的实现RSA加密的库,看样子应该比较标准,那就试试能不能改写了,复制全部源码到node.js,会提示navigator、window未定义,这个问题很简单,在文件头定义

var navigator = this

var window = this

然后在文件尾部写个调用程序试试

是可以成功返回RSA加密结果的

京东的post请求不是太难,参数也能在源码中找到,但是他的难度在发出post请求之前的一个get请求,这个get请求和验证有关,和用户名相关,简单看了一下感觉有点复杂,留在第二篇讲获取authcode参数的其他参数是怎么来的。

ID:Python之战

|作|者|公(zhong)号:python之战

专注Python,专注于网络爬虫、RPA的学习-践行-总结

喜欢研究和分享技术瓶颈,欢迎关注

独学而无友,则孤陋而寡闻!

我们是不是经常看到WD1600JS,WD1600JB,WD1600JD,一般西数的是这样,希捷或者其它牌子的的又不一样的,第一个在台式机硬盘上应用8M缓存技术的硬盘制造商,西部数据的硬盘产品主要分为Caviar(鱼子酱)和Protégé两大系列。在市场上最常见到的就是Caviar(鱼子酱)系列硬盘了,从它的型号尾上代号上就很好区分。

EB,转速是5400 rpm的Protege系列硬盘

AB则是主流版本,代表5400RPM的Ultra ATA 100

BB是高性能版,代表7200rpm的Ultra ATA100

JB是特别版,代表7200rpm并且具有8MB缓存

AD代表7200rpm的Ultra ATA150

那这最后的JS,JB,JD 分别是什么意思呢?

现以一串口硬盘WD1200JB-OOCRAO为例说明:

WD=Westem Digital(西部数据)

1200=容量(120GB)

J=转速/特殊产品:A=5400RPM;B=7200RPM;J=7200RPM/8MB

B=接口:A=Ultra ATA-66;B=Ultra ATA-100;C=FireWire(IEEE1394);W=AV(影音专用硬盘)

00=客户标识:00=普通产品,即零售版本,其他数字则对应了某一OEM整机厂商

CA=家族代码:与单碟容量相对应,不同系列有不同的代码

AO=客户配置代码:等同于硬盘Firmware的版本号

刚刚去测试了一下,利用ajax的jsonp(跨域)的时候卡在了一个异常上:Uncaught SyntaxError: Unexpected token :。

这个异常是jd在对于ajax的跨域请求时没有对callback进行处理。所以无法让js获取到正确的json数据。

解决方案(php为例):用curl进行获取,也就是用后端做一次转发操作。jd官方也提供php的SDK。以下是我的jq的ajax代码 仅供参考。

$.ajax({

    url:'https://way.jd.com/showapi/address',

    data: {

        area:'鹿城',

        areaid:'101210710',

        needMoreDay:'0',

        needIndex:'0',

        needAlarm:'0',

        need3HourForcast:'0',

        appkey:'你申请的appkey',

        ajax:1

    },

    type: "GET",

    async:false,

    dataType : "jsonp",

    jsonp:'callback',

    jsonpCallback:"jdwx",//jd返回json未对这个做处理导致js无法获取json

    success: function (json) {

        console.log(json)

    },

    error: function (msg) {

       console.log(msg)

    },

    timeout:3000

})