讲完请求,咱们再看响应,响应的格式和请求很像,也是三部分,响应行、响应头、响应体。同样在响应头和响应体之间有一个空行分格。响应行里也有三部分, 协议版本、状态码、状态描述。状态码和状态描述是配套的,用来告诉客户端这次请求是成功了还是失败了。比如最常见的两百对应 ok, 就是 请求是对应,那放的就是你要的资源不存在。所以状态码是咱们判断请求是否成功的核心依据。 然后下面是一些常见的状态码,分为五类,一开头的状态码,意思是服务器已经受到部分请求,请客户端继续发剩余内容。这类状态码咱们平时很少碰到,主要用在底层协议协商或分段传输场景。二开头的就很常见了,表示请求成功。 其中两百是咱们见的最多的,表示请求成功,服务器也正常返回的数据。咱们刚才看的请求状态码就是两百 ok。 三开头的代表重定向,就是你要的资源搬家了,不在这个地址了,服务器会给你反馈一个新地址,你得用新地址重新发请求。就像你去某个部门办事,人家说这事不归我管,你去另外一个部门,这就是重定向。 四开头的属于客户端错误,意思是你发的请求本身有问题。最后是五开头的,是服务器内部错误,这是服务器开发者的问题,和客户端没关系。下面说几个爬虫常见的状态码。先来看三开头的三零幺是永久重定向,咱们把当前页面的 u l 改成 h g t p 协议 敲回车,你看第一个请求的状态码就是三零幺,说明这个资源已经永久搬到新地址了,服务器会在响应头里用 location 字短告诉你新地址, 你看这里,他把 h t t p 改成了 h t t p s。 接下来浏览器就会自动用新地址发请求,这次状态码就是两百了。现在咱们把停用缓存的勾去掉,再访问刚才那个 h t t p 地址, 你会发现请求提示来自此盘,缓存根本没发到服务器。这就是三零幺的特点,浏览器会缓存重连线关系,下次就不用再询问服务器了。 另一个三零二是临时重定向,和三零幺唯一的区别就是浏览器不会缓存重定向关系,每次访问老地址,都会重新发请求,问服务器新地址。 再看四开头的,这是爬虫开发最需要关注的一类。四零零表示请求格式错误,可能是你少了某些参数,也可能是你发的请求有问题,服务器看不懂。四零幺表示未授权, 可能这个资源需要登录才能获取,但你没登录或者登录过期了。四零三表示无权限访问,它和四零幺容易混淆,它的意思是你可能已经登录了,但权限不够, 比如普通会员想访问 vip 资源,就会返回四零三。四零四表示资源不存在,可能是你写错了路径,也可能是服务器删除了这个资源。这个相对比较常见,比如我们随便访问一个不存在的路径 状态码就是四零四 not found。 最后这个四二九表示请求过于频繁,这个对爬虫来说特别常见,意思是你访问太快了,服务器把你限制了, 一般限制几分钟到几天不等,不同标准都不一样。后面讲反爬的时候,咱们再说怎么处理。这里要提醒大家,一个坑四开头的状态码不是绝对的,有些服务器会制定规则, 不管请求成功还是失败,都返回两百,然后在响应内容里告诉你请求出错了。所以以后你发请求状态码是两百,但拿不到数据的时候,一定要去看响应内容里有没有错误提示。接下来是响应头,和请求头一样,也是一组助箭子队。目前咱们只需要重点关注 content type, 它表示响应体的数据格式, 比如咱们现在这个请求 content type is text, html charset 等。 uft 杠八,意思是响应体是 html 文档,编码格式是 uft 杠八,之前咱们用 url 内部发请求的时候,需要手动 decal 的 解码, 也可以从这个字段里拿到编码方式。后面我们会学更智能的模块,它会自动读取这个响应头来解码,不需要手动 decal 的, 和请求头一样, 这里也能看原始格式,第一行是响应行,下面就是响应头。至于响应体就是响应的主体内容,比如咱们这个请求 content type is html, 那 响应体就是完整的 html 文档,也就是咱们前面说的页面源代码,和这里看到的内容是一致的。
粉丝5.4万获赞37.6万

做 js 逆向时遇到了无限 bug 怎么办?这个视频呢?我们来讲一下啊无限 bug 的 解决思路。那么什么是无限 bug 呢?它又被称为无限调试器以及死循环调试,是一种非常常见的前端反爬技术。 简单来说,它的核心就是强制能让其去进入调试模式并且卡住,从而去阻止开发者查看源代码,或说去进行爬虫分析。那你说这个爬虫呢?看不到源代码怎么去啊?得到数据呢?是吧?那么它到底是怎么去工作的? 他是去利用了浏览器开发者工具的一个特性,当代码执行到了第八个语句的时候,如果说他发现你这个开发者工具是打开的,他就会暂停执行。如果你也对拍粉爬虫感兴趣,土包将毕生所学都拆分成了这些,从零到进阶全流程,按照八十老奶都能学会的方式讲解, 在那个地方去断住。接下来我们来看一下 debug 的 常见形式。先来看这个单断点的形式,把这个代码复制放到拍摄当中来,那么这里呢,可以去给它输出一个 hello world 吧, console log hello world。 好,这个页面呢,咱们先给它注视一下,来右键去运行这样的一个代码,它并不会有任何的断点断住,这是因为我们并没有去进入到调试模式当中,需要去右键选择 debug 去调试这样的一个文件,那么点击之后,哎,断住了对吧? 断住了。咱们这个地方是一个单断点,你可以通过啊直行下一步去跳过这个断点,它就输出了这样的一个 hello world, 那么这个就相当于是一个比较简单的断点了,你只需要去给他啊,执行下一步,他就可以去跳过当前的这个断点仪表,它也是相同的。解开注之后,我们这这里再把这个 cursor 给它拿过来啊,再来去右键重新去调试一下。 首先第一个地方它也会去断住,我们去给它执行,对吧?输出了一个 hello world, 它是在这里去输出的,然后再去进入到了 evo 它的一个断点当中,它这里是开了一个相对虚拟机的形式啊,去走了这个 bug, 那 么这里呢,同样也可以去给它执行下一步啊,那去跳过这段点去输出这个 hello world, 所以 这两种形式呢,它都比较简单,都只需要去执行下一步就可以去跳过当前断点了。 看完了单断点形式之后,我们再来看一下真正意义上的无限 debug, 它是一种什么形式?先来看第一种吧,第一种呢,是一个 will 死循环的断点,我们把这个代码给它复制过来, 放到这里面来,这个先给它关一下吧,然后上面呢先给它注视一下,好来看下这个代码啊。那么这个代码的话呢,它是一个自执行的函数,它会自动去执行这里面的逻辑, 在这里面呢,又定义了一个 block 函数,里面呢,放了一个 delete, 是 吧?我们这里也可以去给大家个输出啊, coslog 这里呢,比如说来一个幺幺幺,好在下面呢,又是去做了一个 view to 啊,死循环,它这里这个条件呢,会一直为真,一直为真,就会一直进入到这个循环当中,去调用了这个 block 函数, 那么这个 bug 出来又去做了一个断点,相当于它就会一直断一直断,我们可以去右键调试看一下,在这个地方呢,它就会去断住了,输出了一个一一,对吧?咱们再来去点击一次,它又输出了一个一一,这是第二次了啊, 再来去执行一次,第三次一一一,它这里就会去不断地去触发这个断点,不断地去输出这样的一一。那么这种呢,就是一个通过 vivo 循环来去实现的无限。第八个, 其实在前端当中,用 windows 循环来去做无线 bug 的 形式还是比较少的,更常见的呢是定时器的形式。我们来看一下定时器断点, 把这个先给它注视掉,然后把这里的代码粘贴过来啊, set interval, 然后里面呢放了一个函数 f, 它里面的逻辑呢是先来一个 bugger, 然后去输出 hello world, 每隔五十毫秒就去触发一次断点,那么来右键去调试一下, 好在这个地方它也断住了,对吧?我们来去执行下一步,它并不会退出这个断点,而是会继续在这个地方断住,因为它在这里一旦定时器开启之后,它就无法去停止了,所以你需要在它定时器开启之前就去给它处理掉。 那他这里呢,一般来说是常见为一千毫秒就是一秒钟,那你说能不能在这一秒钟去给他处理呢?其实也不太现实啊,咱们还是按照正规的一个处理方式去给他处理吧。那你说他如果说有一天这里改成一秒钟一毫秒,是吧?那整个这个过程是非常快的,你不可能能处理过来啊。 好,这个是定时器的形式,当然还有种定时器叫做 set time out, 我 们来看一下 set time out, 这里呢,我们也可以把这个逻辑给它拿过来, 然后给它注视一下,这呢右键去做调试,它也会断在这个地方, 但是这个地方呢,你可以去啊,执行下一步,它会退出这样的一个断点,因为 settimeout 呢,就只会去执行一次,那 settimeout 它能不能去实现这样的一个无限 debug 呢?它也可以怎么去做?我们来看啊,给它改一下就可以了。把这个逻辑再拿过来 看一下,首先 settimeout 里面放了一个函数, debug 断点啊, console log 去打印输出,然后在这里呢又去开了一个 settimeout, 它里面呢是走了一个什么调用的 f 函数嘛?然后去每隔五十毫秒去调用,是吧?那相当于是它陷入到了地规当中啊,陷入到了地规当中,就会就会去不断的重复的去调用这个函数,去实现这样的一个 bug 的 一个断点。来,右键去调试一下,好,第一次进来 啊执行,它依旧会在这里不断地去断住,断住,断住。所以这个定时器 set them out, 它也能去实现啊,这个无线 debug, 但这种方式呢会比较少啊,更常见的呢,还是这个 set interval 这样的一种形式。我们再来看一下一些其他的形式啊,比如说这个地方呢,还有通过圆形链的方式来去执行 debug 的, 给他拿过来给他演示一下。好,这个呢,给它先注视掉吧,然后我们这里呢粘贴过来, 这呢有一个大写的 f 开头的方形,他是去对他的圆形来做处理了,里面呢是放了一个 delete, 去通过点块的形式来去调用,这呢是通过点 app i y 去调用,下面呢是通过构造器来去调用。 这下面也差不多啊,也差不多。构造器构造器,只不过它是形式不一样而已,真的是通过 e v a l, e v l 去给它执行字母串的一个命令,这里呢是一个自知行嘛啊,这个呢,是把自知行的一个函数给它放成了哎,这个字母串通过 e v l 去给它执行一下, 同样的,咱们这里去给它 t 八格一下呢,首先这里它就会进入到这个虚拟机的形式里面呢,是一个哎,自知行函数是吧? t 八格 啊,咱们可以去给他跳过一下啊。这是第一个地方,他并没去打印出来。这个一直行好,输出了一对吧,又进入到了第二次,第八个,好,再直行二,又进到了第三次,第三次呢,是这个这个构造器的了, 好,三四五六,他都会去开启虚拟机的形式,然后去给他断住,但他都是单次断点啊,都是单次断点,但是这种单次断点他一旦结合上什么呢?结合上这样的一种电视机,或者结合上这样的一些什么啊? v 循环,他就可以去实现啊,一个无线 d 八二的效果了。 看了这么多的迭八格式之后,我们再来去讲一下它的解决思路来看,首先第一种啊,是永不在此处暂停,或者去添加条件断点 force 来看这样的一个网站复制,然后我们这里呢去打开谷歌浏览器粘贴过来,好, 它就是这样的一个网站,我们去打开开发者工具 f 十二,好,他说被禁用了,是吧?那么右键呢?右键也被禁用了,那就选择通过 ctrl shift 加 i 或者这样的形式给它打开开发者工具,那么一打开之后发现,哎,在这里去断住了,断住了的话,那么这里能不能去执行一下呢? 这个地方执行一下,你发现它是跳不过去的,跳不过去会在这里一直开虚拟机,然后去断在这个位置,是吧? 那么能不能干嘛呢?能不能去右键啊?在他的行号这里去右键选择一律,此一律不在此处暂停。好,然后呢去执行一下, 哎,发现他就没有在断住了,对吧?没有,在断住了之后,这个地方呢会说检测到非法调试,请关闭调试终端后刷新本页面重试。那他应该是检测到了我们这个开发者工具了 啊,有可能他是去检测了什么呢?检测这样的一个窗口宽度,那我们可以去把这个开发工具给它切出来,切出来之后来刷新一下呢。 哎,刷新一下它就正常出这样的一些数据了嘛?我们来看这里的一个网络面板,它就会有这样的一些数据包啊,就有了这样的一些数据包了。那么这个是第一种方式,永不在此处暂停,或者咱们这里先去给他改一下啊,我这里先去给他切回来之后, 哎,切回来之后,然后刚刚的那个方我先给它关掉吧,关掉之后来刷新一下, 再去打开开发者工具。好在这个地方呢,给它添加条件断点,给它改成什么呢?改成 false, false 就是 假的意思,它这里其实和那个永不在此处上面是差不多的,当它走到这里之后呢,一直都是 false, 就是 为假的时候,就不会再去进入到这个断点当中了,来回测一下。 同样呢,这里也是啊,执行他也可以去跳过这个断点,但这里咱们再去给它切出来之后,然后去刷新这个页面,好来看看数据包有没有呢?哎,就有了吧啊,所以这个就是第一种方式啊,也是最简单的方式, 添加条件断点,或者说永不在此处暂停。我们再来看一下第二种方法,在事件函数调用之前去给他 hold 掉。来看这个网站, 同样呢,也是进入到这个页面当中,然后去通过 f 十二打开开发者工具,哎,断住了对吧?断住了之后来去试一下。第一种方式啊,一律不在此处暂停。来给他咨询一下, 发现好像在这里卡了一下,又断住了,那就说明他并不能通过这样的一个形式来去处理吗?跳不过去啊,卡死了,这里已经 重新刷新一下呢,刷新不动啊,还是给他重新开一下吧。重新开一个好, i'm sorry。 打开,那么现在我们就可以去通过看他的一个调用对战来去看这个函数是在什么地方调用的了, 上一个在这个位置,那么这个位置的话呢,来看一下啊,他在这上面的话呢,做了混淆,这是什么东西呢?选中一下 啊,这个是一个构造器嘛?构造器,然后这个地方呢,是一个第八个,然后后面的话呢,应该是点块了吧?点块,那也就是说他是通过什么呢?通过我们这个地方的一个形式来去做的嘛,对吧?构造器,第八个,然后点块这样的种形式, 那么这个构造器的话,我们来再往上面找一个站,好在这里面有个什么 set interval 这样的一个定时器,这个地方的话它是隔了多久?我们来看一下这是什么零,然后这里呢? 这里呢?这个是二五九一是吧?反正它这个是什么?就是一个定时器嘛,那 就说我们要在它定时器开始之前就去给它处理掉,那这里给它下个断点呗,下个断点,然后重去刷新一下这样的一个页面,哎,在这个地方就给它断住了把,它还并没有去走这里面的这个逻辑,那么就可以干嘛呢?就可以去把这个定时器给它啊,相当于是给它 hold 掉,给它制空一下, 来这里控制台 set 听到没有?就等于翻过去给它重新去处理一下, 给他治空嘛?他本来是要去走这样的一个逻辑的,对不对?但是现在啊,我给他治空了,治空之后他就不会去走任何的逻辑来回车,现在再来去执行一下呢?好,他就没有再去有任何的断点了,但是有点小问题,连接服务器,超时点击屏幕重试。 哦,好,你点击之后它又断住了,对吧?又断住了,我们这里再来去看一下它能不能啊?能不能去重新给它 hold 一下。 set interview, 然后等于方形 f u 好 回车再来去执行啊,还是会有这样的一个问题啊,就是说它这里呃,服务器断开连接的形式,那我们来看吧,这里的话重新刷新 好,断在了这个位置,往上面堆站找一下啊,它应该是还是会有个有些地方有问题, 堆站找找,找到最顶部的这个立名在这里来看一下,它是这个自知其形,我们来往上面找一下,是哪个函数啊?是哪个函数?找找找, 是这个吧,是吧?是这个,是这个的话,哎,是哪个啊?看一下啊,是不是这个? 是这个吧,来在这里给它下多点看一下呢,重新去刷新页面,然后咱们在这里去给它制空一下,回车好执行,这里先给它去掉吧,执行一下。哎,是不是数据又出来了, 把这个页面就给它加载成功了吗?他也并没有任何断点了,那咱们这里的这个税包也是正常去发送的,所以这个呢,就是第二种方式啊,在他定时器开启之前就去给他 hold 掉,给他置空。 我们再来看下第三种方法,文件替换覆盖的方法。那么这种方法呢,不是那么的建议,因为你替换之后他可能会出一些问题,那我们也来看一下吧,这个网站也是 进入到里面去,然后通过 f 十二打开开发的工具啊,也是断住了,断在了这个地方,它是一个 set interval, 我 们也可以给它下个断点,可以去试一下第二种方式,看它能不能制空掉。 刷新一下页面,然后去制空这样的一个定时器, 回车好,然后去执行一下,跳过了那个 set, 英文 intelayer, 断点呢,然后又进入到了这样的一个单断点呢?就一个单的 debug, 我 们可以去给它执行一下啊,就没了是吧?没了好,这个是置空的形式嘛?那假设我们这里补给它置空呢,就去用那个, 呃,替换的话呢?拿 f 二打开一下替换的话怎么去替换呢?在这个地方我们先在桌面吧去给它创建一个文件夹 app 吧。好,这个命名可以去自己命名啊,然后我们在这个地方呢去看它是 app, 二八三九点 gs 右键去选择替换内容,他让你去选择文件夹,我们就选择这个桌面的 app 文件夹, 然后需要去允许啊,允许这个修改文件允许,那么把这个定时器你都可以给它删掉啊,这个都可以给它删掉,或者说你把这个 debug 这一段给它删掉,也可以删掉之后呢,我们这里可以给它 ctrl 加 s 保存一下,好来刷新一下, 它就不会在这个定时器里面断住了,而是断在了这个地方啊,这个地方,那这个地方也可以给它替换呢,是吧?这里也是右键去替换内容,然后把这个 debug 也给它去掉,然后 ctrl 加 s 给它保存上,刷新, 这把就没有再有任何的断点了,就直接出了这样的一些数据,也出了对应的数据包了啊,这个数据包都是有的了,那么这个是替换内容的方式啊,它这里会起用本地替换,你给它勾选上,你如果不勾选它就不会起用本地替换的,你要去给它去掉,就给它点击这个,就可以给它去掉了。好吧,来再刷新, 他又有了吗?他就又回到了他自己的那个文件里面去了。好,那么这个就是我们今天所讲的全部的啊,对于这个无限极 bug 的 一个处理方法,包括啊,他的一些原理啊,怎么去处理啊?他的一些形式有哪些啊?是吧? 如果你也对拍粉爬虫感兴趣,土猫将毕生所学都拆分成了这些,从零到进阶全流程,按照八十老奶都能学会的方式讲解。

