爬虫---某翻译响应解密和sign逆向

这篇具有很好参考价值的文章主要介绍了爬虫---某翻译响应解密和sign逆向。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目标网址接口:aHR0cHM6Ly9kaWN0LnlvdWRhby5jb20vd2VidHJhbnNsYXRl

  • 仅供学习交流使用,非商业用途,如有侵权,请联系删除!!!
  • 仅供学习交流使用,非商业用途,如有侵权,请联系删除!!!
  • 仅供学习交流使用,非商业用途,如有侵权,请联系删除!!!

调研接口

  • 查看每次请求的参数发现,每次请求sign参数和mysticTime参数都会变
    爬虫---某翻译响应解密和sign逆向

  • mysticTime参数不难看出是一个13位的时间戳

  • sign参数猜测是时间戳和一些其他参数组成的字符串进行hash之后的值

  • 查看返回的响应是一堆字母,需要解密

爬虫---某翻译响应解密和sign逆向

  • 为了测试自己还原的sign是不是可用,还是先解密响应数据

响应数据解密

  • 一般来说数据解密都会解密为json数据,直接去hook JSON.parse()方法
(function () {
    var my_parse = JSON.parse;
    JSON.parse = function (params) {
        console.log("HOOK parse", params);
        return my_parse(params);
    }
})();
  • 果然发现解析的数据
    爬虫---某翻译响应解密和sign逆向

  • 打断点定位到这个位置发现解密函数

爬虫---某翻译响应解密和sign逆向

  • 跟进参数发现是AES加密 128 cbc模式,现在只要知道key iv 就可以模拟了
    爬虫---某翻译响应解密和sign逆向

  • 经过跟进发现这里的key和iv是在原始的key上面又md5了之后获取了二进制数据转为了uint8数组来进行解密的

爬虫---某翻译响应解密和sign逆向

  • 继续跟进发现原始的数据解密为了一个大的uint8数组
    爬虫---某翻译响应解密和sign逆向

  • 尝试自己用python进行base64解码一下,发现数组不一样,说明他用了自己解码base64的方式

import base64

t1 = 'Z21kD9ZK1ke6ugku2ccWu-MeDWh3z252xRTQv-wZ6jddVo3tJLe7gIXz4PyxGl73nSfLAADyElSjjvrYdCvEP4pfohVVEX1DxoI0yhm36ysrEuPNKkODn7po6VcuUUdOhXRO9VoaHHPXgSaHRFizTx17FrMowUelZSlyO2Jp-9biXcOlcPxkntWQp1hPDqWu81kg8jzGxgjNOi75FsPNURfLQwSaoG83BqqTNs-LTrA1oUr9ozX7WYrui9n5voGo-P8tg3GMhKpjpC15FQRQZym6KbwDOTyTL8x87VIqwANWkuek5pPnzzlK6SxYY1I1le5EOpQnORyobm7rWr4gVp0cWI3W85cbXdMjaGSok8gQBF1rpqSF2c6CY-e5_Xihisj9hWT1VY472r7LxYbX8A2BkKHWr88pk_1Fwlk-wvn-Tx-heigVVSEFq1PRCzhB-JG4O6Zx_1YUZOSgrTHYAVrag2wsKExTRMZtxU4-7J3hXi8UYgNV-uLN0YvIRWZ0l6Vr-RAGBHu8UsmH2nHSCoanA6wHJbCv58RnYPws6OLsDAJWDnR0kp4Cr6Xm-P3zYVgXehfNyMBTewzDwbTXoSLK-HAIqZP-9T7MUxbN09aqa-CPS_eui99UqOhe780hIXNeSyHuTt5LY_PqhcLvPhkdmQch1RASrQBK4WYgEwiomPqHt_ap8DxDSOyhNsRFm8nFw1Ml1Tmr338WJPLYzUI51hqr85Tw0_9y_siScO098y26eSmBn58QZEjY5ip7IJiNIW93mLXx4Ftzg8LOgs4HRoBPuqu4PcAtXr652xE0Q30_roz2CnQ3Edp0HlDvo8KV7jbosXY_Sb4KWMwavSd-cebsVYKPq0ACaFj_iLXTV5zfQAIkjgJZzbY3N3pG_kfGGRw_0BTh7NeMeRmsuS0cMOgoE1GhQE2JaXH7q5X9oklIV1h60D8NaLUIHHZpjiWDML0cXYoNVQl8eQgxlO0PC129w3KSAGlZsaWbl-jEpap7rkNZsM9BhNcSKjOt8pBvQ3dQ2eDyMgJo28tNBA=='
a1 = base64.b64decode(t1)
print(list(a1))

