粉丝2398获赞60.0万


雪球网的加密难度竟然比一些大厂的加密难度还要高,那么今天我将花四十分钟时间来带大家来实战难度指数四颗星的雪球网站。那么像雪球网的话,他首先有目前有很多人啊,他连他的第一个逻辑都过不去啊,什么?就是他的反调试,呃,首先雪球网的话有什么样的一个反调试呢?第一步大家请看我们在下面向下滑的时候,他是不是能够正常翻页, 对吧?下滑分页,但是当我们鼠标右键打开开发者工具,我们在开发者工具的栏目里面点击网络来进行监听他的数据包,那么我们进行下滑,然后就会进行一 bug, 看一下是不是进入了一个 bug 的 一个调试状态。那么其实说到这个反调试啊,其实我讲过很多遍了啊,不厌其烦的在讲,那么 目前我们一般遇到反调试的话,我们要该怎么办?需要更多爬虫逆向学习视频以及啊海量的爬虫项目员吗?可以点击我的主页来进入我的抖音粉丝群来进行获取。当我们遇到反调试的时候,我们第一个逻辑,我们首先要能够清楚的知道当前的反调试究竟是由谁来进行构成的, 对吧?这个 bug 的 方法是谁来构成的?我们先要了解这个 bug 是 谁来构成的,然后通过它的构成逻辑,然后再来把它解决掉,而不是说比如说你像我举个例子,像我们很多朋友们说实话根本就不知道它怎么构成的,直接鼠标右键一律不再是停止是吧?我告诉你,没用的, 过不去的啊,过不去的,然后有同学说用后壳,那么你要知道后壳的话,目前它是有很多对象的,就是关于这种反调式的构成,最基本的 eel 的 构成,构造器的构成,构造函数构成,其次还有像 factor 方法的一个构成, 对吧?当然除了这三种之外,其目前市场还有很多种,就是像这种 bug 的 一个构成啊,它里面会有很多,如果说我们就用一个后壳, 对吧?我举个例子,好吧,你看我们在市场上面我们常见的后壳的 bug 的 一个编辑是不是这样的,我给大家看一下,你看这个是不是我们在市场常见的一个关于构造器,通过接受了构造器,然后当构造器来构造一个 bug 的 方法的时候,我们把它进行返回为空 这么一个后壳,但是我们把它进行后壳,你看后壳注入成功,注入成功之后,当前页面没有成功解决,当前虽然说已经没有 bug 了,但是但又没发现它的下滑已经不产生数据了,朋友们发现这是我们使用的错误的后壳方法,它会导致数据不返回,对吧? 呃,别说,目前市场有很多网站都是这样的啊,那么像在这里其实我们要更加深一步的来观察当前它的这个反调试到底是怎么构成的,然后根据它的构成的原理,然后再来进行后壳是不是更加好一点, 所以我们现在这里你看我们重新进行页面的一个刷新,好,刷新完成之后,鼠标右键点击检查,打开工具,我们在开发者工具当中进行下滑,下滑进行断点,然后下滑之后,你看我们进入了一个反调试,那么我们首先要来看一下当前这个反调试它是如何构成的,对不对? 那么在这里你看当前的构成逻辑是由 vm 文件再进行执行,其实说白了 vm 就 虚拟文件嘛,是吧?那么在这里你看我们要更进一步,点击录入,来点击录入这个方法,你看啊,来录入,然后当我们进行录入之后,大家请看它的一个主体的一个构成的部分,其实是在这里你看有这么长的一堆代码, 我们可以来看一下它是一个很长的一堆代码,你看很长的一堆代码,那么像在这堆代码当中,首先啊,我们可以看到它的整体部分是可以分为好几个部分啊,前面这个是为一个部分,对不对?你看我们,你看我先把它拆分了啊。首先这个是第一个部分,看没有我们绑了执行, 各位有没有发现我们当前所来构造的,你看这前面是一段高度混淆的代码啊?然后在这里我们把它在控制台输出,我们会发现它当前所输出的是为我们的一个 effects 的 一个方法, 是一个 fact 的 一个方法。然后其次再由当前的这个整体的,你看这个整体部分是到这里,然后再由这个 fact 方法来进行的一个返回,我们来看一下它里面会返回一个什么样的一个内容来给到我们,你看啊,我们在控制台再次去进行执行, 然后再次去执行,我们会发现当前他所输出的内容是不是我们刚刚所看到的反调试所输出的内容, 对不对?那么其实它的一个整体其实就很简单的,通过咱们的 fact 对 象来构建了这么一个内容,一个返回,首先它里面这里有一串数字,然后再是 delete, 然后再是 return 来返回了有某一个内容,然后其次在它的末尾我们会发现它有两个参数,对不对?你看它有两个参数,一个是 w w 九,对吧?有个 t 一次,还有个 w 九为零,取下标,对吧?它有可能是取下标或取折,但是我们可以看到它当前你看这个主体的部分是不就是我们当前这个 bug 的 一个返回啊?你看是不是它它会入两个参数,看没有入个 s 和一个 i, 这个 s 和这个 i 它入的是不是就是这个和这个,只说它是动态的。 那么你看,首先第一步我能够确定当前的 bug 的 一个构成是由 facture 来进行构成的,并且它里面还有做了一些处理,那么像这种后刻我们该使用的是 facture 的 后刻方式,也就是它, 对吧?可以使用这个方法,大家可以使用这个方法,那么我们来通过像这种 microsoft 的 一个方法,并且去判断了它里面的,对吧? in depth of 如果说当你们来进行 debug 方法的一个构成的时候,我们把它返回为空,你看点击执行,那么像这样我们才能够成功地来解决当前页面的 debug, 并且让它产生数据。你看, 你看现在的话,我们是不是解决了 bug, 并且还可以正常分页,不然的话我告诉各位朋友们,如果说你这个 bug 你 如果通过不是以基于 facture 的 一个呃后壳的一个方式,那么它会导致你的数据反回扣, 记住啊,所以你要注意啊,就是我们遇到反调试的时候,大家要清楚这个反调试是怎么构成的,而不是无脑的这些后壳,你说实话没用的啊,当然你用脚本工具什么都可以。好, 那么我们现在我们重点来看一下目前雪球网的话,它主要的核心加密参数,也就是这个 md 五下滑线,下滑线幺零三八,呃,整体来说,我可以跟大家讲一下雪球这个网站的加密难度啊,它的加密的系数,呃,整体来说其实比大厂的还要复杂, 这比咱们同学们所看到的什么京东、淘宝、拼多多什么的,我告诉你们,雪球比他还难,就是他的整体的这个加密啊,当然不包括风控,就只简单的说从这个加密的体系出发,雪球目前在在目前我们国内啊,我可以告诉各位,他算是比较顶级的了啊,算是比较顶级了啊,很多人可以搞定大厂就不一定搞定他 啊,为什么呢?首先你看他第一个存在一个加密定位的一个问题,很多人连他最基本的加密位置他都找不到, 对不对?我想问一下咱们在座的朋友们是吧?啊?是不很多同学都找不到嘉宾位置,我看了一下,有很多老粉丝是吧?而且有些同学是,呃,有基础的,对吧?有些同学是有基础的,我问一下,你们是不很多人找不到嘉宾位置? 嘿,是不是找不到嘉宾位置?呃,首先我们在这里,你看当我遇到这种嘉宾,首先我可以明确告诉各位啊,它里面是进行了大量的一个混淆的,我们肯定搜关键字,肯定是搜不到,所以我们现在这里使用最好的一个方法,首先第一步进行叉 hr 断点, 来,我们在这个地方来拷贝当前他的一个路径,看啊,这是他路径,那你们要注意啊,他有两个对吧?啊?有两个他就直接用这个腿啊,来 ctrl c, ctrl c 拷贝他路径,然后通过使用叉 h r 断点来进行断点,来叉叉断点,然后像在页面当中进行下滑,然后进行断点 好断点,然后当它断点之后,大家请看啊,当前我首先给大家讲一下啊,像它的构成是非常有意思的啊,因为它的构成是以在这个 this 里面的,你看在 this 里面,也就是 comma h p request 的 对象下面有个 open origin, 这个 open origin 它的下面就包含了我们当前要的参数,而且是已经构成的状态,你看我们可以在后台输入一下, 你看是已经生成好的,看到没有?是不是已经生成好的?呃,而且朋友们请仔细观察当前它是属于在哪里,是不是当前的指向的对象, 是不是当前的指向对象?其实当前的 this 它指向是谁?当前这个 this 它指向的是我们的 xmail 对 象, 对不对?你看只希望是我们的,他们要去追随 request 的 对象,那么在这里我们就要去重点去跟一下,看一下它到底是怎么结,呃,产生的,对不对?首先我们看我们向上推一步,当我们在往向上推的过程当中,其实我们会发现当前的这个时候,也就是里面啊,其实还是有我们的结果的,你看,我可以向上推,你看,我可以向上推看一下啊, 你看这不都是生成好的,对不对?这不都是生成好的,而且我们向继续往上推,你看它都是生成好的,你看它都是生成好的。你看 这个地方里面连 xmail 都没有了,我看下这个地方,这个地方没有了,但是我们看一下 xmail 里面, xmail 里面是有的, 看到没有, xmail 里面是有的。所以我们其实很多人在调试雪球的时候会犯第一个错误,就是去观察当中参数,发现他在对象就是在请求对象里面已经没有后缀参数了,但是的话,其实啊在他的 xmail 对 象里面其实还是已经生成好的。 其实我们的当前的这个对象的请求啊,请求对象啊,请求对象,它是在后面会来载入这个 excel 里面的这个 open array, 然后取它的下标来通过它来进行获取我们的这个请求参数, 它是这么一个结构。所以其实我跟大家讲一下,我们平常做调用堆栈分析的时候,大家都喜欢去看它的结果,但是我告诉你们雪球不一样,雪球我们需要重点的去跟它的 excel 对 象的一个变化, 我们要重点去看一下这个参数对象它是怎么来的。 ok, 那 么像在这里我们可以看到它是由一个 n 来进行赋值,对不对?你看 n 里面包含了参数对象,我们看一下 n 是 怎么来的,我们可以向上推一下。呃,向上推我们会发现它的话其实是来源于是直接进行取值,对不对?那么我们可以继续再向上推一个, 你看继续向上推的话,我们会发现在一个 t 里面还是有的啊,你看我们看一下有没有单独的哦?这个地方有个单独的 g 色来进行实列化我们的参数对象 啊,但是在这个地方我们并没有看到有任何的一些内容给到我们,它就一个简单的方法,对不对?一个简单的方法,然后我们再继续向上推,继续向上推的话,我们会推到又有一个我们的 send 呃,发送,那么在这里面我们继续去观察我们的参数对象,在参数对象里面有个 open array, 我 们会发现它的参数同样也是生成好的, 对不对?我们这个幺零三八是不是生成好的?来,我们继续往上推,再往上推是为阿贾克斯,那么在这个阿贾克斯里面我们会发现它已经没有我们的 xmail 对 象了,各位请看, 是没有了,呵,是没有了对不对啊?是没有 xmail 对 象了。那么我们像在这里,我们回到这个 send 的 一个位置,我们来观察一下这个 send 这里啊,就是在这个堆栈里面我们的 xmail 是 怎么构成的?我们向上推一下, 呃,我们可以看到我们当前的 xmail 对 象,也就是 s 嘛,对不对? s 嘛,你看一个 s 变量嘛,我们这个 s 的 话是在这个地方 a s s 接收了 t 点叉 hr 里面的返回的一个内容,它会给我们来直接返回我们一个相对应的 xmail request 的 对象, 知不知道?那么我们像在这个地方,我们可以去重点的去观察一下这个 t, 这个 t 是 怎么来的,我们看一下这个 t 好 像没有这个 t 的 话,在上面进行阿贾克斯的在做构建请求的时候来录了一个 t 的 话在上面进行。阿贾克斯的在做构建请求的时候来返回的, 那么我们重新在这个地方给他打一个断点,我们来看一下他在这里面当入这个 t 的 时候,这个 t 是 一个什么情况,对不对?我们来看一下这个 t 来放掉所有程序,然后在页面当中进行下滑,其实这个地方我们可以用叉装啊,然后我们下滑的时候这个地方是进行的叉叉段点啊,我们可以把叉叉段点给删掉,先把叉叉段点给删掉 来我们进行下滑,它根本就不断点。有没有发现雪球这个网站说实话特别有意思,我们会发现它在这个地方它根本就不会跟我们进行断点, 是不是啊?它根本就不会给我们进行断点,那么在这里我们就可以明确是这里它应该是属于当前分页的话,它应该不会由它来进行构建, 对不对?他只有进行页面页面的整体刷新,他可能才会断点,所以这个地方他肯定不是的,我可以把它放掉。 ok, 把它放掉之后,那么我们要来重新调试了啊,我们要来重新调试,对吧?你看是不是很麻烦?他这个地方很麻烦的,我给大家讲一下调试, 那么像在这里我们进行叉叉断点,叉叉断点之后我们再次的来进行刷新,我们来看一下啊,然后断点,然后断点之后我们重点的来到我们刚刚的肾的位置,因为我们刚刚是调这里的啊,我们可以看到当前这个 s 我 们发现我们定位不到他的位置, 是不是这个 s 我 们找不到它位置,那么我们向上推一下,看一下阿贾克斯,在上方的阿贾克斯里面的话,我们可以看到在这个里面它我们的参数就没了, 大家请观察你们的对象啊,你看,我们首先当前的对象,在这里面我们是可以看到的, w 是 请求头,然后 i i 的 话有肾的点发送,那么我们当前最终的对象是不是 h, 这个 h 是 我们最终的请求对象,在这个请求对象当中,我们其实很明显可以看到当前的 beta 是 为明文信息哦,给大家讲一下啊,雪球的话,其实这个 beta 是 用来作为加密的参数的, 你看它当前是铭文,就是还没有被加密,它里面有什么时间戳浏览器 u a, 呃,还有 id 是 吧?你看这里面是指纹信息,还有当前页面幺二八零乘以八百幺二。呃,这个是 word 的 窗口信息,你看这个是指纹 啊,雪球里面是有指纹加密的,那么在这里我们会发现一个很尴尬的点,就是我们通过这两个逻辑,我们是可以看到,首先在阿贾克斯里面我们是没有的,但是走到肾的里面,他有对不对?呃,那么这里就很奇怪,那么我们可以继续向上推一下,我看一下啊,在阿贾克斯之前,在阿贾克斯之前的话,他也是没有我们的那个参数的,你看上面就没有了,上面全部都是进行的 plus, 一 不叠带, 是不是很尴尬?朋友们,我相信。呃,有朋友调过这个网站吗?知道是什么原因所导致的吗? 啊?有没有朋友知道的 啊?不清楚对吧?哈,不清楚是吧?大家都不清楚,你看雪球这个网站,我告诉你为什么我之前不加,因为你们根本就听不懂,知道不雪球的话,至少你如果说你能够搞定现在国内的大厂了,然后你们再学习雪球这个网站其实挺不错的。 来,那么我们换种调试方式。呃,我们在这里我们来看啊。首先我们当前断点的位置大家知道应该是哪里吧?我们当前所断点的位置是否是属于我们当前接口在做请求的时候? 那么大家你们有没有发现,我们当前接口在做请求的时候,它直接就是一个 this, 然后是我们的叉 p h p request 的 对象,它这个地方是直接进行了一个 com 的 一个操作, 是直接 com 的 操作是有问题,因为正常来讲要么就是 apply 进行操作是吧?要不就是 apply, 要么就是我们的 send, 但是这个地方它执行是一个 com 操作,并且执行了当前的一个 this 对 象,后面还有个 p 七, p 七的话是为我们的指纹信息, 对吧?后面都是指纹信息,你看一堆指纹信息,那么我们在这里我们可以试一下,对吧?看一下他在什么时候负责。因为各位请记住一个很尴尬的点,就是我们在当前所断点的位置,在我们的请求对象当中,他还没有我们的那个 md 五的那个请求参数, 我们那个参数当时在这个时候我们还是没有生成的,这很尴尬,是还没有生成的,那没有生成,我们看一下往下走,对不对?我们往下走,来走 来走,然后当我们去往下走的时候,我们可以看到啊,像在下面啊,它会进行大量的 g s 的 一个混响啊,在这个地方它进行了个 n 点 apply 的 一个操作,呃,处理了我们当前的 g s, 呃。我们继续走, 我看一下,我们看一下它什么时候赋值,因为当前我们的请求对象都是没有这个值的,它只有在参数对象里面有。 来,我们可以直接观察一下,在请求对象里面都是没有的,看,没有请求对象里面都是没有的。来,我们继续翻,你看还是没有。来,走,下面进行迭代,迭代完成之后,呃,也没有 看,我们走来看一下当前的 word 对 象,呃,参数对象,然后是,呃,也是没有的,你看当前参数对象里面都没有生成。看,没有, 它里面只有指纹,看,没有,这都是在做指纹的处理啊。我们来走,来走啊,来走来走。呃,我们在走的过程当中我们会发现啊,它的参数反正是一直在进行传递,但是我们很明显的可以看到它并没有,哎。稍等一下,这里进行赋值。各位看啊,这个地方有进行赋值的,你看当前我们的请求地址里面是复制了 md 五下划线幺零三八, 对不对?那么我们看一下这个 p b 对 象是谁? p b 变量,呃, p b 变量是在这个地方,你看这个是 p b 变量,那么也就是说在这个地方它是不是会来生成我们的?呃,也不该说是生成,但是我们知道的是,就是我们当我们执行这张代码之后,我们的请求地址它后面就会开始拼接我们的 m d 五下划线下划线幺零三八的这个值了 之后会开始拼接它的值了,对不对?那么在这里我们看一下,它其实就是曲值了,这是一个曲值, 这就是很多朋友们找到的,就是最近我很多人在搞雪球这个网站啊,发现都搞不定,对吧?他们都是找到这个地方,很多人都找到是这个地方,但是发现有问题,为什么?因为这个地方他没有去做加密的生成,而是直接以取值的方式来把它定过去了, 那就凉凉了,那,那我就凉凉了, ok, 那 么其实际上在这里,其实这里就考到了同学们一个非常简单的一个,其实你们如果把面向对象学好了,这个网站其实也简单,为什么这样说呢?我们来看啊,朋友们,我重新调试一下当前的网站, 来我们进行下滑,当我进行下滑的时候,它进行了叉叉断点,断点之后各位,我们来到这个 send 的 这个站,也就是接 query 的 文件的开头位置, 朋友们请来到这个地方,为什么要来这个地方呢?因为在当前这个地方啊,我们大家请看。首先在当前里面是有完整的包含的我们这个 this 对 象的甚的是什么意思?它其实是一个发送,对不对?就是用来作为呃前端的程序完成最后端来进行请求。那么在进行发送之前,我们是可以来看一下它当前的 this 的 一个变化的, 你看上面其实有很多代码,看没有,有很多代码有正形的两个语句,一个是我们的 else 语句, 然后我们可以看一下上面这段逻辑啊,上面这里是有一段代码的,这一段代码它是做了一些处理,你看,首先我们先看一下最开始的这个判断语句,这个判断语句我们看不明白,我们可以把它还原。你看这是一个 this 里面的一个值,或删除了里面 this 的 某一个值,看,没有, 这个是跟我没关系啊。然后我们再看一下第二个地方,第二个地方它是用一个呃并的方法来对我们的 this 来进行了一个处理, 是不是啊?来进行一个 this 的 处理,你看啊,我们看对象那么像在这里,我们在当前这里,我们可以打一个断点啊。你看,我们打一个断点,然后页面下滑,下滑,然后进行断点,我们可以观察当前的 this, 你 看当前的 this, 它里面其实实际上是没有来生成我们的。你看,就是在这个 this 点,我们的 open array 里面啊,它其实实际上是还没有生成我们的函数,我们的 md 五的这个函数是没有生成的, 都没有,没有的话,那么在这里我们可以继续啊,我们看一下我们的 this 的 一个处理,首先像在下方,它会进行两个语句的一个结构,是吧?一个 if, 一个 else 嘛?你看很明确,对吧?很清晰,一个 if, 一个 else, 哦, else 在 下面, if 在 上面,我们分别可以来看一下 if 和 else, 它里面到底是做了一些什么样的事情。你看, 首先我们来观察一下 if, 在 if 里面,我们去进行执行时候,它会直接在这个地方给我们进行断点,它没有走 x, 也没有走 ef。 好奇怪哦,我看一下这个 if 的 结尾,这个 if 的 结尾是在这里,对吧?我们直接走,他直接走到这个地方来了。大家有没发现当前的 this 里面的 area 啊?我们的这个 open area 是 生成的啊,这个地方已经生成了啊。来,我们看,我们把叉叉断点给放掉啊,不要使用叉叉断点了,把它删掉。好,我们来看一下这个地方,来把它放掉, 然后把所有的断点全部给它放掉,好,放掉完成之后把它勾选啊,雪球啊,雪球,呃,可以看到这个地方他会直接给我们停止,而且当前的停止的状态是处于已经生成好的一个状态,这个地方有问题,对不对?我们把这个断点给放掉, 因为我们像在这个地方我们会发现一个很尴尬的情况,就是你看我们在最开始的时候,当前它是没有生成我们的 m 呃,下滑线,下滑线的那个幺零三八的那个指导 就没有,但是的话当我们的程序从它走到这个地方的时候,它就已经生成了。对,那么很明显这里面的 if 和 else 肯定是被执行的,只是通过我们刚刚的调试,它没有给我们去录入,对不对?所以我们尝试手动的走一下,我们来看啊 if 它是没有走 if 的, 大家有没有发现它其实像是在这个地方根本就没有去执行我们的 if 里面的一个逻键,它是直接在这里就直接走了我们下面的 else, 然后在 else 里面再次的做入了一个 if 的 一个嵌套 啊,我们看一下这个地方他的最终的处理是什么啊?你看,首先他的处理是从这个地方开始处理,处理完成之后,我们来观察一下当前的这四对象,来在控制台里面把这四点输出,我们可以看到在这四,哦,在这四点 open, 这四里面我们的请求参数是没有生成的, 是没有生成,没有生成。那么我们继续往下走一步,你看我们走往下走的时候,我们可以继续来观察,看一下它还是没有生成,对不对?来,继续,再往下走,那我们继续再往下走的时候,我们就可以看到里面有了,对不对?你看 那雪球,那雪球吧,那我们来看是不是有了?那么其实你看,我们其实在这里,我们通过观察其实很明显可以看到它的。呃,外面的。对于我们当前 excel 我 们里面的 open array, 它里面的处理是不是在这个地方有做处理? 我们可以看一下当前的曲值,我们看一下。哎,这个地方曲值看不出来,对不对?呃, u y s。 你 看这段代码的话,它,呃,这是一种混响,对不对?一种混响。我们来看一下它怎么工作的啊?我们选中它来进入这个混响,看一下它的处理,它的处理其实很简单的,就是由我们的 p 三加密了我们的 p 四, 对不对?那么从外部来看的话,那么无非就是当前的 ys 处理了我们的 this, 是 不是,对吧?那么你看我们当前的 this, 当前的 this 是 没有来生成队的,请你看,是吧?就没有。然后由这个 ys 来处理了当前的 this, 是 吧?是 ys 处理,这是吧?你看,我看一下,啊, ys 处理了,这是啊。处理完成之后,我们再去看一下当前,哎呀,不好意思,哎,再来看一下这是, 哎呦,它没有执行成功,这个地方有问题,它没有执行成功,但是我们可以看到它已经生成了,对不对?它只是没有结果,返回它是为未定义。但实际上我们可以看到我们下面的当前的 m d 五下划线,下划线幺零三八的值是已构成,这个已经构成了, 是构成的吧?那么像在这里,你看我们通过这种分析法,那么我们像在这里,你看它其实就是一个矢量化的一个处理,它其实就是在这个肾的这个位置,它直接 通过了某一个判断语句,如果你是直接断点的方式执行的话,你会发现他根本就不走这一块,但实际上他其实是被执行的。 从我对你们的这次来进行处理,那么我们现在可以重点来观察一下这个 w 三方法,这个 w 三方法因为是由他来处理了,我们的这次来构成的嘛。我们进入这个 w 三方法, 我们来看一下,在这个 w 三方法里面又涉及到了,呃,反正都是一堆大量的混淆代码啊,一堆大量的混淆代码,我们来进入这个方法,来进入这个方法。当我们进入这个方法的时候,我们的 open array, 哦,当前是已经生成好了,我们可以把它放掉,这里要把它放掉了啊,来我们看一下,我们重新调试一下啊,因为当前是已经被我们生成好了啊。 哎,我们的断点,各位有没有发现这个地方它有问题,就是不能断点,这个断点是我们如果刷新页面它就没了,因为当前没有显示,它没有,知道为什么吗?因为当前的话,当前这个整体的主体文件它是什么?它是一个 vm 的 文件,它是一个动态的 啊,你们来注意,所以我们现在不能在这个地方断点,对吧?在这个地方断点我们有问题嘛?因为当前它这个地方都是构成好的,你看 areas 里面的,呃,这个没有构成,是吧?你看来我们刚好这个地方有个没构成的没构成,那么我们来调试,我们来走一下它,来下一步 来步入,我们在这个地方可以快速走啊,没关系啊,但是在走的过程当中,请仔细去观察当中的 areas, 它的构成结构,可以把它折叠。我们来看 这个接口不是我们的,这个接口不是我们的,把它放掉,哎,这个接口也不是我们的, 我们不能在这里断点。我们在这里断点的话,各位有没有发现当前的接口不是我们的,因为当前这个路径跟我们要的这个参数,这个这个接口的路径完全是对不上的啊,哥们, 是不是这个接口不是我们的,那么也就说当前这个位置它有点尴尬,我们不能在这里断点,但这里断点的话,我发现好像不太行。来我们重新试一下,把外面的断点给放掉, 然后我们上在页面当中,因为我们的页面啊,你看我们重新把整体页面进行刷新刷新,然后触发反调色,这个反调色的话我就不去注入了啊,我直接使用我的插件,因为可以通过插件直接来对它进行反调色处理,我懒得去注入了,来把这个插件我打开,先 来开启无限极版的 logo, 好, 来刷新,先把页面刷新一下啊,刷新一下,把它开启好,开启, ok, 我看开了没有?好开了,那么在这里我们直接检查,然后打开它的工具,我们在开发者工具里面来进行它的调试来下滑,呃,没有问题啊,没有问题之后,我们现在来到我们的源代码页面,找到刚刚的断点位置,给它勾选高亮,然后页面进行下滑, 没有断点,各位请看, 这没有断点,你看它在这个 jqry 点卖点 gs 文件里面,它都不会去执行断点结构。看到没有?我明明是打了断点,但它就没执行,是吧?很奇怪,对不对?你看,所以你们要注意啊,雪球这个网站,它里面很呃,王者,呃,这个 gs 代码它搞得很复杂,然后来看,我们可以重新进一下啊,也就在这个地方重新打一个断点, 还是不能断,哎,看一下我当前的问题是什么? 这地方它没有断点,是吧?好奇怪。我重新刷新整个页面,稍等一下来,我重新刷新,刷新之后,然后进行下滑,下滑来构建它,构建它之后我们来找到它的,它这个地方会变,各位请看,它这个地方会变, 看到没有?它会变,为什么会变呢?它这个地方应该是我们这个反调试工具的问题,我们开启这个反调试之后,虽然是把它整个绕过了,但是我们会发现它变了一种状态,变成一个短,我们试一下,我们重新开一下, 你看变成一个短的是吧?来,我们把当前的反调时候把关闭。先来,我把这个插件给关掉,先稍等一下,它这里对你的插件也是有检测的,插件有检测,那么在这里我们打开它的工具,然后进入一个反调试的一个状态,没有反调试, 我看一下啊,这个网站可能是缓存的问题,我们重新开个页面,它的缓存有问题,你看这种检测说实话是非常复杂的啊, 你看这个 jerry 奇怪了啊,稍等一下啊,我看一下啊,它这个地方, 它现在不给我们断点,它现在换了一个形式,各位有没有发现?换了一个版本看,没有。它换了一个版本啊,因为它之前它有很多版本啊,它有很多版本,我看一下,是不是缓存问题啊?我把当前的 cookie 的 缓存给它全部清掉,重新加载一下, 你看没有,对吧?好,你看它这个地方,它对我们当前浏览器的指纹是有验证的,因为我们当前刚刚是有缓存,所以导致你看它返回的,其实返回的是一个假值, 对吧?当然呢,有可能也是真值,但是它的长度是有问题的,然后我们基于当前的 fetch 来进行注入,来注入,然后把当前的 bug 解决。它正常给我们返回的应该是返回一个长的啊,它返回的应该是一个长的, 它没有返回。 好,有了,你看这是他正常返回,看到没有?所以你们要注意啊,就是你们不要有些同学可能会觉得他返回假呃,返回那个短的,是吧,就笑嘻嘻的去搞他,但这时候你发现好像他没什么用, 是吧,所以你们要注意一下。好,那么在这里他返回的是这一个长的,对不对?呃,是不是很难啊?朋友们?因为我看很多朋友进来就出去,进来就出去了,是不是太难了, 是吧?是太难了吗?各位? ok, 那 么在这里,我们现在同样的去找到它,像雪球这个网站说实话在市场啊。呃,为什么现在给大家开源呢?因为在前两天有个哥们,他要外包,外包当时搞了一千八百块钱,就搞这个参数,然后搞的是纯算,然后我们来看,那么像在这里我直接走,好吧,我们直接走 来。呃,断点打错位置了,是在这个地方好打上断点来下滑, ok, 然后我们来步入当前的 y s 的 一个方法来,我们来走进去这个方法来走进去,然后走进去之后我们观察当前的参数是没有生成, 而且返回的接口不是我们要的接口,我们要来看啊,观察 this, 这个接口不是我们的,是不是?这个接口是不是我们的?我们把它放掉。观察 this, 呃,刚才还不是我们的接口把它放掉。 诶,它怎么又现在只返回这个接口来重新多几遍? 这个地方有问题。 好,当前这个接口才是的啊,你看对吧?当前这个接口才是的啊,刚刚那个接口都不是我们要的。好,那么现在我们再次进入这个 y s 这个方法来打个断点给他啊, 步骤完成之后,下方的话主体部分啊,反正直接断点了。好吧,这个地方我快速讲一下啊,因为比较简单了,我们直接找到 e 符合他的 s 的 最终返回的主体,然后下面有个 s 的 返回主体,然后这里有个返回主体,我们来看一下他的具体返回结构是什么样子的。首先走到这个地方,当他走到这个地方的时候,我们当前这里是已经复制好了一个 w 八的一个变量, 对吧?一个 w 八的变量里面我们当前的 md 五下滑线,下滑线幺零三八的只是已经生成好的,那么我们去看一下这个 w 八是怎么生成的? w 八的生成是不是在上面?各位,你看这个是不是 w 八的生成,它没有执行下面的 w 八啊?它走的是上面这个逻辑,那么我们像在这里,也就是说当前这个整体的部分就是由它来生成的,我们当前的这个 md 五的后缀吧,是不是由它来进行生成的? md 五的后缀, 然后在这里面会有一些参数,你看下 w i 是 一个方法,然后这个地方的话是做了一个曲折,这个是我们的请求的路径,然后这个地方又有一个信息, 这个是我们的请求体信息加我们的指纹信息,然后再是后面的一些拼接,我们再看一下后面这个是什么?后面是我们的请求方法,为 post 后面再次做了一个拼接。好,呃,为一,对吧?那么这个外面的话,这个地方我们看一下它是什么啊? h i m t。 那 我看一下这个方法是干嘛的啊?我看一下这个方法啊,稍等一下啊,它总共是入了一个参数,两个参数,三个参数,四个参数,五个参数,是吧?有五个参数,看下这个方法, 五个参数,然后这入了五个参数,它的这个方法的执行其实说实话就是 w 六处理了 w 七、 w 八, w 九和 w w, 对 不对?那么也就是说实话,当前的这个整体的代码是不是其实际上就是 w i 来处理了?后面的这一堆内容 是不是这样的格式是不是这样的?你看, ok, 那 么我们通过这种手动还原的方式,我们大概已经知道了,它的主体部分,其实它的核心的加密方法应该就是这个 w i 吧? 是不是它的核心加密是不是这个 w i? 那 么是这个 w i 的 话,那么我们当前是不是就去扣代码一下?我们首先在本地来右击来新建一个文件啊,找到抖音直达直播实战案例,然后加密案例合集来新建一个雪球, 今天这个对吧?雪球的加密参数处理,呃,目前的话,像这个我不提供回放啊,给大家讲一下,这个代码也不分享啊,就是你们好好跟,能学多少是多少,学不到也就算了,这个反正在市场目前也是没有开源的,反正我也服气,对吧? 好。然后我们来看,那么像在这里的话,我们现在的主体的处理,首先第一个部分,我们先把它替换成我们相对应的,也就是当前的路径。 好,然后是第二个部分,第二个部分的话是我们当前的一个请求体信息,也就是一个 data, 是吧?这是我们的请求体信息,也就是指纹啊,包含了一些指纹信息,把它进行替换,替换成我们的 data。 好, 然后再往后走,再往后走的话,这个地方分生成的是我们的一个请求的结构为 post 请求方法。 呃,再往后走,这个屁股后面返回的是什么?返回的是一对不对,那么把它改成一好,这就是我们的主体的加密的构成,幺零三八, 你要说它难吧,其实也就这样,其实你们还可以考虑从它的头部开始扣,可以再深入一个级别,你再深入一个级别的话,可能,呃,也可以扣,但是我建议大家可以这样啊, 好,那么 ok, 之后我们现在是不是要去重点去找这个 w i 的 这个方法了?你看,那么就开始要扣代码了,那么它扣代码的话是非常复杂的,我给大家讲一下啊,因为当前这个代码它里面有涉及到了很多的点。呃,我给大家讲一下,呃,我们来看啊,首先进入这个 w i, 然后在这个 w i 里面,我们可以来观察一下这个 w i 里面,它里面有很多的控制流语句,以及一些一系列的一些处理啊,大概是这么一个结构,所以我们当前把整体的这个 w i 的 方法也给它拿下来, 其实他在 wi 里面还有处理,我给大家讲一下,你们还可以再深入一步,是吧?就是在这个 wi 方法里面,在这个 wi 方法里面,他实际上会有一个控制流语句,在这个控制流语句里面他会最终直接返回后缀,就是没有拼接好的状态。如果说我是直接从这个 wi 直接调 wi 方法的话,那么他返回的是 接口,明白吗?返回的是接口,如果说你再升一步,升到 w i 里面去的话,那你可以直接返回它里面的后面那个参数,它后面最后的参数你继续调试一下,它应该也就是在这这哪个部分。呃,就是说它里面太复杂了,我就不带你们继续去深入了啊,我就直接从这个 w i 开始来把整体的 w i 方法放下来, 你看,然后在它这个 w i 方法里面,当然它还有缺失的一些方法,你限制执行,它肯定会报错,想要分享对不对?它肯定报错的啊,那么在这里我们可以去找一下它,在这个里面它有很多的方法,有个大 g, 对 吧?有个大 g, 那 么这个大 g 它最开始的声明的定义是什么?我看一下啊, 它是添加一个幺七五,那么我们这个大 g 可以 直接申明为一个对象就可以,对吧?我们可以去找一下这个大 g, 搜索大 g, 你 看它上面的话就申明了一个空的大 g, 也就是申明了一个空的极变量,所以我们在这个地方的话,我们也可以直接把这个大 g 给它抛过来,是吧?大 g, 然后下面还有陆陆续续的其他报错,呃,然后在这里我们可以看到它里面是没有这个 pop 的 一个方法, pop 是 弹出,对不对?呃,那也就是说我们这个大 g 啊,我们应该正常来讲要转变一下它格式,我们不能直接照实名,直接照实名的话它有问题 你我问一下各位现在在一般在什么格式里面有 pop 这个方法弹出嘛?啊?什么格式啊?什么格式?是数组啊?各位,是数组啊。呃,所以说在这个地方的话,我们这个大 g 啊,它应该是为一个数组,对不对?而不是为一个对象啊, 对不对就可以了。好,那么像在这里它再次报错,再次报错的话,它报的是里面的这个 wr 的 一个错误, wr 的 错误是做了纯,它是做了一个还原,对不对?一个还原,那么如果说它是做了一个还原,那么我们现在去找到我们当前的位置来,我们先进入我们的 w i 方法,然后在 w i 方法里面去打一个断点,然后我们在页面当中去进行重新调试, 这个地方可以不要了,我们来看一下当前接口,接口不是换掉, 但大差不差啊,就是扣代码是不变的,然后这个 w r 的 话是对应的它是一个还原法,它是一个还原法,然后它对应的是我们的 name, 也就是对应的一个 v 啊,对应的一个 v 方法,那么在这里我就去找到这个 v 方法,然后 v 方法的话是做了一个还原法, 是由它来做一个还原法的啊,你看这个量是做了一个还原法,对吧?这是一个 v 方法,我们可以把 v 方法掏过来,这是 v 方法 啊。折叠好,然后微方法的话,在微方法的上面会有个 l 的 一个声明, l 等于 q 过号,那么把这个 q 过号,我们直接去进行取值,我就不去复制粘贴了啊,直接取值来右键复制 o 接口,然后把这个 q 给它全部进行转化, 那么当它替换完成之后,因为我们为了防止上这个 js, 它可能有反格式化检测,所以把这一堆代码进 ctrl c, 然后找一个在线的 js 压缩,在线的 js 压缩,我们需要把当前的这个代码来进行压缩,把压缩 卡住了, 网卡住了,那我们换一个吧,你看这个地方,我跟大家讲一下,为什么我们要做压缩啊?做压缩就是为了防止它等一下,呃,有检测,有反格式化检测,呃,当然了,我们现在其实你不压缩也没事,你可以去试一下啊,可以先去试一下。那这个地方复制等于 w r, 是 不是我们 w r 就 等于我们的 v 嘛? w r 等于我们的 v, 下面给个换行,你看它其实就是这样一个结构,呃,然后下面再报错,报一个 c, 那 么的 default, 呃,像这种的话,如果少的话,我们可以继续手动还原,如果多的话我们可以去找。一般像这种 c 的 话,它是属于某一个定义,对吧?在代码的第五百六十七行,也就是在它的下一行,我们找到它 c c 在 这里啊,我们可以看一下啊, c 的 话其实是为一个呃 o j, 呃,你可以手动地去考虑还原,就是这个 c 啊,你看它里面其实实际上只是做了一个呃分切割的一个操作,用了一个 speak。 所以说我们如果说你因为但是下面的话,你可以看到其实在下面它还有很多的一个 c 方法的一个调用,所以我的建议是直接去找到这个 c 啊,你看我们找到这个 c 就 扣代码吗?当然你可以做纯算啊,等下我给大家讲一下,纯算就是我更加简单的办法啊,如果我们这样扣的话,那它代码可能会比较多,那我们找到这个 c 的 开头,直接把这个整体的 c 对 象给它扣下来。 那 c 对 象,然后大家有没发现其实在它上面是有很多长量啊?你看它上面有很多长量,看没有,呵呵,有很多这种还原的长量,我们可把它折叠起来,还,还别说,还挺多,你看它上面还挺多。 来,向上推,来向上推,来,向上推,向上推。哇,这个地方还有很多的长亮,看到没有?这种长亮啊,各位可能对雪球不感兴趣是吧?下次不讲这个了啊,这个难度太高了,说实话,对于你们来说啊,今天都没什么人。 ok, 来把折叠,你们感兴趣的你们还是先去好好的看一下国内的大厂加密啊或者一些入门级别的吧。你像雪球这种网站说实话对于各位来说挑战真的是太高了。呃,一时半会的话说实话你们也搞不到这一块里面上面怎么这么多场面? 我看一下啊,就像这种长量的话你可以怎么办?你可以去运行程序然后他报错什么扣什么,报错什么扣什么,报错什么扣什么就不用全扣。呃,当然你可以跟我这样就是为了方便,为了方便就把前面的长量我们把全部都折叠起来,太多了,看这上面都是它的长量, 它其实是一个整体的自止型方法,对吧?有没有发现它其实它里面这个地方是一个整体的自止型方法, 然后上面这个是还原法。其实你们可以考虑全抠啊,可以考虑全抠,但如果全抠的话那么你就要补环境。那我给大家讲一下如果你全抠的话你需要补环境。 然后这是一个整体的 diy 语句,然后在这个整体的 diy 语句里面这是一些常量,其他这些常量并没有全部都使用到我给大家讲一下它没有全部都使用到。你可以去复制粘贴你需要的一些常量也就够了。那比如说这上面我们刚是不是要有一个 c 的 常量你就够了,你可以去复制粘贴你需要的 c 的 常量, 你看然后下面再是 w, r, e, d, four 欸 哦哦这个地方在上面我们要这样你看然后是 dh 看没有 dh 是 不是常量,刚刚我们的常量没有,那么这个 dh 的 话,我们继续往上推嘛,你看 dh, dh, 刚刚我看到了,好像就在这个哪里是这直接搜索吧。 dh, d h, d h 是 不是在这里? d h, 它这里是 d h 点 c, 呃,小写的 h, 不好意思, d h, 然后加个等号给他,嗯,没有, 我们找他第一个就是他的。哇,这个 d h 里面取了很多的值啊,各位,你看这个 d h, 我 这样搜的太慢了,直接声明 v a r 在这。呃,它第一个是吧? d h 看到没有一个整体的 d h, 那 么在这里把这个 d h 给它拿下来,你看这 d h, 那 这样子的话代码太多了,大概你看,然后再是 d q, d q 的 话,我们再是 d q, d q 的 话,你看我们就可以找一下嘛,你可以搜索一下嘛,它报错什么?我们搜索,然后 d q, 找第一个 d q, d q 的 话是 申明,然后再进行的处理。我们看一下这个地方有问题,我看一下啊,他这里做了一些处理,这个是在还原法里面的,不属于我们自己的方法。我看一下,当他来到了我们的方法里面的时候,他是直接是进行的一些拼接,也没有申明 是大写的 dq 吧? ok, 你 看是大写的 dq 啊,它没有声明,下面没有声明了,那么下面没有声明呢?那么就证明这个 dq 说实话它里面可能用到了很多值啊,当前它可能只有一个值,六百三十,六百五十三,对不对?但实际上它里面可能用到了多个值, 所以我们在这里像这个 dq 的 话,我们最好就是直接从它的第一个给它拿下来,因为其这个 dq 它应该就是它,然后它的话会在这个里面会进行一系列的一些处理,在这个地方会有处理,看到没有,会在这个 d a 方法,由这个 d a 方法来处理我们的 dq, 然后下面没了,对吧?因为下面这个常量里面并没有出现我们的 dq 的 值,我刚刚我们看一眼, 你看这些长量里面是没有 dq 的, 知道看一下啊, dq, 这都是小写的,没有,真没有,没有的话那我们就只能去 q 啊,扣代码啊,扣代码,一个个扣,做存算吧啊?做存算,这是做存算办法,好吧?然后你们除了像做存算之外,呃,这个地方我就不去继续带你们去扣代码了啊,你们根据你们自身的习惯 啊,就做存算或者补环境,其实找到了章鱼位置之后,其他都后面的都比较简单了,后面的比较简单来可以给大家看一下啊,这个地方你们继续扣就可以了啊,继续扣,其实我在这里我也给大家看一下啊,这里我也有一份关于他的存算的一个代码,其实差不多啊,他代码比较短,我们只用了差不多三千多行代码就把它实现了, 你看上面是敞亮,你们可以考虑八零,因为这个代码是动态的啊,给大家讲一下啊,它代码是动态的,就是你有没有发现不一样,你看我们这里面名字不一样,但这个是 w i 是 吧?但是我这个因为它是一个动态的代码,给大家讲一下我这个里面是什么?我这个里面其实上它用的是,呃,这下面是做了个宿主的一个拼接 x r 在街里面,那就是在这个里面,你看我这个里面是这样的,你看阿八、阿七、阿六、阿五、阿四,这是更深层次的啊,这更深层次的处理。但其实大家也没发现它里面的语句结构是一样的啊,它里面只是说接点呃,我们的呃 ppt, 然后是音频,对不对?然后我们网页当中现在的话,这个是呃 g, 就是 代码,它是动态的, 但是我给大家讲一下,就是这种变量它会变,那没有关系,但实际上它的扣代码的逻辑其实大差不差的好不好?朋友们,你们如果感兴趣,各位,你们自己去花点时间,一步一步的去把它后续的代码去给他完整的。 当然了,各位如果说你们在扣代码的过程当中有遇到什么问题或者解决不了的问题啊,那你到时候也可以找我啊。没有没关系啊,就是大家可以做一些小个一些解决方案也是没问题的,调试下代码好不好?这个自己花点时间去搞。你看这个就是目前市场的雪球的一个最新的一个开源,它里面的核心逻辑其实说白了其实就是一个实炼化的, 你们只要把好,但是它里面的还原他不能还原,是吧?这个点他有点坑,他不能被还原好了,这个就是雪球网。

