编译原理在安全领域的应用

什么是编译原理

上图是我从《编译系统透视:图解编译原理》里面扣出来的,基本包括编译原理的各个主要方面,从中可以对编译原理有个大体认识。

专业点来讲,编译原理就是介绍编译程序构造的一般原理和基本方法,内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。

之前在知乎上看到过一份视频,讲的是程序员编写的代码如何被计算机识别,并在CPU上运行,如果你未曾学习编译原理,推荐观看一下(视频时长11:34)。

每个信安学生总有一份叫“污点分析”的毕业设计

污点分析是指将程序从外部获取的数据标记为污点,然后观察污点在程序执行过程中的传播,从而得到程序中的信息流等信息,里面涉及编译原理中的词法语法分析会多一些,主要被应用于恶意软件分析、攻击代码检测等软件安全性分析研究中。

记得刚参加工作那会,经常到网上搜索安全论文,发现很多信息安全专业的学生大多有做过一份关于“污点分析”的毕业设计,你现在上CNKI就可以搜索到很多,尤以硕士毕业论文居多。

当时我几乎翻遍网上所有能找到的“污点分析”论文,最后我得出几点结论:

  1. 不求效果,但求理论高深。之前搞flash xss检测,花了几天时间用一堆grep实现的检测工具,挖不了不到大厂的漏洞,包括淘宝、京东这些电商;但也有同学花几个月搞flash actionscript污点分析,虽然有点作用,但从工作效率和结果看,有时高深的理论不见得适合工业界,虽然我的几行grep没法拿来写论文。

  2. 千篇一律,天下文章一大抄。下载了一堆同主题方向的论文,发现有的内容改都没改,互相乱抄。

  3. 以漏洞挖掘的主题居多,但最后总要以挖洞效果结尾,有0day自然最好,没0day就找几个历史漏洞重现下(很多可能是特例化处理的),没历史漏洞就对比几个主流开源的挖洞工具,对比效率、性能等等,最挫的就是连效果都没有就收尾了。

有过此般经历后,我已很少再去翻国内的安全论文了,学术论文可能还是以翻阅国外的为主。

成熟的技术 ≠ 成熟的产品

污点分析技术最早是在1976被提出的,2005年左右开始,污点分析应用于二进制漏洞挖掘的研究火了好多年,其实技术已经相对成熟。

确实有一些人通过污点分析挖掘到不少有价值的主流软件漏洞,但这项技术要落地为一款安全产品还是有很多问题的。

首要问题就是误报率,之前有同学开发出基于污点分析的源码审计工具,每次外部报告漏洞的时候,复盘时总说能检测出来,只是没人工跟进。但是,检测出来的有成千上万条告警,需要消耗大量人力去排查这又有什么价值呢,本质上,还是没发现嘛!

这也算是安全运营的问题,深以为,凡是能检测到,但无法人工或自动跟进推动问题解决的,都是徒劳的。

相信有很多公司都有出过污点分析的安全审计工具,收费的或者开源的,国内的此类安全产品很多最后都不了了之,所以说成熟的技术不等于成熟的产品。

国外比较著名的商业源码审计工具就是Coverity和Fortify SCA,算做得最好的业界同款产品,但用过的人都知道,检测出来的问题,还是需要投入很多人工成本的。

反编译与加固

搞逆向的同学都知道IDA、JEB这些著名的逆向工具,平时在无源码的情况下,我们直接通过它们来分析程序逻辑,无需知晓其中涉及各类反编译技术。

