文章总结: 文章完整还原当当网滑块登录流程:先通过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安全,爬虫,漏洞分析,安全开发
JS逆向 — 某当网登录滑块逆向
zzyzy
逆向有你
2026年1月6日 09:32 河南
本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
目标:实现账号的登录,滑块验证。 网站:aHR0cHM6Ly9sb2dpbi5kYW5nZGFuZy5jb20vIw==
说明 本文主要是对该网站实现登录,逆向其中遇到的滑块。
- 随便输入手机号和密码,手动滑动滑块实现登录全过程,在控制台可以看到一些主要的请求,从后往前分析,看看每个请求需要的参数,主要四次请求。
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()
# 处理哈希前八位 def process_hash(hash_str): hex_value = int(hash_str[:8], 16) str_value = str(hex_value)[:6] if len(str_value) < 6: str_value += '0' * (6 - len(str_value)) return str_value
processed_hash = process_hash(md5_hash)
# 最终组合字符串 final_string = year + month + day + hour + minute + second + millisecond + processed_hash + random_num1 + random_num2
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当是看你的心情了
- 哦对,还有一个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生成地方。
- 同样也是Y函数,传入你输入的密码,key的值是固定的。到此所有参数都分析完了,使用代码测试测试。
·今 日 推 荐·
本文内容来自网络,如有侵权请联系删除
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:逆向有你 zzyzy《JS逆向 — 某当网登录滑块逆向》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。











评论