猿人学-练习平台-第三题OB混淆,过检测

链接: https://www.python-spider.com/challenge/3

题目:
猿人学-练习平台-第三题OB混淆,过检测_第1张图片

一、抓包分析

看起来是可以拿到数据的
猿人学-练习平台-第三题OB混淆,过检测_第2张图片
过了一会重放攻击,发现数据失效
猿人学-练习平台-第三题OB混淆,过检测_第3张图片
网页再去下一页,会说风控不存在
猿人学-练习平台-第三题OB混淆,过检测_第4张图片

通过上面,初步得出是某些参数过期检测,一般作为凭证,去查看cookie,可以发现其中m参数,还有Hm_lpvt 是有变化的
猿人学-练习平台-第三题OB混淆,过检测_第5张图片
重新执行网页,依次删除2个参数,再点击其它页,可以确认下来是m参数猿人学-练习平台-第三题OB混淆,过检测_第6张图片

二、定位m参数逻辑代码

开启script监听,
猿人学-练习平台-第三题OB混淆,过检测_第7张图片
删除m参数,然后F5刷新,直到找到生成cookie的js,搜索cookie,docuemnt关键词

调试后可以找到此处的m生成,确认是这个js文件了
猿人学-练习平台-第三题OB混淆,过检测_第8张图片
或者通过hook
猿人学-练习平台-第三题OB混淆,过检测_第9张图片

// ==UserScript==
// @name         cookie set
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  eval-everything
// @author       An-lan
// @include      *
// @grant        none
// @run-at      document-start
// ==/UserScript==

Object.defineProperty(document,'cookie',{
    set:function(val){
    debugger;
    return val}
})

成功看到堆栈后,逻辑代码在此处
猿人学-练习平台-第三题OB混淆,过检测_第10张图片

三、本地调试

复制生成方式代码,定义cookies,而后就是扣代码了
猿人学-练习平台-第三题OB混淆,过检测_第11张图片

1、过检测

当扣完了一运行,程序直接卡死,且内存上升
猿人学-练习平台-第三题OB混淆,过检测_第12张图片
这种时候只有2中可能:
1、浏览器指纹检测
2、格式化检测

复制整个代码到console浏览器页运行,可以看到卡死,且报错,提示length

可以将复制后的代码,从开始前加上debugger一步一步缩小卡死位置,放置debugger确认位置

在js中,都是经过压缩代码的,而调试过过程中,都是对代码格式化了,存在了检测长度
搜索toString、RegExp,

可以看到有3处,第一处指向了removeCookie
猿人学-练习平台-第三题OB混淆,过检测_第13张图片

扣下来的代码长的是这样的
在这里插入图片描述
模拟,测试下长度,压缩过后的是与格式化的长度是有差别的
猿人学-练习平台-第三题OB混淆,过检测_第14张图片
通过上述去完格式化检测。
在这里插入图片描述
在这里插入图片描述
再次运行,缺少M,补完M
猿人学-练习平台-第三题OB混淆,过检测_第15张图片
再运行 缺少B
猿人学-练习平台-第三题OB混淆,过检测_第16张图片
再次运行又卡死

猿人学-练习平台-第三题OB混淆,过检测_第17张图片
注释掉B函数,再运行,是补了B函数后卡死的,所以在此处打上断点
猿人学-练习平台-第三题OB混淆,过检测_第18张图片
猿人学-练习平台-第三题OB混淆,过检测_第19张图片

取消注释B函数后,复制代码到网站上的console执行,会进入到一个虚拟机debugger位置

猿人学-练习平台-第三题OB混淆,过检测_第20张图片
猿人学-练习平台-第三题OB混淆,过检测_第21张图片
接着单步调试,在这个位置卡死

猿人学-练习平台-第三题OB混淆,过检测_第22张图片
将debugger放置这边,去掉之前那个debugger,再调试
猿人学-练习平台-第三题OB混淆,过检测_第23张图片
复制到网页再调试,追进去看
猿人学-练习平台-第三题OB混淆,过检测_第24张图片
猿人学-练习平台-第三题OB混淆,过检测_第25张图片
猿人学-练习平台-第三题OB混淆,过检测_第26张图片
一直单步调试后,到这一步卡死(卡死了,可以重走前面步骤看堆栈)
猿人学-练习平台-第三题OB混淆,过检测_第27张图片
可以重走前面步骤,看堆栈到这一步的时候,可以看到a6是一个正则
猿人学-练习平台-第三题OB混淆,过检测_第28张图片
并且调用test方法
猿人学-练习平台-第三题OB混淆,过检测_第29张图片
正则返回的都是 True 或者 False,这个时候替换成 return True,且上面加上debugger(去掉之前的debugger,不然是重那边开始调试的)

猿人学-练习平台-第三题OB混淆,过检测_第30张图片

再次运行,K没有定义
猿人学-练习平台-第三题OB混淆,过检测_第31张图片
补完K代码,H没有定义
猿人学-练习平台-第三题OB混淆,过检测_第32张图片
补完H,L没有定义
猿人学-练习平台-第三题OB混淆,过检测_第33张图片
补完L再运行 ,缺少navigator

猿人学-练习平台-第三题OB混淆,过检测_第34张图片

2、navigator 浏览器指纹

猿人学-练习平台-第三题OB混淆,过检测_第35张图片
可以选择将这个位置代码换成空 “”,出现V没有定义

猿人学-练习平台-第三题OB混淆,过检测_第36张图片
补完V,运行提示Y没有定义
猿人学-练习平台-第三题OB混淆,过检测_第37张图片
点击报错位置,复制(V, Y)
猿人学-练习平台-第三题OB混淆,过检测_第38张图片
Y是一个时间戳
猿人学-练习平台-第三题OB混淆,过检测_第39张图片
实际上这个Y是 W传进来的,那么堆栈上一级是 $c
猿人学-练习平台-第三题OB混淆,过检测_第40张图片
实际上这个内容就是 函数X
猿人学-练习平台-第三题OB混淆,过检测_第41张图片
补完Y再运行,提示 U 没有定义
猿人学-练习平台-第三题OB混淆,过检测_第42张图片
补完U,R没有定义
猿人学-练习平台-第三题OB混淆,过检测_第43张图片
R补完,T没有定义
猿人学-练习平台-第三题OB混淆,过检测_第44张图片
补完T,Q没定义
猿人学-练习平台-第三题OB混淆,过检测_第45张图片
补完Q,S没有定义

猿人学-练习平台-第三题OB混淆,过检测_第46张图片
然后就是O 没有定义

猿人学-练习平台-第三题OB混淆,过检测_第47张图片
补完O 然后就是N没有定义

猿人学-练习平台-第三题OB混淆,过检测_第48张图片
补完N,P没有定义
猿人学-练习平台-第三题OB混淆,过检测_第49张图片
然后是F没有定义
猿人学-练习平台-第三题OB混淆,过检测_第50张图片
后面面省略。。。。。补完I最后运行不报错
猿人学-练习平台-第三题OB混淆,过检测_第51张图片
打印cookies,出现新问题
猿人学-练习平台-第三题OB混淆,过检测_第52张图片

3、hook console.log

将代码复制到浏览器,同样卡死,那么这时候console.log 不是原来那个console.log了
代码顶部,重写
猿人学-练习平台-第三题OB混淆,过检测_第53张图片
再执行代码
猿人学-练习平台-第三题OB混淆,过检测_第54张图片

4、封装测试SDK代码

猿人学-练习平台-第三题OB混淆,过检测_第55张图片

在这里插入代码片

你可能感兴趣的:(爬虫案例,javascript,python)