爬虫---某翻译响应解密和sign逆向

  • 发现是经过,r.toByteArray方法转为了uint8数组

爬虫---某翻译响应解密和sign逆向

  • 那么只需要用python还原这个函数就可以了
    爬虫---某翻译响应解密和sign逆向

  • h函数检测字符串长度之类 i数组是一个固定生成的值

爬虫---某翻译响应解密和sign逆向

  • python还原base64转为数组代码

    因为i数组有很多空值,所以需要在python中以None替代,发现i数组为123个元素
    爬虫---某翻译响应解密和sign逆向

        def get_i():
            i = [None] * 123
            s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
            for index, a in enumerate(s):
                i[ord(a)] = index
            i[ord("-")] = 62
            i[ord("_")] = 63
            return i
    
        def h(t):
            e = len(t)
            if e % 4 > 0:
                raise "Invalid string. Length must be a multiple of 4"
            try:
                n = t.index("=")
            except ValueError:
                n = -1
    
            if n == -1:
                n = e
    
            r = 0 if n == e else 4 - n % 4
            return [n, r]
            
        def c(e, n):
            return int(3 * (e + n) / 4 - n)
            
        def base_64_2_bytes_array(t):
            # h函数
            r = h(t)
            s = r[0]
            a = r[1]
            # 用numpy创建一个全是0的uint8数组
            u = np.zeros(c(s, a), dtype='uint8')
            f = 0
            l = s - 4 if a > 0 else s
            n = 0
            # 获取i数组
            i = get_i()
            while n < l:
                e = i[ord(t[n])] << 18 | i[ord(t[n + 1])] << 12 | i[ord(t[n + 2])] << 6 | i[ord(t[n + 3])]
                u[f] = e >> 16 & 255
                f += 1
                u[f] = e >> 8 & 255
                f += 1
                u[f] = 255 & e
                f += 1
                n += 4
    
            if a == 2:
                e = i[ord(t[n])] << 2 | i[ord(t[n + 1])] >> 4
                u[f] = 255 & e
                f += 1
            elif a == 1:
                e = i[ord(t[n])] << 10 | i[ord(t[n + 1])] << 4 | i[ord(t[n + 2])] >> 2
                u[f] = e >> 8 & 255
                f += 1
                u[f] = 255 & e
                f += 1
            return u
    
    
  • 处理key和iv

    def get_md5(sb1: str):
        return hashlib.md5(sb1.encode()).digest()
    key = get_md5('ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHl')
    iv = get_md5('ydsecret://query/iv/C@lZe2YzHtZ2CYgaXKSVfsb7Y4QWHjITPPZ0nQp87fBeJ!Iv6v^6fvi2WN@bYpJ4')
    
  • 解密代码

    aes_obj = AES.new(key=key, iv=iv, mode=AES.MODE_CBC)
    a1 = aes_obj.decrypt(base_64_2_bytes_array(sb1).tobytes()).decode()
    print(a1)
    

    爬虫---某翻译响应解密和sign逆向
    解密完之后发现还有padding,还不能进行json转换,加个unpad

    aes_obj =AES.new(key=key, iv=iv, mode=AES.MODE_CBC)
    decrypt_str = aes_obj.decrypt(base_64_2_bytes_array(sb1).tobytes())
    json_str = unpad(decrypt_str, AES.block_size, style='pkcs7').decode()
    json_data = json.loads(json_str)
    print(json_data)
    

    爬虫---某翻译响应解密和sign逆向


sign参数逆向

  • 直接从调用堆栈中第一行打断点
    爬虫---某翻译响应解密和sign逆向
  • 查看调用堆栈看sign参数在哪生成的

爬虫---某翻译响应解密和sign逆向

  • 堆栈跟到这发现O函数生成的sign,继续跟值

t是个时间戳,sign为h函数生成

爬虫---某翻译响应解密和sign逆向

继续跟值就发现sign为字符串md5之后的十六进制字符串,多试几次之后发现只有时间戳的变化

爬虫---某翻译响应解密和sign逆向

Last

爬虫---某翻译响应解密和sign逆向

果然尝试请求之后大功告成 🐔🐔🐔🐔限单杀文章来源地址https://www.toymoban.com/news/detail-510687.html