前端网页做爬虫逆向登录的时候,里面的账号密码不仅有加密,还会涉及到浏览器的指纹的一些处理,那么遇到这种情况的时候,我们该怎么来通过协议爬虫来做我们的逆向登录呢?安排,然后这里的话同样可以看到是一个账号密码的一个登录,对吧?这个是手机号,我们试一下,我们尝试一下来点击登录,呃,没有验证码对吧? 那如果说他没有验证码的话,我们来直接进行监听,我们看一下他当前的包是怎么发的啊?我们来点击进入微店,然后可以看到他直接是进行的我们的一个阿贾克斯的一个请求,对不对?他直接就是一个阿贾克斯,那么在当前的这个阿贾克斯的接口里面,我们可以看一下他当前的账号 密码都是加密的,加密还个 u a, 难度直接上升。如果你也对前端逆向攻防感兴趣,老何啊?我专门给大家准备了爬虫逆向实战的一个直播课,拆解目前市场主流的一些前端加密技术,还配套录制了全套的逆向入门学习视频,大家记得在粉丝群里面来进行获取,这也是一个逆向登录,但是你可以看到它难度完全不一样。 u a 是 什么?我可以告诉各位,这个他应该是属于我们的指纹验证,指纹验证,然后其次我们可以向上翻,向上翻的话,其实我们能够看到他在上方的话,这里有一个扣的,这个扣的到底是什么东西,我们不太清晰,我们可以尝试再次点击登录,我看一下当前的扣的是否变化, 对吧?因为这个扣的他有可能,应该这个网站有可能有验证码,明白吗?呃,这个扣的你可以看到他是变化的,但是他没有额外的接口产生,也就是说他也是一个要被来进行逆向的参数总体分析,发现一个、两个、三个、 四个,对吧?我们要做四个参数的逆向,那么像在这里我们同样的右键复制 c o l, 先把它构建一个 pass 文, ok, 难度直接上升, ok, 那 么我们现在我们先在这里我们来试一下啊。首先我们来分析一下它的这些加密的一些核心,对吧?我们把这个加密参数给它掏出来啊,把这个加密参数都给掏出来啊,这样的话方便我们等下分析,因为分别看一下它到底是采用的什么样的一个加密,这个我感觉应该是验证码,就说当前验证码没有产生,对吧? 微电,我记得之前要解决的话,它里面好像是 wifi, 是 吧?而且是一个混响,那么在这里我们先来尝试一下。首先像这种我们遇到这种加密,第一步先去看一下当前网页有没有接入混响,来点击启动器,呃,点击启动器随便点个接入本先看一下啊,可以发现好像没有接入混响,如果没有接入混响的话,我们可以尝试直接搜这个关键字看一下, 他好像不是很毒的,是吧?非常的范, ok, 如果太范的话,那么在这里同样像这种的话,我们直接跟他对战吧,然后他里面的对战也是比较清晰的,基本都是正常对战,都没有出现像他的一个异步的一个调用,对吧?我们直接点击,然后打一个断点, 我们现在来跟他的对战来进行分析一下来, ok, 我 们观察的逻辑主要是观察当前的重遇,你看我们向上推摇,根据当前的请求对他进行的指向,也就是我们当前所正在执行的战, 那么我们现在我们向上推,你看向上推,在向上推的过程当中,大家请观察我们的这组参数的变化, 你看啊,我们向上推,当我们再往向上推的时候,我们发现它好像没有了,我看一下,哦哦,还有,还有,还有,是吧?还有我们可以推快一点啊,可以推快一点, 一直都是有的啊,一直都是存在的啊。来往上走, 这里还没有了 一里面的 data。 我 看一下啊,在当前这个地方我们看一下,我们走到这个地方的话,它上面好像没有了,我看再往上走几步啊,我看一下啊,还有,对吧?还有来往上走, 我看一下啊,来走。其实这种我们只要看对战就不用看 j s 了,我们直接去看这个周瑜,这个地方看什么时候输出 好像没有了,你看再往前推的话就没有了,你看前面再推的话就没有了,我们可以测试一下,是吧?我们再往前推它就没有了,前面再推的话,它出现了我们的铭文密码,看到没有,就是铭文密码的输入。好,那么其实我们通过当前的这个分析啊,你看我们继续往后推,它的正常的构成我们最后的一次出现是在这个地方 看一下到哪里来的喽?这里,这里啊,是吧?这是我们最后一次所看它的地方,那么当前的话它是包含在一个一对象里面,是吧?一里面的 data, 那 么我们去看一下,当前的一 来一直是一个参数传过来的,是吧?一直是一个参数传过来的,那么在这里我们可以回到他上一步,我看一下他传过来参数,然后他的上一步的逻辑对等的是一个 r 值,那么这个 r 值的声明是在哪里?我们向上推 r 值的声明是在这里,你看这个地方是不是就是我们当前的整体的一个加密的一个位置,它里面的加密都在这里。 你看我们来新建一个 js 代码啊,这个网站好像也不难啊,来我们创建一个 js 代码,这个要扣 js 啊,用纯算可能有点问题,纯算有点难度啊,你看,那么这个地方,你看就是我们当前的整体的 r 对 象,是吧?也就是我们当前整体的点击参数,它里面的加密都在里面, 你看手机号,对吧?扣的密码,还有我们下面的 u a 是 不是都在这里? ok, 那 么在这里我们是不需要这么多参数的,我给大家讲一下,我们是不需要这么多参数的,因为它里面有很多参数,它所对应的其实上就是我们当前的这个请求参数,也就是它,明白吗?当然了,你们如果说你在这里,你想用这个请求参数,其实也是可行的了,呃,问题也不大了,对吧?也可以了,就是这两个,这两个跟这个是一样的, 明白吗?只是说它后面会额外的进行一些复制,它们两个还是有些少的。你看这个它里面有个 toky, 对 吧?有个 toky 什么的,它这个没有 toky, 对 不对?它这里面是没有 toky 的, ok, 那 么像在这里我们把一些无用的参数给它删掉,我们只留下我们需要的 argh, 我 们好像只要这四个吧。好,那么现在我们来逐步的分析,首先我们来看一下,其实我们可以看到它里面的主体加密参数都是一样的, 你看下面这里,你看 t 点 intict, intt 下面是一个 encode, 我 们的 u l 的 一个处理,对吧?这是一个对应它的一个编码,是吧?一个编码上面的加密方法都是 t 点 intt, 那 么我们重点观察一下 t 点 intt 是 什么东西, 是吧?那么在这里我们去找到这个 t 点 in trap, 给它打上一个断点,然后我们进行重新调色,在页面里面点击登录,那么我们当前来观察一下,看一下这个 t 点 in trap 是 个什么方法。我们发现不能跳转,就是当我们把它选中的时候,你看它这里显示的是这种方式,对吧?就不能跳转,呃,没得关系,这种不能跳转的也没事。 怎么办?我们可以直接点击录入,可以录入它,你看点击录入是可以录入的啊,你看我们是可以录入的,然后当我们录入之后,我们可以看到它里面的主体的加密,应该是微点 in trap, 这了一个加密的处理吧,应该是它吧,因为其他的不具备加密的方法,对吧?这个 t 点 in trap 它应该对等的是它吧? 对等的是它。好,那么在这里的话,我们可以看到它会额外的给它拼接一个空字浮创,是吧?额外的拼接了,应该做了加盐操作,然后这里的微值可以看到当前的微值是谁啊?微值对等的是一个 g s in trap 的 对象,这不就是 r s a 吗? 对不对?不就是非对称加密算法 r s a 的 吗?那么在这里我们可以向上推去找到当前微值的声明地址,我看一下微值在哪里,上面代码怎么不显示? 记住啊,要找位置啊,因为这个位置里面有公耀啊,不然我们不知道公耀是谁,这个地方怎么卡住了,怎么接代码都不显示,打断点给他,我先把后面的地方都放掉啊, 好,先显示啊,来,我们来看啊,其实我们可以看到微指是等于了指向的是一个 this, 对 不对?呃,指向这种比较明显,就是属于对它进行矢量化嘛,对吧?很明显你看这个地方是对它进行矢量化,你看这个对等的是一个 new, 我 们的 g s in trap, 这是一个 g s in trap, 那 么像在这里我们只需要去重点的去观察一下这个版本啊,你看,其实不用看版本也没事啊,我们在这个地方直接把当前它的公钥也是固定的,你看这个地方就是我们的一个整体的加密, 那就整体的一个加密,我们新建一个发送方法,我们叫做 int i c。 ok, 然后我们像在这里的话去执行一个加密的一个操作,首先先进行矢量化,然后矢量化完成之后使用微点 int 微点 int 加密一个 d s d d s d 作为文本传入,那么下面这三个方法全部进行修改,非常简单。它其实这个网站里面难的是这个,我跟你们讲它里面的 u a 才是最难的, 等一下你们就看到了啊,等一下你们就看到了,好,然后在这个地方的话,我们可以做一个返回,对吧?这里会得到我们的密文,对吧?我们直接直接返回吧,你看对吧?直接把它返回 好,然后这个地方我们把当前的账号跟密码全部进行更换,我们换成一个随便更换啊,随便更换啊,因为账号跟密码的话,肯定是我们手动输入的嘛,对不对? 呃,然后这里的话有个 intict 的 方法,我们看一下第二个 intict 的 方法,它里面传的这个参数是谁?它这个地方有做额外处理。朋友们,八六杠 z, 这个八六杠 z 是 个什么意思? 手机号码,应该说我们的手机号码是属于八六的号码,中国大陆,对不对?中国大陆,那么在这里,首先你看这个是当前所传入的参数,是吧? ok, 你 看啊,都是些老学员赶过来,对吧?那你看这是一个八六杠 z, 然后我们像在这里我们去把后面这个进行替换八六杠 z, 那 么它外面会有个方法,有个方法去对当前的逻辑精处理,我们可以把它处理一下,你看它就是把它进行变成了一个八十六, 对吧?这个地方我们可以考虑一下它是否固定,如果说它是一个固定的参数,那我们直接就传一个八十六不就可以了,是不是,对吧?这个地方应该是做的号码验证,就是八六,号码, 应该就是一个八六,我们把这个参数先注视一下,我试一下当前的 r 值能不能生成啊?好,你看当前的加密参数,搞定了,那么下面就剩指纹了,呃,没导包是吧?导个包,先首先定一个 word 的 一个 logo, 然后使用 posi 来导入我们的 justin trap 执行。呃,我们来看一下啊,在这个地方它可能报错了。 嗯, self 一定是 default。 我感觉是这个这个地方的问题。我看一下这个地方,我们先把它一个走通啊,我们先把一个走通。呃, g s in trap, 蜂药 人电话, 哎。呃,我们没编码吗?稍等一下,我看一下啊,这个地方我们出问题了。咳,来,我们进去这个方法。我们看一下这个地方它是什么情况啊?呃, v 点 in trap。 它这个地方好像它用的是低版本,它用的版本是跟我们不一样的, 虽然说它当前所输出的格式应该是这样的。试一下我们一个对比啊,因为这个地方我们要去谨防止一下它有没有可能是模改,或者说其他的一些特殊情况,对吧?我们来看一下,因为它里面的话,大家有没有发现它里面的可以变成了一个 j s in trap r s a k 的 一个对象。 这个地方有问题是吧?我们可以试一下啊。来,我们试一下这个地方,我们先把它注射掉,我们先尝试进行打印,打印我们当前的微值,我们看一下当前的微值的执行结构。公钥有问题。 重名的吗? 来,我们试一下啊,我看一下是不是重名的问题。来,我们试一下啊这个地方, 哎,这个第三方会有问题啊。各位稍等一下,我看一下是哪里冲突了,是我装的包太多了。来,我们来解决一下这个小 bug 啊,我看一下是什么问题, 是不是最新版的不需要声明 global, 看一下,最新版的不用使用 global。 呃,应该是 jsincraft 的 这个包更新了。呃,跟大家讲一下为什么在上面声明一个 global 嘞?因为我知道,我像我们做过的同学应该知道啊,就是我每次在调 jsincraft 的 时候,它老是给我们报里面的一个什么报里面的一个 word 的 一个错误,是吧? word 已经在这个地方没有被定义,是吧?因为我没有修改源嘛,所以在每次它使用之前,我会给它声明一个 global, 明白吗?呃,但是在目前新版里面好像是不需要了,那我们就把它处理掉,我们试一下, 来,我们试一下,这样就没有问题,对吧?好,没有问题之后,我们现在你看,一步步排查优化, ok, 那 么现在只差一个参数了,就是我们当前的 i 方法,那么当前这个 i 方法那就有学问了啊,为什么呢?各位请看,当前这个 i 方法是在上面啊,是在这个地方,它是等于了我们的 win 的 点位 u a, 看没有 window 点 get u a, 那 么这个 window 点 get u a, 它里面就会涉及到很多的混淆的一些 g s 啊,并且里面有做一些核心的处理,你看它其实目前这个网站它比较难的方法其实就是里面的 u a 指纹,它这个 u a 是 是一道指纹,你看这个就是它里面比较难的一个方法,那么在这里我们现在可以进入这个方法,在这个方法里面我们可以找到它的最后一行,也就是这个地方返回位置,我们可以尝试去对当前的代码进行 ctrl a, ctrl c, 我 们尝试一下,看能不能进行反混淆啊,就能不能把它还原,然后把反混淆一下 来解混淆, ok? 呃,我们可以看到当前这个 js 代码是可以直接反混淆啊,可以直接反混淆处理的啊,这样反混淆处理,那么反混淆处理之后,把当前还原好的 js 代码,把它放到我们的本地来,我们新建一个还原的 js, 那 把代码给它掏下来,我们试一下,那么我们没有关注的朋友们可以点点关注啊,我们这边是专门做 js 逆向实战直播教学啊,朋友们感兴趣都可以,到时候学一学啊,我们来看。呃,其实我给大家讲一下啊,其实这个地方你们不还原也没事, 是吧?我刚刚我只是说可以还原密码,但是你们不还原也没事,因为如果我们不还原,因为我们最终的逻辑,我们还是需要去全扣里面的代码, 你如果想做单扣也可以,那你看啊,我们首先来看一下这个主体方法,这个 get 就 可以,我们做纯算好不好?我教你们怎么做纯算,其实做纯算很简单,首先你看第一个这个地方是不是申明了个什么时间戳, 自己做一个判断,这些方法暂时是什么我不清楚,我们先不管他,我们先看一下我们能够分析出来的。首先这个地方是不是一个 b s, 一个 b s 是 一个 b s, 然后这里有个 g j i p, 这个 g j i p 这个方法我们去对一下有没有可能是压缩, 对吧?我要去测试一下它有没有可能是压缩,如果说它是一个压缩的话,那么在这里你看,其实它里面我们做纯算其实也会很方便,对不对?这个地方我们是可以完整的,可以做纯算,我们做纯算的话,我们就这样去处理,来把这个代码先把它抠下来, 这是我们当前的 u a 的 一个主体的生成,把前面的 windows 可以 删掉,我们不补环境,我们做纯算,那就是 get u a, 对 吧?那么这边改成 get u a 就 可以了。 ok, 先把下面代码全部注置,我们一步一步来,好吧,我们先来试一下当前的这个 get u a 能不能执行,然后其次在当前的 get u a 里面,首先我们先看一下第一个逻辑,第一个逻辑它做了一个判断,在这地方会去判断了当前的 v i 三六是否有值,对吧?然后会去执行一个 f 幺三二, 对吧?我们可以去执行一下当前逻辑,去试一下啊。首先 v 三这个是什么? v i 三六,我们看一下这个变量,我们当前浏览器程序去走到它的时候啊, 也就是这个地方打个断点,看一下为 force, 各位,也就是说当前这个代码其实不执行的,对不对?因为它的执行结构是为 force 的, 那么证明这段代码其实上没什么用,把它删掉,因为它执行的是 force, 然后 force 之后在这里会执行一个方法,我们看一下当前方法返返回是什么?这个方法执行之后返回的是为未定义 是不是?那也好像虚头巴脑的也不要。然后我们再往下走,再往下走的话,那么就会走到我们的一个重点逻辑,也就是在这个地方它做了一个九八 d d, 这个九八 d d 我 们没有这个 v v 零幺六,好像没有啊,朋友们,这个 v 零幺六我们是没有的, 它这个里面涉及到大量的环境和指纹,你看这个就是指纹, 看到没有,它这个 u a 是 专门的对我们当前的指纹做处理的啊,然后你看一下后面还有很多参数。呃,其实我的建议是这个地方啊,我们这样去,因为我们做了存,如果做存算的话,那这些参数啊,我们只能尝试把它固定。其实这个参数它对应的是谁呢?它对应的就是我们所看到这个 v, 当然这样输出它是报错了啊,它们两个是一样的,它我们可以把这个对象给它复制过来,复制,然后这里我们需要去修改当前对象,这个是叫做 v 零幺六, 你看这里面里面有很多变化的参数啊,有很多变化的,所以你们要注意一下,当然我们可以先暂时先固定嘛,你看它里面有很多变化的参数。首先这个地方,你看这个很简单,就是我们浏览器的一些信息, 是吧?桌面版,对吧?其次 win 三十二,然后 windows 平台,然后我们当前的内核版本。其次在下面还有一些头部信息和我们当前的 navigate 的 一个信息, 对吧?这都是环形形的 nintendo。 然后其次再往下走的话,呃,后面的这个都是 nintendo 里面的啊,都是我们当前的一些,你可以理解为就是我们的一些宽高嘛,对吧?一些宽高。然后其次再往下走,再往下走,核心里面这里会有个时间戳,这些时间戳你们要注意一下,看一下它们是不是同步。时间戳好像是一样的,很多时间戳是一致的, 对吧?它很多选项是一致的,它应该有可能是当前选项和服务器选项它都有,然后再往下走,这个是画布参数,它里面有个画布签名啊,画布有签名。好,那么在这里我们现在再来看一下后面的这个,它后面还有个参数,我看一下后面这个参数是什么? 后面这个参数里面是检测了我们当前的鼠标的一些相关信息,你看这是不是我们鼠标信息, 鼠标滑动等相关信息,你看这个网站就难度高很多了,它里面就是一道指纹的,这就为什么我把它排名为到中等,这参数都是变化的啊?它里面这里面你看可以看到都是轨迹啊,这个地方它应该是轨迹,这是我们鼠标的移动,是吧?以及我们的鼠标的点击, ok, 然后其次再往后走,再往后走的话, 这有个 v 四二二, v 四四二,你看做做存档,说实话还有点难度,那也就说具体的其实际上其就是这个方法吧,这个方法是个结论,对不对?我们就看这个方法的声明在哪里搜索 找到它。当前这个方法就是一个时间戳,把它转变成自创,对吧?那也就说它对等的就在上面,不用管它。好,然后再来看一下这个 f 七零是一个什么方法,也就是我们当前你看经过它的处理会变成什么样子? 加密。好,我们看一下这个方法啊,那么在当前这个方法里面,它是有进行的大量的一些实体化的一些处理,对吧?我们去到我们还原之后的代码里面去进行寻找,你看我们看一下能不能找到 f 七零。 f 七零你看这个里面是有进行的一些实列化,然后做一些编码的一些处理,然后这里面有两个方法,这两个方法都是可以用那些内置的第三方库来进行替换,大家请看,它是可以替换的啊,这两个方法, ok, 我 们把这个方法给它复制过来,然后我们一步再拆解 这是 f 七零这个方法,那么当前这个 f 七零这个方法的话,我们需要在里面去看一下这个对象是谁啊?我们一步步分一步步来,你看把这个方法拆解一下,当前进行实列化,实列化为未定义可能的 这是一个方法,各位请看,那么在下面它会来由它来调里面的一些方法看没有?也就是说在这个地方,你看它会由下面调,这个里面有两个核心的主体方法,拷的以及这个拷的, 那么它其实际上是谁呀?我给大家讲一下这个地方啊,它其实在我们的 note 键里面有一个第三方库,给大家讲一下,你看虽然我们看起来它里面好像有,当然这里面可能有些方法是当前这个网站它自己的啊,但是你看我们其实有两个主体方法,也就是它和它对不对?这两个方法我们可以基于 ai 来帮我们实现,进行标识一下, 对吧?你看在 node js 当中,在浏览器当中输出的对象是现在需要你帮助在本地的 node js 使用第三方扣的方式 来实现, ok, 那 么在这里我们同样的不要直接就呃 ai 生成,不要直接用,我们要去对比,就是对比一下它的加密的内容,然后以及它的输出的一个结果,看一下它有没有问题。 然后我们来看一下,这里他推荐我们一个补环境,然后 ai 有 点蠢,然后我们看啊,我们直接让他在 note 格式里面帮我们实现这两个方法,呃,或者我们有个更明确的方式, 来,我教你们处理吧。好吧,各位看啊,呃,我们怎么去处理呢?我们无非就是在当前以结果来分析一下这个 ai, 如果分析不出来,我们换一种好一点的分析方式,无非就是这里打个断点,这里打个断点,记住他走的是 e f 语句, e f 语句,那也就说他要么走上面走下面,走下面就不会走下面,对吧?你看他是一个 e f l 语句嘛, 对不对?他不可能两个都走的,所以我们在这里我们只需要做这么一个处理,你看当前这个是被加密的内容,对不对?我们可以把它改一下啊。就是你看我在这个地方,我把它去加密一个非常简单的数字,比如说我去加密一个非常简单的一个自创,我加密一个随便加密一个参数,这是它的输出结构, 有没有发现这是它的输出结构,然后这个是它的方法的还原的一个逻辑。那么我们现在你看这个是不是它的结构?你看我输入的内容啊?我用 ai 换种方式 输入的内容,对吧?然后经过他的处理输出, ok, 那 么像在这里的话,他会更加的清晰。来帮我们看一下,你看说白了就是一个字节数组的一个转码,那这种的话是可以直接转的啊。嗯,怎么老是去给我们补环境啊?我们上面的提问有提到补环境这种相关的东西,我重新新建一个。应该啊, 我们新建一个大家可能会好一点,因为我们刚刚的那种方式的话,你说实话他有点那个,你可以看到放在这里的话,他里面会有一些关于他的一些处理,以及他的一些分析,对吧?当然这个锁影他不一定是对的,我建议的是朋友们这个地方啊, 这个方法,我记得当时下面这个方法是有个第三方,但这个方法我们也没也没有遇到过,可能他是进行一些什么修改, 如果实在不行的话,那你就全扣,然后补环境吧,对吧?直接去扣这个方法也可以啊,你看我们去扣这个方法,那就去扣这个 f 幺三四,对吧?找到这个 f 幺三四的一个对象,对吧?把这个对象给它整体给它拿下来。这是不是一个整体的 f 幺三四 没有了吧?那我们把这个整体的 f 幺三四直接给它拿下来吧,我往上补, 把这个整体的 f 幺三四给拿下来,直接进行矢量化。我们看一下这个地方它会不会执行啊?我们试一下调试一下 没有问题吗?我看一下啊,看一下。首先我们的入的参数在控制台里面进行调试,这是我们当前入的参数,入了参数之后进行矢量化,矢量化之后的处理我看一下当前的 v 幺八八的一个数据结构是什么?当前 v 幺八八的输出结果跟浏览器当中的输出结果是一致的吗? 好像没问题,对不对?你看直接扣也可以嘛?呃, ok, 之后,那么现在我们去执行它报错,应该是后面这个 f 九六没有被定义了。六, f 幺三七已经回扣幺三四,我看代码报错函数在第八百,我们直接去搜索一下,这个方法 还用的挺多,幺三七幺三七的这个方法是在当前的 幺三四,那么我们现在再去找到这个幺三七,幺三七在它下面这个是幺三七,想一下这个地方其实我们还不能做全扣,对吧?我们其实这个地方我们已经差不多扣了, 然后我们再来看一下里面的话是报的 v 零九的一个异常,这个地方的话我们可以考虑直接做全勾算了。直接做全勾算了,因为这种做纯算的话,可能代码其实整体的优化下来话其实也不多。我们做纯算的话,整体下来优化的话,可能代码差不多也要两三千行,代码我们做全勾的话其实也才四千多行,而且里面有很多代码,我们是可以不需要的, 是吧?也是 ok 的 啊,这个看自己吧,各位看自己吧。那这个 v 零九的话, v 零九是在上面声明的一个主体的一个列表,也就这个地方我们可以把它拿下来,它这个地方应该是补指纹的,它就是专门对针对当前的一个指纹它里面那些处理,然后是 f 六六以及 note 四, 然后我们继续找到 f 六六定义位置,这个是 f 六六,一步一步补吧, 然后是 v f 幺幺来, v f 幺幺在它生命位置一个自定义函数,但不太麻烦。 ok, 现在其实差不差补完了,只是现在只差一个 f 六九了,把这个 f 六九找到,搞完了 f 六九,在个 f 六九,你们看一下这个 f 六九,方法应该不多啊, 来把这个 f 六九给补上,好, ok 了啊?好,那么我们现在你看我们上面的逻辑,我们基本都补完了啊,把代码格式化一下, 把变好看一点,来代码进行重新格式化,来重置, ok, 然后全部折叠,全部收起,那么我们现在的话,我们只差下面的这个, 对吧? g d, 对 吧? ip, 那 么这个地方的话,我们将去考虑一下它是否有可能,对吧?它有没有可能是做了我们一个压缩的一个操作,所以我们来到当前的浏览器当中,我们找到我们的代码来, 也就是在这个地方啊,打个锻炼给他。我们当前我们来看一下,就是在当前这个地方,因为他是由这个地方来做处理的,然后他的处理是到这里,这是他的处理结构, 我们去测试就是测试一下当前这个地方呢,是不是进行了压缩,对不对?首先我们看他入了两个参数,对吧?入了两个参数,这第一个参数,第一个参数我们已经生成好了,然后这是第二参数,第二参数是一个对象,对吧?这个对象,哎呀,少画画,这是个简单的语句, 对吧?好,那么我们当前主要是去测试一下 v f 九点 c g d i p, 它是否为我们混响键,呃,是不是我们的,让我们看一下啊? 它这个对等的是 f 六五的一个方法,我们找到这个 f 六五,然后这个 f 六五的方法,它里面的主体的加密采用的是 f 六三,对吧?找到 f 六三,然后在 f 六三里面的话,又有做一系列的一些处理,那我们在这里我们就可以考虑把这个代码整体的给分下来了,一个整体的 圆形面,它这个是一个整体的圆形,来把这个 f 六 y 给拿过去来,我们基于 ai, 你 看我们看一下这个方法,它里面到底是具体是做了一些什么事情,看一下是否符合我们的压缩的一个标准。 嗯,那么在这里我们可以看到它其实际上就是我们的一个压缩算法的粗化的构造函数,对不对?那么也就是说我们在这个地方啊,我们就没有必要去考虑了,我们直接用纯算 来,我们考虑用纯算导入一个 p o k e 来,等于一块来导入我们的 p o k e, 那 么使用 p o k e 来进行压缩,但这个地方你们直接这样压缩它会报错啊,你看后面有个方法,哎,不是 p o k e 啊,哦, p a k o。 不好意思记错了, p a k o。 来我们看报错,他里面会没有这个方法,就你们要注意一下啊,这个方法我们要改一下,当然他这个压缩也可以压缩出来,对吧?但其实像我们一般正常的像他的一个压缩的话,我们可以使用这个下面有写,下面会有个我们写像这种压缩的话,你们注意一下就好了,可以用这个方法也可以啊,它里面压缩很标准, 你们核心就是去测试一下,你看这个是不是就是里面的整体的指纹的一个生成指纹的一个加密,你看他是不是对里面的整体的指纹进行了加密好,然后像在下方,我们把下方代码给它解析出来,那么当前你看就一个完整的加密全部构成, 对吧?账号加密,对吧?然后这里的话应该也是做了,这里面做了一个是,也是我们当前的地区的一个加密,然后是密码的加密,然后再是整体的指纹加密, 对吧?那你们要注意当前它里面这些指纹啊,它肯定是动态的,你如果把它写死,它肯定会变问题,想都不用想,它这里面这些指纹,还有尤其是这里面它还会涉及到一些关于我们鼠标的移动和鼠标的一些轨迹,你们注意一下啊。 好吧,那你看这个,这个,这个其实难度也是有的,这个里面其实说实话,你看它这个里面只是涉及到一个什么,其实它里面最基本的就是一个 rsa 的 加密,这就是一个 rsa 的 加密,只是说它里面核心有额外的 指纹要进行处理,里面包含的像我们的基本的一些,呃, navigate 啊等相关的一些环境信息什么的, 对吧?像这种难度会稍微高一点,即这种带指纹的,目前在市场里面一般做外包啊,大多数其实可以选择去购买指纹,或者说让客户提供你。像这种难度其实也好,它里面的加密的逻辑其实就是做了一些压缩, 是吧?做了一些编码,有一些转变,然后做了一些压缩,整体而言难度其实还算适中,对吧?适中难度不是特别高, ok, 这个就是进阶的。

