好久没有写爬虫文章了,今晚上得空看了一下陆金所登录密码加密,这个网站js加密代码不难,适合练手,篇幅有限,完整js代码我放在了这里从今天开始种树,不废话,直接开整。

前戏热身

打开陆金所网站,点击到登陆界面,长这样:



按F12打开工具,再登录随便输入一个号码和密码,点击登录按钮,查看发送的请求:



一共有3个,从请求名称上也看的出来哪个是登录请求(看不出来的话一个一个点击),拉下来,看看提交的FormData:



我输的密码是123,可以看出来这里把password加密了,既然加密了那我们就去js文件里找找加密方法呗。

激战开始

切换到Sources,按下图点击search



出现搜索框:



都知道要搜哪个关键字吧,搜索关键词无非就是FormData里有的或者encrypt之类的,当我们搜索password就出现了诸多js文件,仔细筛选,基本能通过js文件名进行猜测了,比如下图中的这个文件已经指明了login,点击红框中这个js文件。



打开了上图中的js文件,如下图继续搜索password



如上图,这个文件一共有6处password,只有上图红框中的最像加密代码,这里把搜索到的js代码摘出来,大家可以仔细查看一下:

 rsaChg: function() {
if ($("#pwd").val()) {
var e = new RSAKey;
e.setPublic($("#publicKey").val(), $("#rsaExponent").val());
var a = e.encrypt($("#pwd").val());
$("#password").val(a),
$("#pwd").val("************")
}
},

到这里基本就确定加密方法就是encrypt,那就开始调试了,在91行这里打个断点。



老办法,在登录界面输入手机号和错误的密码,点击登录后就会跳转到91行断点这里,如下图。



点击下图中按钮跳到下一步,应该会跳转到setPublic函数中:

setPublic进行了一番设置,这里的。



这里的这两个值是固定的,后面扣js代码的时候直接写死即可。

 var t = "BE24E372DC1B329633A6A014A7C02797915E3C363DD6EE119377BD645329B7E6446B4A71AC5F878EBC870C6D8BFD3C06B92E6C6E93390B34192A7A9E430800091761473FAC2CC0A68A828B2589A8CB729C19161E8E27F4C0F3CDE9701FAFE48D2B65947799072AFA6A3F2D7BDBEF8B6D7429C2D115A3E5F723467D57B3AC6967"
var i = "10001"

一路狂点下一步,直到进入encrypt中,其实是进入了RSAEncrypt,不过这两个函数是等价的,



上图中我一共标了3个数字代表RSAEncrypt需要调用的三个函数,用函数名在这个js文件里搜索一下,只要将这三个函数里涉及的小函数都扣出来就可以组成一个js文件了:

函数一:pkcs1pad2是关于密码处理的。

function pkcs1pad2(t, e) {
if (e < t.length + 2)
return alert("密码太长!"),
null;
var r = new Array
, n = t.length - 1
, i = t.length;
if (!(i < 100))
return alert("密码太长!"),
null;
r[0] = 48 + i / 10,
r[1] = 48 + i % 10;
var o = 2;
for (n = 0; n < i && e > 0; )
r[o++] = t.charCodeAt(n++);
for (var a = new SecureRandom, s = new Array; o < e; ) {
for (s[0] = 0; 0 == s[0]; )
a.nextBytes(s);
r[o++] = s[0]
}
return new BigInteger(r)
}

函数2:bnBitLength

function bnBitLength() {
return this.t <= 0 ? 0 : this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM)
}

函数3:doPublic等于RSADoPublic,所以找到RSADoPublic,可以看出encrypt也是等于RSAEncrypt的,所以刚才我才说这两个是等价的。

RSAKey.prototype.doPublic = RSADoPublic,
RSAKey.prototype.setPublic = RSASetPublic,
RSAKey.prototype.encrypt = RSAEncrypt;

这是RSADoPublic

function RSADoPublic(t) {
return t.modPowInt(this.e, this.n)
}

继续调试encrypt,返回的n其实就是加密结果。



得到了一串加密数据。



Network里看看:



如果你是一步一步调试的到这里,其实已经可以把涉及到的代码摘出来放一个js文件里了,需要注意的是代码中难免出现windownavigator,有一个取巧的办法就是将其设置为如下方式:

 window = this;
navigator={}
....
//篇幅有限,省略了
....
//自写的加密函数
function pwd(password) {
var e = new RSAKey;
var t = "BE24E372DC1B329633A6A014A7C02797915E3C363DD6EE119377BD645329B7E6446B4A71AC5F878EBC870C6D8BFD3C06B92E6C6E93390B34192A7A9E430800091761473FAC2CC0A68A828B2589A8CB729C19161E8E27F4C0F3CDE9701FAFE48D2B65947799072AFA6A3F2D7BDBEF8B6D7429C2D115A3E5F723467D57B3AC6967"
var i = "10001"
e.setPublic(t,i)
var a = e.encrypt(password);
return a }

python调用

这里需要引入execjs,安装方法上一篇爬虫文章里提过了。

import execjs

with open('..//js//lujinsuo.js', encoding='utf-8') as f:
lujinsuo= f.read()
js = execjs.compile(lujinsuo)
logid = js.call('pwd', "123456")
print(logid)

运行如下,

结束

本文只是介绍了其中password加密的方式,此网站比较简单,适合初学js逆向入手,更多内容请访问从今天开始种树,关注下面的公众号,当然不关注也无所谓。

