说在前面

首先令人感到有些沮丧的是,上一篇提到的布卡搜索由于布卡漫画彻底下架了想看的漫画,于是被我直接下掉了。

写这篇的原因主要是最近还有一些新的体验想要分享一下,前几天一直想写一篇来着的,可是最近考试,再加上考完了放松了几天,于是拖到了现在。

过CloudFlare的防护

首先值得一提的就是之前收藏的CloudFlare五秒防护这个帖,在8月底终于被我用Python实现了。

不得不说CloudFlare的这种防护方法确实有一些明显的效果,虽然被解析之后还是可以被爬虫爬到,但还是需要等待4秒多的时间,不然会直接被拦在CDN之前,影响不到源服务器。

解析方法

那么下面来看一下如何解析一段CF防护页面的代码。

import re

def findstr(rule, string):
    find_str = re.compile(rule)
    return find_str.findall(string)

def decodeJSCode(code):
    code = code.replace('!![]', '1').replace('!+[]', '1').replace('(+[])', '(0)').replace('+((', '(').replace('))', ')').replace('+[]', '').split('/')
    fnumu = ""
    fnumd = ""
    for num in findstr('\(.*?\)', code[0].replace('+[]', '')):
        fnumu += str(eval(num))
    for num in findstr('\(.*?\)', code[1].replace('+[]', '')):
        fnumd += str(eval(num))
    return int(fnumu)/int(fnumd)

code = '+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![])+(+[])+(!+[]+!![]+!![]))/+((+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![])+(+[])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]))'

print(decodeJSCode(code))

我们首先可以在浏览器里运行一下code后面的值,可以得到结果4.380966109717446

再运行一下上面那段Python代码,得出4.380966109717446,完全一致。

下面来初步解释一下是怎么解析的。

首先:
+((!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+[])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![])+(+[])+(!+[]+!![]+!![]))/+((+!![]+[])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![])+(+[])+(!+[]+!![]+!![]+!![]+!![])+(!+[]+!![]+!![]+!![]+!![]))

经过一番替换,得到:
(1+1+1+1+1+1+1+1)+(1+1+1+1+1)+(1+1+1+1+1+1+1+1)+(1+1+1+1+1)+(1+1+1+1+1+1+1+1+1)+(1+1+1+1+1+1+1+1+1)+(1+1+1+1+1)+(0)+(1+1+1)/(+1)+(1+1+1+1+1+1+1+1+1)+(1+1+1+1+1)+(1+1+1+1+1+1+1+1+1)+(1+1+1+1+1+1+1+1)+(1+1+1+1)+(0)+(1+1+1+1+1)+(1+1+1+1+1)

这其实就是上面帖子提到的内容,仔细看看就知道了。
但在JS中这个实际上是文本型的相加,所以对这个式子进行运算时,每个括号代表着一位数。

所以上面那一串实际上应该是:
858599503/195984055 = 4.380966109717446

这两个数字相除的结果,就是JS计算得出的结果。

之后

解决了这个问题之后,剩下的实际上就是怎么对文本进行处理,以达到和JS运算结果一致的问题,详细代码可以看我这个Github仓库

Fyde OS 初体验

之前看到别人说FydeOs,上个礼拜正好有空试了一下,至于尝试的原因有点不记得了。

可能是因为官网上写着支持 Win + Linux + 安卓,让我有点心痒痒了。总之就是拿之前Ebay薅来的32G的U盘写入了FydeOS。

由于时间太久,也忘记留截图了,总之我是初步试了一下。

优点

首先就是支持安卓应用,感觉非常不错,我给装了个AIDE,跑起来挺正常的,其他一些App也工作良好,兼容性实际还是不错的。

然后是Linux,这个实际上是Chrome OS的功能,没什么好说的,和原生Chrome OS基本一致的体验。

最后就是所谓的Windows,实际上是通过在安卓上装CrossOver二次模拟,之前运行了一下Pandownload,除了缺字库(字库可以下载)之外基本上运行没什么问题,就是操作起来太繁琐了,实在不如直接用Win。

但这个实际上是直接在U盘上运行的系统,所以到哪儿一插就完事儿,我觉得这一点也比较适合轻办公的特点吧。

缺点

下面说说几个缺点,首先是Chrome OS原生应用太少,全靠安卓撑门面,虽然有魔法上网可以在Chrome Store里下载应用,但FydeOS内部空间太少,想装个VLC提示容量不够。

第二个就是既然内置了Google Play,那你就应该让人用啊。我给整了半天的魔法上网,打开了Play Store,然后提示设备未验证,还得自己去谷歌提交GSF ID才解决了问题。具体解决方案参考这篇小众软件的帖子

第三就是U盘的问题,虽然说非常方便,但U盘作为U盘本身的功能就废了。如果在Windows下面插入U盘,还直接吃掉十几个盘符,这个不是非常令人满意。

如果要像以前的PE系统那种,分区之后,该不显示的不显示,然后还有一部分能显示出来做U盘使用那就更好了。

总结

总体上来说,我个人还是比较满意FydeOS的,毕竟相比虚拟机来说,实体机运行更快捷,而且是直接运行于U盘,并不占用硬盘,且即插即用,自身的定位还是非常准确的。

不过Fyde OS自家出的的那款笔记本我觉得还是不太行,毕竟Fyde自身还是太菜了,接下来应该更加注重开发基于Chrome OS的应用,而不是整那些花头,好用才是硬道理。