开伞爬虫教程第七集 cookie 的 使用在网站中我们会发现,登录之后用户可以看到更多的内容,比如购物网站中的购买记录,个人信息等等。 这些内容通常需要我们在访问网页发起请求时输入了登录信息才能够获取。每次想要看到新的内容,刷新网站时都会发起一次新的请求, 服务器就会像第一次见到你一样要求你重新登录,那也太麻烦了吧。为了解决这个问题,这个时候我们就可以使用上 cookie 了。 cookie 就是 保存了用户信息以及用户的喜好的一串字母。当你使用浏览器第一次登录该网站时,服务器就会创建这个 cookie, 然后响应内容的同时, cookie 就 会被浏览器保存下来。浏览器在下次向同一个网站的服务器发起请求时,就会携带它。服务器经过识别 cookie, 知道了用户的身份,就可以避免重复登录,并且能够根据用户的喜好响应页面内容。 为了更便捷的浏览网站,提升用户的体验感,在浏览器中发起请求时,携带 cookie 就 变得非常重要了。我们怎么才能找到这个 cookie 呢?首先我们打开浏览器, 在网站中我们有两种方式可以进入开发者模式,第一个就是按下键盘中的 f 十二键,第二个我们可以在页面中空白的位置右击点击检查, 找到网络的选项卡,然后刷新一下,重新加载数据包。在这里我们可以找到最上面的文档, 在请求的标头内找到这个 cookie, 那 么这个 cookie 就是 浏览器保存的 cookie 了。 有同学就会发现,这个浏览器中我并没有登录,为什么还会有 cookie 呢? 这是因为 cookie 分 为两种,第一种,临时 cookie。 如果你没有登录网站,浏览器会设置一个临时 cookie, 发送请求时携带给服务器。 这个临时 cookie 在 浏览器关闭之后会自动删除。当然这种临时 cookie 也没有保存个人信息和个人账户的作用。第二个,持久 cookie, 这个持久 cookie 它会设置有效的期限,有些网站可能是三到五天,有些可能是半个月或者一个月。大家可以观察,我们在浏览器中登录了一个网站之后,过一段时间再次进入的时候,您就是需要重新登录呢,这就是因为 cookie 已经过期了。 了解了 cookie 的 类型以及获取方式之后,我们进一步来看在爬虫程序中如何实际应用。 通常来说,我们有这么几种情况,在爬虫程序中需要使用到 cookie。 在 网站中,如果需要登录才能访问的页面, 例如用户个人中心或者账户信息,会员专属内容等等,那么我们就需要使用到这个 cookie。 第二种,保持绘画状态。像我们在网站中浏览小说,每一次翻一页或者点击到新的下一章, 就需要刷新一下页面,那么就要保持这个 cookie 状态的存在,那么我们就需要使用到 cookie。 第三种,某些网站通过 cookie 验证请求合法性,首次访问会设置 cookie, 如果没有检测到 cookie, 那 么就会认定你是爬虫,不返回给你信息。这个时候我们就需要在爬虫程序上携带上 cookie。 如何在爬虫程序中携带上 cookie 呢?两种方式,第一种,在请求头里面携带 cookie, 这种方式我们可以在爬虫程序中这么写, 将 cookie 加入到 healers 里面,然后爬虫发起 get 请求时,携带这个 healers 里面的 cookie 就 可以了。第二种方式就是设置 cookie 参数,我们可以创建一个 cookie 字典,然后将 cookie 里面的属性和值写到里面,然后在发起 get 请求的时候 加入上 cookie 这个参数。那么讲了方法之后,我们在拍唱中来练习一下到底如何正确使用吧。这个视频我们要做的是抓取百度登录后的个人中心页面。首先我们在浏览器中 打开百度,我已经提前登录好了百度的账号,那么我们要抓取的页面内容就是这一页的个人中心。 我们做了一个爬虫程序,需要获取到登录的网页 url, 那 么我们在浏览器中直接在地址栏里面获得这个 url, ctrl 加 c, 然后复制粘贴过去, 写上 url, 等于刚刚复制的那一串 url。 发起请求我们需要使用到 request 库,那么在这个上面我们先来导入 request 库, 导入 request 库之后,我们来抓取这个网页中的内容。抓取网页中的内容不只是需要单纯地发企业的请求就行了,因为网站的服务器会识别是否是爬虫,那么我们就需要写上一个 healers, 在 healers 里面 创建一个字典,在 heds 里面写上 user agent。 如果 user agent, 我 们也可以在百度的开发者模式里面找到网络,然后刷新整个页面, 刷新之后我们找到这个文档,就是整个页面的 h 页文档,点击之后找到请求头里面的 user agent, 直接复制粘贴就行啦。最重要的一点就是 user agent 我 们复制过来 是这个样子的,我们需要将它切换成字典中的键值,对,那么写上 user agent, 然后写上冒号, 将它改为字母串模式之后,我们还要获取到的 cookie。 为什么要获取到 cookie? 因为是在登录后才能出现这个页面,没有登录就没有这个界面,那么获取这个 cookie 也是在这个选项卡的网络中 找到这个 cookie 直接复制。大家要注意的一点就是不要复制多了,也不要复制少了, 然后在拍唱中粘贴进去。我们需要注意的一点就是每个键值队之间我们需要用逗号隔开,这是一个非常细节也非常小的一点,很多同学可能会忘记,那么现在我们在 user agent 的 这个键值队后面加上逗号之后, 写上第二个箭指,对 cookie 粘贴过来,写上 cookie, 加上这个冒,大家会发现还是爆红,这是为什么呢?因为我发现百度它有一个问题,就是它在它的 cookie 里面加入了一个 双引号,那么这个双引号就会与前面的配对,我们构建的这个字母串就不会成功。想要取消这个双引号在 python 代码中的作用,那么我们就需要使用到转移字母,将它变成一个普通的字母, 然后我们再滑到后面去,这个也是百度自带的一个双引号,我们也加上,然后在这里我们重新给他加上引号。 获得到了这个 cookie 之后呢,我们就可以使用 heaters 发起这个请求了,写上 response 等于愉快的发起了请求。那么这个 cookie 呢?因为我们并不是创建了 cookie 属性,直接只要写这个 heaters 就 可以了, 现在我们来看一下能不能发起请求成功打印一下我们发起请求的状态。现在来运行这段代码,可以看到 运行结果是两百,说明能够运行成功。成功运行之后,我们就来保存这个个人中心的页面。首先我们注视掉这个打印的状态,写入文件 with open, 在这个页面中,我们将页面的内容写到这个 html 里面,再来运行这段代码。进程结束之后,我们直接看到这里已经出现了这个,那么我们打开这个页面,直接在浏览器中打开, 大家可以看到我们几乎得到了一个与个人中心完全一致的页面,这就说明我们已经抓取成功了。还有一些不一致就说明它并不是写给物在 html 文档中的内容。 总之这个 cookie 呢,是网络爬虫中重要组成的部分,合理的使用 cookie 可以 帮助我们为后续更复杂的爬虫场景打下基础。