反编译算是编译的逆过程,即将可执行程序转换成程序源码的过程,如果是转换成汇编语言,我们通常称为反汇编;如果是其它语言的(比如C、Java、C#等等),我们统称为反编译。

不同语言的编译过程还不一样,比如Java是通过JVM虚拟机将字节码转换成CPU认识的指令,而C是直接由编译器转换机器码供CPU执行的,因此它们的反编译过程也不一样。

所以如果不懂编译原理,又如何开发反编译工具呢?

有了反编译,自然就有了防反编译的工具,因此造就了各种加壳工具的出现。

未知攻,焉知防。要开发加固工具,就需要知道反编译原理,要知道反编译原理,又需要知道编译原理。

编译原理 <---> 反编译原理 <---> 加固原理

编译原理在漏洞攻防中的应用

搞文件Fuzzing,我们可以在样本(收集、筛选、精简)和Fuzzer(策略、方向等)上面下功夫,甚至简单地暴力fuzzing文件都可以挖到漏洞。

但对于JavaScript、CSS、Flash ActionScript这些脚本呢,直接简单地暴力变异文件根本无法进入正常的解析,做的大多是无用功。

因此我们需要一个能够准确生成代码的语法生成器,再用它生成fuzzing样本,这里主要涉及编译原理中的语法分析。这方面有著名的开源工具funfuzz(https://github.com/MozillaSecurity/funfuzz)、domato(https://github.com/google/domato),下图就domato生成js代码的语法模板片段:

除此之外,通过对clang/gcc等开源的编译工具对目标源码进行插桩,以帮助监控fuzz样本的代码覆盖率,反馈给fuzzer作改进,以进一步提高代码覆盖率,这块叫“驱动反馈(feedback-driven),比如著名工具就是afl、libfuzzer、honggfuzz,以后有机会可以专篇讲解此技术。

还有通过编译器增加防漏洞利用的机制,比如GS、CFG等安全机制,在对抗漏洞攻击上也起到了不小的作用。

所以通过研究llvm、gcc等编译项目,对漏洞攻防领域也是有一些可作为的地方。

总结

编译原理在逆向工程、漏洞攻防、软件开发等诸多领域有所应用,有时就看你怎么使用,也并不是每个人在安全工作领域中有机会运用到,但技多不压身,不妨多储备点知识,以免到了“书到用时方恨少”的地步。

若干年前,挖洞不用污点追踪都不好意思写论文; 现在搞安全不用人工智能都不好意思装逼,能用机器学习的,坚决不用正则;能用DNN的,坚决不用LR回归;能用无监督学习的,坚决不用有监督学习……但你不试下,怎么就知道grep不行呢?

谈谈写作

“写作,或为利,或为名,或为寻找自我!” —— 题记

为利

勤工俭学对于多数大学生来说,是件再正常不过的事了。当年作为一介穷书生的我,或许有点“清高”,即使没钱也从没干过。

只因在图书馆看到了一本杂志,发现内容不错,当时心想能否自己也去投稿,赚点稿费买书,改善下伙食,想必也是极好的。

刚好杂志尾页留有投稿方式,就开始着手准备。但当时基本没写过文章,文笔与技术积累都不足。

于是,就从翻译开始,因为它技术要求低一点,且产出快,这就是为什么早期我很多文章都是翻译的原因,除了赚钱,自己也从中学习到不少知识。

有了一定积累之后,才开始作原创,并逐步帮我实现转行,成功打入安全圈。

后来用稿费买了电脑、买书、改善伙食等等,对于个人是段相当难忘的回忆。

这本杂志就叫《黑客防线》,一本影响我人生轨迹的杂志,一本启蒙我进入“唯利是图”写作生涯的杂志。

现在很多付费知识平台上的文章,其写作目的也大多如此。

为名

从医学生转行入IT圈的过程是艰难的,早期投简历,也有某安全公司说不招实习生/临时工(忘记原话了),也有因为说经常投黑防,被某著名安全公司怀疑是搞黑产的,遂均无缘面试机会。但整体上,在其它公司的求职面试的过程还是很顺利的。

除了投稿,自己也慢慢开始写博客,逛论坛发技术帖。

在看雪论坛上发表了不少原创技术帖,在小圈子里积累了点名气,为后来求职铺垫了一条路。

圈子就这么大,你的文章看的人多了,有时在网上、现实生活中,甚至在面试过程中,别人都可能会冒出一句:”原来你就是xxx“。

所以当时写作是为了那一点名,为转行作准备的,后来也顺利达到目的,毕业后进入腾讯,一直工作到现在,这都是后话了。

工作后写作变少了,但偶而还是会发表一些技术文章,也有其它杂志社来约稿,比如CSDN的《程序员》:

但这些对于一个工作多年的人来说,赚稿费,累名气,似乎已经没多大意义了,对此也就慢慢淡化了。

再后来,写《漏洞战争》的时候,就知道赚不了几个钱,所以写的时候就提前跟编辑打招呼说了这事,最多也就是赚点名气而已。

令人庆幸的是,这书出版后,基本没多少骂声,骂的大多是出版社和网上书店,顺利躲过一劫。

寻找自我

1、寻找曾经的自我,勿忘初心

以前最早是在博客大巴写文章,写了好多年,可惜它把导出博文的功能关掉,且现在博客大巴也关门大吉了,导致很多文章丢失。

博客大巴记录着自己过往的从医求学的过程,记录着弃医从安全的经历,记录着自己如何学习逆向、如何研究漏洞的过程,可谓一部奋斗史在案。

在上面见证着自己的成长,从稚嫩的文笔逐步成熟化,从肤浅的技术逐步提升。

在上面可以追寻自己的过往,寻找往昔的足迹,回味初心,昔从何来,今往何所,静坐常思,勿忘初心。

这也是我仍在坚持写作的初心。

2、寻找未来的自我,居安思危

公众号曾开过两次,一次为了测试,用别人的身份,现在微信加强身份认证,需要用绑定身份证的银行卡作校验,所以这号被封,已无法解禁,这也证明了微信产品这几年在信息安全上逐步健全起来了。

还有一次是前些天审计公众号支付,同时也因看到”订阅号助手“app的发布和订阅号显示的调整,于是又重新注册了个公众号,一方面为了体验产品,一方面也是为了写作。

互联网行业更新换代过快,需要永远保持一颗学习之心。

前些年,在android开始发展的时候,如果你仍在搞symbian就将被时代所淘汰掉,所以对于新兴的领域,仍需要不断学习,保持居安思危的心态。

而所学的,有时就可以通过写作方式,去整理和记录知识点,这也是学习过程的一部分。

同时我也想通过写作来提升文笔能力,语言表达能力。

所以,第一篇公众号文章发表一个月后阅读量只有1,是因为我没有发到朋友圈或微博等社交平台上,对此的态度就是,爱看不爱,一个粉丝,一次阅读量,也都无所谓,我仍会坚持写下去。

因为我坚信在未来某一时候,会需要用到它。

历史的错觉与误解——读《秦崩》

五一游苏杭,在苏州诚品书店发现几本好书,回深后直接网购回来,分别是《见识》、《秦崩》、《楚亡》,下图是当时拍照备忘用的:

《秦崩》这本书其实很早之前就听说过,但一直未看过,当时在书店看了之后就决定要买(最后回深后在京东购得,毕竟网购更为便宜),主要有这么两点吸引着我:

秦始皇与刘邦只差三岁,他们是同一代人;
有真实的历史故事,又有作者寻访古迹的照片,古今交汇,犹如“国家宝藏”中的前世今生,更加生动鲜活。

01 — 赢政与刘邦是同一代人

由于我们所学历史都是按朝代顺序来划分学习的,每次都是先秦始皇建立秦朝,再刘邦建立汉朝,两个不同朝代的创始人按我们的常规思维看,通常都是隔世的两代人。

认真考究下两人的生卒年,秦始皇赢政生于公元前259年,死于公元前210年,享年50岁;汉高祖刘邦生于公元前256年,死于公元前195年,享年62岁:

也就是说,秦始皇与刘邦仅相差3岁,且在同一片天空下生活了47年,这就是历史带给我们的错觉。

其实刘邦是见过秦始皇的,翻出《史记》,在“高祖本纪”中记载:“高祖常繇咸阳,纵观,观秦皇帝,喟然太息曰:“嗟乎大丈夫当如此也!”,可见秦始皇已成为刘邦的偶像。

02—赵高非阉人

赵高作为中国历史上有名的奸臣,“指鹿为马”说的就是他。很多电视剧、电影里的赵高基本都是个阉人(即太监),比如胡歌演的《神话》里面就是如此:

翻看《史记》,发现并没有为赵高立传,主要是在秦始皇、李斯和蒙恬的传记中有所涉及。比如“李斯列传”中记载:二世曰:“何哉?夫高故宦人也,然不为安肆志,不以危易心,絜行脩善,自使至此,以忠得进,以信守位,朕实贤之,而君疑之,何也?”

许多的误解正是由“宦人”二字引起,其实在秦朝“宦人”是指在宫中内廷任职的人,相当于皇帝的亲近侍卫之臣,并非明朝的“宦官”之义。

赵高曾任过“中车府令”(相当于现在的交通部长)、丞相,这些职位岂是阉人所能任职的。

赵高有女儿这是最明确的证据,在《史记·李斯列传》中有所记载:“赵高教其女婿咸阳令阎乐劾不知何人贼杀人移上林。”

所以历史上的赵高并非阉人,可能是后世为了丑化他而杜撰出来的,这是历史的误解。

《漏洞战争》出版2周年纪念文

《漏洞战争》正式上架是在2016年7月1日,距今刚好差不多2周年了,于是在周末撰写了此文。

常规套路,先感谢下各位读者的支持,书虽无异常畅销,但也卖得不差。

知道你们很多人想问赚了多少稿费,其实不多,也就3万多一点:

出技术书籍本身就不赚钱,诸位如果想靠此发家,建议还是另谋出路,相比现在的知识付费、小视频主播,那真是天壤之别。

2周年了,关于“书”的感想很多,简单聊几点:

1. 暂无第2版的出版计划

一方面是时间问题;

另一方面是觉得漏洞分析技巧性的内容没必要再更新太多东西,即使再换个漏洞案例讲也没多大作用,因为想分享的技巧都讲得差不多,换汤不换药对读者也是一种欺骗。

况且现在网上还有得买,需要的话自己上京东就行了。

2. 关于出英文版的计划

之前曾联系过国外某著名出版社,目前还在洽谈中,但更大的问题其实还是在翻译上,曾联系其它国外的同行翻译,但一直翻译进展很慢。

有这个想法,最初还是来源于Twitter上这位小哥,不懂中文,依然购买,然后用Google翻译阅读,真爱啊!!!

至于有没有机会出版,套用我们吃鸡时常说的一句话:“生死有命,富贵在生!”

3. 别太指望靠出书赚钱

如果单纯谈钱的话,我觉得花4年写这本书完全是亏本,这也是为什么很多牛人不愿意出书的原因,还不如搞个培训实在。

毕竟安全圈内人就这么多,专业性太强,读者受众就小。

更多地还是当作为圈内做一点贡献,也为自己留点回忆的东西,初衷其实就是出一本写给自己的书,因为上面这几点在我写书时就知道了。

顺道鄙视下,那些整天“换汤不换药”的出版多本书籍的人,稍作修改,再换个书名,又是一次大甩卖。

看看那些常年占据榜前的“黑客xx从入门到精通”系列,真是让人厌恶又痛心。

4. 希望有生之年能出本畅销的非技术书

《漏洞战争》可能成为我唯一且最后一本技术书籍,希望有生之年能出本畅销的非技术书。

对于出书,我一直坚持宁缺勿滥的原则,这也是为何花了4年才出一本书的部分原因。

但目前深感积累不足,也尚不知会写何种题材,只能说先多学习多积累,也不局限于安全领域本身,还是需要多涉猎诸多领域的知识。

学无止境,与君共勉!

如果大家对于《漏洞战争》有任何问题或建议,可通过公众号“漏洞战争”联系我:

威胁建模:摆脱随机挖洞的命运

威胁

楔子:聊聊Web与二进制安全

经常有人会说“Web安全门槛低,二进制安全门槛高”,先不讨论它是对是错,但至少这让多数人意识到:开始搞Web安全时,xss弹个框,sql注入写个单引号,sqlmap跑一下就拖库了,这种总是令人感觉那么容易(懂这些就敢对外自称“高级渗透测试工程师”的大有人在);搞二进制的就没那么容易出效果了,因为得先学C、汇编,而且一些自动化工具也没web多,就算费九牛二虎之力搞出来,也没黑个站酷炫。

所以,搞Web的人总是比搞二进制的人要多得多。

个人觉得,Web是个前期容易出效果,中后期容易遇瓶颈的安全分支,因为不知道该往哪使力,相当于“前期英雄”;二进制是个前期不容易出效果,且水很深,难达瓶颈的安全分支,因为你很容易知道高山在哪里,即使很多时间只能仰望,相当于“后期英雄”

在搞Web渗透测试时,不知道大家是否有过这种感觉:

  1. 看到别人发的漏洞文章,发现原来这么简单,自己明明有能力发现,之前怎么没挖到呢?
  2. 感觉力不从心,有点“随机挖洞”的感觉。

其实这都是一些技术或方法论上的瓶颈,二进制上也会有“随机挖洞”的感觉的,只是没Web上那么容易碰到,所以拿web举例。

STRIDE:突破瓶颈的方法论

某天在网上看到一篇关于STRIDE威胁建模的文章,这是微软总结出来的一套方法论,其实就是一些威胁的助记符,帮助大家在做安全测试时能够更加全面系统。虽然它也不能100%覆盖所有系统/软件面临的安全威胁,但至少能覆盖个90%。

img

上图是STRIDE所代表的6种威胁,无论在做Web渗透测试,还是软件安全测试,先通过对测试目标做功能上的分析,再按STRIDE模型对其进行全面的分析,最后就是实际测试验证。



image-20180603223947071

STRIDE本质上并不会提高你的技术能力,但可以改变你挖洞的思维方法,更加系统全面,摆脱随机挖洞的命运。

关于STRIDE更详细地信息,可以参考以下这本书《威胁建模:设置和交付更安全的软件》,看前半本就可以了,后半本有点啰嗦,且可操作性不强。

威胁建模

安全圈乱象杂谈

【声明】:本文纯属个人言论,与公司立场无关。

玩名词概念

技术命名,将一些旧知识赋予个新名词进行炒作,比如APT,还有可视化概念,一串串攻击流飞来飞去。

漏洞命名,似乎已成为圈内常态,不管漏洞危害如何,先取个名字,再以名字单独地注册个域名。

BlackHat Pwnine上专门设置有一个“最名不副实漏洞奖”,就是用来批评这类恶意炒作的漏洞。

会议式社交

国内与国外的安全会议的最大区别就是,国内以吃喝聊天、拉关系为主要目的,国外以技术交流为主;

这几年,国内已经有越来越多的安全会议、安全沙龙,每次会前,朋友圈的邀请函就会被刷爆,那些常年占据朋友圈的会棍,我一般都是拉黑再说……

不单是会议,特殊节日,你也会发现朋友圈清一色的各公司的礼品晒照!!!

炒作营销

“世界第一”、“中国第一”、“全球最强”等各种违反广告法的公关稿随处可见,尤以某数字公司最为推崇。

安全圈的营销类标题大体可以分为两种,”碰瓷”(蹭热点、名人,比如Hashcat破解密码之强,连FBI都惊呆了)和”意外”(这文章的标题就是这套路,破解256个字符,意不意外,惊不惊喜),满满是《爆款文案》中的套路:

普通标题:《火辣健身 App 深度产品分析报告》
碰瓷式标题:《同样是健身 App,它比 Keep 到底 NB 在哪儿》
意外式标题:《改了两个版本就融资 1500 万,这款产品如何做到的》

我并不完全反对PR,但我反对那些夸张不符事实的PR,以及惋惜那些以PR带动技术发展的不幸!

快餐式的付费知识

最近好多个平台提供付费知识的功能,算是一项靠名气快速套现的捷径,随便开个课或拉个群收费,几天就可能几十万收入,令人羡慕!

但反观付费的用户,你以为真的付费就一定可以获得知识吗?

对于技术而言,那都是常年积累的过程,非一两小时言语所有传授;
对于知识而言,个人思考所得的才叫知识,而非单纯地从别人口中得到;
对于学习而言,学以致用才是目的,而非纯理论学习。

所以,我不相信靠知识付费,就能够让你的认识、思维、技术有本质提高!

况且,有那么多比付费知识更廉价的书籍(可参考2018年安全从业人员书单推荐),完全可以更系统化地学习。

我不反对知识付费,但是系统性学习比碎片化学习更重要!
我不反对碎片化学习,但别妄想能靠它实现知识速成!

最近在网上看到一个故事,与各位分享下:

爱因斯坦提出相对论后,震惊世界,
于是被很多大学邀请去做报告,
爱因斯坦因此而被弄得疲惫不堪。
有一天,司机对他说:“你太累了,今天我帮你作报告吧?”
爱因斯坦问:“你能行吗?”
司机说:“我闭着眼睛都能背出来。”
那天司机上台,果然讲得滴水不漏。
但刚想下台时,一位博士站了起来,
然后提了一个非常深奥刁钻的问题。
司机不知怎么作答,幸好脑瓜转得快:
“你这问题太简单了,我司机都能回答。”
爱因斯坦站起来,几句话就解决了问题。
博士惊呆了:“没想到他的司机也远胜于我。”
但在回去的路上,司机对爱因斯坦说:
“我知道的只是概念,你懂得的才是知识。”

2018年信息安全从业者书单推荐

知乎上经常有人推荐一些程序员书单,也比较全面,但系统化的安全书单很少,虽然在一些安全新媒体上也有人推荐过一些,但上面不是广告就是有啥新书就推荐啥,甚至让人怀疑作者是不是搞技术的,可能大多没看过自己推荐的书。因此自己结合自己10多年来读过一些觉得比较好的书或业界公认的名著,整理出此份信息安全书单,仅供参考。
后续更新可关注GitHub:https://github.com/riusksk/secbook

计算机行业是否需要学历?

—— 记《软技能:代码之外的生存指南》读后感

最近在读一本写给开发者,但又跟技术、代码无关的书籍叫《软技能:代码之外的生存指南》,主要讲了关于理财、就业、健身、自我营销、精神等诸多软技能的书籍,如果你是个单纯痴迷于技术的IT民工,建议还是看一下。

此书涉及面太广,本文主要就聊下学历方面的话题,估计在知乎上谈得最多的就是要不要考研的问题了。

计算机行业应该算是对学历要求最低的行业之一了,但也不能说完全没用。

事物总是具有两面性,如果只是单纯地说需要或者不需要学历,那都是片面的。

单纯说需要或者不需要学历都是片面的

结果自身的一些经历和中国国情,总结下有无学历的一些优缺点,也欢迎大家补充:

是否考研读博

这个问题只有自己才能找到答案,因为只有自己才知道自己更需要什么。

先说考研读博,关键看你的目的是什么。

比如你想留校从事科研教育工作,或者进入政府银行、中科院等体制内的单位,那高学历几乎是必须的。

像现在招行的招人条件是必须985/211的大学,否则可能连面试机会都没有。

而如果是进体制外的一些企业,比如BAT等互联网公司,研究生的起步薪资比本科生高,但那只是给的辛苦费,并不是对你技术能力的认可。

这些互联网企业一般要求本科以上学历,然后更看重工作经验,比如硕士毕业生是T1.3(助理工程师),而工作3年的本科生,快点是有可能到T3.1(高级工程师),在人脉、技术、薪资上已经不是一个量级了。

至于那些特殊offer的就不在此讨论范围之内了。

也不是说读研没用,或者专科的没机会,腾讯里面也有专科毕业的高工,正如前面所说的,学历不足就得靠工作经验去弥补了,只要你能力出足还是有机会的。

现在AI(人工智能)很火,如果想从事这方面工作,对学术理论研究要求更高,继续求学可能更合适。

现在很多互联网公司,对AI岗位的要求,很多是直接要求博士以上学历的,待遇也很有竞争力。

不过互联网发展如此迅速,AI火个两三年也差不多了,不可能一直如此受热棒的,现在才考虑读博可能就赶不上这波热潮了,这个还需要用发展的眼光来看待。

至于那些害怕就业,要延缓就业压力的,是否考研读博都一样,就业压力都需要面临的。

还有些只是想过来体验人生,你怎么选都是对的^_^。

持续学习才是王道

难道读完研或博士毕业了就不用学习了吗?决定一个人走得多远,关键还是在能否保持持续学习的心态,因此,个人是比较崇尚自学的学习方式,但这要求自律性较高。

贴一张在看雪上看到的帖子,不看下,永远不知道别人有多努力,共勉!

总结

整体而言,拥有学历并不是什么坏事,就中国国情而言,学历还是需要的,至少拥有本科学历会更好,至于是否考研读博,可参考上一条自行选择。

读书心悟

”读史使人明智,读诗使人聪慧,演算使人精密,哲理使人深刻,道德使人高尚,逻辑修辞使人善辩。 “

———— 培根《论读书》

为什么读书?

”你的梦想是什么?“
”长大以后我要当一名科学家。”

相信很多人小时候都有过类似经历,我也如此,而它在当初我幼小的心灵中种下这样一颗种子:读书是为了当一名科学家

上了中学之后,老师和家长都会告诉我们要好好读书,将来才能考上一所好大学,有个好文凭才能找到好工作,以后才能坐办公室,而不用下地干活。此时才意识到,读书是为了有个好文凭,找份好工作,至少不用干苦力活。

大二那年,遇到一位家长,他始终认为读大学也是为了一个文凭,其它都不重要。

大学毕业后,从医学专业转行进入计算机安全行业,发觉那学历文凭于己没有太大用途了,只要是个本科就够了,这也是国情所定。此时才意识到,读书是为了丰富个人修养,是为了拥有一技之长,能够靠它在社会上生存的技能。

后来随着阅历的增长,慢慢意识到,其实读书的目的总结起来就一句话:为了拥有更多的选择权

正如龙应台在《亲爱的安德烈》中所述说的那样:

孩子,我要求你读书用功,不是因为我要你跟别人比成绩,
而是因为,我希望你将来会拥有选择的权利,
选择有意义、有时间的工作,
而不是被迫谋生。
当你的工作在你心中有意义,
你就有成就感。
当你的工作给你时间,
不剥夺你的生活,
你就有尊严。
成就感和尊严,给你快乐。


读完即忘,为何仍要读书?

也许经常有人会问,书读完就忘记了,那读书还有什么用呢?

如果是我,我会这样回答:”每日三餐吃完又拉,为何又还要吃饭呢?也许吃几天饭没能看出什么变化,但小孩子吃到成年呢?那变化够明显吧。读书亦是如此,短期看不出变化,但长期它会慢慢变成我们血肉的一部分,相伴一生!

王阳明《传习录》中有一段话:

一友问:“读书不记得,如何?”
先生曰:“只要晓得,如何要记得?要晓得已是落第二义了,只要明得自家本体。若徒要记得,便不晓得;若徒要晓得,便明不得自家的本体。”

深以为然,其实读书不用非得记得,能够理解书中道理即可。非得背诵强记,往往都是用来应付考试的手段。

《传习录》中说到,”如读书时,良知知得强记之心不是,即克去之;有欲速之心不是,即克去之;有夸多斗靡之心不是,即克去之。“

若能以不为考试、不为显摆、不为私欲,只以无心之心而读书,则足矣!

读书方法

春节刚好读完一本叫《如何阅读一本书》,虽没想像中那般好,但书中所提的4种阅读层次还是可以当作参考的。

  • 基础阅读:小学至初中的语文功底就足够了,即能够识字,读懂字面意思即可。

  • 检视阅读:换言之,即快速阅读,该层次可分为2种方法。
    1、系统化略读:比如通过书名、目录、序言、作者介绍、随手阅读几个段落等方式来判断该书的分类、主题以及内容质量,我一般就是通过此方式来判断买不买书的。对于一些专业书籍,就需要一定的知识背景才能有更好地做出判断。
    2、快速性通读:即不求甚解地快速通读全书,若有必要,再有侧重地细读一遍。

  • 分析阅读:原书写得有点复杂,个人觉得没必要,只要能够分析清楚书本的主题内容、全书结构、理解书中观点或原理,带着问题去书中求解,看能从中找到答案吗,读完之后能够准确地评价该书,这就差不多了。

  • 主题阅读:最高层次的阅读方式,根据同一主题内容去阅读多本同类书籍,因此也叫比较阅读。往往运用在主动研究某个领域所采取的方法。

比如想研究移动安全,我可能会去china-pub上查找相关书籍,通过检视阅读的方式去挑选出一些相关的安全书籍,然后就是采用分析阅读的方式一本本读下去,必要的话做一些笔记,完成之后也即是完成主题阅读方式了。可以看到,越高级的阅读层次其实已经包含了更低级层次的阅读方式。

为了规划自己的读书计划,我会用iPhone上的”提醒事项“这个app来记录和规划自己每月的阅读书单,当然其它一些需要记录提醒事项也会一并写上。一来可以方便随时记录想看的好书;二来可以提醒自己。

后记

中小学时代,读书大多是为了考试,总是有些不情不愿的,所以那时并不是那么喜欢读书。

上大学之后,由于兴趣开始自学计算机,记得当时整个暑假就拿着《深入理解计算机系统》和《ASP从入门到精通》两本书每天不停地学习,后来也会找一些社科历史等文科书籍来阅读。

渐渐地才意识到,其实我是喜欢读书的,只是被应试教育所毒害过。

所以能够以兴趣为导向,无欲无求,以无心之心而读书,或许才是最佳的读书状态。

附录

1、《购书心得》:关于信息安全方面的相关书籍推荐

2、《给计算机初学者的书籍推荐》:给初学计算机专业的同学一些基础课相关的经典书籍推荐。