安全矩阵

 找回密码
 立即注册
搜索
查看: 375|回复: 0

js逆向实战:sign签名破解

[复制链接]

17

主题

17

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2024-6-10 10:57:43 | 显示全部楼层 |阅读模式
js逆向实战:sign签名破解
[color=var(--weui-FG-HALF)]简介
最近在渗透过程中,多次碰到请求数据加密或者加签名的情况,说实话碰到这种就有点怯战,为了彻底解决这个问题,学习了js逆向相关的知识,找了个有签名的网站进行实战。
是一个这样的功能点:根据输入的用户名获取手机号,请求包如下:
可以看到总共有4个参数:ver、mt、username和sign,当我改变ver、mt、username三个中的任意一个值时,服务器都会返回签名错误,初步判断sign是由这三个值共同生成的。
寻找生成签名代码
可以看到api接口是/api/member/getMobile,首先尝试添加XHR断点:
点击获取手机号,成功截断,但是发现这时候sign值已经生成了,行不通:

只能换一种方法,找到请求的数据包,查看这个请求调用的堆栈,发现了一个比较可疑地:LoginForm,登录表单的意思

于是点击查看对应的js,找到了类似签名的地方:

直接在sign: M({ 处添加断点,点击获取手机号,果然在这里截断,使用“单步调试”跟进,跳转到function g5(e)处,并且传过来e的值就是我们输入的用户名

使用“跳过下一个函数调用”跟进,很快便发现经过IQ(o)函数后,产生了一个类似sign的值,基本上确认产生签名的代码就在这里,于是在o = IQ(o).toString()处添加一个断点,但是并没有看到mt和ver参数。

于是继续调试,发现跳转到了一开始的地方:
继续使用“跳过下一个函数调用”跟进,发现又跳转到了function g5(e)处,并且e的值包括用户名、mt以及ver,这样一来就确认了产生签名的函数。
进一步调试验证,发现这里生成的sign就是最后请求使用的sign:
扣JS代码
先把g5函数拿下来,放到sign.js中

然后使用python中的execjs库调用g5函数

运行python脚本直接报错:

可以明显看到g5函数中是靠IQ()函数来产生签名的,因此还要找IQ()函数,于是直接在g5函数所在的js文件中搜索 IQ( 和 IQ = (这是两种定义函数可能的方法),成功找到了定义IQ函数的地方:


把这段代码接着补充到sign.js文件中,运行python代码又报错了,这回是没有TQ函数:

同样的搜索 TQ = 和 TQ( ,成功找到:
成功破解sign签名
接着把这段代码添加到sign.js中,运行python代码,成功生成sign值

拿着生成的sign去进行验证,发现确实有效,注意请求包中的ver、mt的值要和python脚本中的一致:
至此,sign签名的生成已成功逆向。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-9-8 12:39 , Processed in 0.014427 second(s), 20 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表