好友
阅读权限10
听众
最后登录1970-1-1
|
声明
本文章所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则,由此产生的一切后果均与作者无关,若有侵权,请联系作者立即删除!
前言
对于腾讯滑块还是补环境来的更快更轻松,有什么补什么,不算难。作为练习所以搞了一下算法。
本文来浅析一下腾讯滑块的算法,抓包什么的不再展示。插完桩我们就直接来分析日志。
浅析日志1.0
首先我们还是先把apply、call等方法调用插上,插完之后我们观察日志。
日志最后我们可以看到在出值前进行了一个 encodeURIComponent()操作,将一些特殊符号进行了替换。那我们就分析进行了encodeURIComponent()操作之前的字符串。
这里翻找日志可以看到有这么几个位置,将不知道哪里来的字符串btoa()之后得到的我们的目标字符串,然后再拼接到一起。这里的几处目标值的得来使用的是同一套算法,所以我们拿一个来分析就行了。我们选择第一处,接下来分析
"ë\u0007\u000bÿCý\u001dçNÀˆuö&;L*!¡Û×—Vömk¥ÛÉ[,7\u001fK=\u0004‚\u001a"这个字符串的得来。
观察日志会发现他是将"sd":{"od":"C","ft":"qf_7Pf__H"}}进行slice(),每四个切分一次拿到字符串,然后通过charCodeAt(),分别传入0,1,2,3,得到四个数,之后再进U得到577008418,这里看不出来,等下插桩再看。再往下看同样的操作也是最后得到一个不知道怎么来的数。
往下再看就看到了我们的目标字符串的一部分ë\u0007\u000bÿ(编码问题,有些字符看不到),是由[235, 7, 11, 255]列表进行fromCharCode()操作得到的,到这里我们的线索就断了,这里面肯定是进行了数字的加减乘除,然后得到的这些值。这个时候我们再把一些运算符给插上,
这里建议将所有日志push到一个数组里,日志太多了log到控制台会很卡,不方便我们翻找日志。
浅析日志2.0
操作符打上之后有七万多行代码,看的眼花缭乱,随便找一处来分析。从这两处就能很清晰地看到逻辑了。分别传入-1519686154和1539936219将得到的结果组合成数组再进行fromCharCode()得到目标字符串的一部分。
这是他的大致逻辑,写的比较简单。每次传两个值a,b得到两个字符串。那么接下来就要分析a,b是怎么来的。
往上就能看见a,b的生成位置。这里我们一直往上翻大概有两千多行都在做数字运算,我们翻到运算开始的位置。
这里明说了两千多行运算是一个算法,不再分析了,直接搜一个拿来用也行,观察逻辑复刻一个也行,建议自己复刻,搜出来的可能要调一下参数。这个算法是传了两个值,主要来看一下这两个参数的生成。
这里是我们1.0分析时疑惑的地方,对字符串每四位进行切片,然后charCodeAt()传入0,1,2,3得到四个数。这里可以知道使用这四个数进行了四次计算最终得到传入值。
这是大致逻辑。
好了到这里算法就搞定了!
总结
本文简单的分析了腾讯滑块算法的大致逻辑,难度适宜,稍微琢磨下就能摸出门道,细心一点,不懂得地方也可以问问AI,也是个不错的纯算案例。
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|
|