本教程仅限于学术探讨,也没有专门针对某个网站而编写,禁止用于非法用途、商业活动、恶意滥用技术等,否则后果自负。观看则同意此约定。如有侵权,请告知删除,谢谢!
目录
前言
一、先分析下接口参数
二、开导mtgsig
1.找加密入口
2.扣算法
3.验证算法
前言
最近了工作也不是很忙了,也不知道搞哈网站,今天就来搞搞大众点评的mtgsig网站如下👇
aHR0cHM6Ly9tLmRpYW5waW5nLmNvbS9zaG9wbGlzdC8xL3NlYXJjaD9mcm9tPW1fc2VhcmNoJmtleXdvcmQ9JUU5JUJCJTkxJUU2JTlBJTk3JUU2JTk2JTk5JUU3JTkwJTg2
提示:以下是本篇文章正文内容,下面案例可供参考
一、先分析下接口参数
1.先来看下加密的isoapi/module路由接口,其中的mtgsig就是加密的字段了,a1、a2明文其它未知,d1长得挺像md5的
2.然后提交的表单呢也有个_token的加密字段,怎么说呢,总体看着有点像base64的编码,好了,接下来就可以开始我们的逆向分析了
二、开导mtgsig
1.找加密入口
先看下堆栈,搞过来网站有了一点的经验一般入口都是在anonymous中,多看几个就知道是哪里了,第一个anonymous是混淆的直接就生成了mtgsig,其它的呢看着也不太像先看下tryCatch
进来呢就是异步操作,进入看下它执行的异步函数内部是什么鬼玩意
先大概大胆的猜测一下这个switch干了什么鬼操作,case 24 这个跳转应该就是变量的初始化定义了,case 13 就是堆加密的内容赋值了,其它跳转肯定就是加密入口或者是其它七七八八的小操作
通过漫长的单步跟,来到case 47处,这里可以看见它将一些请求头、参数、请求方法等初始化好了,传入了一个叫 h2 的函数中,这个函数想必就是加密入口了,ojbk进入看看
进来又是异步操作,跟我搁这套娃呢???,大致看下它干了啥,看着一个像是get与post的判断,又或者是版本的判断,这玩意不管,扣加密就对了,调用gW可以看到mtgsig加密结果出来了,肝它
2.扣算法
大概的解读一下hr ? g4 : g5之前的操作干了什么,已知 hq、hr明文,hI是URL的路由参数并进行了b(1143)·sort·自定义排序函数,全扣也好还原也罢,这么快怎么来吧这里没啥难度
然后看下g4了,这个g4呢其实也不难,它目前好像还不校验这个参数,全局查找一下g4,欸可疑的地方不就来了吗,断点上看看什么鬼玩意
步入看下,好像把一些浏览器环境啥的给加密了,cw就是编码转换没啥东西,主要还是看看dd干啥了
一进去就看见欸,AES?那没事了,经过后期的测试也发现这个值应该没有检测那就用AES模仿一下就好了,跳过它
'h1.3' + CryptoJS.AES.encrypt(timer.toString(), CryptoJS.enc.Utf8.parse('z7Jut6Ywr2Pe5Nhx'), {
'iv': CryptoJS.enc.Utf8.parse('0807060504030201'),
'mode': CryptoJS.mode.CBC,
'padding': CryptoJS.pad.Pkcs7
}).toString(CryptoJS.enc.Base)
好了恶心的东西它来了,switch循环语句,仿佛看见太奶在向我招手,四五百行代码,不过淡定不慌量大而已小问题😓,到这里某些人可能就不会扣了,当然你也可以补环境,这里就不展示补环境的操作了,单扣算法,还原呢?你都单扣出来了还原python算法还难吗?
如果经验不足可能就有些棘手,不过问题不大,慢慢来总会有导出来的一天,这里呢就不展示怎么扣了,大概说下重点,就自己慢慢单扣了,这循环中主要是在于其中的两个call,这两个是重中之重,断上点多调试几次你就找到其中奥妙了
像这些push了函数入参的你就要注意了,这些都是加密要用的转码操作,可千万不要遗漏掉了,不然加密可就对不上了
像这些带有运算的也记得插上装,免得遗漏了算法运算的内容,小提示:d1的后半部分就靠这些运算得出的,最好都打上日志
最后呢,你的每一步运算结果都必须对得上scope中的参数值,不然有些小伙伴就找不到北了,哟呵为什么我加密不能用😀
3.验证算法
阿巴阿巴,莫名其妙的就扣完了,欸呀呀完事
最后验证一下结果能不能用吧,OJBK,结果当然是能用的啦
总结
好了到此文章就结束了,还有一件事,d1后半部分是运算过的注意了, WEBDFPID的生成很简单,至于_token嘛,置空都可以暂时没用上就没写上面了,WEBDFPID的话呢也是随机数所以啊,固定就行了,反正后端应该没有检测置空都可以,也有可能是蜜罐让你进去在封IP至于属于哪一种自己测试咯,拜拜~