这几天的确有空了,看更新多快,专门研究了一下几个网站登录中密码加密方法,比起滑块验证码来说都相对简单,适合新手js逆向入门,大家可以自己试一下,试不出来了再参考我的js代码。篇幅有限,完整的js代码在这里:从今天开始种树

前戏

今天要碰的是汽车之家,关于这个网站网上大多都再研究其字体反爬,如果想研究字体反爬的话直接搜一下就有很多。



今天主要是研究汽车之家在登录时的password加密方法,并通过python调用js的方式运行出加密结果。

开始

老规矩,打开登录页面,长下面这样,与大多网站一样的布局,切换到账号密码登录。



接下来应该知道怎么做了吧(花5秒钟假装思考一下),跟长颈鹿装进冰箱里一样,一共4步:

  • 把冰箱门打开:F12,切到Network页签(一般默认就是这个页签,建议大家都用chrome);
  • 把大象拿出来:输入账号密码,可别输入正确的哦;
  • 把长颈鹿放进去:在请求列表里查询关于登录发起的请求;
  • 把冰箱门关上:找到请求,查看POST(一般都是post请求,暂时还没见过其它方式的) url,还有FormData里的参数。

把冰箱门打开

按F12打开工具

把大象拿出来

输入错误的账号密码。

把长颈鹿放进去

找到请求,一般这种就需要就经验了,有时候这种请求名称会带login等字眼,通常都是ajax请求(切到XHR可以只看ajax请求,如果实在找不到可以切换到XHR),这样就不会有乱七八糟的图片、css、js请求干扰你。

把冰箱门关上

这里只截取了部分数据,后面没截的大都是滑块验证码相关参数,这个后续再进行研究,今天只看这个pwd参数。

分析

有了前面查看的结果,我们可以直接拿这个pwdsourecs里查找相关的js文件,从下图看有两个文件包含pwd关键字,第一个看着都不像,不信你可以点进去看看,第二个包含了login关键字,八九不离十就是它,点进去。



进行来后继续搜索pwd关键字,幸运的是只有一个结果:



那可以确定加密函数就是hex_md5了,一般我们会碰到的就是带有rsaMD5encrypt之类的函数,可以作为经验留意一下。

调试

整一个断点,我整在了413行,大家看自己的在第几行。



输入账号密码,点击登录然后应该就会跳转到413行,点击右侧下一步箭头,就是下面这个:

hex_md5函数

一步一步运行进入hex_md5函数,函数长这样:

function hex_md5(s) {
return binl2hex(core_md5(str2binl(s), s.length * chrsz));
}

s是我们的密码,可以看出调用了binl2hexcore_md5,还有一个chrsz变量,往上看一点就发现了chrsz



hex_md5函数返回的就是最终加密的结果。

binl2hex函数

function binl2hex(binarray) {
var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
var str = "";
for (var i = 0; i < binarray.length * 4; i++) {
str += hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8 + 4)) & 0xF) + hex_tab.charAt((binarray[i >> 2] >> ((i % 4) * 8)) & 0xF);
}
return str;
}

hexcase 在前面那个图里有,binarray先不用管,这是core_md5返回的值,函数相对简单,内部也没有继续调用小函数,我们也不用知道干了啥,到时候抠出来直接调用即可。

str2binl函数

function str2binl(str) {
var bin = Array();
var mask = (1 << chrsz) - 1;
for (var i = 0; i < str.length * chrsz; i += chrsz)
bin[i >> 5] |= (str.charCodeAt(i / chrsz) & mask) << (i % 32);
return bin;
}

这个函数也没有内部小函数了。

core_md5函数

这个函数就长了,内部也调用了很多,这里只截部分了,建议分别去看看调用的这些小函数,比如md5_ff等,这样后面好扣代码:

