本来是不想碰js的,但是没办法!!
太无聊了!!!
在家呆到怀疑人生有没有!!
武汉加油!
进入正题!!
一、先从pre开始撒!!!
这个参数是今天的重点,敲黑板,记笔记撒!!!很有意思的这个参数!!
找这个参数找了半天,,没弄清在哪里生成的!!
就看到这个参数绑定在window上。
然后想着用油猴hook一下。。。。。。
然后用fiddler 上重定向????
搞得花里胡哨的!!!
pre的生成方式藏在html页面里。。将近2000行的混淆js。得!!!又是混淆。。。。掉头发接着。。。。。
这里就不直接下断点了。因为并没什么卵用。。。
当前请求的url是没变化,,但是返回的混淆js变了。。。
这里可以通过谷歌插件ReRes进行处理。
也可以通过fildder修改文件进行重定向!
我们这里简单些,,,怎么简单怎么玩!是吧!!
直接把script里面的js全部抠出来撒!!!
放到VSC里面,我们调试调试。
因为复制出来的代码,是被压缩成一行了,暂时我们不格式化,
自定义一个函数,把代码放进去。
因为我们看到这个参数是绑定在window上面的,我们就返回一下window._pt_。
打上断点。
我们运行一下。
然后发现结果出来了,,,,,,,,,,
就这么简单??????
no no no no!!
因为我们的VSC是直接配置的谷歌调试的,也就相当于,浏览器直接运行了这段js。
但是我们要用python去执行。
所以我们上我们的WebStorm。
运行后显示window未定义,,,那我们定义!!
然后,,,竟然是undefined。。。
有没有被vsc调戏的感觉,你能运行出来,为啥我webstorm运行不出来
,哈哈哈哈哈哈!!!!!!!
我们开始格式化代码!!!开始我们的S。B一般的调试环节!
然后内存严重溢出,,又是这玩意,内存爆破。。。。。。
然后我们修改一下!!接着运行!!
经过调试我们发现。。
这里有个捕获异常try。
那我们就懂了呀。
我们根据报错的信息,各种添加,其实就是检测window的属性,document的属性之类的。
这里有个地方检测location里面的href,,
当时我在想,如果真的检查这个href,那为什么我们在VSC里面能运行成功呀。。。
所以呀,这个href形同虚设,随便定义就行。
光这些定义,,,就废了我一个多小时。。。。。。。。里面又经过了一次内存溢出。。。
我们添加完运行!!
这个是不是和VSC和去哪生成的一模一样撒。
我们接着用python运行。
会报gbk的错误。
这里我搜了好多教程,找到了解决办法。
这里直接解决方法是通过修改subprocess.py
中的Popen类的构造方法__init__
中encoding参数的默认值为utf-8
。
修改为utf-8即可。
因为我们js代码中含有特殊字符!!
最终我们运行代码!!
pre的生成思路就是这样咯!!
二:__m__的生成思路!!
这里我们直接搜__m__,然后接着下断点就ok了!
这里挑重点讲。
var t =this.getTokenStr()是cookie里面的QN48的生成过程。
那么var n 呢,,这点官方很jian。。
根据cookie,,生成一个和时间戳一模一样的数字。。。。。。
然后接下来更有意思。
r = n % 2。
这是干什么的。。。。
看见这个return的列表没有。。
就相当于里面有两个加密函数,,
如果等于0就运行第一个。
如果等于1就运行第二个。
MD5的32位结果???可是用python怎么写也写不对。。。。
还是扣js吧,
三:headers里面有一个参数名随机的参数。
这里说一下这个参数名怎么生成的,
就在这个函数上面,就是这个参数名的生成结果!!!
至于参数。。就不讲了!!!
因为这个参数的生成过程和__m__的是一样一样的。。。。。。。。。。。。
可以自己动手调试调试。。
三:完!!!
那么今天的分享就到此结束了!!!谢谢大家的支持撒!!
本文分享自 python爬虫与js逆向 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!