声明:
本文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!若有侵权,请添加(wx:wyqlxl99)联系删除
前言:
最近忙公司业务忙坏了,感觉好久没有搞逆向了,这不刚好有一天抽空水群的时候看到某某点评新增了一个mtgsig的参数,还会出现403的问题(估计是加密不对吧)那我就去看看是何方神圣!
打开登入界面发个包,找到了我们定位的这个请求头参数mtgsig
直接搜我们可以定位到这个部分,这个部分可以得到的信息就是 H5guard.sign是一个加密方法而且还是异步的加密之后then拿到e.headers.mtgsig的值给r后跳转下一步n.headers.mtgsig=r则将生成的值复制给请求头
我们跳转到下面那个断点可以看到请求头的加密值已经出来了,那就证实我们的想法没错。
那我们直接跟进去看看
进来之后我们可以看到确实构造了一个异步函数,那我们要做的就是找到加密的位置,进来之后我们可以单步走看一下是哪里加密出来的这个值,我们看一下这个三元表达式,可以看到一个值为true,那肯定是走hQ = he(hQ, !0)这个方法控制台执行he(hQ, !0)查看返回值可以看到headers下出现了mtgsig至此加密入口就找到了
跟进去he之后可以看到很大的控制流,但是我看怎么还会有堆栈?好像又是一个vmp,接下来有两种方法第一种补环境(对大部分网站推荐这种方法、兼容性强、上手难度不高)、第二种扣算法(一些难度较高的网站扣算法执行速度快、上手难度比补环境偏高)。
本人这边不是很喜欢刷刷补一堆环境、这边用插桩扣算法的形式。单步进到case2下面后可以看到还有一个很大的vmp,通过插桩我们可以将一些运算符以及call的位置插桩即可知道算法是如何运行的这个在vmp中的算法整体是比较短的,大部分都是调用外部单独的一个方法执行得到了结果
通过扣扣算法和还原算法不到500行就可以生成mtgsig的值了!那我们接下来怎么验证呢?当然是通过接口验证
通过接口测试发现未返回403则是mtgsig加密有效,在这个过程中大家大概率会遇到一个问题(我也遇到了)就是加密值对过了是对的,但是发现请求的时候怎么也过不去,对于这个问题我也排查了好久最终锁定在请求参数和加密明文传参不一致。
这边我放一下我加密前的明文传参,仅供参考毕竟每个人可能写的算法是不一样的。
有兴趣的可以加入我的星球后续会持续分享和更新!