在做这一次逆向的过程中呢,遇到了典型的一步调换站断层的问题,怎么解决?我们一起来看一下,我的天呐,那么首先我们先进入到这个方法里面,好打上断点,然后我们给他断在这里, 现在的话,我们断点已经下好了,也已经断在这里了,那么我们先去观察一下求中域有没有我们需要去逆向分析的这个数据,有,这里有一个 u 的 值,你可以在控制台上面打印输出, 看一下,它是有这个加密的数据的,那么我们要找它从无到有的连接点的位置,所以我们要跟站往上面去找,那你会发现这里还是有这个加密的数据, 所以它加密逻辑不是在这里生成的,那么再往上面去找一下,还是有这个加密的数据,所以说呢,也不是在这里生成的,那么我们再往上面去找一下。好,这里还是有这个加密的数据。 ok, 那 分析到这里的话,很多同学啊,就看到这种 promis 点赞的 这种语句,就特别的头疼,不知道怎么办了,特别是一些小白遇到这种代码的时候,就不知道怎么做了。其实啊,方法非常简单,我们直接找到谁, 直接找到这个发包点,也就是 promise 正的下方叫做 s request request。 好, 那么我们点击进来,好,在这个地方下一个端点,然后我们再释放, 让他断在这里,点击登录按钮, ok, 已经断在这里了,现在我们再去看他的这个作域。好,你看啊,这里面的话呢,是有这个 pass word, 并且它是一个加密的数据,所以啊,在这一步 生成之前,他已经是有这个加密的值了,所以这也不是他的生成的逻辑,那我们再往前面去看一下。好,这里还是有这个值。那再往上面去看一下,这段话好像也没有了,这里更加没有了,所以说我们先看一下在这个位置有没有 它的赋值生成的语句,先看一下。哎,你会发现这有一个 u r l 的 这个地址,并且还有一个这个 pos 请求的方法啊,它这里携带的就是它的请求 的一些数据嘛,你看这里还有这个 data 刚好呢,这个 r 的 值是不是里面包含了你要去逆向分析的 pass word 密码?所以这个 r 是 怎么生成的,我们可以看一下它在前面进行了复制。哎,那么你是不是就已经找到了它的一个生成的位置,也就在这里啊? 刚好是一个负值的语句,那么我们直行进来,这个断点就已经可以释放掉了,我们就在他刚才的负值的位置端在那个地方,因为我们要重点观察一下是不是在那里生成的。我们再来打开一下,刷新一下页面。 ok, 然后我们现在打开好 这里的话,先把这个断点绕过一下,绕过一下,然后我们输一下这个右面还有密码,点击一下这个灯按钮。嗯,当然了,现在这个断点已经没了,我们刚才是跟到了哪个位置,可以看一下啊,是哪个位置?先清空一下,我们重新来抓一下这个书包来点击。 ok, 我 们看一下啊,名字,点进 这地方,打出断点,然后点击灯按钮。好,然后我们是跟到了这个位置。好,这个位置来,这里有一个啊,好, 好,我们在这里打上两个断点释放一下,这个断点不要了,来释放,点击一下灯按钮。好,现在已经断在这了。然后你可以观察一下这有个 pass word。 好, 他是原来的纸,这不就是那个从无到有的这个临界点的位置吗?对吧?他这里 经过这个方法处理之后的数据就变成了这个加密的数据。好,没问题,是它加密逻辑在哪里?在这个方法里面我们我们可以进去看一下,它就是一个这个标准的 a e s 的 加密吗?

