JS逆向—信息公示平台搜索滑块逆向

admin 2026-03-11 03:28:11 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文记录了某信息公示平台搜索滑块验证的逆向过程。通过抓包分析滑块校验接口,发现参数a和b源自初始化数据的Base64编码,参数c为滑动距离经RSA加密后再Base64编码。作者利用Hook定位关键代码,使用Python复现了加密逻辑,并结合dddocr库识别缺口距离,最终实现了绕过滑块验证获取查询数据。 综合评分: 80 文章分类: 逆向分析,WEB安全,安全工具,实战经验


cover_image

JS逆向 — 信息公示平台搜索滑块逆向

逆向有你

2026年3月10日 09:34 河南

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

目标:实现搜索后,滑块验证,得到结果。

网站:aHR0cHM6Ly94eGdzLmNoaW5hbnBvLm1jYS5nb3YuY24vZ3N4dC9uZXdMaXN0

1.显示输入搜索关键字,触发滑块验证,在/slideCaptcha 也没有什么校验直接,直接拿到了数据,a和b后面要用到的参数,c中有cutImage和oriImage是背景和缺口图的base64编码数据。

2.接下来校验滑块走一遍,看看如何拿到搜索后的数据。slide_captcha_check滑块的校验,请求参数中有a b c三个,验证成功后,请求 /gridQuery.html获得搜索后的数据。所以只需要分析这三个参数的由来就行。

3.在slide_captcha_check中,msg结果我是遇到三种,大致看一下a b c 都是=结尾的很像base64 下面就hook到生成的地方看看。

success 验证成功

jcaptha invalid好像是超时无效

jcaptha wrong 滑块的距离不对

  1. 先是测试一下hook JSON中stringify,parse,能用,找到参数生成后,往上跟栈,往上走一步,发现t是生成后的结果,看一下t是如何来的。
(function () {    var stringify = JSON.stringify;    JSON.stringify = function (params) {        console.log("Hook JSON.stringify ——> ", params);        debugger;        return stringify(params);    }})();(function () {    var parse = JSON.parse;    JSON.parse = function (params) {        console.log("Hook JSON.parse ——> ", params);        debugger;        return parse(params);    }})();

5.在往上跟一步,打上断点后,刷新页面重新定到滑动滑块后,继续往上分析栈,在checkLocation中发现了熟悉的字段,可以清空其他断点,只定这三个。

6.先看a b 的值,是valuea和valueb经过encodedata得到的,value a b就是和返回图片base64数据一起返回的 a b,encodedata就是base64编码。

7.主要是看一下c的生成,在c编码前,是对上面定义的a,this.moveX,顾名思义是滑动的距离,转成字符串,经过this.$getRsaCode得到的结果, 直接跳转进去看看源码,打下断点。

8.这是一个典型的rsa加密,创建JSEncrypt对象,JSEncrypt 是一个 JavaScript 库,用于执行 RSA 加密和解密操作。设置公钥,知道这些条件后直接上python代码。

默认密钥大小 (default_key_size):1024位,表示RSA密钥的长度。

默认公钥指数 (default_public_exponent):010001(十进制65537)。

def rsa_encrypt(t):    # 公钥字符串   PEM格式    public_key_str = """-----BEGIN PUBLIC KEY-----    公钥    -----END PUBLIC KEY-----"""    public_key = RSA.import_key(public_key_str)    cipher = PKCS1_v1_5.new(public_key)    message = str(t).encode('utf-8')    encrypted_bytes = cipher.encrypt(message)    encrypted_str = base64.b64encode(encrypted_bytes).decode('utf-8')    return encrypted_str

9.得到的rsa加密滑动距离结果后,在进行base64编码得到c。

10.滑块距离识别同样使用的dddocr,或者使用cv2,识别成功率五五开吧,看背景图缺口是纯白色,把滑块改成白色再用对比,感觉会成功率高一点把(有佬优化了,教教小生)。

def get_distance(bg, tp, save_path=None):    det = DdddOcr(det=False, ocr=False, show_ad=False)    res = det.slide_match(tp, bg, simple_target=True)    if save_path is not None:        # 将背景图片的二进制数据加载为Pillow Image对象        left, top, right, bottom = res['target'][0], res['target'][1], res['target'][2], res['target'][3]        bg_image = Image.open(io.BytesIO(bg))        draw = ImageDraw.Draw(bg_image)        draw.rectangle([left, top, right, bottom], outline="red", width=2)        bg_image.save(save_path)        logger.info(f"已保存标注后的图片到: {save_path}")        return res    return res

10.至此该网站搜索的滑块分析完了,大致不难,感谢观看,给点热心值,感谢老铁们。

·今 日 推 荐·

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


免责声明:

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

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

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

本文转载自:逆向有你 《JS逆向 — 信息公示平台搜索滑块逆向》

评论:0   参与:  0