python爬虫之js逆向入门篇_这个爬虫JS逆向加密任务,你还不来试试?逆向入门级,适合一定爬虫基础的人...

友情提示:在博客园更新比较慢,有兴趣的关注知识图谱与大数据公众号吧。这次选择苏宁易购登录密码加密,如能调试出来代表你具备了一定的JS逆向能力,初学者建议跟着内容调试一波,尽量独自将JS代码抠出来,实在抠不出来参考这里从今天开始种树。

传送门

前言

最近都在研究一些网站的登录密码加密JS代码,都比较简单,非常适合有一定爬虫基础准备进阶的童靴,只有这些做好了下一步才能开始着手滑块验证码这个大坑,废话不多说,直接开整。

准备

打开苏宁易购登录网址点这里:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center

是不是一阵熟悉的赶脚。老规矩,输入错误的账号密码点击登录,看看提交链接:

20200819200249139.png#pic_center

可以看出登录账号密码被提交到了https://passport.suning.com/ids/login,看看FormData数据:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center

本篇文章只获取password2的加密方法,其它的参数暂时不管。

调试

搜索

调试的前提是先找到关键字在哪个位置,这里提供了两种寻找方法:

方法一:调用栈方式

即在调用栈中点击JS文件链接进去,可以通过函数名大概做一个判断再点击,如下图其实就选择了位置可能比较正确的函数loginSubmit:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center

点击进去后其实就靠经验判断一下,我往下拉了一小点就发现带有encrypt、pwd2的函数出现,那基本就断定这就是要找的加密方法:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center

方法二:直接搜索方式

这是我们常用的方法,先搜到包含关键字的文件,再从文件中搜到关键字的位置,这次比较幸运,只有一个文件包含password2,并且这个文件里只有一个password2,找到的代码其实与上面方法找到的一样:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center

至于使用哪种方式全凭个人习惯,没有好坏之分。

断点

调试开始前得先上个断点,我是再1484位置下的,下好断点就要激活断点(即输入账号密码),如下所示:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center

一步一步运行看看,首先进入了这里,看起来像设置公钥前的准备:

20200819202044731.png#pic_center

点击这个按钮直接进入设置公钥函数。即encrypt.setPublicKey(loginPBK):

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center

产生公钥,需要提的是这个公钥是固定的,一会直接复制给loginPBK:

20200819202324713.png#pic_center

继续运行:

20200819202532715.png#pic_center

又有了一个encrypt函数:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center

原来是一个叫al的函数赋给它的。这个函数返回的结果就是加密后的密码。那该怎么扣这个代码呢,有一个关键点就是var encrypt = new JSEncrypt();,去这个文件里搜一搜JSEncrypt。

20200819203101610.png#pic_center

等于 JSEncryptExports.JSEncrypt;,那一直复制到前面JSEncryptExports开始的地方一个可以了。

python调用

又来到了python调用的环节,老代码又来了:

import execjs

with open('..//js//suningyigou.js', encoding='utf-8') as f:

suningyigou= f.read()

js = execjs.compile(suningyigou)

logid = js.call('get_pwd', "123456")

print(logid)

结果:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center

结束

到这里今天的苏宁易购密码加密扣JS的环节就结束了,强烈建议您练上一遍,有哪里不懂的可以在评论区留言。关注下面的公众号,获取更多内容,当然不关注也无所谓。完整代码请访问从今天开始种树。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1b2h1YTEzOTUw,size_16,color_FFFFFF,t_70#pic_center

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值