拍伞爬虫教程第六天实战案例哈喽,大家好呀,我是强。在前面的视频里,我们已经做了两件事,一是学会了用浏览器的开发者工具查看网络请求,也就是抓包, 知道一个网页其实是通过多个数据包拼起来的,也能找到哪个请求你用我们想要的数据。二是安装了 python request 库,这个库可以帮我们用代码发送网络请求,模拟浏览器的行为。 今天这期视频,我们就把这两部分结合起来,动手写一个简单的爬虫程序,目标是用代码把百度首页的 html 源码抓取下来。 这个例子虽然简单,但它完整走了一遍爬虫的基本流程以后,遇到更复杂的网站,方法也是一样的。首先打开浏览器,访问三 w 点百度点 com, 按 f 十二键打开开发者工具,切换到网络标签页,然后刷新页面。页面加载完成后,网络标签里会出现很多请求,我们可以通过点击搜索按钮来搜索我们想要的数据,比如搜索网盘 来确定对应的数据包。找到数据包之后,鼠标右击这个请求,选择复制,以 c u r l bash 格式复制,这一步会把浏览器发送到这个请求时用到的所有信息,比如 u r l 请求头等复制下来。 接下来打开一个在线的工具网站,这个网站的作用是把刚才复制的 c u r l 命令自动转换成 python 代码,把内容粘贴进去,它就会生成一段使用 request 的 代码, 复制生成的代码回到拍唱,新建一个 python 文件,比如叫百度点 py, 把代码粘贴进去,你会看到代码里已经包含了 import、 request、 headers 以及一个 request 点 get 的 调用。 为了让结果能看到,我们在最后一行写上,通过点 test 来获取我们的响应内容,然后点击运行。如果一切正常,控制台就会输出百度首页的 html 源码。如果出现乱码,就需要在获取源码之前 设置编码为 utf 杠八。如果你希望把这段源码保存下来,也可以用之前学过的文件写入方式, 利用 vs open 的 方式将内容写入到 html 文件中。运行之后,项目目录下就会多出一个百度点 html 的 文件, 你可以点击右上角的浏览器图标找到它内容,和直接访问百度页面是一样的。整个过程其实很直接, 先在浏览器里找到正确的请求,再通过复制 curl 转 python 代码的方式快速生成可运行的脚本,最后稍作调整就能拿到想要的数据。这种方法的好处是你不需要手动去猜请求头该怎么写, 也不容易漏掉关键参数,因为代码完全是基于浏览器的真实行为生成的。这就是我们第一个完成的爬虫小案例,虽然只是抓了一个静态页面,但思路和流程是通用的,你现在也可以跟着动手试试吧。

在爬虫逆向中的堆站分析怎么操作,特别是遇到异步回调又该如何进行堆积?首先任意的输入一个账号密码, 然后打开这样的一个开发者工具来抓个数数包,在这边挪动到对应的位置,有个验证码过了之后,我们直接来分析这样的一个文件,像这个接口发起了一个 pos 请求,带了这么一些参数过去,而这个参数很显然这个赛他是做了一个加密处理的。那如果说使用这个干站的方法,我们可以选择这个启动器,从启动器里面大家可以看到这个是请求的一个调用堆站, 这个请求一个调用一下是往上面去走的这个步骤,我们可以看到最后一个步骤肯定是他,所以可以选择这个位置上去上个断点,点击 他,这是最后的一个请求发过去的时候,在这里当上断点的时候,这是最后一步,那我们要去找参数啊,这个参数肯定属于他发起请求之前就做的一个加密处理了, 待会我们就基于这个点往前面去进行一个回溯,那怎么回溯呢?首先来到这个位置来输入一个密码点,一个登录,来到这个位置之后,大家注意看,我把这块左边这一块右边这块挪过来一点点, 他现在其实从这样的一个作用域的一个当中可以看到他有些参数的一个尺已经出来了,特别这样的一个 h, 这个 h 我 在空台当中进行一个查看,可以看到他里面是有这样一个赛队的一个结果的,加密后的一个结果,那好继续我们继续来查看一下,这下面有一个点,就这样的一个调用对战 这个调一读上就是现在我们这个断点放到一个位置,你看这个箭头直的,就现在这个位置,你点一下之后有这个显示,那其实我们往下面这块是一个回数,我们走往下面走,他这一步直行之前是走的第二这个步骤,那你点击一下之后,点完之后就是我们可以往上面去看点这个步骤,他这个作用域当中可以看到他的一个内容, 这个本地当中有一个 a, 这个 a 取值之后可以看到 a 里面他其实是有这样的一个对塔数值,这个 a 数值我们往后面走,可以这样子来,在空格当中输入一个 a, 把这几个展开之后,他这个后面应该也是,哎,这里我们可以看到 dita 里面不是, dita 里面应该是,哦,没错,这个 dita 当中也有这样一个 set 签名,看到没有这个结果, 那也就是说他现在这个步骤也已经有了这样一个加密结果了。所以我们接着继续往前一个步骤,去这几个维度来点前一个步骤, 点到他之后,我们再可以去观察这样的一个作用的一个当中,作用里面他这个 t 也是有值的,按照类似的一个方式,你看 t 里面也是这个三点,按照类似的一个方式往前面进行一步一步的回数,这样子就 ok 了。那现在我就直接选择下面这样的一个步骤,选择它一点,点开之后好来到对的位置,可以看到这边是有一个外克, 外头就等待它就执行这一块,那我们从这个里面其实差不多已经找到了,可以看到这个赛,因为是一个 c, 而这个 c 当你选择好之后,可以看到鼠标换过来,可以看到它这里面是有值的,但我们没必要在这三个段点,因为你选择这个 c 的 时候,你看到前面是一个赛,所以你取了一个 c, 取了一个 c, 其实我们在这里可以上一个断点之后, ok, 再把这一块给消掉,重新走过去, 我把这个验证码先给过掉, ok, 我 们再重新来一个步骤来,在这边输入一个密码,好点一个登录点,一登录之后可以看到断到了这个位置,那断过来了,此时此刻我们把鼠标放过来,这里面他也是没值的,他也就走了这一块代码,这个代码也可以看到一个等待,等待也就是前面的一个一步,先执行完它里面之后再往后面走,那现在我们在这一块可以把鼠标放过来,直接选择 放到这个位置,可以点到这里面来,可以看到它里面是做了一步处理,点过来之后在这边可以发现它里边又做了这样的一个 c 点, a b, c 做了一个附值,那最终里面这一块可以看到是一个 c, 这个 c 进行了一个,就在这边做了一个附值,给了它是做一个值,用这个赛事取的,从这里完全给推断出来它左这个步骤,我们这里稍到点之后,你在这里再点就往下跑一个 好, ok, 就 可以看到他这个指令已经找到了,那你再往下面走一走一个步骤,好,这个 c 就 有值了。四九 b a 开头的,我们在这空台里面在这一块打印这个大小一个 c, 他 就回车,待会再来做一个对比,好,再来跑过去, 跑完之后其实左键那个 c 发请求,再来跑一个之后,我们可以把这个验证码再挪一下,挪到对应的位置,好,挪过来之后可以看到这边右走的 c 应该是锁定另另外一次的一个教练了,走这个教练了,我们再往下面走一个, 这是 c 的 d 四, d 六四开头,两个 c, 三个回车,两个指是不一样的,好, ok, 已经搞定了,现在我们全部把它走完,走完把这个段子就消掉。走完之后我们选择这样的一个网络模块来搜索,找这样的一个 get 的 名字,那 get 这块对应的就是一个四九开头 b a 的 一个,也就是 d 不 走的那一个请求,拿图片的一个请求,那再来看下面一个,应该是 教练这一块, d 六四开头,对,好,选择公式台, d 六四开头,一模一样, ok, 这就是给大家讲的关于怎么去在网易当中做的这样一个跟正的方式。

