去哪儿pre参数分析

简介: 去哪儿pre参数分析
项目地址:aHR0cHM6Ly9mbGlnaHQucXVuYXIuY29tL3NpdGUvb25ld2F5X2xpc3QuaHRtP3NlYXJjaERlcGFydHVyZUFpcnBvcnQ91tjH7CZzZWFyY2hBcnJpdmFsQWlycG9ydD3Jz7qjJnNlYXJjaERlcGFydHVyZVRpbWU9MjAyMC0wOC0xNiZzZWFyY2hBcnJpdmFsVGltZT0yMDIwLTA4LTE4Jm5leHRORGF5cz0wJnN0YXJ0U2VhcmNoPXRydWUmZnJvbUNvZGU9Q0tHJnRvQ29kZT1TSEEmZnJvbT1xdW5hcmluZGV4Jmxvd2VzdFByaWNlPW51bGw=

观前提示:

本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除






 加密位置定位

直接全局搜索 pre 可以看到

那我们搜索 window._pt_ 却搜索不到东西

这时候就要猜想了:是被混淆拆分了呢?还是页面返回呢?

页面返回的话我们直接全局搜索pre的值

那确定不是返回的了就要找了

pre 的值随着页面的刷新变动猜测 应该和页面有关

那我们页面看看有没有特殊的代码

可以发现这里有一堆混淆代码 咋办?上神器操作!

不懂怎么玩神器的人可以跳到上一篇文章[2020-8-6]反混淆神器使用实战

Tips:神器会经常更新哦

还原JS后搜索一下 _pt_

出现了 那我们就可以确定是这个Js了


 代码分析与推环境

代码不是很长 那就从头到尾看一遍吧

因为我们已经把混淆变量全都解密了所以这段代码可以去除哦

可以看到下面的try也可以去掉 不然你不会测试的时候不会报错哦

继续往下看你们会看到这里是一处内存溢出的错误 需要修改 方便调试

更改前

更改后

看着突然发现关键字location

在堆环境的时候要对关键字敏感哦

例如 window,document,navigator,location,screen 等等

看到这里有人问 不知道它返回的值要怎么补呢?

答:从哪里来回哪里去

例如这里的location['href'] 我们就回到刚刚扣这个js的页面的console里面输出一下

这样就出来了 我们自己补的话就例如

location={
  "href":"https://flight.qunar.com/site/oneway_list.htm?searchDepartureAirport=%E9%87%8D%E5%BA%86&searchArrivalAirport=%E4%B8%8A%E6%B5%B7&searchDepartureTime=2020-08-16&searchArrivalTime=2020-08-18&nextNDays=0&startSearch=true&fromCode=CKG&toCode=SHA&from=qunarindex&lowestPrice=null&t=1597487313285&t=1597488333454"
}

是不是很ez

接着往下翻看到一个document的createElement的操作

在浏览器一个创建操作会返回很多值可供浏览器操作 但是在我们node环境中

我们只需要看代码看他需要写入or写出什么值 返回出相对应的值就行了

例如上图这个操作需要写入src 我们只需要保证有src这个节点存在就即可

document={
  createElement:function(a){
      return {
        src:""
    }
  }
}

有创建就有获取

这里操作流程是

将将获取到的值置于_0x48bb47 所以我们要注意 _0x48bb47 这个关键字防止补漏

这里操作流程是取了元素名为script的值然后取数量接着遍历src的值

那跟上诉步骤一致去浏览器模拟一波

根据浏览器返回的值补上去就行啦!

注意:Js有多次获取的步骤所获取的参数不一样返回的也不一样注意区分

document={
    getElementsByTagName:getElementsByTagName
    }
