大概我们就知道我们要分析的字段有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
})