js逆向实战:sign签名破解
2024-4-22 14:53:34 Author: mp.weixin.qq.com(查看原文) 阅读量:18 收藏

简介

最近在渗透过程中,多次碰到请求数据加密或者加签名的情况,说实话碰到这种就有点怯战,为了彻底解决这个问题,学习了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签名的生成已成功逆向。

如果你是一个长期主义者,欢迎加入我的知识星球,我们一起往前走,每日都会更新,精细化运营,微信识别二维码付费即可加入,如不满意,72 小时内可在 App 内无条件自助退款
前面有同学问我有没优惠券,这里发放100张100元的优惠券,用完今年不再发放

往期回顾

dom-xss精选文章

年度精选文章

Nuclei权威指南-如何躺赚

漏洞赏金猎人系列-如何测试设置功能IV

漏洞赏金猎人系列-如何测试注册功能以及相关Tips

回复jspy获取相关代码

原文:https://xz.aliyun.com/t/14290

如有侵权请联系号主删文


文章来源: https://mp.weixin.qq.com/s?__biz=MzIzMTIzNTM0MA==&mid=2247494360&idx=1&sn=42d6ef3d022cf83c5e4b94d81af38412&chksm=e8a5e0bbdfd269ad7dbddd1bd4e9c01422e7cfc93ad2f14985b901f62892bc55a999605dfe4e&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh