我是靠谱客的博主 明理长颈鹿,最近开发中收集的这篇文章主要介绍JS逆向之去哪儿旅行 - - - 动态混淆一、接口参数定位.二、pre 三、_m_,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

声明:本文仅限交流学习使用,请勿使用在任何非法商业活动,禁止用于非法用途。否则后果自负。如有侵权,请告知删除,谢谢! 

目录

一、接口参数定位.

二、pre

 三、_m_


一、接口参数定位.

        接口提交表单信息分析, 通过工具请求接口, 可以得出headers里有个 pre 参数 与提交的表单中的 __m__ 参数(看这长度 32 位,我这样说你懂吧,多半是MD5)

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzExNTc0Nw==,size_16,color_FFFFFF,t_70

二、pre

        1. 首先我们需要解决的是headers里的pre。我当时找了一会没找到, 只好断 script 了, 一步一步慢慢断点, 发现就在源码里的第一个script 标签下, 刚开始断点到这里的时候代码是压缩的, 很好复制下来调式代码。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzExNTc0Nw==,size_16,color_FFFFFF,t_70

        2. 调试代码呢最好不要格式化代码, 像这些压缩过的 JS 一般都存在 内存爆破。但是每个网站的爆破点不一定一样, 这就需要撸点头发了,秃了 自然就强大了。修改后的代码大概就长酱紫。 

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzExNTc0Nw==,size_16,color_FFFFFF,t_70

         3.你以为调试完成结果输出跟浏览器中的js输出结果一样就完了吗? 不,, 心细的同学可以发现我本地调试的混淆JS跟 script 下的混淆JS, 说它一样吧但又不全是。我们先来看一下这串又长又粗 的变量。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzExNTc0Nw==,size_16,color_FFFFFF,t_70

         4. 初步分析变量是由 base64 的加密而成的字符串组成列表,  随便拿其中一个参数看一下就知道了<(⊙﹏⊙)>, 这里我简单还原了混淆里面中的仅有的两个内存爆破代码, 附python代码; 一目了然, 无非就是对 base64 解密, 然后循环转 hes、ascii 编码, 一般这些都是储存一些什么 replace 、console、tostring、变量 等花里胡哨的功能。目的是什么呢, 就是让你多掉些人体多余毛发(开个玩笑)。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzExNTc0Nw==,size_16,color_FFFFFF,t_70

         5. 剩下的就剩每次JS 善变 的问题了,  变量、函数有变, 功能总不变吧? 我相信没有这么闲的开发工程师会写这么多加密方法增加难度。即变真正有这么闲的工程师, 可能会改写加密方法, 但核心还是不变滴, 我们只需要正则 点♥? 匹配一下核心的参数, 亦或者闲麻烦直接使用selenium好吧。

40197a5e67841c9aa665b44200c79d49.gif

          7. python版代码

watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBALua6kC4=,size_20,color_FFFFFF,t_70,g_se,x_16

 三、_m_

         1.一步到胃, 直接来到加密核心, 32位(md5)? 大胆猜测, 懂? encrypt 又是什么妖魔鬼怪勒, 全局搜索一下。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzExNTc0Nw==,size_16,color_FFFFFF,t_70

         2. 这下你是否又懂啦?  取了cookies 中 两个参数, 而且还是动态的, 兄弟萌,干他就完事了。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzExNTc0Nw==,size_16,color_FFFFFF,t_70

         3. 核心的两个动态玩意就在下面了, 这列表啥意思啊? 无它, 绝壁又是转码什么的,老套路了>

2021082213141830.png

         4. 拿一个列表数据试试就晓得了, 这是不是很眼熟, cookies中的一小段值对吧?watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzExNTc0Nw==,size_16,color_FFFFFF,t_70

        5. 就剩最后一个难点了, 真的我不骗你! 这里 有两个方法: md5、sha1。既然我们前面都知道是动态的了, 这两兄弟肯定也是判定调用的, 这两个方法到底掉哪个呢? 取决与 cookies的值, 我们之前取了是不是有两个值变量 t 与 n,  取决与 t 这个值, 这个值有两种类型的数据, 至于什么时候掉哪个方法自己写了。

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzExNTc0Nw==,size_16,color_FFFFFF,t_70

         6. 附python半成品 _m_

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NzExNTc0Nw==,size_16,color_FFFFFF,t_70

        兄弟萌, 我完事了, 又又又浪费半天时间。现在是TIMI时间, 下次再见啊~

最后

以上就是明理长颈鹿为你收集整理的JS逆向之去哪儿旅行 - - - 动态混淆一、接口参数定位.二、pre 三、_m_的全部内容,希望文章能够帮你解决JS逆向之去哪儿旅行 - - - 动态混淆一、接口参数定位.二、pre 三、_m_所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部