到了这里,关于爬虫---某翻译响应解密和sign逆向的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【爬虫JS混淆分析】某网站票房响应数据加密(含JS补环境调用与Python解密算法)

    【作者主页】: 吴秋霖 【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作! 【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建

    2024年02月04日
    浏览(72)
  • 某物小程序sign逆向-记录

    评估了一下,逆向某物小程序要比APP简单,这篇文章主要记录一下小程序的反编译过程和sign的逆向。 小程序逆向的过程(以pc端小程序为例): 找到所需的接口、参数 找到小程序的wxapkg 解密小程序包(有些wxapkg有加密) 反编译小程序 找加密函数(扣js) 测试接口 这个接口

    2024年02月08日
    浏览(44)
  • web逆向笔记:js逆向案例四 QQ音乐 sign值(webpack打包代码如何扣取)

    一、webpack介绍: ​ Webpack 是一个模块打包工具,主要用于 JavaScript 应用程序。它可以将许多模块打包成一个或多个 bundle,从而优化加载速度和减少加载时间。Webpack 可以处理各种资源,包括 JavaScript、CSS、图片、字体等,并且可以将其转换为浏览器可以理解的格式。 Webpack

    2024年04月25日
    浏览(50)
  • 请求数据通过URL加入sign验证加密与解密

    不少网站做数据反爬虫会做一系列的的措施,就包括这里要说的url加密,例如如下url是请求b站游戏id为109905的游戏的评分数据 (无意冒犯,仅首页随机选取做学习案例使用): https://line1-h5-pc-api.biligame.com/game/comment/summary?game_base_id=109905ts=1679988261931request_id=YKceEELUnX5m4aELQACuqX2mG48wv13Bapp

    2024年02月08日
    浏览(35)
  • 小程序新手入门逆向案例来伊某x-co-sign

    声明:本文仅限学习交流使用,禁止用于非法用途、商业活动等。否则后果自负。如有侵权,请告知删除,谢谢!本教程也没有专门针对某个网站而编写,单纯的技术研究 目标案例:5b6u5L+h5pCc57SiLeWwj+eoi+W6j+adpeS8iuS7veS6keW6ly0t6Zeo5bqX5L+h5oGv 对应接口和难点 我这边使用的是 charle

    2024年02月12日
    浏览(37)
  • openssl 加密(encrypt)、解密(decrypt)、签名(sign)、验证(verify)

    上述方式可以确认身份,如果我用这个公钥能解密,那一定是你发送的,因为私钥只有你有 [kyzjj@yyzc-zjjcs04 openssl]$ openssl rsautl -encrypt -inkey public.key -pubin -in test -out en-test [kyzjj@yyzc-zjjcs04 openssl]$ [kyzjj@yyzc-zjjcs04 openssl]$ openssl rsautl -decrypt -inkey private.key -in en-test hello world [kyzjj@yyzc

    2024年02月11日
    浏览(41)
  • 【python】js逆向基础案例——有道翻译

    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 课程亮点: 1、爬虫的基本流程 2、反爬的基本原理 3、nodejs的使用 4、抠代码基本思路 环境介绍: python 3.8 pycharm 2022专业版 免费使用教程文末名片获取 requests pip install requests nodejs 思路流程: apple 请求加密 我们传过去的 内容 经过

    2024年02月09日
    浏览(44)
  • 【python】python结合js逆向,让有道翻译成为你的翻译官,实现本地免费实时翻译

    ✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN新星创作者等等。 🏆《博客》:Python全栈,前后端开发,人工智能,js逆向,App逆

    2024年03月23日
    浏览(43)
  • 微信小程序逆向解密

    WeChatAppEx.exe 版本:2.0.6609.4 以融智云考学生端为例。 网上已经有关于微信小程序解密的非常优秀的文章,本着学习的目的便不参考相关内容。 笔者水平实在有限,如发现纰漏,还请读者不吝赐教。 工具:火绒剑 首先看看打开一个小程序微信做了点什么,对微信进行火绒行为

    2024年02月11日
    浏览(48)
  • JS逆向 webpack解密

    声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 前言:我技术可能不是很牛逼,但我很会偷懒,怎么简单怎么来,所以有更好的解密方法可以在评论区评论~ 目标网站:这个网站很坑,那个验证字段搜不到,XHR断点也断不到,就

    2024年02月06日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包