大家好我是沉客,一位编程爱好者,今天给大家分享一下某讯滑块的协议算法笔记,因为自己肝了一个多星期,也希望想学习的朋友们可以少走写弯路,但是由于技术有限,补环境的部分我并没有实现(js用的还不是那么熟练,如果以后学成的话补成功再发出来吧),但是结果我已经通过了验证,所以大家还是可以参考一下的。在此先声明,本篇内容仅供学习,若是有违法犯罪行为与本内容、本人无关,请大家理性学习,勿做他用!
废话不多说,主要包括以下几个步骤:1.post参数分析,2.最难的部分,collect参数分析,3.轨迹分析,4.opencv检测距离。
一、post参数分析。

大家可以看到一共有这么几个参数。点击函数调用栈分析可以找到参数的赋值地点。


参数都是在这些地方赋值的。为了节省时间我就直接说结论了。
sess是验证码弹出时浏览器发出的请求所得到的,prefix和初始位置的y值也由同一个请求的响应体中所得。
![]()
初始的y值自己找一下吧就不放图了,初始的x值都是50,初始的y值就不一样了。都在上述图像的响应体中。
接下来是eks,它也是可以从返回的一个js文件中找到,就是这个值👇。

你们自己找一下就能找到位置所在。记住这个文件,噩梦的开始(不得不说,腾讯工程师真的很厉害,分析了这个文件我深深折服,一个礼拜还是在作弊的情况下才获取成功,不亏!待会再说)
得到eks之后就是prefix了,大家找到了上述所说的prefix和md5大致也可以才出来是用prefix撞md5加密得到的那个md5值,准确来说就是prefix+1/+2/+3/+4...===md5加密===>文件中的md5值所得到的#后面的那串数字就是撞md5的次数。具体分析过程就不放图了。最后是在返回的这个js文件中找到的过程👇。

可以看到duration就是计算所用的时间了。什么?你问我是怎么找到的,emmm,时间太久了我也忘了哈哈哈哈哈哈。因为所有参数我第一天就解决了,唯独这个collect我用了一个多星期,5555555!
二、接下来就是噩梦collect了,记得上述那个让你记住的文件吗,我们就来分析以下吧。

是的,这个函数,就是jsvmp加密了。具体什么是jsvmp我也不清楚,大致描述就是用js实现硬件的功能。将原本人能看懂的语言代码还原为类似cpu运行的过程======>即给cpu指令,cpu进行执行。+ - * / ^ > >> >>>等等操作,还有什么字节码啥的,看的我眼花缭乱。这么一看,实现算法对于我这么一个爱好者来说有点困难,那么我还是补环境吧。所以要看算法的朋友就没必要看下去了,用处不大,我也找到很多算法的逆向教程链接如下:也是我从别人文章截下来的,忘了来自哪篇文章了,在此对他表示非常的感谢,应该不算抄袭吧,如有侵权,必删,大佬勿喷,球球!

所以,我们要插桩分析这个代码到底做了什么事,实现了什么功能。
在jsvmp执行过程中尤其要注意 + 法执行的过程中进行了哪些信息的交流。所以一个插装的点就是👇。
还有一个就是apply也需要打断点看看到底调用了哪些函数。也就是下一个打桩点。

打这两个点就知道加密明文、密文和它们经过哪个函数生成。

密文又是由四个部分组成👇。

1.这是cd也就是collectdata第一部分。这个是调用W函数一个个加上去的,也就是window.TDC.Getdata()这个函数所指的地方,大小写忘了,反正是TDC.getdata。

2.第二部分,轨迹信息。

3.第三部分,也就是collectdata的后半部分,可以看出是一个个加上去的。

4.第四部分,也就是sd,slidevalue。这四部分一次加密一小部分,然后再拼接起来就是collect密文,然后再解密成collect明文信息。算法好像是魔改的xtea,密钥还得自己找,所以还是老老实实补环境吧。
其中cd是由37个字符串组成数组,其中这37个字符串各代表浏览器的某些特征(指纹)信息。这些信息小白大佬已经讲的很详细了,我就不多赘述了,剩下的就是补环境的过程了。
http://t.csdnimg.cn/T2Pzd
什么?如果不会补环境怎么办,嘻嘻,不会补那就作弊吧!怎么作弊呢,发动你的大脑。哪里不会改哪里,就是作弊了。具体就不多说了,聪明人已经作弊去了。但最好还是补环境,一劳永逸。
三、轨迹分析。
最后一部分轨迹分析,我们可以看到轨迹是由多个数组组成。我们分析一下,因为写到这里已经一个小时左右了,我就直接说结论了。
![]()
其中opAreaPos不变,clientsize就是你当前浏览器的窗口大小,ft:不变。其中slidevalue就是某一段时间你在屏幕内的鼠标滑行轨迹信息。

数组一[4,0,0,1715941957331,0]其中4是版本信息,171....是时间戳,因为是数组一所以只是初始化开始记录你的滑块信息将x,y都初始化为0.
后面的数组第一位1表示鼠标在滑行(2表示鼠标点击)(3表示鼠标释放),第二位表示x的位移值,第三位表示y的位移值,第四位表示位移这么多距离所用的时间,最后一位0我猜测是用来检测自动化测试的,0表示用户行为,1表示其他行为(selenium什么的,最后一位我猜的,其他都是js代码中找出来的)所以最后一位我们写0就行了。但是slidevalue我感觉没被检测,被检测的是生成collect那四部分的第二部分。那部分才是真正被检测的滑动轨迹(第一个数组也是初始化你鼠标的行为信息),关注点在后面的以2开头和3开头的数组,也就是你的滑行轨迹。
四、opencv检测所需距离。
因为我找了很久没找到,我直接附图吧

这个x会有点不准,你们自行校准一下吧,减掉3-8我测试过成功率有85%左右。这就是post参数中ans的x的位置,y位置可以在返回的js中找到,上面也说了,自行找一下吧。
最后附图,终于成功了!!!

本篇到这里也就结束了,希望对大家能有些许帮助,如果有,麻烦点个赞吧(不点也没关系,我也是个白嫖怪哈哈哈哈哈)!
&spm=1001.2101.3001.5002&articleId=139011689&d=1&t=3&u=45dc549b4edd4bb3aef4de5518739dfb)
1万+

被折叠的 条评论
为什么被折叠?



