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

目标网址接口:aHR0cHM6Ly9kaWN0LnlvdWRhby5jb20vd2VidHJhbnNsYXRl

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

调研接口

  • 查看每次请求的参数发现,每次请求sign参数和mysticTime参数都会变
    在这里插入图片描述

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

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

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

在这里插入图片描述

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

响应数据解密

  • 一般来说数据解密都会解密为json数据,直接去hook JSON.parse()方法
(function () {var my_parse = JSON.parse;JSON.parse = function (params) {console.log("HOOK parse", params);return my_parse(params);}
})();
  • 果然发现解析的数据
    在这里插入图片描述

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

在这里插入图片描述

  • 跟进参数发现是AES加密 128 cbc模式,现在只要知道key iv 就可以模拟了
    在这里插入图片描述

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

在这里插入图片描述

  • 继续跟进发现原始的数据解密为了一个大的uint8数组
    在这里插入图片描述

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

import base64t1 = '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))

在这里插入图片描述

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

在这里插入图片描述

  • 那么只需要用python还原这个函数就可以了
    在这里插入图片描述

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

在这里插入图片描述

  • python还原base64转为数组代码

    因为i数组有很多空值,所以需要在python中以None替代,发现i数组为123个元素
    在这里插入图片描述

        def get_i():i = [None] * 123s = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"for index, a in enumerate(s):i[ord(a)] = indexi[ord("-")] = 62i[ord("_")] = 63return 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 = -1if n == -1:n = er = 0 if n == e else 4 - n % 4return [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 = 0l = s - 4 if a > 0 else sn = 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 & 255f += 1u[f] = e >> 8 & 255f += 1u[f] = 255 & ef += 1n += 4if a == 2:e = i[ord(t[n])] << 2 | i[ord(t[n + 1])] >> 4u[f] = 255 & ef += 1elif a == 1:e = i[ord(t[n])] << 10 | i[ord(t[n + 1])] << 4 | i[ord(t[n + 2])] >> 2u[f] = e >> 8 & 255f += 1u[f] = 255 & ef += 1return 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)
    

    在这里插入图片描述
    解密完之后发现还有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参数在哪生成的

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

Last

在这里插入图片描述

果然尝试请求之后大功告成 🐔🐔🐔🐔限单杀

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/4621.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】—— 进程的环境变量

序言&#xff1a; 在上期我们已经对进程PCB以及进程状态进行了详细的解释说明。今天&#xff0c;我将带领大家学习的是关于进程的环境变量的问题。 目录 &#xff08;一&#xff09;孤儿进程 1、基本介绍 2、代码演示 &#xff08;二&#xff09;环境变量 1、基本概念 2…

RedmiBook Pro 15S AMD Ryzen 7 5800H电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。&#xff08;下载请直接百度黑果魏叔&#xff09; 硬件配置 硬件型号驱动情况 主板RedmiBook Pro 15S 2021 处理器AMD Ryzen™ 7 5800H已驱动 内存16 GB 3200 MHz DDR4已驱动 硬盘Samsung 970EVO 512GB已驱动 显卡HD …

SpringMVC (一) 什么是SpringMVC

一、回顾MVC 1.1、什么是MVC MVC是模型(Model)、视图(View)、控制器(Controller)的简写&#xff0c;是一种软件设计规范。是将业务逻辑、数据、显示分离的方法来组织代码。MVC主要作用是降低了视图与业务逻辑间的双向偶合。MVC不是一种设计模式&#xff0c;MVC是一种架构模式。…

红色通信史(二):半部电台起家

上一期&#xff0c;我给大家介绍了“四一二”反革命政变后&#xff0c;我党在上海开通了第一部秘密电台的过程。 秘密电台的开通&#xff0c;标志着我党通信事业正式起步。然而&#xff0c;没过多久&#xff0c;顾顺章叛变&#xff0c;给上海党组织带来了极大的破坏。于是&…

论文笔记--Goat: Fine-tuned LLaMA Outperforms GPT-4 on Arithmetic Tasks

论文笔记--Goat: Fine-tuned LLaMA Outperforms GPT-4 on Arithmetic Tasks 1. 文章简介2. 文章概括3 文章重点技术3.1 LLM的选择3.2 算数任务的可学习性(learnability)3.3 大模型的加减乘除 4. 数值实验结果5. 文章亮点6. 原文传送门7. References 1. 文章简介 标题&#xff…

Java基础---为什么不能用浮点数表示金额

目录 缘由 十进制转二进制 不是所有数都能用二进制表示 IEEE 754 避免精度丢失 缘由 因为不是所有的小数都能用二进制表示&#xff0c;所以&#xff0c;为了解决这个问题&#xff0c;IEEE提出了一种使用近似值表示小数的方式&#xff0c;并且引入了精度的概念这就是我们所…

Day6——Web安全基础

网络安全学习笔记Day6 Web安全基础 一.Web简介什么是Web&#xff1f;什么是因特网&#xff1f;互联网&#xff0c;因特网&#xff0c;万维网的关系万维网构想的诞生http协议URL 二.Web发展史Web1.0Web2.01.0与2.0的区别Web1.0的安全漏洞Web2.0的安全漏洞 三.杂项门户网站静态页…

tomcat接入skywalking

tomcat接入skywalking 一、说明二、步骤2.1 准备java-agent包2.2 tomcat部署2.2.1 下载2.2.2 tomcat修改catalina.sh文件2.2.3 tomcat修改启动端口2.2.4 启动tomcat 三、验证四、问题排查4.1 tomcat的启动日志 一、说明 服务器中已经运行着skywalking&#xff0c;准备在同一台…

Spring Boot实战:拦截器和监听器的应用指南

当使用Spring Boot时&#xff0c;我们可以通过拦截器&#xff08;Interceptor&#xff09;和监听器&#xff08;Listener&#xff09;来实现对请求和响应的处理。拦截器和监听器提供了一种可插拔的机制&#xff0c;用于在请求处理过程中进行自定义操作&#xff0c;例如记录日志…

智慧文旅VR全景展示,深度VR沉浸式体验

导语&#xff1a; 智慧文旅VR全景展示为我们带来了一种独特的旅行体验&#xff0c;让我们可以穿越时空、身临其境地感受历史、艺术和自然的魅力。 在这个数字化时代&#xff0c;智慧文旅VR全景展示成为了旅游界的新宠&#xff0c;它让我们能够以一种前所未有的方式探索世界&am…

Django之ORM

一、Django模型层之ORM介绍 使用Django框架开发web应用的过程中&#xff0c;不可避免地会涉及到数据的管理操作&#xff08;增、删、改、查&#xff09;&#xff0c;而一旦谈到数据的管理操作&#xff0c;就需要用到数据库管理软件&#xff0c;例如mysql、oracle、Microsoft S…

梁宁:VisionPro、GPT、Web3三件套齐备,元宇宙开启

本文内容整理自图灵社区对谈栏目直播&#xff0c;主题为 ChatGPT 真需求&#xff0c;从产品的第一性原理解析。 上篇内容回顾&#xff1a;梁宁&#xff1a;为什么中国没有像 ChatGPT 和 Vision Pro 这样的创新产品&#xff1f; 梁宁&#xff0c;产品战略专家&#xff0c;曾任湖…