爬虫遇到需要登录第页面该怎么办?分三种情况,我争取一次性给你讲清楚,最后可以领取免费的学习资料跟电子数,建议点赞收藏。那么第一种情况啊,他有一个表达,你要登录非常非常简单,可以使用率快,词库自动填写用户跟密码,登录之后你获取库给就可以长期爬取了,这个是最容易的。 第二种情况呢,就是需要一个验证码,对于一些简单的验证码,我们可以使用一些在线的酷自动识别他的文字,然后再提交。那对于复杂的验证码,你比如说我需要拖拽是吧?这种就比较难了,咱们可以考虑放弃了。那么第三种情况呢,就是说班自动化的, 咱们可以手工号线登录,输入我的用户名跟密码,我手动的搞定这个验证码。那登录之后呢,是不是把浏览器就有一个库 k 了?那你把这个库 k 的文本复制到咱们拍存在码里边,如快速的获得,三分钟就可以带着的 q k 去拍。 如果大家对这个感兴趣,我后期给大家推荐一种神仙他都识别不出来的方法,还想了解更多的编程知识,可以关注我,点赞评论,可以领取三十 g 的学习资料跟我们的电子书。

不懂代码,不懂 python, 想把网页上的几百条数据瞬间变成 excel 表格,今天教你用一个谷歌浏览器插件,完全免费一键搞定。建议先点赞收藏。 首先打开谷歌应用商店,搜索 insta data scrubber, 认准这个像精灵球一样的图标,点击添加自浏览器添加扩展程序,安装完成后,随便打开一个你想要抓取数据的网页。 我这里还是以豆瓣电影 top 二百五排行榜为例进行一次。 直接从右上角打开插件,你会发现它非常智能,已经直接帮我们把页面上的所有关键数据都抓取出来了。 这里我们可以直接对想要的数据进行筛选。假如说我们如果不想要这些链接,就可以点击右边的小叉叉,把不想要的数据剔除。如果我们需要抓取的数据是需要手动点击翻页的数据, 就点击这里的 looking at the button 定位翻页按钮, please, 然后去页面底部手动点击选择翻页按钮。 这一步主要是让脚本知道翻页按钮在什么地方。如果你需要爬取的数据是向下滚动自动加载内容的话, 我们就需要把这里的 infinite 给勾选上,具体需要根据不同的网站类型进行设置,这里我就不进行演示了。 以下的 mean delay, max delay 分 别是最小名词和最大名词的意思。有些时候脚本划水,数据过快,网站内容还没加载出来, 所以为了防止网页加载没跟上,我们需要把延迟设置的稍微高一点,给网页一点加载数据的时间。最后点击这里的 star calling 开始爬取数据, 看这个速度,脚本正在自动还原,数据蹭蹭往上涨,喝口水的时间,几百条数据就已经抓取完毕。最后点击这里,根据自己的需求直接导出 excel 或者 gs v 表格, 或者点击 copy 复制全部数据至粘贴版。这里我选择下载 csv 格式,双击打开下载好的表格看看 电影名称、导演名、评分、影评等全部都整整齐齐,会比你复制粘贴快了一万倍。 总而言之, instant data scraper 就是 之前的 web scraper 的 二点零升级版,相较于 web scraper, 操作又好了许多。 本视频只在分享低效工具,不鼓励任何破坏计算机系统或侵犯商业秘密的行为。操作者因违规使用造成的一切后果与本视频作者无关。

拍伞爬虫从零开始学第四期,模拟登录了解新手学拍伞爬虫,别再死磕基础了,模拟登录才是你从只会敲语法到能实际干活的关键,可偏偏大部分教程要么太复杂,要么跳步骤,新手根本跟不上。今天这期专门为新手量身打造,零基础的小伙伴也能搞懂模拟登录。 好,同学们,今天我们来讲这个 request 的, 他的另一个常用功能叫做模拟登录。那首先我们要做这个模拟登录之前要知道模拟登录是做什么的,是干嘛的, 以及为什么要做这个模拟登录,模拟登录有什么作用对不对?那我们首先来看第一个问题,为什么模拟登录?首先从数据来看数据,大家可以简单的把数据分为两类,第一类叫做公开数据, 很简单的例子,你点开就能看,你打开百度有新闻,有各种各样的东西,对不对?每个人都可以看啊,不需要做任何操作,你可以点进去一览无余是吧?好,那第二个叫私有数据,什么叫私有数据?就说你必须要登录才能查看的, 比如说你的一个个人关注,你的一个我的喜欢,是不是收藏等等内容,这些内容你不登录账号,你可以看得到内容吗?看不到的是不是什么都看不到? 我们举个很简单的例子,你访问知乎首页不登录可不可以?可以,但是你要看你的收藏夹,你要看关注,你要看私信,你可以不登录吗?有东西吗?没有,只有一个登录框 啊。所以说模拟登录的第一个目的就是要拿到需要权限才能访问的数据,大家一定要理解为什么去做模拟登录?我们继续往下看, 我们可以从反爬的角度和另一个角度都来理解一下这个东西。网站会对一些未登录的用户去设置一些访问的上面的限制,比如说你没有登录对不对?好,我每分钟最多让你访问十次,单人比较少,大家可以简单去这么理解一下。 第二个很常见,在某些数据接口,他只有你登录的时候才会返回完整的数据。什么?什么意思?来,同学们想一下,你打开一个网页,然后数据出来了,你往下一滑,发现下面写着请登录查看完整内容 有没有,绝对有请登录查看完整内容这一类的大部分是什么情况?只有你登录之后,后面的数据才有,你没有登录这些数据是不会有的。 所以说那这个时候模拟登录是必须的,对不对?因为你不登录没有数据,所以说从反爬来说,这个动作是非常重要的。那我们从业务来说,比如说他有些网站他的逻辑就必须要依赖登录,比如说个性化推荐,你不登录,他怎么个性化给你推荐? 或者说登录前跟登录后是不一样的,登录后才能获取什么东西?当然这个东西我们不详细去讲,大家有兴趣可以自己去了解一下。那说到这个登录,就有一个绕不开的东西叫做库品, 因为我们说 cooking, 其实就是来判断你登不登录的对不对?判断你是不是登录状态对不对?那晚夜他想判断你登录,肯定也有个判断依据,就比如说你现在要认定我是个坏人,你得讲讲证据吧? 你如果认定我是一个好人,也得讲证据吧?我把我的身份证往桌上一拍,你自己去查是不是?你看我是不是好人,或者说我把证据往这一拍,我就知道你是个坏人。要有一个依据,那我登录还是未登录是靠什么东西来判断呢?服务器靠什么来看我登不登录? 考开户?那开户简单给大家介绍一下,假设你现在去银行办业务,第一次的时候你要出示身份证,说白了就是账号密码登录对不对?好,那登录之后我知道了你是个好人,你是我们用户, 他回你身份证会给你一个临时业务凭证,晚宴呢,会给你一个开户。那你接下来再去访问这个业务业务,或者说你再接下来访问这个晚宴的时候,你还需要重新去展示你的身份证吗? 不用了,因为你有条子,或者说你有 cooking, 我 就知道。哦,你是个好人。所以说网络世界里边 以这种屏条或者说这种凭证就是相当于 cooking 服务器呢,它会发送一小段信息给这个浏览器,然后呢标记用户的一个身份和登录状态,或者说你目前那个状态。那从这个 从这个原理上来看, cooking 它产生是什怎么样的一个过程呢?就是当你第一次访问进入个网页的时候,那服务器在返回给你数据的时候,比如说你做了一个登录, 它会给你在响应头里面加上 set cookie, 然后呢浏览器是会自动保存这段信息,然后你再去访问的时候,浏览器会自动在请求头里面加上上次返回给你的 cookie 服务器一看这个人是对的,是吧?是 ok 的,是好人,数据给你了,当然你们要注意这个东西它是有时效性的。 什么意思啊?有些同学会发现这个网页我今天登录了,如果我下午再去打开的时候呢?他不用我登录对不对?到了第二天我再打开这个网页的时候,我发现他又要我重新扫码了,又要我重新输入账号密码了,有没有?有的,因为 cooking 它是有时效性的, 不可能说一个哭 king 保永久这种事情不可能的,当初铁卷还有失效的那一天呢,你一个哭 king, 你 想保一辈子?不可能。所以说呢,哭 king 它是有它的时效性的,可能说是一个小时,可能说是十二个小时,可能是二十四个小时,可能是三天都有可能,一般来说不会很长。所以说呢, 这个 cockey 我 们去操作的时候有人就说了,老师,我能不能复制这个网页的 cockey, 然后在我的请求里面,然后再去请求,可以吗?可以,那你不嫌麻烦的话呢?有些网页他 你每请求一次,他的 cockey 就 变一次,那你每次就去手动复制一下啊,到时候看看你那个自动化脚本搞的还没你自己去手抄快,那就搞笑了是不是?那就搞笑了,没有必要,没有必要自动化了,没有必要了。 然后呢,那 cooking 呢?它其实就是用来做保存登录状态和记录用户评号,评号这个有兴趣的同学大家可以详细的去了解一下这一块其实呢,也就是我们刚才说的这些内容,大家也可以去拓展一下,然后呢, 我们现在其实有个案例,我们可以去看一下这个登录,我们如何用代码去对应的做一个实现,好吧,首先要打开一个,我们都知道一个网页叫四三九九,对不对?来,现在呢在这个里面有一个叫做游戏吧,我们这里面有个群主的,来,我们先点击进来, 进来之后我们发现一个问题,这里面的代码看不到,对不对?没内容,他说要我登录,你们可以试一下,那假设我现在登录一下来, 或者我先先输一个假的密码,然后去运行,我们来看一下,看一下这个包来,然后呢我们点击登录,点击登录之后大家来看,我要看了哪一个是登录的请求呢?来点击第一个看一下哦,同学们 来看这里往下看, password, password 什么意思啊?密码吧, password 应该是密码吧,这是什么? 来, user name 是 不是用户名吧?来再看这个值,是我刚才输入的值吧,是吧?是的,那这个呢?这个好像是做了一个背时六十四,是吧?还有什么东西你们可以去猜一下,但是我告诉你,待会我们用铭文就行了,我们用铭文就行了。然后呢,这个时候我们再去看它的响应,往上滑 来点击响应,我去看一下有没有什么东西。来四三九九,登录好,密码错误,我们回到这里看,密码错误,没问题。那好,同学们,此时此刻我们刚才所看到的这个包 是不是就是我们对应的一个什么一个请求对不对?或说一个对应的请求里面呢?就是用来获取我们登录信息的, 没问题吧?这一点没问题的话,大家可以扣个一,然后呢我们继续往下看,来,我看一下回到哪里, 这里呢,我给大家看一个代码啊,来来,我把我的这个拿过来,拿过来之后呢,我先把代码扔过来,这个请求呢,我就不带着大家去写了,我就不带大家去写了,第一节课的时候呢,大家写过来,把它拿过来,拿过来 复制过来,然后呢把这里改一下,好,这里呢是我的账户密码,对不对?我现在呢,第一步导入了 request 模块,第二步呢定义了刚才的这个 url, 大家看一下,这两个是一模一样的, 一模一样吧。好,我定义之后呢,随便构造了个请求球,只有一个 u a, 然后呢用 date 去提交表单数据,这个我们之前讲过吧, post 它用什么?用这个 date 去提交表单数据,然后呢把这些数据全部放进去 url 请求头,这个表单是吧?然后呢?同样的,他网页上用的是 pos, 我 也用 pos, 最后我接收响应来打印这个文本来我们三二一运行,一看好来,这里面绝对会有个什么东西呢?有一个密码错误对不对?我们来找一下, 来找找找找找找找找,不找了,搜一下密码是吧?来忘记密码是吧?来往下走还没有看到是吧? 用户不存在,是用户不存在,我们这个是用户不存在是吧?他的是密码错误。那难道是我刚才的用户名填错了?我觉得我这个用户名应该是对的吧, 我刚注册的账号不至于吧,是看到没用户不存在。为什么?刚才改 pass word 改成啥了?把用户把用户改了, 把用户改了,所以密码错误是不是就错误了啊?肯定错误的,我们再来运行,来,这一次我一定要找到你的密码错误,来,密码 卡,密码错误对不对?是对的吧,就是这个接口吧。好,那我们现在有两种方法来让他成功。哪两种方法呢?第一种我们直接从登录的数据包去提取登录成功的一个哭停。 什么意思?我发送完 pos 的 请求之后会有响应,对不对?响应里面是有响应头的吧?响应头里面是有点哭停的吧, 注意是有的。那这里很简单了,我发一个正确的写意,然后在这个里面 response 是 什么东西啊?我要去点 cooking, 其他的不要来点 cooking 好, 点完之后呢,我们用一个 cooking 来保存来 cooking 等于加一个,加一个,加一个东西吧,不然的话这个变量名会冲突,再加个下划线,等于等于完了。之后呢,我们再把这个 cooking 给它打印出来,来 print cooking。 好, 拿到了吧?拿到了吧? 是这个东西吧,确定吗?不确定。不要我说是这个东西吗?你就说是是是,不知道呢,对不对?我也不知道是不是这个东西,你你别又试的了,不一定来,那我们现在就可以去做一个登录了,我们登录看一下登录之后的包前面先登录,登录之后呢,我们发现这里面是有内容的吧, 还有什么造梦无双,四三九九,凡人修真,我们呢也是打开我们的开发者工具,然后把之前的内容给它清一下,清完之后呢,点击第二页, 好回到我们的这里来,去看一下哪个包里面能有我们的数据,可以去抓一抓,来我们就进他吧,因为我看到了那个什么,看到有个配置二啊,来配置二呢,在这里对不对?来,同学们看一下这个豪杰成长计划,豪杰成长计划,听起来有点,有点,有点屌,有点屌。 然后呢,我们再看一下还有什么东西,往下看,惊天神剑是吧?来,我们回到我们刚才的页面,回到我们的刚才页面,去看一下有没有这东西。富豪成长计划是吧? 豪杰成长计划啊,惊天神降,那下一个应该是勇士之任信仰篇,应该是这个东西吧,有没有问题?没问题,来我们来看一下是有没有我们的勇士之任信仰篇。来, 勇士之任信仰篇,好,就他了吧,记住他,他是个 get, 对 不对?来,我们同样的,现在我们要做的事情是什么呢?就是把我们刚才获取到的 cockey 添加到我们下一次请求里面,把它带上,然后呢去请求数据,看一下有没有东西可以拿得到,对不对? 没问题吧?那在这里呢,我再把第二个请求给它构造出来。好,来,大家看,第二个请求呢,是他对不对?来大家看一下,看一下对的, type 也是什么?也是 game, 对 不对?返回第二个页面, 这呢是请求的什么?请求的一个链接请求的链接,那这里呢?我就不用 qq 了,我就用 qq。 然后呢对应的请求是 get 吧,我们呢我们也是 get 好 得到的响应,响应设置编码,设置编码之后去打印它的一个响应内容,我们来看一下能不能拿到我们刚才的惊天豪杰。 来,三二一走好。此时此刻呢,我们还不知道能不能拿到东西,我们直接去到最上面,来去看造梦无双,再往下看四三九九凡人修仙传, 火线精英官方论坛,还有什么生死狙击是吧?这是第几页的?我们来看一下。是第几页的?来去看一下。回到我们这里,他这里应该会有页数,对不对?他有个 game 跟一个二是不是都有的吧?是有页数的吧,所以说对应的内容我们要去对应的去操作。那好, 现在这个如果不出意外,他应该就是第一页的,我们来去看一下是不是第一页的造梦无双,四三九九凡人修身修真传,对不对?还有四三九九火线精英官方论团跟四三九九生死狙击官方论团,对不对?那下一个就是造梦大乱斗。来,你可以去看一下下一个到底是不是造梦大乱斗。造梦大乱斗 对不对?那好,有同学说了,老师我不登录,能不能拿到这个东西呢?可以去试一下对不对?好,我们先把这里酷狗给它删掉,删掉之后是不是相当于没有携带我们的酷狗啦?那我们再去运行呢?会怎么样呢?我们发现你再去运行没有酷狗的时候,它是这种东西了。来,这个是刚才那个数据吗? 你还能搜到四三九九生生死狙击吗?搜不到了。那其实这一段我们明显可以看得出,如果没有登录,我们能拿得到数据吗? 拿不到。那好,这里我们是如何去操作呢?首先第一步找到登录接口,去提交对应的表单,然后获取它返回这个 set cookie, 对 吧?响应标头的 cookie 获取之后呢?把它手动设置到我们第二次去请求的时候携带上, 然后呢再进行去请求,拿到登录之后的数据,这就是我们的第一种使用对应的内容去进行对应的请求,这是第一种,那有没有更简单更自然的方式? 有的同学们有的这个东西呢叫做 session, 它呢其实是我们 request 里面的一个对象,它非常好用。那我简单给大家讲一下这个 session 它是个什么东西?它在计算机或说在网络应用中叫做绘画控制, 这个 c 神对象呢,它存储的这种特定用户绘画所需的一些信息或说属性或者配置,这样用户在应用程序跟外部之间跳转的时候,你储存在这个 c 神里面对象它不会丢失,相当于呢,就相当于是一个 整体一直在保持联系的一个状态,保持联系的一个状态,那这里的话非常的简单,大家先简单了解一下,我们如果要去用这个 c c 神应该怎么做呢?很简单在这里去做一个操作,首先我们要实力化一个 c 神对象,比如说我先定义个 c 神等于什么呢?等于 request 的 点 点,谁点 session 好? 我们拿到这个对象之后去做一件事情,什么事情呢?我们后续的请求不要用 request 点 get, request 点 post 了,不用了,我们直接用什么来用我们的 session 点 get? 比如说在这里,对吧? session 点 post 好, 他请求完了之后,你需要再去做任何操作吗?你需要去把它拿过来吗?不需要了,不需要了,你需要去设置 cookie 吗?我们全部给它干掉,先全部给它干掉。那第二次我们只需要再用这个 c 省,同一个 c 省呢去进行 get 请求。好,那此时我们再去打印, 同学们看好了,我这次没有手动携带 gucci 了,我删掉了,来三二一,运行好,我们来看神将世界,来了吧来了吧,来四三九九官方群主 大闹天庭篇三国杀一将成名有没有内容?有的注意,这个 c 它就相当于 自动会保存我们成功登录的 qq 值,我们不需要再去手动添加这个 qq, 直接再次使用这个 session 对 象发送请求就可以了,那它的应用场景就很简单了,对不对?你需要保持登录状态的一个爬虫,我是不是可以直接用 session, 还需要你自己去手动设置这个 qq 吗? 不用了不用了。那 cooking 跟 session 它的主要区别是什么呢?大家可以了解一下,我简单跟大家讲一下 cooking, 它是存放在客户本地浏览器的 session 数据,它是存放在服务端的 cooking, 它的安全性很低,别人可以分析你在本地的 cooking 对 不对?因为我们刚才是不是直接就拿到了, 对吧?如果你对安全性要有要求,一般会使用这个 c 声,因为这个 c 声呢,它会在一定时间内保存在这个服务器端,反问增多的时候,会比较占用这个服务器的性能,如果服务器性能上面 要求比较严格的话,也可以用这个 cooking。 好 吧,简单了解一下,以及 c 声呢,它还会有一个延时操作,叫做超时处理,就相当于你在请求请求不上的时候,这个时候程序要很久才会报错,对不对?那这个时候呢, 程序一直卡在那里,那你不想等那么久呢,就可以设置一个超超时的一个处理参数,跟我们之前的那个 timeout 其实差不多,直接差不多 是一样的。那好,这一节根据我们这个 request 去进行一个模拟登录的,然后访问数据的一个小案例就大家做完了, 大家下课呢,可以自己去登录一下三九九,然后去进行一些操作啊,去操作一下。好吧,非常的简单,但是呢可以让我们了解模拟登录它是一个什么东西,它能达到一个什么样的效果。这次的分享就到这里结束了。

