房天下滑块逆向

文章目录



前言

声明:
仅供学习交流。如若侵权,请联系删除。
练习网址: aHR0cHM6Ly9wYXNzcG9ydC5mYW5nLmNvbS8=


一、明确需求

1.首先明确需求,过滑块需要逆向的参数。如下图所示,分别是start,end,i,t,gt,challenge,其它值大概率是固定。


需要逆向的参数


2.明确完需要逆向的参数后,接下来找,抓包全局搜索搜一下gt的值,发现是由这个数据包返回的gt和challenge。经过对比,第一张图的gt和challenge参数就是这个数据报的返回值。接下来看别的参数。
在这里插入图片描述

3.通过堆栈,找其它参数,我们从第一个堆栈点进去下断点,接下来就是细心找参数生成的地方


在这里插入图片描述


这里发现这个r是已经加密过后的,继续往上跟


在这里插入图片描述


到这里你会看到参数加密的位置,首先看下start和end怎么来的,看下L,看着像滑动轨迹,往上找一找,看到mouseup等关键字,打断点,进入d函数能看到最后是mouseup,应该是你手动滑动鼠标松开的那个时间点,end的值就是这个mouseup的时间戳。


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


4.伪造轨迹
在这里插入图片描述

get_slider_track(distance)这个函数伪造轨迹 distance就是你识别的缺口坐标,可以用cv2或者ddddocr识别。效果如下图
在这里插入图片描述


4.接下来看i参数和t参数
copy一下i参数生成逻辑这一块代码放到node.js执行下,缺啥补啥 里面的n定义 我们直接用浏览器里的环境


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

然后经过x.compress()处理,得到i参数


在这里插入图片描述


5.剩最后一个t参数同样的方法缺啥补啥,t参数效果图如下


在这里插入图片描述

二、验证参数

1.引入库

代码如下(示例):

import random
import re
import time
import execjs
import requests
import logging
import ddddocr

2.对滑块进行请求

完整代码如下(示例):

def get_slider_track(distance):
    track = []
    start = {
        'x': 0,
        'y': 300,
        't': int(time.time()*1000),
        'e': 'mousedown'
    }
    track.append(start)

    x,y,t = start['x'],start['y'],start['t']
    while distance >= x:
        x += random.choices([0, 1, 2], weights=[0.3, 0.4, 0.3], k=1)[0]
        y -= random.choices([0, 1, 2], weights=[0.3, 0.4, 0.3], k=1)[0]
        t += random.randint(0, 20)
        track.append({
            'x': x,
            'y': y,
            't': t,
            'e': 'mousemove'
        })
    end = {

        'x': x,
        'y': y,
        't': t + 30,
        'e': 'mouseup'
    }
    track.append(end)
    return track

#滑块
url = url
response_img = requests.post(url, headers=headers)
gt = response_img.json()['gt']
challenge = response_img.json()['challenge']
logger.info(f'获取参数gt:{gt}\tchallenge:{challenge}')

#获取js文件
params2 = {
    "c": "index",
    "a": "getType",
    "gt": gt,
    "challenge": challenge ,
    "time": time.time()*1000,
    "callback": "fangcheck_1715062955718",
    "_200226": ""
}
r2 = requests.get(url, headers=headers, params=params2)

#获取滑块图片
params3 = {
    "c": "index",
    "a": "jigsaw",
    "gt": gt,
    "challenge": challenge,
    "callback": "fangcheck_1714978340942",
    "_200226": ""
}
baseurl = url
response_url = requests.get(url, headers=headers, params=params3)
bg_url = baseurl + re.findall('"url":"(.*?)",',response_url.text)[0]
tp_url = baseurl + re.findall('"surl":"(.*?)"',response_url.text)[0]
bg = requests.get(url=bg_url,headers=headers).content
tp = requests.get(url=tp_url,headers=headers).content
with open('./backgroundImg.png','wb') as f,open('./sliderImg.png','wb') as f1:
    f.write(bg)
    f1.write(tp)

#识别图片
det = ddddocr.DdddOcr(det=False,ocr=False,show_ad=False)
with open('sliderImg.png', 'rb') as f:
    target_bytes = f.read()
with open('backgroundImg.png', 'rb') as f:
    background_bytes = f.read()

res = det.slide_match(target_bytes, background_bytes, simple_target=True)
print(res)

# 轨迹
slide_track = get_slider_track(sliend)
start = slide_track[0]['t']
end = slide_track[len(slide_track)-1]['t']
i = execjs.compile(open('./房天下i参数.js','r',encoding='utf-8').read()).call('return_i')
t = execjs.compile(open('./房天下t参数.js','r',encoding='utf-8').read()).call('return_t',slide_track)




#验证滑块

params = {
    "c": "index",
    "a": "codeDrag",
    "start": start,
    "end": end,
    "i": i,
    "t": t,
    "gt": gt,
    "challenge": challenge,
    "callback": "fangcheck_1715061680163",
    "_200226": ""
}
r4 = requests.get(url,headers=headers, params=params)

print(r4.text)

在这里插入图片描述
最终效果图

总结

写本文的目的是巩固,学习交流。记录搬砖的那些日子。

  • 20
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值