function core_md5(x, len) {
/* append padding */
x[len >> 5] |= 0x80 << ((len) % 32);
x[(((len + 64) >>> 9) << 4) + 14] = len;
var a = 1732584193;
var b = -271733879;
var c = -1732584194;
var d = 271733878;
for (var i = 0; i < x.length; i += 16) {
var olda = a;
var oldb = b;
var oldc = c;
var oldd = d;
a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936);
d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
.....
省略
.....

抠出来python运行

前面已经把js代码加密思路理了一下,大家可以自己试着抠一下,实在抠不出来的点击这里从今天开始种树参考完整js代码,接下来使用python运行,使用的依然是execjs库。

import execjs

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

结果对比

FormData里的加密结果:



python运行的结果:



看看的确是一模一样,一方面说明没问题,另外一方面说明加密方法跟时间戳没什么关系,有些网站加密结果还会跟时间戳、useragent等有关。

结束

整个过程并不难,又是一个适合js逆向入门练手级网站,可以通过这个例子练习一下调试技巧,完整代码点击这里从今天开始种树,关注下面的公众号,获取更多内容,当然不关注也无所谓。

兄弟,你爬虫基础这么好,需要研究js逆向了,一起吧(有完整JS代码)的更多相关文章

  1. python 3.x 爬虫基础---常用第三方库(requests,BeautifulSoup4,selenium,lxml )

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---常用第三方库 ...

  2. 爬虫基础以及 re,BeatifulSoup,requests模块使用

    爬虫基础以及BeatifulSoup模块使用 爬虫的定义:向网站发起请求,获取资源后分析并提取有用数据的程序 爬虫的流程 发送请求 ---> request 获取响应内容 ---> res ...

  3. python 3.x 爬虫基础---Requersts,BeautifulSoup4(bs4)

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---Requer ...

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

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

  5. Python爬虫基础

    前言 Python非常适合用来开发网页爬虫,理由如下: 1.抓取网页本身的接口 相比与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简洁:相比其他动态脚本语言,如perl ...

  6. python 3.x 爬虫基础---Urllib详解

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 前言 爬虫也了解了一段时间了希望在半个月的时间内 ...

  7. java网络爬虫基础学习(三)

    尝试直接请求URL获取资源 豆瓣电影 https://movie.douban.com/explore#!type=movie&tag=%E7%83%AD%E9%97%A8&sort= ...

  8. java网络爬虫基础学习(一)

    刚开始接触java爬虫,在这里是搜索网上做一些理论知识的总结 主要参考文章:gitchat 的java 网络爬虫基础入门,好像要付费,也不贵,感觉内容对新手很友好. 一.爬虫介绍 网络爬虫是一个自动提 ...

  9. python从爬虫基础到爬取网络小说实例

    一.爬虫基础 1.1 requests类 1.1.1 request的7个方法 requests.request() 实例化一个对象,拥有以下方法 requests.get(url, *args) r ...

随机推荐

  1. JavaScript高级程序设计(第三版) 2/25

    第一章 JavaScript简介 javascript 跟 java没有任何联系,可以这么说,基本上区别就相当于,老婆跟老婆饼.只是因为当初Netscape(js的公司)想搭上媒体热炒的Java的顺风 ...

  2. 点format方式输出星号字典的值是键

    dic = {'a':123,'b':456} print("{0}:{1}".format(*dic)) a:b 2020-05-08

  3. PHP krsort() 函数

    ------------恢复内容开始------------ 实例 对关联数组按照键名进行降序排序: <?php$age=array("Peter"=>"35 ...

  4. Linux的VMWare中Centos7磁盘分区管理 fdisk分区和制作文件系统格式化和开机自动挂载

    一.硬盘的组成零件扇区 磁道 磁盘容量 磁盘分区 简介 硬盘由容量.柱面数.磁头数.扇区数 C/H/S, Cylinder, Head, Sector(柱面/磁头数/扇区数) 1.磁头数表示硬盘总共有 ...

  5. Jenkins总结3-shell脚本

    我写shell脚本的功力还很初级,基本都是现学现卖,写得不是很健壮,只能提供个思路,请大家包涵. 我使用的系统只能发函数放到shell最前面.本人还是比较推崇函数式脚本的,方便复用,目前只简单的封装了 ...

  6. 【HNOI2009】最小圈 题解(SPFA判负环+二分答案)

    前言:模拟赛考试题,不会做,写了个爆搜滚蛋仍然保龄. --------------------- 题目链接 题目大意:给定一张有向图,求一个环,使得这个环的长度与这个环的大小(所含结点个数)的比值最小 ...

  7. Ant Design Pro入门教程,安装,运行(V5 Typescript版)

    [前言] 找了很多Admin模板,最后还是看中了AntDesignPro这个阿里巴巴开源的Admin框架,长这样(还行吧,目前挺主流的): 官网地址:https://pro.ant.design/in ...

  8. 13、Visitor 访问者模式 访问数据结构并处理数据 行为型设计模式

    1.模式的定义与特点 访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元 ...

  9. akka-typed(9) - 业务分片、整合,谈谈lagom, 需要吗?

    在讨论lagom之前,先从遇到的需求开始介绍:现代企业的it系统变得越来越多元化.复杂化了.线上.线下各种系统必须用某种方式集成在一起.从各种it系统的基本共性分析:最明显的特征应该是后台数据库的角色 ...

  10. C#算法设计排序篇之07-希尔排序(附带动画演示程序)

    希尔排序(Shell's Sort) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/687 访问. 希尔排序是插入排序的 ...