function getElementsByTagName(a){
    if(a=="script"){
      return[
        {src:"https://rmcsdf.qunar.com/api/device/answer.json?callback=callback_1597481838337&sessionId=9ed89d34-29d3-4586-bb08-a068d1940ac8&answer=yaov9fR7g7A3ZI6l6G5maXPWi0h2Yh75LLFoO-RDamQ3Zdq4LnEs63RGlXx4Ycb5Qq_dEfhJdiMnE1r5Gr_dIyxIcig3Y5b_GTlaIPQWuTsl91vnF6ovPKMT27tkNF6uV7lvs7sDUSg27F94FnpuOS8TrPNlBh-o7uovoXsXtLg5-90uIyYbSCMTvHQkBt-u6yobZWMG3-Nr9xPpQmovZy9T3nck71OoF2IvSeBCeGw4dcPp6mouY6cSs7w3Z4rz1XFdIPR-ayw2WAcqm7DlVGMTw7d1TUM1X3ia77gC009lhE8wCaovzzPCsig5YM6wCuob7rxI5iwvNhq5EvEfJHNShag26YapVOkg93xIwWx5AU73VaoxZaMS3Ldi0lfnHeIrYacH3-tlOca1F0ob6ScS2vtnB1P1GOpbOSsHiXgl9RfoGiob"},
        {src:"https://rmcsdf.qunar.com/api/device/challenge.json?callback=callback_1597481837704&sessionId=9ed89d34-29d3-4586-bb08-a068d1940ac8&domain=qunar.com&orgId=ucenter.login"},
        {src:"https://webresource.c-ctrip.com/resaresonline/risk/ubtrms/latest/default/chlorofp.js?siteId=c7e55b219200&v=120-7-15"},
        {src:"https://ws.qunar.com/rt_recommend?count=3&fromCity=%E9%87%8D%E5%BA%86&toCity=%E4%B8%8A%E6%B5%B7&depDate=2020-08-16&includeTax=0&callback=jsonp_z1amvsmaj803dis"},
        {src:"https://gw.flight.qunar.com/api/f/priceCalendar?dep=%E9%87%8D%E5%BA%86&arr=%E4%B8%8A%E6%B5%B7&days=&priceType=1&callback=jsonp_ag598vawefy9hdc"},
        {src:"https://lp.flight.qunar.com/api/dom/recommend/nearby_route?from=%E9%87%8D%E5%BA%86&to=%E4%B8%8A%E6%B5%B7&start_date=2020-08-16&callback=jsonp_xff7wsmawvjwbai"},
        {src:"https://flightopdata.qunar.com/vataplan?&id=41&callback=jsonp_g95ter3dbv9i0m2"},
        {src:""},
        {src:""},
        {src:""},
        {src:"https://a.qunar.com/vataplan?framId=a_listBannerTop&vataposition=QNR_OQ==_CN&tag=0&rows=3&cur_page_num=0&rep=1&f=s&callback=QNR._AD.a_listBannerTop&ab=b&tile=15974818366317732627&vatafrom=%E9%87%8D%E5%BA%86&vatato=%E4%B8%8A%E6%B5%B7"}
      ]
      }
 }

其他的一些相关的我就不全写出来啦 留给你们练手 讲一些原理就行啦


接着看能看到

看到这个 怎么模拟呢?

简单 反正看到 localStrage 都离不开 getsetremove 这三个

window.localStorage={
    getItem: function (a) {
    return this[a] || null;
    },
    setItem: function (a, b) {
    this[a] = b;
    },
    removeItem: function (a) {
    delete this[a];
    }
}


缝缝补补就出正确的值了 堆环境也是很简单的 要多练 多分析 了解原理


推完环境运行效果

有人问 教练 我推完算出来不一样怎么办?

那一定是你堆少东西了

[完]



相关文章
|
5月前
|
JSON 数据库 C++
Rapidjson的使用过程-Parse解析数组遇到的问题,附自己的解决方式
关于RapidJSON,网上有很多资料,RapidJSON是腾讯开源的一个高效的C++ JSON解析器及生成器,它是只有头文件的C++库。RapidJSON是跨平台的,支持Windows, Linux, Mac OS X及iOS, Android。它的源码在https://github.com/Tencent/rapidjson/。这里也不过多介绍如何使用RapidJson,网上有很多如何使用,只介绍自己使用过程中遇到的问题,及其解决问题的方式。
209 0
|
2天前
|
监控 Java
MaxGCPauseMillis参数
MaxGCPauseMillis参数
|
5月前
|
JavaScript 前端开发 Java
模型数据处理-数据放入 session和@ModelAttribute 实现 prepare 方法详细讲解
模型数据处理-数据放入 session和@ModelAttribute 实现 prepare 方法详细讲解
66 0
|
5月前
|
SQL Java 关系型数据库
JDBC PreparedStatement 字段值为null导致TBase带宽飙升的案例分析
JDBC PreparedStatement 字段值为null导致TBase带宽飙升的案例分析
96 0
|
5月前
|
XML SQL JSON
query 与 params:选择正确的参数传递方式
query 与 params:选择正确的参数传递方式
|
测试技术
loadrunner 脚本优化-参数化之Parameter List参数取值
loadrunner 脚本优化-参数化之Parameter List参数取值
142 0
|
机器学习/深度学习 存储 PyTorch
params.data.clone()是什么意思?params是模型的参数
在深度学习中,模型的参数通常是由多个张量组成的。这些张量存储了模型在训练过程中学到的权重和偏置等参数。 params.data 是一个张量,其中包含了模型的参数数据。clone() 是 PyTorch 中的一个方法,它用于创建一个与当前张量具有相同数据但不同内存地址的新张量。 因此,params.data.clone() 的意思是创建一个与 params.data 张量具有相同数据但不同内存地址的新张量。通常,这个方法被用来复制模型参数,以便在优化器中使用。
245 0
|
数据库
使用PreparedStatement插入如何自动增加ID?
使用PreparedStatement插入如何自动增加ID?
173 0
marven编译时:<pre>错误: 不允许使用自关闭元素</pre>
marven编译时:<pre>错误: 不允许使用自关闭元素</pre>
95 0
FastAPI(5)- 查询参数 Query Parameters
FastAPI(5)- 查询参数 Query Parameters
270 0
FastAPI(5)- 查询参数 Query Parameters