Uniform

极验反爬虫防护分析之slide验证方式下图片的处理及滑动轨迹的生成思路

杀马特。学长 韩版系。学妹 提交于 2020-04-23 10:38:41
本文要分享的内容是去年为了抢鞋而分析 极验(GeeTest)反爬虫防护的笔记,由于篇幅较长(为了多混点CB)我会按照我的分析顺序,分成如下四个主题与大家分享: 极验反爬虫防护分析之交互流程分析 极验反爬虫防护分析之接口交互的解密方法 极验反爬虫防护分析之接口交互的解密方法补遗 极验反爬虫防护分析之slide验证方式下图片的处理及滑动轨迹的生成思路 本文是第四篇, 也是最后一篇,网上大部分针对极验的绕过方法大都是模拟手工滑动滑块的方式,但是通过上面几篇文章的分析,我们是能知道Geetest已经对目前市面上大多自动化测试的工具进行了监测,包括 Selenium甚至electron等。所以基于这些工具的 破解 不是不行,只是人家官方没有严查,不长久的,稳妥之计还是要直接从封包入手。下面进入正文~ 背景图片乱序的还原 如《 极验反爬虫防护分析之交互流程分析 》第五步的分析,得到的 bg 和 fullbg 图片都是乱序处理后的图片,要判断滑动的距离及轨迹需要将图片进行还原。如下图: 还原后的代码为: function SEQUENCE() { var e = "6_11_7_10_4_12_3_1_0_5_2_9_8".split("_" ); for ( var t, n = [], r = 0; r < 52; r++ ) { t = 2 * parseInt(e[parseInt(r

(数据科学学习手札68)pandas中的categorical类型及应用

女生的网名这么多〃 提交于 2020-04-22 06:21:20
一、简介   categorical是pandas中对应分类变量的一种数据类型,与R中的因子型变量比较相似,例如性别、血型等等用于表征类别的变量都可以用其来表示,本文就将针对categorical的相关内容及应用进行介绍。 二、创建与应用 2.1 基本特性和适用场景   在介绍具体方法之前,我们需要对pandas数据类型中的categorical类型有一个了解,categorical类似R中的因子型变量,可以进行排序操作,但不可以进行数值运算操作,其顺序在其被定义的时候一同确定,而不是按照数字字母词法排序的顺序,其适用场景有如下几个:   1、具有少数几种可能取值并存在大量重复的字符串字段,利用categorical类型对其转换后可有效节省内存   2、字段的排序规则特殊,不遵循词法顺序时,可以利用categorical类型对其转换后得到用户所需的排序规则、 2.2 创建方式   pandas中创建categorical型数据主要有如下几种方式:   1、对于Series数据结构,传入参数dtype='category'即可: # 直接创建categorical型Series series_cat = pd.Series([ ' B ' , ' D ' , ' C ' , ' A ' ], dtype= ' category ' ) # 显示Series信息 series_cat

大数据常见英文词汇(待更新)

你说的曾经没有我的故事 提交于 2020-04-21 04:01:18
大数据常见英文词汇(待更新) words(单词) resilient 有弹性的 parallelize 并行化 procedure 过程 process 进程、处理 program 程序 schedule 日程安排 scheduler 调度程序 schema 架构 segment 段 operation 算子 convergence 汇聚 visualize 可视化 plugin 插件 transactional 事务性 integrity 完整 slot 窄缝,扁口;位置,时间,机会 a bunch of 一群 ELK elasticsearch 弹性搜索 logstash 日志存放 kibana vertical bar 竖条 dash board 仪表盘 Covariance 协方差 constraints 约束条件 repository 存储库 Parquet 镶木地板 specify 指定 immutable 不变的 block 块 greater than gt 大于 less than lt 小于 Phrases(词组) Streaming data processing (基于实时)数据流的数据处理 interactive query (基于历史数据的)交互式查询 batch data processing (复杂的)批量数据处理 URI (Uniform

Wang Tile的Shader简易实现

依然范特西╮ 提交于 2020-04-20 17:11:03
在使用大面积的平铺纹理时,会导致重复感较强的贴图呈现在画面中。我们可以通过许多方法进行优化,WangTile就是其中一种。 WangTile(王浩瓷砖)方法通过对每条边标记颜色,并在平铺时将相同颜色的边拼接在一起,最终铺满整个平面。 参考《GPU Gems2》中的做法,但这里使用一组预先设定好的可循环组合值,以及一个4x4的瓷砖纹理。 4x4纹理图: 假设y坐标朝向为从下到上,x坐标朝向为从左到右,则索引(0,0)表示数字16的色块,索引(2,3)表示数字3的色块,以此类推。 这里首先配置好可循环的组合,他们的x轴和y轴不同的序列为: X_seq: 1 , 2 , 2 , 3 , 0 , 1 , 3 , 1 , 2 , 3 , 0 , 0 , 1 , 2 , 3 , 1 , 2 , 3 , 1 , 2 , 3 Y_seq: 0 , 1 , 2 , 3 , 0 , 1 , 3 , 1 , 2 , 3 , 1 , 2 , 2 , 2 , 3 , 0 , 1 , 3 , 0 , 1 , 3 这个序列可以给不同的瓷砖贴图重复使用,我们把这个作为数组传入Shader,数组长度写死为21,其Shader如下: Shader " Unlit/WangTileTesGPU " { Properties { _TileTex( " Tile Texture " , 2D) = " white " {

C++生成随机数

≯℡__Kan透↙ 提交于 2020-04-20 06:35:59
C++为随机数提供了两套工具:C风格的和C++风格的。 C风格 C为随机数提供的工具是 rand 、 srand 和 RAND_MAX ,定义在 <stdlib.h> 中。 srand 为 rand 设置种子,如果不设置,相当于调用过 srand(1) 。 rand 产生伪随机数,其范围为 0 到 RAND_MAX , RAND_MAX 至少是 32767 ,在MSVC和GCC中这个值都是 32767 。 伪随机数看似随机,实则是有规律可循的,对于相同的种子值, rand 产生的序列完全相同,也就是说无论你给 srand 一个什么数字,多次运行程序的结果都将相同——除非你给 srand 的是不同的数字,比如时间。 <time.h> 中的 time 函数返回整数表示的系统时间,可用于设置种子。 如果我们只需要 0 到 9 的随机数,可以把 rand 的返回值 % 10 ;如果是 42 到 233 ,可以写 rand() % 192 + 42 。下面的 random 函数封装了这项工作。注意只有在 b - a + 1 远小于或整除 RAND_MAX 时随机数的分布才比较均匀。 #include <stdio.h> #include <stdlib.h> #include <time.h> int random(int a, int b) { return rand() % (b - a

C++生成随机数

て烟熏妆下的殇ゞ 提交于 2020-04-19 09:42:28
C++为随机数提供了两套工具:C风格的和C++风格的。 C风格 C为随机数提供的工具是 rand 、 srand 和 RAND_MAX ,定义在 <stdlib.h> 中。 srand 为 rand 设置种子,如果不设置,相当于调用过 srand(1) 。 rand 产生伪随机数,其范围为 0 到 RAND_MAX , RAND_MAX 至少是 32767 ,在MSVC和GCC中这个值都是 32767 。 伪随机数看似随机,实则是有规律可循的,对于相同的种子值, rand 产生的序列完全相同,也就是说无论你给 srand 一个什么数字,多次运行程序的结果都将相同——除非你给 srand 的是不同的数字,比如时间。 <time.h> 中的 time 函数返回整数表示的系统时间,可用于设置种子。 如果我们只需要 0 到 9 的随机数,可以把 rand 的返回值 % 10 ;如果是 42 到 233 ,可以写 rand() % 192 + 42 。下面的 random 函数封装了这项工作。注意只有在 b - a + 1 远小于或整除 RAND_MAX 时随机数的分布才比较均匀。 #include <stdio.h> #include <stdlib.h> #include <time.h> int random(int a, int b) { return rand() % (b - a

WebGPU学习(九):学习“fractalCube”示例

拜拜、爱过 提交于 2020-04-18 10:06:40
大家好,本文学习Chrome->webgpu-samplers->fractalCube示例。 上一篇博文: WebGPU学习(八):学习“texturedCube”示例 下一篇博文: WebGPU学习(十):介绍“GPU实现粒子效果” 学习fractalCube.ts 最终渲染结果: 该示例展示了如何用上一帧渲染的结果作为下一帧的纹理。 与 “texturedCube”示例 相比,该示例的纹理并不是来自图片,而是来自上一帧渲染的结果 下面,我们打开 fractalCube.ts 文件,分析相关代码: 传输顶点的color 它与“texturedCube”示例->“传递顶点的uv数据”类似,这里不再分析 上一帧渲染的结果作为下一帧的纹理 配置swapChain 因为swapChain保存了上一帧渲染的结果,所以将其作为下一帧纹理的source。因此它的usage需要增加GPUTextureUsage.COPY_SRC: const swapChain = context.configureSwapChain({ device, format: "bgra8unorm", usage: GPUTextureUsage.OUTPUT_ATTACHMENT | GPUTextureUsage.COPY_SRC, }); 创建空纹理(cubeTexture)和sampler

WebGPU学习(十):介绍“GPU实现粒子效果”

[亡魂溺海] 提交于 2020-04-18 10:06:22
大家好,本文介绍了“GPU实现粒子效果”的基本思想,并推荐了相应的学习资料。 本文学习webgpu-samplers-> computeBoids示例 ,它展示了如何用compute shader实现粒子效果,模拟鸟群的行为。 上一篇博文: WebGPU学习(九):学习“fractalCube”示例 下一篇博文: WebGPU学习(十一):学习两个优化:“reuse render command buffer”和“dynamic uniform buffer offset” 最终渲染结果: 为什么不在CPU端实现粒子效果? 虽然在CPU端实现会更灵活和可控,但如果粒子数量很大(如上百万),且与场景有交互,则最好在GPU端实现。 示例的实现思想 首先执行compute pass 代码如下: const numParticles = 1500; ... let t = 0; return function frame() { ... const commandEncoder = device.createCommandEncoder({}); { const passEncoder = commandEncoder.beginComputePass(); passEncoder.setPipeline(computePipeline); passEncoder.setBindGroup

WebGPU学习(八):学习“texturedCube”示例

时间秒杀一切 提交于 2020-04-18 10:06:02
大家好,本文学习Chrome->webgpu-samplers->texturedCube示例。 上一篇博文: WebGPU学习(七):学习“twoCubes”和“instancedCube”示例 下一篇博文: WebGPU学习(九):学习“fractalCube”示例 学习texturedCube.ts 最终渲染结果: 该示例绘制了有一个纹理的立方体。 与“rotatingCube”示例相比,该示例增加了下面的步骤: 传输顶点的uv数据 增加了sampler和sampled-texture类型的uniform数据 下面,我们打开 texturedCube.ts 文件,依次分析增加的步骤: 传递顶点的uv数据 shader加入uv attribute 代码如下: const vertexShaderGLSL = `#version 450 ... layout(location = 0) in vec4 position; layout(location = 1) in vec2 uv; layout(location = 0) out vec2 fragUV; layout(location = 1) out vec4 fragPosition; void main() { fragPosition = 0.5 * (position + vec4(1.0)); ...

WebGPU学习(六):学习“rotatingCube”示例

被刻印的时光 ゝ 提交于 2020-04-18 08:22:54
大家好,本文学习Chrome->webgpu-samplers->rotatingCube示例。 上一篇博文: WebGPU学习(五): 现代图形API技术要点和WebGPU支持情况调研 下一篇博文: WebGPU学习(七):学习“twoCubes”和“instancedCube”示例 学习rotatingCube.ts 我们已经学习了 “绘制三角形” 的示例,与它相比,本示例增加了以下的内容: 增加一个uniform buffer object(简称为ubo),用于传输“model矩阵 乘以 view矩阵 乘以 projection矩阵”的结果矩阵(简称为mvp矩阵),并在每帧被更新 设置顶点 开启面剔除 开启深度测试 下面,我们打开 rotatingCube.ts 文件,依次来看下新增内容: 增加一个uniform buffer object 介绍 在WebGL 1中,我们通过uniform1i,uniform4fv等函数传递每个gameObject对应的uniform变量(如diffuseMap, diffuse color, model matrix等)到shader中。 其中很多相同的值是不需要被传递的,举例如下: 如果gameObject1和gameObject3使用同一个shader1,它们的diffuse color相同,那么只需要传递其中的一个diffuse