前言
相信有抓取过“栽(cai)花(pan)文书”、“智(zhi)障(lian)招聘”的虫师们,都应该见过MmEwMD这串神秘的参数,皆因有了它的存在,导致各位虫师都不能在好好的玩耍爬虫了,那么这串神秘的参数到底是什么呢?今天就让我们一起来好好地探讨下吧,在开始之前,欢迎大家加入我们的QQ技术交流群:544185435 ,我们将不定期更新爬虫类相关文案与视频教学哦!
关于MmEwMD
“MmEwMD” 这串神秘的参数,我最早看到是在17年年底,当时有个网友私聊我,问我能否逆向这个加密,于是,我便应它需求,先到网上科普了下相关的讯息,我发现,当时已经有好多网站已经采用了该加密算法,且已经有大A在相关网站发布过相关帖子,更有某些雇主曾为逆向该加密价格开到7K+,但最后有没有成功我不清楚。
在通过一段时间的分析和科普后,我发现这个加密算法是由端(rui)数公司提供的,该算法有以下特征:
页面的meta标签包含:9DhefwqGPrzGxEp9hPaoag 字段
document.cookie 包含: FSSBBIl1UgzbN7N 开头的字段
页面加密的JS全动态生成,每次刷新页面后,所有字段、值包括算法结构整体都会改变。
但凡使用了该加密,只要发送了xhr请求,都默认会自动携带 MmEwMD 参数,该功能通过hook open函数实现。
加密代码全经过高度混淆,基本所有字段或值都类似这样 _$xX,可读性为0
部分网站还启用了反调试功能,意味着你一旦打开debugger工具则自动断点,不断死循环直到CPU资源耗尽,但并非所有网站都开启了该功能。
如何对抗反调试
对于网站的反调试这一问题,相信一直困扰着不少的同胞吧?我也没有很好的办法(只怪自己学艺不精)目前我的做法是在网页加载前通过插件去替换debugger所在的函数,或者通过中间人代理篡改,但这对于动态释放的JS加密并没有任何效果,对于这种页面,我是直接在控制台重写函数,如果大家有更好的方式欢迎留言探讨!
如何快速找出加密入口?
这里我们将通过某站(为了规避不必要的麻烦,本站后续的文章都将不再提供站点名称及相关信息,敬请谅解!)作为演示,我们可从中看到该链接包含了 MmEwMD 字样,可以说,但凡发送了请求都会看到这串参数。
从上图我们可以看出,在chrome里全局搜索 MmEwMD 并不能找到任何相关的东西,是的,这串参数是纯动态生成,那么为了减少不必要的麻烦,我们接下来将直接通过钩子来捕获这个参数的加密入口。(钩子脚本将在文末附件提供)
通过钩子,我们便可非常轻松的就将其捕获,它目前在发送这条链接之前被强制断了下来,那么现在离它的加密入口就非常的接近了,我们再往下看看。
在经过对堆栈信息分析后,我们不难发现,它是在:arguments[1] = _$me(arguments[1]); 这句代码中生成的加密串,那是不是直接在 arguments[1] 这行下断点就能进入加密入口了呢?
很遗憾, arguments[1] 处并不能作为断点的落脚位,因为开头也说过了,这套加密的js都是全动态生成的,同时也是经过高度混淆的,那么如果以此作为断点的话,下一次刷新肯定就找不到了,所以我们再往下分析后最终定位到i.send(b, k)这个方法中,我们发现在刷新后断点也依旧生效,那么我们要做的就是按F11一步步的寻找入口了。
在按了几次F11后,我们回到了刚那个 arguments[1] 之中,这时,我们执行_$i2(arguments[1]) 便惊讶的发现,它的确生成了加密,由此可见它便是我们寻找的加密入口了。
最后让我们一睹加密的函数的样子吧,别怀疑,它的可读性真的只有0%,由于该加密算法许多网站曾使用,大家可以在百度或谷歌通过关键词: MmEwMD 、 9DhefwqGPrzGxEp9hPaoag 找到。
网友评论