嗨,圣诞节将军,你是不是也想在圣诞节和喜欢的人看一场雪呢?如果你的城市不下雪该怎么办?今天我们一起来用拍虫代码剪一个好看又好玩的飘雪圣诞树代码吧! 首先我们来看一下代码的效果是什么样的。在页面上我们可以看到祝福的文字,还有圣诞树,并且有下雪的效果。每当我们的鼠标点击到屏幕的时候,就会出现一个雪球,然后雪花就会落下来,这就是页面效果。我们再来看如何写上这份代码的呢? 我们在代码中需要导入五个库。第一个库, pygame 是 用于画出画面,并且达到鼠标点击雪花下落的交互效果,都是由 pygame 做到的。第二个 random 库是用来控制雪花和装饰物品的位置,保证 每一次运行之后的装饰物品的位置都不同,并且雪花下落的位置也不同。第三个 sense 库,用来设置画面中中文的字体。 max 库 则是用来精准的控制雪花飘落的位置。还有探秘库,用来控制雪花飘落的速度。在这段代码中,每一行我都加入了注示,大家可以根据自己的需求来修改里面的代码,例如你想要修改雪花下落的速度以及 雪花的透明度,还有雪花根据风力受到的影响。如果你找不到对应的位置,你也可以直接 按上键盘上的 ctrl, 加上 f 键,在左上角出现的输入框内搜索你想要修改的位置。比如说我想要修改祝福词,搜索祝福,就可以跳转到修改祝福语的代码啦。 以上这份代码,下个电子学你看的开心吗?要不要尝试也写一下呢?要记得在评论区放出你的代码哦。

宝子们,这个变雪人视频指令教程来了,真的太可爱了,来一起制作吧!首先在我评论区复制这段指令,然后打开我们的豆包,上传一张照片,万物都可以哦,粘贴指令一起发给豆包,等待一会就完成了。怎么样,还不错吧,快来一起把万物变雪人吧,哈哈。