研究笔记2--qunar的字段逆向分析

逆向研究笔记1

我做的是爬取qunar请求体字段的研究并逆向
我们要爬取的就是这个网站:a109fba7672d616b75e2cfec0dd94ec4的飞机票板块
首先贴图,研究成果:
在这里插入图片描述

研究的东西__m__字段加密以及headers中的key和value都加密的字段了

在这里插入图片描述
在这里插入图片描述

老方法全局搜索__m__找到加密位置,进行调试,并在页面进行全局搜索用于确定断点的位置
、https://img-blog.csdnimg.cn/0dcf1ded8d814bc191d1c3776ff51cdf.png)
如上图可以看到熟悉encryptToken字典便可以知道这便是对称加密,当然我们是做研究的,所以该调试还是需要调试的。那么打上断点后切换日期重新触发加密并断住,开始调试。
在这里插入图片描述
调过来后是这个函数
在这里插入图片描述

其中t,n都是新的函数所以我们先来调试首先是t,而t函数就在上面
所以我们再来调试getTokenStr函数,单步调试进入该函数可以看到tokenStr是个数组

在这里插入图片描述
先调试t,在页面中搜索this.tokenStr 可以在16212行找到该固定值
在这里插入图片描述

在这里插入图片描述
如上图可以看到n的值为‘tc_58195ff8d1866aeb_178eea85c1d_9879’,且使用了getElementById方法获取了页面中的一个值,那么在已确定这两个值的情况下我们开始下一步的调试。return中的(0,s.default)(this.dencryptCode(this.cookieToken))了

在这里插入图片描述

其中如上图this.cookieToken是个固定的数组,而this.dencryptCode(this.cookieToken)的结果为固定的“QN48”,
在这里插入图片描述
在这里插入图片描述
到此我们可以确定这个函数的返回值为tc_58195ff8d1866aeb_178eea85c1d_9879
最初执行的方法里第一个已经调试出来了,下面继续调试第二个参数n
在这里插入图片描述

与this.tokenStr和this.cookieToken一样,this.qtTime也是个固定的数组

在这里插入图片描述
下图中控制台的三次执行结果显示这个值是16开头,13位的数字是不是很眼熟,没错就是个时间戳

在这里插入图片描述

到这里,t和n值懂知晓了那么开始模拟编写js脚本吧,首先抠出主加密方法encrypt再把已知晓的t,n值进行添加效果是这个样子的如下图
在这里插入图片描述
接下来我们便开始调试this.encryptFunction函数

我么可以看到r的结果是时间戳%2求余,而2的余数不是1便是0,2而encryptFunction函数中
都是传t和n,那么到这里就只能说懂得都懂,不懂得emm逻辑方法就需要加强了。
在这里插入图片描述

进入该方法,开始调试接下来的函数,首先是传如e值的函数在这里插入图片描述
调试过程中如果作用于这块一直是空值便可以一直调试
在这里插入图片描述
调试到这会发现一个熟悉的加密方法sha1,那么e值的结果便是sha1加密了在看看加密结果的长度看看是否符合sha1的加密长度
在这里插入图片描述

接下来便是对t的加密了如下图,发现是个md5

在这里插入图片描述
在此打印结果查看t是否是32位
在这里插入图片描述
调试的时候多点击了下,只能看第二个函数的结果了,不过并不影响,因为这辆只是加密的顺序颠倒了一下。

在此,我们已经知晓了具体的加密方法那么便可以调用js中的加密方法来改写如下图
在这里插入图片描述
在这里插入图片描述

到此__m__的值已逆向出来了
接下来便是key和value都加密的参数了
,
在我么在此查看该值时去发现他的key:value都变了,那么这块都是加密的值该怎么调呢
这个参数在hrasers中那么返回刚刚调试的js页面,搜索headers,找到与之相关的值,多打断点,看看那个被断住了,在__m__下你会发现
在这里插入图片描述

下图中的值是付给固定值pre的显然不是我们要找的那么继续往下断点
在这里插入图片描述
到这,发现了熟悉的规律那么这个加密函数数就在这了,单点下一步进入函数进行调试
在这里插入图片描述

到了这个方法
在这里插入图片描述
可以发现t已经返回结果了
在这里插入图片描述
而this.encrypt()不就是__m__的方法吗?
看来只要知道key是怎么生成的这个加密就过了,通过下图可以发现是像this.getRandomKey函数里传入了一个新的时间戳来生成了key值

在这里插入图片描述
getRandomKey函数在加密函数的上方,进行调试
在这里插入图片描述
在这里插入图片描述

到此整体的加密情况便调试出来了下面附js代码

const crypto = require('crypto');
function SHA1Entypt(txt) {
    return crypto.createHash("sha1").update(String(txt)).digest('hex');
}
function MD5Entypt(txt){
    return crypto.createHash("md5").update(String(txt)).digest('hex');
}
function encryptFunction() {

    return [function(e) {
        var t = SHA1Entypt(e);
        return MD5Entypt(t)
    }
    , function(e) {
        var t = MD5Entypt(e);
        return SHA1Entypt(t)
    }
    ]
}

function encrypt() {
    var t = "tc_58195ff8d1866aeb_178eea85c1d_9879"
      , n = new Date().getTime()
      , r = n % 2;
    return encryptFunction()[r](t + n)
}

function getToken() {
    var t = {};
    t[getRandomKey(new Date().getTime())] = encrypt();
    return t
}
function getRandomKey(t) {
    var n = "";
    var r = ("" + t).substr(4);
    r.split("").forEach(function(e) {
        n += e.charCodeAt()
    });
    var i = MD5Entypt(n);
    return i.substr(-6)
}


console.log(encrypt())

console.log(getToken());

好了,以上便是对去哪儿的的加密研究了,本篇文章讲解到这里啦。

我也在不断的学习中,学到新东西第一时间会跟大家分享
大家可以动动小手,点波关注不迷路。

如果关于本篇文章有不懂的地方,欢迎大家下面留言,我知道的都会给大家一 一解答。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值