结束于开始之际.


2016 年 12 月 22 日,最后一次社团活动的记录.很早之前就开始构思这一次活动的内容了.最后一次,讲讲从今以后再难有机会讲出来的那些东西.

大概的内容是:

  • 简单说了说我今后将不会再担任社长,并介绍了两位新社长.
    二位社长一位在初二一位在高一,虽然技术水平不怎么样但起码担任下一届社长没有大的问题.
  • 回顾之前社团活动的内容
    准备的时候把此前写的活动记录通读了一遍,把之前涉及过的内容总结了一下(当然也有些牵强附会),最后 PPT 是这样的:

    PPT 打出来之后下边一阵躁动
    顺便说了下我一直坚持写的社团活动记录(大合集在此: https://nota.moe/tag/cflshackers)
  • 新手怎么入门黑客技术(这个问题之前有社员问过)
    推荐了值得一学的编程语言(Python, Ruby 或 JavaScript, 动态语言大法好,中学生学习 C/C++/Java 有什么用?),黑客工具及黑客技术,顺便安利 FreeBuf.
  • 黑客是什么?
    澄清"黑客"不是"骇客"也不是"脚本小子","黑客"不是搞破坏的人,解释了"白帽"这个词(虽然我个人来说并不是很认同这个词,因为这其实是对"黑客"一词污名化的产物).
    黑客是这个世界的罗宾汉.然后介绍了 Aaron Swartz 和 @clowwindy 二位,可以算是我最崇敬的黑客.注意这里其实是把他们二位(特别是后者)界定为"广义的"黑客.谈了谈 Aaron 的人生历程(因为很短),谈了谈他对互联网自由与共享的贡献,顺便提到了 The Internet's Own Boy. 谈到了 @clowwindy 与 Shadowsocks, 以及他被请喝茶的事.看到这里你应该可以猜到,接下来要持续高能了.
    然后简单介绍了 EFF. 这个组织我很崇敬的地方是,他们不仅靠政治或者法律手段,也靠技术手段维护虚拟世界的自由.前者如 EFF 参与的几场诉讼,后者如 certbot 和 HTTPS Everywhere. 在我的印象中, EFF 很务实.然后谈到,我认为,国内"互联网"这个概念起步太晚,发展太快,所以一些应当有过的质疑,反思或思潮被直接略过了,国内的互联网厂商也缺乏守卫这一乌托邦的责任感(对比当年美国的 Stop SOPA Day).
  • 现状
    讲了讲乌云,和之前那位被世纪佳缘狠狠地坑了的白帽子,以及乌云的现状(负责人据说逮捕,网站被封停).然后是网络封锁,言论审查和愚民政策.然后是 Google 与其他"不存在的网站".谈了谈当年国家是怎样借助媒体的力量污蔑 Google 并顺势将其赶出大陆的,谈了谈当年某省运营商是怎样监听 Google 用户的登录密码的(巧妙的是,这方面的技术细节此前有一次社团活动我讲过).谈了谈窃听和监控无时无处不在.然后是信口雌黄滔滔不绝的花式作死.
  • 黑色产业链的运作
    这方面我也不是太懂啦,水太深了.说了说卖字典和彩虹表的那帮人,说了说外包病毒制作/黑客工具贩卖/钓鱼网站贩卖/服务器挂马入侵这些产业背后的链条.都是泛泛而谈.然后对比了国内外黑客软件不同的商业氛围:国外"渗透测试"受到肯定,所以黑客软件的大买家是安全研究人员,渗透测试者等(当然不排除有真正搞破坏的黑客购买),所以对于黑客软件的制作者来说,这样的收入是合法,正当,且往往丰厚的,所以催生出一些以黑客软件售卖为主要业务的公司;而在国内,整个安全行业尚处于朦胧期,几乎看不到有从事这方面的企业,故国内售卖黑客软件的是...你知道的.所以对比即可发现国外黑客软件强大好用国内黑客软件乱七八糟的原因(我曾在中提到过这一点).
  • 开放源代码,自由文档与 Copyleft
    先解释何谓"开源",开源的意义与其魅力,顺带提及 Linux.然后是 Creative Commons. 然后说了下"自由软件""自由文档"之"自由"的含义,说到了知识共享,说到了放弃著作权,说到了作为自由软件和自由文档的追随者,我的一些微不足道的行动.讲的时候有点词穷,硬撑着还是讲了不少(因为这对我来说其实是很重要的一个内容).词穷呢,是因为我发现这些开源的精神与理念,包括互联网的开放与共享,知识共享,这些比较"虚"的东西很难在一群根本对其毫无了解的人面前讲得清楚.你要去观察一个开源项目的运作,一个自由软件社区的氛围,一段闪烁着一代人对于"共享"一词的理解,追求,信念和骄傲的许可协议文本,你才会被开放源代码这件事情所震撼.在这个圈子之外的人,真的很难理解.
  • 这里穿插了几则 "@clowwindy 语录",从他的 GitHub issue 上抄来的.说实话, @clowwindy 说的那些话真的是真知灼见,值得一读.
  • 大概算是总结(原标题太那啥了我就不写上来了)
    黑客最需要有的素质是好奇心.目前,对于黑客技术的研究处于一个相对的夹缝之间.同样处于夹缝之间的还有为互联网世界的人权,自由与开放而斗争的那些人.然后说了说我的一点微薄的希望,(大概是)我希望能够活在一个能给我安全感的国家,让我无需为个人数据泄露或窃听担心,让每个公民都有权利获取到自己需要的信息而不受到屏蔽,让每个人有机会看到真相而不是被扭曲的事实,让互联网的自由与开放有最基本的保障.仅此而已.
  • 最后,是我的联系方式,社团的联系方式和致谢.
    (不同于很多人演讲或者表演结束时机械化或者习惯性的致谢,我是真的在"致谢".毕竟差不多一年的社长任期,离不开社员们的支持和参与)

上一篇活动记录里我提到了我考虑过录制活动内容,这次我就这么干了.不过录的是录音.后来听了一下,效果还挺好的,大概一个小时的社团活动,基本上是即兴演讲的(当然我之前思考过讲的内容),听起来感觉还不赖.当时我觉得自己的语速比较快,但录音里并不快嘛说实话,那段录音听起来有种听播客的错觉...

PPT 照样高桥流.妈的爽到不行.

是的,你发现了,这次活动作了个大死.实际上现场的作死氛围远远不只是我上边描述的那样.反正都是最后一次了,这个死不作,以后就没机会了.


说起来,我的社团活动记录并不是每一次活动都写了的.比如上学期后边有几次和这学期最开始的两次.因为我觉得这种文章还是写一点有技术含量的东西比较好.那几次活动,因为各种各样的原因,比如我太忙,比如我会的技术都讲完了,之类的,主要的内容都不是非常"硬"的技术向.比如上学期后边几次,讲了服务器,域名, DNS 之类的基础姿势,还算有趣,因为大部分的内容都是介绍各种猎奇的 New gTLDs捣鼓域名这个领域我关注很久了,过去了解过的各种新奇的域名都可以拿来说说.还有一次是分析 Heartbleed, XcodeGhost 这些新兴的漏洞/病毒(现在写下这两个词感觉历史好久远啊..),谈了谈安全领域的演进,新兴的攻击手段之类的.那段时间忙得不行,讲道理这种偏理论的讲解我该用 PPT 的,没时间做,怎么办呢?高桥流当年怎么诞生的?那个日本人忘带 PPT 了,临时用 HTML 写演示文档.可以,这就是个好思路.当时我在活动开始之前直接手写了一个<html contenteditable="true"> ,背景颜色设为黑色,简单设置了字体,居中之类的,浏览器打开,全屏,好了,浏览器现在成了我的黑板了.讲到某一个关键词,我直接打上去,这种感觉很棒. 这学期的前两次讲的是验证码破解.起因是我读各位大神的博客时偶然翻到了这两篇文章:如何识别图像边缘?使用 canvas 破解简单验证码,诶卧槽这个很厉害啊,于是就决定讲讲这个.当时处于一个困境,就是我会的东西讲的差不多了,而我学的新东西又没有实质性进展,相当于就是没东西可讲了,社员们也不积极参与,都不主动分享.所以确定一个活动主题之后,就想着能靠这个主题多水几次.于是第一次活动,先介绍验证码的用途,破解它的意义(破解验证码指用机器自动识别它或绕过它),然后介绍 Google 的 reCAPTCHA, 新兴的几种验证码,比如拖动验证码,等等等等.然后介绍人工智能在图形处理方面的应用(我这里写得这么高大上,其实纯粹是唬人的),提到了以图搜图,图像识别,当时 Allo 才出来不久,所以还聊了聊 Allo.然后介绍矢量图与位图,像素的概念,灰度的概念.这就是本学期第一次活动的内容,水到不行,只讲了 30 分钟的样子因为当时我打算把这个话题分三次讲完此外,那次活动的 PPT 第一页是这样的:

自觉太水,就把后两次活动合并成一次.那一次的内容大概就是上边那两篇文章的内容了,只是我做了一些调整和铺垫,缓和了一下难度.那一次活动真的是充满了奇妙的 hack 手段,弥漫着巧妙的 tricky 气氛.我需要一个灰度计算器,这东西可以用 Canvas API 实现,但是,你知道的,我那本 JavaScript 高级程序设计 到现在还没看完,所以我大概是写不出来了.最后我做了这么一个东西:

是个 HTML. 上面的两张图是我用画图做的,作为"模式",并给出了其灰度矩阵数据 (数据是我手打的).下面就是所谓的灰度计算器了,那个框是用来显示计算结果的,同时也可以计算与两个模式的矩阵乘法结果.看似是这样,对吧?那么我摘录几段关键代码:

<p>Nota 的灰度矩阵计算器:</p>
<input type="file"/>
<button onclick="$('.hide').show();">计算</button>
<table border="2" id="t">
  <tr>
    <td class="hide">3</td>
    <td class="hide">4</td>
    <td class="hide">7</td>
    <td class="hide">4</td>
    <td class="hide">5</td>
    <td class="hide">2</td>
    <td class="hide">6</td>
  </tr>
  ......
  <tr>
    <td class="hide">28</td>
    <td class="hide">29</td>
    <td class="hide">28</td>
    <td class="hide">25</td>
    <td class="hide">26</td>
    <td class="hide">2</td>
    <td class="hide">1</td>
  </tr>
</table>
<button onclick="$('.hide2')[0].style.opacity = 1;$('.hide2')[1].style.opacity = 1;">计算矩阵乘积</button>
<br>
<p>与模式1的乘积:<span class="hide2">29216</span> 与模式2的乘积:<span class="hide2">20093</span></p>

人生的污点啊
真是美好的青春记忆啊,不是吗?
(而且我当时好像还忘了 jQuery 有个实例方法叫 .css() ...)

最为巧妙的是,活动现场我毫无慌乱,在众人面前娴熟地把样本图片切出一小块,嗯,这叫取样,然后进行了充满魔法的去色等处理,以模拟"二值化"的效果,然后打开我的灰度计算器,用那个没有任何卵用的文件选择表单选定了处理后的样本图,按下"计算", wow, 完美地显示了灰度矩阵,在座的各位没有一个人意识到自己被耍了(到现在也是如此,所以希望他们别来看这篇文章).事后,被惊掉下巴的社员们纷纷找我,希望能拷走一份神奇的灰度计算器.我已经记不得当时我是如何巧舌如簧婉言谢绝的了.对了,我用的图片处理程序是 Polarr, 真是口味清奇.

好吧,那是我唯一一次在社团活动的讲解里弄虚作假.这种事情怎么好意思单独写一篇记录出来呢?

之后的事情就是里写的那样了.


真是抱歉.在我的设想中,这篇文章应该有沉重的内容和哀伤的情绪,毕竟是最后一篇了.但我使用表情的频率估计超过了这半年来我写的任何一篇文章.真是一点都不严肃.


翻了一下之前的聊天记录.惊奇地发现,我被任命为社长,应该是 2015 年 12 月 31 日的事.这篇文章,是 2017 年第一篇.大概就是说,我的整个 2016 年都是和这个社团紧密耦合的(用的都 tm 是些什么词).

确实,整个 2016 年都在为社团的事操心.当年我还只是一个小白,很多东西,在别人看来,被我玩得得心应手,其实在背后,不知道是多少的努力.这个社团真的很特殊,(亦或是我的定位太高),很多次活动我都不得不花上数周的时间准备.很多技术都是现学现卖,首先自己要把理论搞清楚,然后亲手实践,踩到无数的坑,遇到无数的问题.讲解黑客技术,这里面的变数真的太大了(而且还是在学校的教室或者机房,这种软硬件情况捉摸不定的地方),这也迫使我在准备活动时考虑所有情况,做出万全准备.这一点都不有趣.无数个周六的深夜,明明知道第二天要回学校应该保持好的精力,明明看到自己几大页几大本的作业还几乎没动,但是遇到的各种奇怪的问题总是,可以说是逼迫,我坚持下去.真的很累.

我不止一次考虑过这样做是否值得,或者它的"合理性".熬夜,挤占一部分学习时间,这样努力捣鼓出来的东西,有很大的意义吗?我确实不知道.有时我想,"毕竟这是我喜欢的事啊",另外一些时候我想,"我是社长,这是我的责任",等等;然而这些话,是否是一个自欺欺人的借口呢?我的意思是,很多时候我都觉得为了一个社团做出这些努力是脑子被门夹了.我此前也提到过,社团内玩电脑游戏的现象屡禁不止,你能想象我站在上面,口干舌燥地分享几个周以来的研究成果,绞尽脑汁地进行各种复杂操作,一边还要组织语言尽可能浅显地解释,而下面一群人只顾着玩游戏的那种感受?(这也是为什么我这学期来坚持在教室开展活动)我并不是一个玻璃心的人(或许原来是),看到这些我也一笑了之.我慢慢地认为,我做这些事情,是做给我自己的.我从中感到趣味,或者,我可以说我无愧于自己,我做了很久以后回忆起来都不会后悔的事情,这就够了吧.然而当我偶然读到,当年牛顿在大学任教,教授的艰难晦涩的课程没有一个学生来听,数年间却坚持每天到空无一人的教室,面对斑驳的墙壁讲授自己高深的见解,真的是感慨万千.或许说我在做无意义的坚持,但从出生到现在快 17 年了,我开始发现我所崇敬和向往的唯一一种活法,就是做无愧于自己的事.如果你在现实中认识我,你可能会觉得我说这话不是很有底气.确实,我对待有一些事情总是不认真的(包括那些别人认为我应该全身心投入的事情).但是,这件事,是我选择去做,而不是要求去做的事.我想,不管怎样,我应该做好它.

当然,现在写这些也没有什么意义了.毕竟我已经不再是社长了.


我理想中的社团应该是怎样的?社团是一个交流的场所,这可以说是最低标准,也可以说是最高要求.为了达成这一点,一年来我几乎每时都在下意识地不使用"课"来描述社团活动.但很不幸,目前我们社还是向 @clowwindy 说的那种"小白围着大大转"模式发展了.这很不好.社团是一个交流的场所.永远都由一两个人来讲解,这根本不是交流.我很早很早以前期待的(或者说是幻想的)一群技术爱好者围在一起,气氛热烈地讨论某一技术问题,发表自己见解,分享自己的研究成果的场景,大概永远只能是幻想.是的,这在"中学"这样一个环境里是完全不可能的.当社长这么久,其它社的情况我也了解一点,这种核心成员没几个,吃瓜群众数不清的场面不是一个两个社团有.这会毁了一个社团的.社团不是社长自己的平台,不应该是一个点,而应该是一个圈子.

好吧,看来只能希望两位接班人解决这个问题了.


为这个社团做的事情中间,有一件非常有趣,非常痛苦,也是最不为人所知的事,就是维护社团网站.这其实很可笑,因为那个破网站一年都不见得能有一两个人手滑了点进去看看,却花费了我无数的时间.这一年之间,那个网站先后在这些地方安过家: Adobe Muse 提供的托管服务器,数个国内杂牌虚拟主机(捞波钱就走的那种),某个国外捞钱跑路型虚拟主机(记不清了,应该是吧),我的服务器,(中途差点去了某个 Docker CaaS 商),(中途差点去了学校的服务器),腾讯云上海机房(真是充满了传奇色彩),某私人服务器(与另一个社团合用,充满了交易的气息)...配置服务器环境/搭建 WordPress 那一套不知道重复了多少遍(主要是因为之前没经验所以没做备份).中间最风光的一阵子,在腾讯云的服务器上,几十的 ping 值, Nginx + PHP7, 还搞了张 Let's Encrypt 的 SSL 证书, certbot 自动续期, CloudXNS 的域名解析.一套下来爽得不行(没有亲自折腾过服务器那一套的估计很难体会那种快感).可惜我们交不起腾讯云的续费,所以现在社团网站寄人篱下,给我的服务器账户权限奇低.

服务器这边,一直有老社长帮我,否则可能会更恼火.其实也是很难得的,这些破事给了我不可多得的服务器运维经验.此外那个网站在上次社团活动开放日中也起到了很大的作用.


说起来真是难以置信.一直以来,我都是很内向的一个人.对比来说,我喜欢独处更甚于与别人在一起.很多时候甚至是逃避人际交往的.然而成为社长让我不得不去做这些我不想做,或者不会做的事情.我在同年级的其它班,甚至是初中部居然有认识的人,这种事情根本不可能发生的,现在却真真切切的发生了.我居然也能在众人面前慷慨激昂地说出自己的想法和见解.真的谢谢这一切.因为有这个社团,我才有可能去认识这些有趣的人,做那些有趣,甚至是疯狂的事情.刚进入高中时想象的那种"值得留恋的"高中生活,充满新鲜感,活力,色彩...这些美好的东西的高中生活,其实(可以说是)并不属于我.实际上,我现在的生活并不值得怀念.然而在这样的生活中,我庆幸于这个社团给我带来了一些不一样的东西.让我经历了一些我,或者同龄的许多人未曾想过的事.社长,对于我来说从来都不仅仅是它本来的意义.我向往新奇与未知,我把人生当作一个收集向的游戏对待:我为每一次前所未有的经历而感到真正的快乐.

谢谢这个社团带给我的经历,谢谢它给予我的欢笑,痛苦或是紧张,希望与绝望.很多人总是喜欢猜测一件事会如何如何改变自己,会如何如何影响自己的人生轨迹.我不希求与这个社团有关的 2016 年能带给我这些,我只知道,我度过了精彩的一年.谢谢一切为我的一生喷涂上斑斓色彩的美好事物.

以上.

3 thoughts on “

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注