轻JS逆向分析“攒经验”项目之某交易所Sign加密参数逆向分析
最近忙着在搞大数据相关的东西,没什么太多时间去研究复杂的JS,所以给大家来几个练手的网站“攒攒经验”吧!这次出的系列是《轻JS逆向分析“攒经验”项目》,之所以是“轻”,也表明这些案例并不复杂,也是为了多给大家练手,“攒经验”用的。
这篇文章是公众号《云爬虫技术研究笔记》的《JS逆向分析“攒经验”项目》的第一篇:《某交易所Sign加密参数逆向分析》
《JS逆向分析“攒经验”项目》的相关代码在代码库
https://github.com/lateautumn4lin/Review_Reverse/tree/master/Light_Js_Analysis
本次案例+代码都已推送到下面的代码库
https://github.com/lateautumn4lin/Review_Reverse/tree/master/Light_Js_Analysis/xmc
懂的老哥记得素质三连哈!ღ( ´・ᴗ・` )比心
1. 分析网站
1.1 分析网站网址
Base64加密:aHR0cHM6Ly93d3cubXhjLmlvLw==
1.2 分析网站缘由
这次分析是因为看到“XX群”里有单子关于解密一个交易所的请求中Header参数的某个加密字段,经过后来对该群主的询问,该单子的价格大概是400左右。
2. 分析步骤
下面开始我们正式来分析这个网站,因为聊天记录中没有提到具体的API请求,所以我们只是先找找哪个请求中包含了加密参数。
2.1 找准加密参数的请求
经过不断的寻找,最后发现在登录状态下点击主页的购买请求中就包含了该加密参数
2.2 找到加密块的位置
一般知道我们需要解决什么加密参数,第一步都是全局先搜搜该参数,也就是“x-mxc-sign”看看有没有相关的代码涉及到它
很遗憾!并没有,那么我们就给这个XHR请求下个XHR断点,看看请求的调用栈
添加XHR断点,重新修改首先的参数值,重新让该请求复现下
代码已经断在这个地方,看看这块代码的前后文
可以看到这里
k = [M[23], M[26], M[12], M[23], M[2], M[26], M[18], M[8], M[6], M[13]].join("")
k = "x-mxc-sign"
n[C][k] = b
从上面可以看出,加密参数名称x-mxc-sign是由字符串拼接出来的,难怪之前全局搜索不到,而且跟k值相关的就是n[C][k] = b,所以推测b的值可能就是加密后的值,我们再具体看看n[C]的值是什么
可以看出n[C]是个哈希表,那么n[C][k]就是给某个字典的参数x-mxc-sign赋值b,所以我们现在重点关注b的生成方式
整个生成方式还是比较清楚,根据图里面的方式,我们现在只需要了解v()和y.k以及u是什么就行了,这里我们现在console里面查看他们具体的值是什么,然后根据这个值去调试测试
- 参数u是u_id,是个写死的值,我们不用去管它
- v()是个md5函数,之后我们可以在调试的时候具体测试
- Object(y.k)根据图上的Js代码可以看出,是跟Cookie有关的计算
有了上面的分析,我们开始调试,看看和我们的分析是否一样
在b、p、g这三个我们需要的点那里下断点,开始新的调试
首先先看看p的生成
上面的意思是查询Cookie中‘u_id=’这个字符的位置,然后如果有的话,记录索引为n,并赋值n为n+1+4(u_id的长度),再令t值为从n的位置开始算起第一个‘;’的位置,最后获取Cookie在长度区间为[n,t]的字符,其实大家会发现就是获取u_id的值(妈的,搞的这么复杂!)
翻译成Python大概就是
def get_p():index = _cookie.split(";")for i in index:if "u_id" in i:return i.split("u_id=")[-1]```
p的话没有什么特别大的问题只要知道v()是不是md5就行了,测试的过程中能够发现md5的计算过程,所以很明显,直接搞起
翻译成Python大概就是
def get_r() -> str:return str(int(round(time.time() * 1000)))def get_g():p, r = get_p(), get_r()return get_md5(p+r)[7:],r
最后是获取我们目标的b值,公式是b = v()(r + s + g),其中s是formdata的序列化,然后其他同上
翻译成Python大概就是
def get_b(formdata) -> str:g, r = get_g()s = get_s(d=formdata)return get_md5(r+s+g)
到这里我们差不多就全部重写好了,接下来看看完整的代码
2.3 重写加密代码
根据上面的逻辑,整理的代码如下
import hashlib
import time
from typing import Dict
_cookie = "_ga=GA1.2.100938634.1582370964; _gid=GA1.2.927816681.1582370964; aliyungf_tc=AQAAABMm4j8LogsA5hre3Rf4QxA6bkWH; u_id=WEBabc27b4227ca5b27cb3e4fe61cf49d26d47eacdbefadefb28106cee6ef801cc4; account=l************%40163.com"def get_md5(string: str) -> str:hl = hashlib.md5()hl.update(string.encode(encoding='utf-8'))return hl.hexdigest()def get_p() -> str:index = _cookie.split(";")for i in index:if "u_id" in i:return i.split("u_id=")[-1]def get_r() -> str:return str(int(round(time.time() * 1000)))def get_g() -> str:p, r = get_p(), get_r()return get_md5(p+r)[7:], rdef get_s(d: Dict[str, str]) -> str:return "&".join(f"{k}={v}" for k, v in d.items())def get_sign(formdata) -> str:g, r = get_g()s = get_s(d=formdata)return get_md5(r+s+g)
2.4 测试
代码整理好之后,简单的测试下,首先我们让t的值也就是r值为固定时间测试我们的程序和网站自己计算的x-mxc-sign值是否是一样的
可以看到,程序输出的值和原始值是一样的,现在我们再测试对方的网站也是可以直接访问到的,证明我们已经完成了整个加密参数的逆向分析。
3. 分析复盘
经过我们的分析和测试,现在已经可以正确的去请求该交易所的API了。我们简单的来复盘下这次的分析流程,我们通过几个关键点来回忆下:
- 加密参数在请求中的位置(消息头Header/消息体Body等等)
- 用什么方法下断点
- 如何寻找进一步下断点的地方
- 调试分析+重写JS
通过以上几点我们能够很明确的理清这次分析的整个思路,也为我们之后再遇到类似的Header请求头参数加密提供了一丝丝“经验”,这次算是个简单的“攒经验”项目,大家还有类似的“轻JS逆向分析”的案例可以给我提供,我也会再去发掘类似的案例给大家来分析分析。
轻JS逆向分析“攒经验”项目之某交易所Sign加密参数逆向分析相关推荐
- (最新)唯品会WEB端加密参数逆向分析
最新某品会商品详情接口加密参数逆向分析 一.明确加密参数 二.加密参数的逆向分析和算法还原 2.1 authorization的逆向分析和还原 2.2 mars_sid 的逆向分析和还原 2.3 ma ...
- 爬虫 某音海外版用户主页翻页x-tt-params加密参数逆向分析
某音海外版用户主页翻页x-tt-params加密参数逆向分析 前言-碎碎念 x-tt-params 前言-碎碎念 这个x-tt-params加密参数一个月前搞出来了,最近一直在忙,没时间写文章,今天补 ...
- 安卓逆向小案例——阿里系某电影票务APP加密参数还原-Unidbg篇
安卓逆向小案例--阿里系某电影票务APP加密参数还原-Unidbg篇 一.前期准备 使用unidbg还原参数时,首先需要找到指定的native方法和对应的so文件.而锁定生成加密参数的native方法 ...
- 【JS 逆向百例】某公共资源交易网,公告 URL 参数逆向分析
声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标 目标:某地公共资 ...
- js取字符串后四位_JS逆向 | 某验滑块加密参数逆向分析
声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! aHR0cHM6Ly93d3cuZ2VldGVzdC5jb20vZGVtby9zbGlkZS1mbG9hdC5od ...
- python爬虫之逆向破解_js逆向爬虫实战(2)--新快之加密参数破解
爬虫js逆向系列 我会把做爬虫过程中,遇到的所有js逆向的问题分类展示出来,以现象,解决思路,以及代码实现.我觉得做技术分享,不仅仅是要记录问题,解决办法,更重要的是要提供解决问题的思路.怎么突破的, ...
- 对某热水软件的加密参数逆向
前言 就是开始某学校使用某软件来使用热水开关,我个人挺喜欢这种模式的,因为以前用热水卡的时候,一直有掉的风险.充卡也不大方便.现在用软件就可以直接使用了,不用再担心掉卡了,充钱也方便许多.但秉持着学习 ...
- 数据爬取 js 分析(二):对加密参数进行 js分析
接着上期对 post 请求中 form data 数据加密的分析,今天我们接着进行 get 请求中 加密参数的分析. 一.实例网站 本实例的网站是七麦数据中国 App Store 排行榜,继续学习使用 ...
- qq音乐登录参数详细分析及密码加密最新版
QQ音乐网页版登录参数全解析 大家可以关注我的 Github https://github.com/GitHub-ZC/ 大家可以加入我的 QQ群 大家可以关注一下我的微信公众号:每天都有精彩资源推荐 ...
最新文章
- matlab定积分上界求解,定积分问题的数值求解及Matlab实现.pdf
- 笔记-高项案例题-2016年下-项目收尾
- linux查找文件find
- java输入数量扑克牌排序_Java扑克游戏(多人多牌数比较游戏)的实现
- python tkinter输入框_python TKinter获取文本框内容的方法
- Swift语言快速入门
- pinctrl虚拟spi的linux驱动,linux内核pinctrl驱动的理解和总结
- day18 面向对象
- 标题:a 和 a的区别
- type或者xtype总结
- React Native 仿天猫物流跟踪时间轴
- 虚幻引擎和实时3D技术人才的需求已达到空前高度
- 夏普利值:全排列边际效益的平均
- 2021年2月20日 星期六 初九 霾
- jQuery调用JSON数据学习第一天
- 淘宝秒杀半价前N名半价商品
- 大数据基础(林子雨版)
- javaSE探赜索隐之三--<类与对象的爱恨情仇下>
- funny pics
- 你不知道的颠覆式创新者
热门文章
- javascript 日期 新历 农历 生肖 农历节庆 总结
- 天线与雷达之间是如何区分的?
- 为什么DNS监测能够让你的网络更加安全
- 可视化财务报表不会做?那是你没用对报表工具
- Teamviewer11现在无法捕捉屏幕画面。这可能是由于快速的用户切换或远程桌面会话断开/最小化。...
- Android 10.0默认开启(关闭)移动数据流量
- 基于stm32的智能宠物喂食器
- 一个js写的桌面倒计时(请高手帮忙改一下)
- 计算机视觉辅助系统价格,驾驶辅助系统计算机视觉技术
- [反汇编练习] 160个CrackMe之025