猿人学爬虫逆向答题闯关,今天实战第二题,带兄弟们手把手入门爬虫逆向 nice, 我 们先简单来看一下这个第二题的需求啊,提取五页,全部发布热度值啊,热度值, ok, 然后计算热度值的加和啊,也就是说把这些热度值啊全部加起来啊,这里面一共有多少页哦, c k 失效啊,正在重置页面,我们稍等啊, 那么也就是说啊,在这一页啊,你们已经看到了他是有什么?他是有这个 ck 过期的一个限制的对吧?这个 ck 的 时间长,使用的时间比较短, ok, 点三页,点四页,点五页,点一页,点二页,大概也就是一分钟的样子啊,一分钟还是三十秒?他这个 ck 啊,那也就是说等会我们在代码里面肯定是要把他的 ck 还原一下子才 行啊,不还原的话不行是行不通的啊,那么接下来我们现在来做一下抓包操作啊,等我开抓包,他就是想一点不给面子啊。 ok, 这里面我再来清空一下翻译啊,点击第二页,我们现在来看一下啊,这我们要拿到上面每一页的热度值啊,那么对应的我们就需要对这个地址发送请求,对吧?点击在后可以看到他是没有任何加密的,点击响应啊,也是铭文给了我们的,没有任何的加密啊,那这啊是不是就感觉有点简单呐?兄弟们, 不一定啊,这个地方啊,他是限制手段不一样啊,前面我们已经通过调试看到了啊,他是基于干什么,基于 ck 啊,做的一个限制对吧?那么基于 ck 做限制,那么重点我们就要看什么看这个 ck 了啊,在这个 ck 里面,大家可以看到有一个 m 值,对吧?有一个 m 值啊, 那么很有可能啊,这个 m 值等会我们就要做逆向。那有些兄弟可能就说了啊,他的 ck 是 有有效期的,我们在他的有效期 这段时间内啊,我们把这个,把这个什么呢?把这个数据采集完,能不能实现呢?那么接下来我们就直接干嘛呢?来测试一下啊,就是通过啊,他新生成的一个 ck, 在 他 ck 的 有效期之内啊,我们采集完所有的数据,能不能实现 不太清楚,我们来试验一下啊。 ok, 在 这个地方我们直接啊生成一下最基本代码,最基本的代码生成完成之后呢,我们来输出一下相应的内容, ok, 然后有翻页啊,一共是要采集五页的数据,对吧?那么在这个地方我们选择一到六, ok, 然后在这啊,需要做一下参数的动态替换,参数的动态替换做完之后,这个 ck 我 们现在要让它过期啊,过期之后我们再来更新一下 ck, 那 么在这我们看一下 ck 过期没有啊,好,过期了,对吧?好,无限低 bug, 无限低 bug, 一 律不暂时暂停,跳过点网络 让子弹飞一会啊,好,那么接下来我们再来拿一下新版本的 ck 啊,这个是新版本的 ck 啊,这个 ck 他 目前是有有效期的啊,对吧?在有效期之内啊,我们直接跑一下这个代码,看一下能不能拿到数据。哦呦,还真可以啊,兄弟们啊,在 ck 的 有效期之内啊, 是能够拿到数据的,那也就是说啊,这道题目是不是感觉比较简单,但是做这道题目的本质啊,是干嘛呢? 它 c k 有 效期在变,是这个 m 值在变,兄弟们啊,是这个 m 值在变,目的是干嘛呢?把这个 m 值逆向出来,那这也就是说啊,像关于一些啊, c k 有 效期的一些限制啊,我们就可以干嘛呢?通过啊,这个 c k 的 有效期之内啊,我们能不能把目标数据全部拆下来? 如果说啊,实现不了,那我们就要干嘛呢?就要对面解决啊,这个 c k 的 一个加密对象,加密对象对吧? ok, 那 么这里是关于这个问题啊,那么接下来我们把这个 m 值逆向一下, 那么要递向这个 m 值,那么接下来干嘛呢?递向这个 m 值的话,递向 m 值。假设啊,我们现在不使用户口代码,就直接通过关键字搜索啊,能不能找到? 在这个地方,我们先来跟踪一下对战啊,看一下对战里面有没有一些提示啊? ok, 在 对战里面啊,这个地方, 这里是他发送请求的位置啊,在这里啊,也是可以看得到他的一个请求对象构建的,但是 c k 这个玩意儿啊,他不一定在这里面,他会给你显出显示出来, 顶多是什么情况呢? ck 失效了啊,对吧? ck 失效了,它正在重置页面啊,刷新,那么这个刷新啊,到底是执行什么? gs, 那 这个时候你就要去看了,我们先再来分析一下这个啊,这个看一下有没有显示,还是这里面没没得啊,找不到啊,那这种情况下我们该怎么办呢? 在没有混淆的情况下,像这种情况,我们直接搜索这个 cookie 啊,看一下多不多啊,然后我们要找的是什么呢?我们要找的是这个 m 值,对吧?那这个东西啊,就是我们特征啊,要搜索的特征,然后搜索 cookie 鸡块结果是不用管它的,然后剩下的就是这两个了啊, 对吧?然后在这里面大家可以看到它是有什么东西啊,它是有标签结构的数据,标签结构的数据点击跳转来看一下多功能的点库给,在设置库给,对吧?但是在这段设置库给当中啊,我们是没有看到那个 m 对 象的啊, m 值啊,对吧?那么也就说 m 值的生成也不在这, 那 m 的 生成不在这,那这个位置的标签结构的 gs 代码我们是不是已经看完了?那剩下的就是上面这坨了,但是在这坨啊,你会分析啊,你会发现啊,也没有啊,也没有 ck 的 生成痕迹, ck 不 在这里面啊,那这种情况下啊,我给大家后壳看一下就知道了,它代码是有混胶的, ok, 这里面我看一下这个结构啊, hokokokok, 把这个代码运行一下,当然这个地方他现在 ck 已经过期了,这样子运行不行啊,我们先干嘛呢?先找到脚本啊,对着这个脚本先打个勾, ok, 对 着这个脚本打个勾,再来点第二页啊, c k 试下, ok, 他 会自动执行网页的刷新啊,像这个网页的刷新他会干嘛呢?他会把我们的后壳代码重置掉,兄弟们啊,所以说啊,这个后壳代码一定要在什么呢?一定要在网页刷新之后啊,来执行这个后壳后壳的代码, ok, 我 们现在去让他动一下再来运行,运行之后啊,这个地方会变狱啊,变狱之后呢?我们现在啊,释放所有的断点,那也就是说这个脚本啊,这个勾选我们可以不要了,然后释放掉所有的断点,释放掉, 让子弹飞一会。兄弟们, 这么墨迹吗? 啊,这也太慢了啊,太慢了,兄弟们好,已经 hold 口 hold 到了啊, m 值的生成看到没有?已经拦截住了啊,那么拦截住了干嘛呢?跟踪对战啊,回到上一级啊,回到上一级之后你就会发现啊,它的 ck 的 生成啊,就是通过这一行代码来生成的。 ok, 那 你可以看到啊,重点看这一行代码,这里有一个字母拼接啊,我们来看一下它拼接的值啊,这一段的值,我直接干嘛呢?带大家到库尔代来输出一下,看到没有,这就是可比。那如果说啊,你直接搜索关键字啊,对吧,你就命中不了这个文件, 这个文件它是对 c k 啊,对 cookie 啊,做了混淆的,对吧?那这种情况下我们该怎么办呢?那首先啊,你可以选择截混淆,当然你不截混淆啊也行,不截混淆也行啊。然后它的 m 值的生成啊,就是通过后面啊尾巴这一段来生成的, 尾巴这一段代码也有点长,我,那个骚干,你看有多长啊?我那个骚干, ok, ok, 这么长。我靠, 这么长啊,回车,回车呀,回车,打不动啊,我再回车,哎,等会啊,兄弟们,这里回车执行有点问题啊,我再来看一下,是不是我复制错了, ok, ok, 这里面是不是少了东西啊?兄弟们,你看到没有,我这个括号啊,选中之后到这, 这个括号是前面那一坨,回车打不上去啊,再回车,这个结构啊,复制的有问题。兄弟们啊,结构复制的有问题, 但是我复制的它尾巴后面这坨,复制过程应该没毛病啊,对吧? 他还打不上去断点,那么打不上去断点该怎么办呢?打不上断点的话,那就一个个看嘛,对吧?一个个看啊,鼠标放上来啊,等会啊,他这个地方不止这么点 到这啊。鼠标放上来,嗯,鼠标放上来,没反应啊,没反应,再再来点,这这行代码有点长,兄弟们啊,这这行代码是真长啊,咱们还是先解个混销吧,太长了,解个混销有助于我们做分析嘛,对吧? 再给大家发个福袋后,可扣给代码看一下是吧? ok, 等一下,等一会给你看啊, 然后我们把这张代码先复制啊,然后在本地找到一个 g s 啊,把它存起来, ok, 然后我们再来找啊,前面我们发现了那个多功能,前面这是一个问题啊,什么问题啊?这解混消消消,这个跟没解有什么区别呢?这是没解成功啊, 对于这种情况啊,解混销平台啊,大家也不要特别的相信啊,有些解混销平台就算解了啊,他也是个错的啊。那么像这里的话该怎么办呢?这里的话啊,那就是啊, 解零啊,还得锡林人,对吧?我们用这个平台来解,让 ai 解,我不让 ai 解啊,要解你去解,我不解, ok, 这个是剪泥,还得细泥人自己剪的。那剪了之后啊,大家可以看到啊,剪了之后它还是这个样子,还是这个样子,我们再来换一下啊,咱们用模式二版本, 它这里面有好几个模式啊,这几个模式我们都要可以试一下啊。用模式二版本来剪, ok, 这是模式二版本解的,你看一下它好像有点不一样了,对吧?这次大家可以看到没有解的就比较清清楚了啊, 构造器无限低 bug, 对 吧?然后再往上, ok, 往上滑动一点点,你看到没有?这一段代码是不是看得很清楚了?没毛病吧?那我们要的 m 值的深沉 m 值的深沉不就是尾巴后面这坨吗?这坨就是我们要的 m 值, 对吧?这坨是不是就是我们要的 m 值?你看到没有,这是前面我们执行这段代码,他执行成功,应该是卡了,你看一下这里都是能够对应上的,对吧? 有没问题?没?没得问题,对吧?都是能够对应上的啊。那也就是说啊,我们要递向出这个 m 值的话,我们就需要干嘛呢?就只需要搞定这坨, 就只需要搞定这坨,那需要搞定这坨,我们就要弄清楚这个函数方法他在哪个地方被调用了,那我们选中之后可以发现啊,在这个地方有调用痕迹,对不对?然后呢,他只传了一个参, 而且这一个参数他调的是一个函数的返回的结果,那这个函数返回结果刚好在这里面有身体,也就是说啊,在这里面他干嘛呢?传了一个时间戳,看到没有?传了一个时间戳, 那接下来就是抠代码的过程了,那抠代码的过程我们直接先来上一个二点 gs 啊,这是啥网站解的?小黄聊可以分享吗?可以啊, 想要这些工具的私私信一下。私信一下老哥,猿人学解混消猿人学的版本啊。 ok, 那 么接下来我们继续啊,在这个地方我们先直接干嘛呢?先直接把这个我们要的 m 值的生成的代码,也就是这一坨啊,把它复制过来,然后我们再来创建一个新的函数方法,比如说这个函数方法叫做 aef 啊, 然后粘贴一下,我们要的是它的返回的结果,对吧?那么在这里来上个 return, ok, 那 这些东西啊,现在都还没有啊,我们一个个给他补充上去啊, 看一下这一个和方法对应的要的这个值啊,这个值不就是什么第一个参数,对不对?那第一个参数我们直接把它这个参数复制过来,放在这里,我们也给他要不要设这个参数啊?不行来上一个 vr 来接收一下。哎, vr 接收一下这个参数啊,他不就是个时间戳吗?对吧?他不就是这个时间戳完了,既然是这个时间戳,我们直接把这个时间戳给他实名放在这里,这个不就补充完成了吗?对不对?那也就是说啊,这行代码现在就变成这种结构了, 变成这种结构了, ok, 现在这个函数方法没得,对吧?那接下来就需要补充这个函数方法。在补充这个函数方法之前啊,我们先来上一个什么呢?来上一个参数转 logo, 然后他缺什么我们就补充什么, ok, 他 现在缺少的是这个,哎,等会啊,再来看一下他缺少的是哪个?缺少的是这个,对吧?缺少的是这个,我们就在这里面来找找啊,缺少的是他,那还是他 没毛病啊,在这里,对吧?在这里。 ok, 我 们把这段代码复制, 然后粘贴到这,把这段代码复制啊,这里面啊有个坑啊,什么坑呢?大家来看一下这段代码,这段代码他的执行是什么东西啊? ok, 他的执行的结果是干嘛呀?返回了一个空值对不对?这个函数方法返回的是个空值啊, 看到没有返回的是个空啊,那也就是说啊,这个代码他要不要是不是无所谓啊?那这一个位置是不是无所谓,我们可以直接给它删掉,如果你不删, ok, 你 就进入到现金里面去了啊,他这里面是有什么东西啊,应该有定时器啊,无限的 bug 等等之类的 定时器啊,然后你就会发现啊,代码运行啊,然后也啥结果也没有,反正就一直卡在那里啊。 ok, 那 么接下来我们就要开始运行代码,然后来补充他缺失的函数方法了,他缺什么我们就扣什么啊。 ok, 他 缺这个,我们就把这个给他找过来,在这里对吧?复制 粘贴到这。 ok, 那 么以此类推啊,继续啊,接下来就是比较枯燥的一个补函数方法的过程了。 ok, 在 这扣过来复制粘贴啊,再来运行,他缺什么就补充什么,这个没有复制再来在这里粘贴啊。 ok, 等把这些操作啊整完啊,那基本上就搞定了啊。他缺的东西啊,我记得是比较多的啊,补的话一个个补,那就相当于是吗?相当于比耐心了啊。 所以说啊,干 js 逆向没得耐心啊,是玩儿不断的。 ok, 我 们继续扣啊,继续补。 就不能写个批量处理脚本吗?这手累的。批量通用的也也也能写啊,这个东西也能写啊,通用的也能写啊,但是怎么讲呢,我目前做商单的基本上用不到啊,如果说我做商单需要用到这些工具的话,我 我会去选择选写一些工,写一些这些工具啊,目前我做的几个商单都用不到啊。 ok, 这有点长,把它折叠一下再来继续扣啊, 那这个函数啊,兄弟们,这个函数大家,我刚刚在扣的过程当中,我相信大家也看到了,你直接跑源代码, ok, 你 直接跑这个源代码,你会发现啊,这个东西是什么?有没有哪个知道的?这是什么东西? 定时器对不对?所以说啊,你就算发现了,你这这,他是这个地方,你还原之后比较明显,但是也有些地方啊,他还原之后不明显啊,那你就一直卡在这,一直卡多少秒呢?一直卡五百秒, ok, 那 这也就是啊,我们对于这种混淆的啊,有时候啊,我们选择啊,直接代码全勾啊,有时候啊,我们还是愿意干嘛呢?一个个来补啊。 ok, 那 这里面我们一个个来补啊, 应用场景不一样,那对应的 qz 啊,这个地方有个 qz, 这个 qz 是 个啥?等一会兄弟们, qz, ok, qz。 要拿这一坨吗?这个 qz 看一下,我看一下这个 qz 有 几个啊?一副 qz。 那 qz 的 话我还是拿一下啊,直接拿一下就得了。 ok, 接下来继续 缺啥就补啥, 大家有什么问题啊,都可以把问题打在上面上啊,有没有老哥来两个素材的?等我把这个题目做完啊,我们就看一下有没有老哥 来两个素材的啊,有素材的啊,我们就去讲一下素材,这样感觉直接把那边的文件复制过来就行。 ok, ok, 我 前面的白讲了,我靠,你去试一下你就知道了。老哥啊,我这里面我 尽力了啊,尽力了,兄弟啊,这是 g s 解密,对它这种这种什么这种检测啊,不仅仅只有个定时器啊,老哥,哥哥, 不仅仅只有定时器啊,如果说啊,你认为他的调试代码啊,只只有一个定时器啊,那就想的太简单了,只要你做过他的题目,你把那些定时器删完了, ok, 他 一样的不出值,一直卡在那里的。 怎么讲呢,这些检测手段啊,当然你们比较熟悉的话,我不希望你们只知道个定时限, ok, 生成了,那这才多长时间对吧,这不就已经搞完了吗?这补的很多吗?不多吧, 也就只有这么一点点啊,每次找到关键加密位置总是 c v 过来,那怎么讲呢?有,有时你得看,你得看场景,看应用场景啊,看应用场景啊,不是说你直接 c v, 全全 c v, 它就是通用的方法,并不是的啊, 再看一下结混销的网站, ok, 结混销的网站一共两个啊,这个是猿人学的结混销,还有一个是等会啊,还有一个是这个平台,这个平台我也给你看一下结混销。结混销啊,在这 定制一个自动买期货的脚本,什么价格期货的,那个期货的,这个现在没时间搞,没时间搞期货的,而且期货的很多都是搞那些 搞,搞那些什么呢?搞那些应用啊,就跟这东西一样的,难度很很高啊,如果说你你的预算只有什么几 k 啊,那基本上找不到人的。 ok 啊,那么这个 ck 啊,我们现在已经搞定了啊,搞定了,那么接下来我们把它试一下啊,看看能不能过关啊。 ok, 然后在这我们来上一个 vga, 然后是二点 gs 啊, 勾取一下,拷定 u t f 杠八,它是什么?对称和非对称?都不是,老哥, 对称和非对称它都是有什么?都是有特点的,你在我刚刚抠代码过程当中,它密纹的值长这样子,这样子的值,它是对称或者是非对称吗?都不是,能理解吧? ok, 那 么接下来我们直接干嘛呢? c d 叉点括号,然后调用 af 方法来生成啊? ok, 这里的 c k 我 先把它删掉啊,防止有些老哥看不懂啊,认为我这里面啊 c k 是 怎样的啊?现在? c k 啊,在这个地方大家可以看到它是干嘛呢?通过 g s 代码生成的啊,通过 g s 代码生成的。 ok, 那 么接下来我们来运行看一下啊,这里面我把这一坨啊都给它删了,运行 是不是也抽纸了? ok 吧,这就是啊,关于 ck 的 逆向啊,关于 cookie 的 逆向, 然后这道题目啊,它的意思是干嘛呢?要计算加核,对吧?这道题目啊,要计算加核,我在这个地方我先清空掉所有断点啊,计算加核,这第二题卡了,又卡了,兄弟们, 计算加和啊,那计算加和的话,我们来计算一下啊,它是在提取里面所有的 data 的 对象,先提取所有 data 对 象, response 加 get 对 象,然后再来上一个例子,一啊,统计一下, ok, 这里面尾巴后面要来上个剪接伞, hulk hundler, 不 看了吗? hulk hundler, 你 要看?我等一下啊,把这个代码稍微写完就给你看啊,然后在这里面我们要来上一个推导式对它,然后是 i 蜗牛 ok, i 问你啊,在这个里我们是要加等于啊,加等于, ok, 然后求和一舍一, 那这个的题目的结果我们来看一下答案是多少。 ok, 这个是答案,把这个答案复制一下放在这里。啊,直接加答案, ok, 这个第二关啊,我们也过了。

今天讲一下在 gs 印象中比较高级的一个知识点,深度补环境。在讲解之前呢,我们先了解一下什么是补环境。一句话讲补环境就是将本地能弄的环境通过补对象的形式补充成浏览器对象,从而欺骗网站源码,拿到加密数据。 我们知道浏览器有八大对象,普通的补环境是这么补的,如果遇到元星碳检测的话,就会拿不到加密数据, 这就需要深度补环境了。深度补环境就是将浏览器对象的原型对象也补充上,使得每个对象之间都有联系,把方法或者属性补充到自己的那一层原型链上。点赞加关注下一期视频,手把手带着大家补一次 document 的 方法和属性。