JS逆向—某当网登录滑块逆向

admin 2026-01-07 02:43:25 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文章完整还原当当网滑块登录流程:先通过getRankey拿requestId与rankey,再getSlidingVerifyCode取图,用ddddocr算缺口距离,将距离、y坐标与encryptKey经AES得point_json,校验后得check_token,最后把密码用固定keyAES加密随sign、token、check_token调accountLogin完成登录,并给出Python版permanent_id与sign生成代码,可直接复现。 综合评分: 88 文章分类: JS逆向,WEB安全,爬虫,漏洞分析,安全开发


cover_image

JS逆向 — 某当网登录滑块逆向

zzyzy

逆向有你

2026年1月6日 09:32 河南

本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

目标:实现账号的登录,滑块验证。 网站:aHR0cHM6Ly9sb2dpbi5kYW5nZGFuZy5jb20vIw==

说明 本文主要是对该网站实现登录,逆向其中遇到的滑块。

  1. 随便输入手机号和密码,手动滑动滑块实现登录全过程,在控制台可以看到一些主要的请求,从后往前分析,看看每个请求需要的参数,主要四次请求。

isShowSlide 原本以为是对参数的验证,结果是无需理会

getSlidingVerifyCode 主要是获得滑块验证的图片

checkSlidingVerifyCode 是对滑块的校验

accountLogin 登录接口

2.登录需要的参数有很多需要分析,主要分析是sign的生成过程,token是getSlidingVerifyCode 返回结果数据,check_token 是验证滑块后checkSlidingVerifyCode 返回结果数据。

3.首先是先获得滑块的图片,可以看到主要有三个参数。前两个permanent_id requestid  在这四次请求中同时存在,值还是一样的。直接搜索sign或者hook JSON,xhr断点指定接口等

4.直接搜索sign 返回不多,主要两个打上断点,再次请求,可以看到变量n 就是一些请求参数,r就是最终sign的值,加密有的结果在赋值到n中,permanent_id 等于e ,e的生成在上面 e = G(), G函数,

5. D.state.requestId 返回requestId  刚开始我以为这个值是js生成的,在往上跟栈找着找着发现是接口返回的数据,首先重新刷新网站,再次断到当前位置,直接打印requestid的结果,直接搜索。

6.requestId 直接是一个接口返回值,请求参数也是先获得permanent_id 和sign, 所以先分析,函数G里面生成规律,在看sign。直接控制台打印G,跳转到函数里面。

7.大致分析一下这个函数,先是定义一个t变量,在获得当前时间时分秒等,随机生成两个参数,一大堆拼接成d,然后函数J对d转换,明显是一个md5,测试一下是一个标准的md5。后面有定义一个h函数对p转换。

8.可以直接把G扣下来的改一下J函数,也可以直接用python实现还原过程,自己写或者扔给ai一键转换也可以,一下是py代码。

def random_string():    # 基础字符串    base_string = "DDClick521"
    # 获取当前时间    now = datetime.datetime.now()    year = str(now.year)    month = str(now.month).zfill(2)  # 确保月份是两位数    day = str(now.day).zfill(2)    hour = str(now.hour).zfill(2)    minute = str(now.minute).zfill(2)    second = str(now.second).zfill(2)    millisecond = str(now.microsecond)[:3].zfill(3)  # 取毫秒的前三位
    # 生成随机数    random_num1 = str(random.randint(100000, 999999))    random_num2 = str(random.randint(100000, 999999))
    # 组合字符串    combined_string = year + month + day + hour + minute + second + millisecond + random_num1 + random_num2 + base_string
    # 创建 MD5 哈希    md5_hash = hashlib.md5(combined_string.encode()).hexdigest()
&nbsp; &nbsp; # 处理哈希前八位&nbsp; &nbsp; def&nbsp;process_hash(hash_str):&nbsp; &nbsp; &nbsp; &nbsp; hex_value =&nbsp;int(hash_str[:8],&nbsp;16)&nbsp; &nbsp; &nbsp; &nbsp; str_value =&nbsp;str(hex_value)[:6]&nbsp; &nbsp; &nbsp; &nbsp; if&nbsp;len(str_value) <&nbsp;6:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; str_value +=&nbsp;'0'&nbsp;* (6&nbsp;-&nbsp;len(str_value))&nbsp; &nbsp; &nbsp; &nbsp; return str_value
&nbsp; &nbsp; processed_hash =&nbsp;process_hash(md5_hash)
&nbsp; &nbsp; # 最终组合字符串&nbsp; &nbsp; final_string = year + month + day + hour + minute + second + millisecond + processed_hash + random_num1 + random_num2
&nbsp; &nbsp; return final_string

9.接下来主要看一下sign的生成过程,在getRankey 请求断住,看一下请求加密参数需要哪些,主要是一个permanent_id,N.a.stringify(a);   把a 转换成url查询字符串,在decodeURIComponent编码,在使用函数J转换,这个J似曾相识,就是和之前的一样,也是md5转换,主要看一下函数Y的功能,传入两个参数,第一个参数是明文md5值,第二个参数是密钥,因为getRankey接口请求前,rankey和requestId 都还为空,所以第一次生成sign是密钥为空。

10.进入到函数Y中可以看着这是一个aes加密,测试过了也是一个标准的加密,具体加密还原使用js还是python当是看你的心情了

  1.  哦对,还有一个t参数,是时间戳,这样就可以拿到rankey和requestId,需要注意的是,在请求getSlidingVerifyCode 接口时,注意一下参数,密钥就是rankey。

12.获得图片后,就是要是别滑块的距离了,我使用的是ddddocr验证滑块的参数有点多。

point_json 是加密过的 slide_cost_time 滑动时间 verifyToken 验证token,获得图片时一起返回值 其他没有什么特殊参数了

13,现在主要看一下point_json  怎么生成的,直接搜索打下断点,还是aes加密,其中不同的是key值,t.left就是滑动的距离,t.json.y 是请求图片时返回的y,t.json.encryptKey是返回的encryptKey

4.滑块验证成功后会返回 checkcode,至此登录接口还有一个password的生成规则,直接搜也能搜到就是有一点多,可以直接使用xhr断点accountLogin,找到password生成地方。

  1. 同样也是Y函数,传入你输入的密码,key的值是固定的。到此所有参数都分析完了,使用代码测试测试。

·今 日 推 荐·

本文内容来自网络,如有侵权请联系删除


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:逆向有你 zzyzy《JS逆向 — 某当网登录滑块逆向》

评论:0   参与:  0