兄弟,别再爬妹子图了整点JS逆向吧--陆金所密码加密破解的更多相关文章

  1. Python3爬虫系列:理论+实验+爬取妹子图实战

    Github: https://github.com/wangy8961/python3-concurrency-pics-02 ,欢迎star 爬虫系列: (1) 理论 Python3爬虫系列01 ...

  2. Python协程爬取妹子图(内有福利,你懂得~)

    项目说明: 1.项目介绍   本项目使用Python提供的协程+scrapy中的选择器的使用(相当好用)实现爬取妹子图的(福利图)图片,这个学会了,某榴什么的.pow(2, 10)是吧! 2.用到的知 ...

  3. Python爬虫入门教程 2-100 妹子图网站爬取

    妹子图网站爬取---前言 从今天开始就要撸起袖子,直接写Python爬虫了,学习语言最好的办法就是有目的的进行,所以,接下来我将用10+篇的博客,写爬图片这一件事情.希望可以做好. 为了写好爬虫,我们 ...

  4. Python Scrapy 爬取煎蛋网妹子图实例(一)

    前面介绍了爬虫框架的一个实例,那个比较简单,这里在介绍一个实例 爬取 煎蛋网 妹子图,遗憾的是 上周煎蛋网还有妹子图了,但是这周妹子图变成了 随手拍, 不过没关系,我们爬图的目的是为了加强实战应用,管 ...

  5. 妹子图爬取__RE__BS4

    妹子图爬取 页面链接 感谢崔大佬: 原文链接 正则实现代码: import requests import re import os import random class mzitu(): def ...

  6. python爬取妹子图全站全部图片-可自行添加-线程-进程爬取,图片去重

    from bs4 import BeautifulSoupimport sys,os,requests,pymongo,timefrom lxml import etreedef get_fenlei ...

  7. Scrapy框架实战-妹子图爬虫

    Scrapy这个成熟的爬虫框架,用起来之后发现并没有想象中的那么难.即便是在一些小型的项目上,用scrapy甚至比用requests.urllib.urllib2更方便,简单,效率也更高.废话不多说, ...

  8. Python-爬取妹子图(单线程和多线程版本)

    一.参考文章 Python爬虫之——爬取妹子图片 上述文章中的代码讲述的非常清楚,我的基本能思路也是这样,本篇文章中的代码仅仅做了一些异常处理和一些日志显示优化工作,写此文章主要是当做笔记,方便以后查 ...

  9. [Python爬虫]煎蛋网OOXX妹子图爬虫(1)——解密图片地址

    之前在鱼C论坛的时候,看到很多人都在用Python写爬虫爬煎蛋网的妹子图,当时我也写过,爬了很多的妹子图片.后来煎蛋网把妹子图的网页改进了,对图片的地址进行了加密,所以论坛里面的人经常有人问怎么请求的 ...

随机推荐

  1. Android蓝牙读取短信调研

    对“直接通过蓝牙来获取连接手机的短信信息”这个需求做了一些技术调研,如下是调研过程中的一些记录. 1.无法得到BluetoothMasClient类 在文章https://blog.csdn.net/ ...

  2. Python修改元组

    Python修改元组:元组中的元素值是不允许修改的,当创建好的时候就是固定不变的.所谓的修改其实是指创建一个新的元组,只是该元组可能是比原来的元组多一个元素或者少一个元素,然后使用新创建好的元组代替原 ...

  3. three.js之初探骨骼动画

    今后的几篇郭先生主要说说three.js骨骼动画.three.js骨骼动画十分有意思,但是对于初学者来说,学起来要稍微困难一些,官方文档比较少,网上除了用圆柱体的例子就是引用外部模型的,想要熟练使用骨 ...

  4. SpringClould进行Devtools热部署

    当我们在使用SpringCloud搭建项目的时候,会有多个项目,每次修改东西的时候,都需要重新启动项目,这样的操作就比较繁琐. 为了提高工作的效率,避免每次频繁的重启项目,在子类pom文件中,我们可以 ...

  5. 初学编程丨从零开始学习编程的基本路线,BAT程序员亲手总结!

    编程并不是说代码怎么写,框架怎么用,业务怎么转换为代码逻辑,这些都不是编程的要素(但却是工作的刚需......).我认为按照下面这个路线来学习编程,会使自己在学习的路途上少去很多问题(比如为啥会有多线 ...

  6. CF724C Ray Tracing 扩展欧几里得 平面展开

    LINK:Ray Tracing 虚这道题很久了 模拟赛考了一个加强版的 瞬间就想到了这道简化版的. 考虑做法 暴力模拟可能可以 官方正解好像就是这个. 不过遇到这种平面问题可以考虑把平面给无限的展开 ...

  7. CSMA/CD协议(载波侦听多路访问/碰撞检测) 最小帧长理解

    以下的帧长有的是指帧的时间长度,帧的时间长度=  帧长/传输时延

  8. Ef Core增加Sql方法

    [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method)] public class DbFunAttribute : Attri ...

  9. Mybatis 的连接池技术

    我们在前面的 WEB 课程中也学习过类似的连接池技术,而在 Mybatis 中也有连接池技术,但是它采用的是自 己的连接池技术.在 Mybatis 的 SqlMapConfig.xml 配置文件中,通 ...

  10. odoo13之给模块添加自定义配置项

    配置项效果图 odoo中给系统添加配置项有两种方式, 一种是使用odoo自带的设置,在设置中添加配置项:效果如下图, 第二种是在模块中自定义一个配置项管理菜单,在菜单form视图下添加配置项:效果如下 ...