Jarvis's Blog

白帽子、全栈、IoT安全专家、嵌入式系统专家

关于Jarvis OJ的一切,我一定要写下来

Jarvis OJ: https://www.jarvisoj.com/

Jarvis OJ是我的一个业余之作,一个CTF在线练习平台,主要用于phrack战队的平时训练和整理各次比赛高质量题目使用,当然我在开发之初也希望这个平台可以使更多的CTF爱好者受益,所以网站托管在了阿里云上同时有实验室的经费支持也做好了长期运营的准备。

说起这个平台的来历,其实是在2015年4月的时候,我所在的USS Lab.实验室老师一直想建立一支CTF战队,由于本校已经有一支老牌强队AAA,如果自己在搞一套势必会有一定竞争,且操作起来存在较大障碍,因此本想和计算机学院合作一起建设,但是当时谈判十分不愉快,很快就谈崩了,计算机学院不愿意合作,即使他们自己不太投入资源建设,也不想和其他人合作。在此期间作为我个人也和AAA战队当时的带头人聊过,但也许人各有志,对方也没有合作意向,于是就此作罢。

最终老师决定白手起家由实验室自己支持组建一支CTF战队,定名为phrack战队,但从0到1的建设总是有很多困难,有了想法有了资金支持,最后还需要人。2015年7月开始虽然招收了第一批成员,但一直没有很好的组织起来,积极性不是很高,大部分大三大四的成员很快也毕业了,这是一次失败的经历。(用AAA老队员的话说,我们这边就没有谁是靠谱的),到了2016年4月,我想着其实可以办一场phrackCTF比赛,也可借此机会挖掘出一些新人,由于当时并没有用户体验符合我要求的CTF平台,所以对于比赛所用的CTF平台要求苛刻的我决定自己开发一套系统,而且是一套严肃的系统。当时的phrackCTF系统使用的是Spring+SpringMVC+mybatis+postgresql的架构,应该是首款使用MVC模式开发的CTF平台,phrackCTF平台当时总共开发了2个版本,一个是用于个人参赛的,一个版本是用于队伍参赛的,两个版本在2016年6月份都已经开源,如果你打算在比赛中使用,可以到这里得到源码:

队伍参赛版:https://github.com/zjlywjh001/PhrackCTF-Platform-Team

个人参赛版:https://github.com/zjlywjh001/PhrackCTF-Platform-Personal

现在说到关键了,Jarvis OJ就是这时候萌生的想法,通常来说,比赛结束了,题目也就关闭了,这是2016年之前的常态,我那时候就想,能不能像以前的NOIP一样,做一个Online Judge这样的平台,也算是一个公益项目。当时phrackCTF平台已经开发完毕,所以想着在phrack CTF的基础上,进行二次开发,很快Jarvis OJ的Beta版本就在2016年6月13号上线了,过了没多久,记得大概6月15-16号的样子,AAA的练习平台,当时他们起了个名字叫School Bus,声称会在7月1日上线,我其实挺佩服这帮黑客的脑洞的,我就想不出很顺口的名字,也许是因为我来自于传统行业,行事都比较严肃吧。其实知道这个事情的时候,也许你觉得我会很生气,实际上不是,当时窃喜了2天,这说明什么,说明我的想法以及产品思维,是走在别人前列的,而且执行力发挥的淋漓尽致。

在那个时候,我已经发现了Jarvis OJ Beta版本的一些缺陷,比如某些大量数据的检索页面没有分页,使用的是老旧的服务器渲染,分类的颜色只有5种等等,在一个比赛的1-2天内,这些都不会成为问题,而当作为一个长期运行,比如3-5年这样的一个网站,这些在后期会造成严重问题,严重影响用户体验,所以很快,我在将phrackCTF的2个平台开源之后,就萌生了重构整个Jarvis OJ的想法。当然,受限于当时的前端开发能力较差,这个事情一直拖到了今年的10月,而整个10月我都在忙CAN Omega的项目,从10月25-11月1号的时候,我确定这件事不能再拖了,记得当时是花了3天硬着头皮把React.js的文档给读了一遍,为什么是React.js,因为我在创业的时候认识了一个朋友,他是之前是某个创业公司的主程,看起来逼格非常高,而在我认识他的时候,我还什么都不懂,他在和我聊天的时候总是说我什么什么过时了,那个也过时了,所以,在后来的一段时间里面,我一直是看他用什么架构,我也照着开发一个,体验体验不同框架之间的区别,他所谓先进的框架,到底实际开发体验如何,也只有亲自体验过才能知道。但我发现到了后来,到处都是坑,太激进也会成为问题。不过,功能比较全面的js框架,也只有Google AngularJS和Facebook React之间选择了,由于实在受不了AngularJS在html里嵌一大堆奇怪的标签,所以最终选择了只需要会js就能写的React.js,虽然后来因为这个选择,让我痛苦了1个多月。

其实前端的界面效果,我只用了6天就写完了(11月1-6号),最难受的是前端的数据流,由于组件之间是耦合的,而React使用的是单向绑定的数据流,如果要解决组件之间耦合传值的问题,需要用flux或者redux之类的解决方案,虽然flux易于理解,但因为被人诟病太多,最终我选择的是redux,这个选择还是坑了我一把,花了不少时间才从函数式编程角度理解了redux到底是个咋回事。这时候已经11月28号了,最终,也是花了7天时间,把后端完全重写,改为全部使用json交互数据,做完据流,重构完的JarvisOJ终于在12月5号上线了。这次重构使用的是React.js+redux+material-ui,此时的JarvisOJ已经今非昔比,是一个庞大的单页面应用了,内容加载速度和用户体验比原来提升了非常多。当然,美中不足就是,SEO彻底完蛋,不过对于OJ类网站,SEO似乎并不重要,所以也接受了这个蛋疼的结果。

关于Jarvis OJ和phrack战队的未来,说实话我还没有想的太明白,老师觉得我们可以更加专注于物联网领域,不用和AAA正面竞争,但我心里其实并不是滋味,即使技不如人,也没有那么容易就说放弃,我知道只靠我自己一个人的力量去做事真的很难,可我又偏偏是个喜欢绕弯路的人,如今能掌握通信、电子、计算机、嵌入式、PCB设计、底层软件、驱动程序、上位机软件、Web前端、后端、运维以及今后任何我感兴趣领域的知识,我觉得自己还是非常幸运的,况且,这并不是终点。

如今临近毕业,有些事情也是无能为力,但绝不放弃,如今还是可以留下一些东西,证明自己存在过。记得当年刚开始玩安全的时候,心态却比现在潇洒:“我搞安全就是来陪你们这些黑客玩的,玩不过又怎么样,大不了不和你们玩了”,而现在没想到在安全行业一晃也2年多了,兴趣渐渐成了职业,难免徒增了不少压力,这么多年辗转这么多领域,从另一个角度来看也可以理解为是逃避的表现,不过,总归还是获得了一些益处,一切都还是值得的。

写到最后,自己也看不下去了,就这样吧,还是以那句话,就算无法完成创举,但也一定要留下些什么,证明自己存在过,要是哪一天我不在了,没有人记得,那才是真正的悲剧吧!

 

CAN Omega 1.1版本开发笔记(二)——CAN总线120Ω端电阻的正确理解

上一篇

CTF Rank网站开发笔记(一)

下一篇
评论
发表评论 说点什么
27965
32

    浙公网安备 33011002014706号