anti_content存在多种扣法,今天讲一种较为简单的方法。
anti_content加密JS分析
网页端是个AJAX,搜索我的书《反爬虫AST原理与还原混淆实战》,当然不要在这个网站买,盗版太多了,请支持正版。
直接下拉在XHR页就能找到请求包,主要是其中的anti_content。
全局搜索anti_content后,在可疑的地方都下断点,当然断点并不多,然后再拉取页面就可以定位到下边。
发现在这里已经生成了anti_content,只好从调用栈向上回溯。
发现也已经生成了,但是上边有个函数名很显眼,叫做getAnticontent,进去看看,找到了这个东西,这个时候还没生成呢,显然走对路了:
继续往下跟,进入invoke函数里分析,看起来东西很多,不过仔细一看,函数调用其实也就几个而已,硬跟(我硬跟可以解决大部分问题,只是太耗费时间),一个一个看,只有 c(e, t, n)这个可以进去。
硬跟进去之后,结果又来了一个轮回,也就是把上边的操作又进行了一遍,跟一圈又回来了 c(e, t, n),继续跟,这次有收获。有新函数了,下边的initRiskCntroller和messagePackSync怎么那么像加密入口。
进去之后,又把轮回操作跟了一遍,再次messagePackSync,不要慌,这次真的来到加密文件了:
直接去看返回值,就是 r[e("0xfa", "Vta9")](n, r[e("0x108", "wFxG")](Vt))。
当然不会混淆的可以看我和膀子的书《反爬虫AST原理与还原混淆实战》。
分析一下,很简单的混淆:
r[e("0xfa", "Vta9")]=ƒ (t,n){return t(n)}
r[e("0x108", "wFxG")=ƒ (t){return t()}
n=ƒ () { [native code] }
那么直接把返回值简化了成Vt(),在控制台输出,得到了:
Vt()
'0apAfqnUpcoyj99VzXTp6wVTZ4Vhja1Fm0oki-DgcgUlgSfKayjHuXFmMaSm7fcxqiIuy9w9bP2ZTz2g9XHTKC24d7tCXwQ4AfQXfBZ_FyeYJARX3JGptsa_DJjuOzN7fGsZSM-fXi-XeR726x3ihKSS5Q5ffSszxq7M-3KLcV1asI2xNzlBvS5WhpgtdJEmAGwRRuKLhTFI4BPkx9-CfKtXEDFtcTaf9_zt8km-BOj_B1SGAgVvI9MaaKRC8hcdKXg7YZs6yuWvYoYkbhH5uOZv1s944ePs7F2sAbtZZxtKKCTdp0ASRNEWJ3-BfM3MNmJojJQKSeaLFfImK5FTW6PiAJCf9Eu6TCNq8R0nv0UDe91NZEKY8Ddl7PBppWVUt_qUCttYEDADcy2jfyLKl3Ey89pvXuwb0UmdvMAFwdZOIK90OqVBDSSIJSwMBUi9xMM5xL62IR6ocLJ363bRtTc6dLI5-Dq_ecQxBDRbOPX5uqWLwn0r3mWVMhHUL7rARl0akFNJlprbAoZ-JraDKXK91gU2mM4fl4QnL1pstwAE3PjyQsavlFjoks761vtSL3Ne3blnc3bZJO5X8HjuIMz0zYn0ZaYruHHDnAY5F3JW4hShAvkJeXCNq1hcnoH86rm1_JI1q3n-CGJoGMbg4TxG9-'
把整个加密文件扣下来,其实里边就是三个大函数,用的是第二个,继续扣,抠出来补环境,我录课时候自己补了快两个小时,纯手工。
后来想想还是上现成环境好了,反正以后都要用,就不用一个一个补了。
会扣代码要的是JS基本功,不然知道加密在哪里也不会扣。