JS逆向之顶像滑块

本教程仅限于学术探讨,也没有专门针对某个网站而编写,禁止用于非法用途、商业活动、恶意滥用技术等,否则后果自负。观看则同意此约定。如有侵权,请告知删除,谢谢!

目录

一、接口请求流程

二、C1包

三、ac

四:测试结果

总结


前言

本期逆向一下顶像滑块,官网介绍:采用设备环境、行为特征、访问频率等多个风险判断要素,以及业内最丰富的验证方式帮助客户进行人机风险防控。并通过顶象防御云进行感知迭代, 能够有效拦截批量撞库扫号、批量注册等机器风险行为。
看起来很牛逼的勒,越牛逼越想肝他,简单的反而不想肝它,因为顶像滑块它的JS是动态的,参数、函数都是变化的,所以只能补环境,没法做到算法还原,怎么实现的函数动态?这也就不清楚了,函数一直没变只是加密顺序与参数变了,比如本来的加密流程是:A>B>C,它呢在一定时间能可能变成了:B>A>C的加密顺序.更多的介绍百度了,很多大佬对这方面详细解答了.
但是找到一个网站JS参数、函数是不变的,这大大减低了难度(了解一下流程补环境了相对也就简单),也就是说可以还原成python算法了
本期滑块练手网址:aHR0cHM6Ly93d3cudml2by5jb20uY24vc2VydmljZS9tb2JpbGVQaG9uZUF1dGhlbnRpY2l0eUNoZWNrL2luZGV4


提示:以下是本篇文章正文内容,下面案例可供参考

一、接口请求流程

1.先看看获取滑块图片的接口参数,大致看看也没什么重要参数,jsv的加密的JS版本(也就是之前介绍的动态参数函数所对应的版本,不过这个网址是定制的,不会变的,所以固定就好了),ak是产品id,aid呢是时间戳加随机数,w、h、s等这些参数就不介绍了用处不是很大,固定就好了,
JS逆向之顶像滑块_第1张图片

2.在看响应内容有什么玩意,p1、p2就是滑块了不过呢是撕裂的,需要通过o值去还原撕裂的图像,老版本的顶像不是通过o值,可以看下我之前的图像还原,算法还是一样的算法,只不过从url提值变成了o,减少了url提值的步骤摆了。还有一个y、sid值后面加密要用,其它的没啥鸟用了.

JS逆向之顶像滑块_第2张图片

3.验证接口/api/v1,这个就是最好一步了,验证滑块了,恶心人的ac它来了不过问题不大,sid就是滑块的安全验证id咯,c值是通过c1两个包请求得来的,aid呢嘿嘿发现了吧有什么不同自己领悟,xy就不用说了

JS逆向之顶像滑块_第3张图片

4.c1两次请求包,请求头的Param咯,又是长长的一串欸,问题大吗?应该问题不大吧.
好了,吉时已到,是时候上邢法了

JS逆向之顶像滑块_第4张图片

二、C1包

图像还原呢就不说了,看我之前的文章

1.看下c1这两次请求有什么吧,第一次请求的包,老办法anonymous一顿乱点

JS逆向之顶像滑块_第5张图片

2.下个断点加密了什么一目了然,简单还原下python算法,其它网站的就不要想着还原了,都是动态的,我只是想借此让你们了解一下顶像的流程

import time
import json
import math
import random


def get_lid():
    a = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
    return "".join(a[math.floor(random.random() * len(a))] for _ in range(32))


def getParam(data, lid=None):
    if lid is None or not data.get("lid", False):
        lid = str(int(time.time() * 1000)) + get_lid()
    data["lid"] = lid

    u = "=x1LItAH4sf8gp6ewnXQTiKuF_5EkC2m7WjdrM"
    f = "UlGhvYo3aRzcq-VPyJBb9NZOD0S"
    o = (u + f)[::-1]

    if not isinstance(data, str):
        data = json.dumps(data, separators=(",", ":"), ensure_ascii=False)

    g = ""
    len_data = len(data)
    for p in range(0, len_data, 3):
        i = ord(data[p])
        a = ord(data[p + 1]) if p + 1 < len(data) else 0
        u = ord(data[p + 2]) if p + 2 < len(data) else 0
        f = i >> 2
        c = ((3 & i) << 4) | (a >> 4)
        s = ((15 & a) << 2) | (u >> 6)
        ll = 63 & u
        if not a:
            s = ll = 64
        elif not u:
            ll = 64
        g += o[f] + o[c] + o[s] + o[ll]
    return g

JS逆向之顶像滑块_第6张图片

3.第二次请求,还是一顿乱点进去看看在哪加密的

JS逆向之顶像滑块_第7张图片

4.加密的代码还是刚刚的加密,只不过内容变了而已简简单单搞定C1

JS逆向之顶像滑块_第8张图片

5.验证一下结果,成功拿到响应的data数值

三、ac

1.除了ac其它都搞定了,很好接下来看看它怎么搞的,乱披风锤法,瞎几把乱点

JS逆向之顶像滑块_第9张图片

2.进来大致看下吧,我总共下了两个断点两个插桩日志                        
第一个断点:这个是对滑块轨迹进来加密,与xy轴加密                          
第二个断点:刚开始拿到滑块呢,进来reload重载ua(ac)加密            
第一个插桩:我主要用来打印轨迹,因为我在其它地方进行了轨迹push 
第二个插桩:对加密完成的ac打印出来                                                    

JS逆向之顶像滑块_第10张图片

3.进来看看reload(重载)干了啥事情咯,看懂了吗?朋友们?ok这里检测浏览器的环境就自己慢慢扣了,也不多

function () {
    var i = r[133]
        , a = this;
    this["ge" + E + en](),// 1.检测时间
        this[t[134]](),// 2.检测浏览器
        this[kt(e[139])](),// 3.检测防盗链
        this[Zt(r[134])](),// 4.检测代码
        this[e[140]](),// 5.检测浏览器高度,画图用
        this[n[137]](),// 6.检测自动化
        this[Kt(on + M)](),// 7.检测js版本
        this["getTK"](),// 8.检测sid(token)
        Rt[Kt(an + i)][Qt(r[135])](function () {
            a[t[135]](),// 9.检测screen
                a[Nt(o[133])]()// 10.监听轨迹
        })
}

JS逆向之顶像滑块_第11张图片

4.简单介绍一下第10个检测吧,绑定的监听轨迹吧,欸哟喂,还是挺多了监听了一大堆,自己慢慢调式吧,相信你能找到对轨迹数组加密的地方,这下知道为什么我第一个插桩push明文的轨迹了吧,用于加密对比.

JS逆向之顶像滑块_第12张图片

5.看下sendSA,这个是对被加密的轨迹数组进行app加密到ua(ac)中,sendTemp就是x轴与滑块接口的y轴了,OK整体流程就这样搞定,扣下来吧不难的

6.小提示:大部分加密都是围绕app这个函数加密的,实在找不到轨迹的加密,可以尝试着断点app,根据栈去找到轨迹的加密

JS逆向之顶像滑块_第13张图片

四:测试结果

基本都成功了,二次验证滑块多了才会触发,也是正常通过的,二次验证的坑自己慢慢领悟了,上面也有介绍了,看你有没有注意到了


总结

以上就是顶像的所有埋坑,能搞定这个的话,其它网站的滑块相信你也能将环境补出来,再见咯~

JS逆向之顶像滑块_第14张图片

你可能感兴趣的:(JS逆向,爬虫,python,javascript)