张文君(小包):和病毒对抗,和自己对抗
张文君(小包),网名“junzz”,前金山网络互联网安全研究员。负责严重安全事件快速分析和回应,精通木马和各种恶意程式的对抗,对操作系统内核底层机制有深入研究。 2009 年底加盟金山网络公司任安全开发,曾负责金山毒霸相关的内核驱动程式开发和顽固木马查杀的工作。曾处理过众多知名流行病毒,如:隐身猫,极虎,鬼影,杀破网,淘宝大盗,极光,超级工厂,AV 终结者等,曾代表金山公司在台湾黑客大会(HIT CON 2011)发表过技术演讲。目前负责金山猎豹浏览器的底层开发工作。
从什么时候开始编程的?
大学的时候开始正式学习计算机,但其实很小的时候就开始接触计算机了,当时一直都在玩单机游戏什么的。我大学学的其实是园林设计,当时我报这个专业的原因是因为它很偏,不是大家都很热衷的专业,说不定我可以到处去旅游。后来发现不是这样的,于是就开始研究计算机了。
那具体是什么契机让你开始学习编程呢?
有一天我的QQ号被偷了,我就很不爽,开始研究怎么偷别人的QQ号。
(所以你当时的反映不是去腾讯公司挂失,而是去把它偷回来?)
我当时就是觉得这个东西很有意思,木马可以盗号,我很想知道这个东西的工作原理。那是大概05年的时候,好像黑客这个概念很火,刷个QQ钻啊,拿扫描器扫端口什么的。
(后来你把QQ号偷回来了?)
没有,我偷了另外一个QQ号,我看见一个以我生日结尾的QQ号,我就挺想要的,就试了一下(笑)。最开始的时候,我并不是直接搞编程。其实黑客和编程最开始的阶段是没有交集的。因为浅阶段的黑客是拿着工具,人家写好的东西来用。这种就比较浅。当时我拿着一些比较有名的软件,比如流光,扫描一些IP段,我输入一些IP段,从某些部分开始扫,比如北京的,如果中间有漏洞,就攻击它。可以侵入别人的宽带,给你的QQ币充值,总之就是一些坏事。但是我当时好像是没充(值),只是试了一下(笑)。我玩这个大概有半年时间,当时我还不会自己写工具。
后来我逐渐发现用工具不够好玩,如果可以自己写工具的话就更好了,于是我开始想研究地深入一些。当时看的书都是网络安全这方面的。我从这个时候就开始正式接触病毒了。所以说我不是以编程者的身份来学习计算机的,而是以逆向、攻击、防范这样的切入点进入的。我当时自己去图书馆看书,基本能借的都借回来了。这样大概学了有两三年的时间。我的学业很荒废,也不去管它,但是最后还是幸运地拿到学位毕业了。因为我从初中开始打篮球,是篮球校队的,所以老师也没有特别为难我,他们也希望我可以按照我的兴趣来发展。随着越学越深入,我发现要是想防范木马,就一定要学编程。比如要写一个防范工具,仿病毒来写,也要了解语言方面的知识。我的兴趣点比较专,所以只学习C、 C++,还有汇编语言。
后来你是怎么把兴趣做成职业进入到安全这个圈子里来的?
因为不是计算机专业的出身,所以我觉得我有必要系统地学习一下。所以大四的时候,我基本没有回学校,差不多一天都不在,我去参加了一个在安全界很有名的论坛(“看雪论坛”)当时在武汉办的一个培训加竞赛的机构。首先要参加C语言考试,我过了。然后就开始了为期一年的学习。期间我还写了一些项目参加比赛。这种比赛就是要自己写一个东西,让别人来破解,看看需要多少时间。当时我的那个“壳”写得还可以,因为是“混淆”过了的。通过这些比赛,我认识了很多行业中的人,再加上老师对我的推荐,所以在我还没有毕业的的时候,就有很多公司offer过来了。当时金山比较符合我的预期,因为从小玩他们的游戏长大,觉得金山有一种国家梦想软件企业的感觉,所以对它的印象特别好。
我当时的同学基本都分散在各个安全公司,360、微点,也有人去做外挂。另外我们这个圈子人脉也很广,有人会去做培训。其实我们这(个圈子)和正常的编程圈子不太一样,比如很多事一旦涉密,就很难脱密了。再比如我们关注点也很不一样,我们一般都关注和攻防有关的知识,包括地下的产业链是怎么运作的。
后来就直接来金山了,负责什么工作呢?有什么挫折吗?
当时我们这方面的人才很少,需求很大。再加上很多人没有选择走正途,所以就业压力不是很大。因为有的人掌握了这种攻防技术之后,他就可以选择去做外挂、做病毒,这样来钱会很快。其实当时我们的同学也有一些组团对去做一些那种……我就不说了。像金山这样的大公司最看重的是基础能力和人品,一定要人品过硬。所以他们招人的时候就会看重你有没有那种邪恶的感觉(笑)。如果做安全的话,一旦你了解了安全公司的病毒,你出来做(病毒)就会非常容易,因为你知道他们(安全公司)是怎么运作的。
我最开始做的是病毒分析、后来做的是病毒查杀,再后来做的就是再往里面一点,驱动相关的东西。工作中还是需要不断学习的,很辛苦。比如突然出现了一个0Day,我就要拿着老的WINDOWS的源码一点一点看,肯定是哪里有问题,自己一点点测、试、琢磨漏洞能被黑客利用的原理,这些过程都很艰难。
后来在金山和可牛合并的时候曾经有一段时间大家的工作状态都有点疲软,处于一个不太积极的状态。但是我认为(工作上)跳来跳去不太利于自己的发展,到了新环境你要花精力适应新团队、适应新工作。而新的团队可能工作节奏和你的不一样。比如说我们有的同事去了腾讯,就遇到了这个问题。后来和boss聊了一些,逐渐心态又好起来了。
后来怎么决定不继续做攻防了?
当时病毒方面的业务已经趋向于稳定了,处于维护期,可以做的事情也比较少,有点像一个养老的状态。现在病毒的趋势没有以前那么猛烈了,以前都是深层次的对抗,他们(黑客)都会做一个驱动,想把我们(安全软件)杀掉,会用一些狠的方式。而现在大家都转向简单、快捷、来钱快的方式。比如他们会把你的首页锁了,导点流量,弹个广告什么的。因为和我们(杀毒软件)深层次对抗的话,他们技术划不来,他们的利益链没有那么长的周期周转,他们想要快的。
国外的病毒,因为大家都很富足,偏向于技术的研究,比如鬼影病毒其实就是抄袭外国的MBR病毒,也就是引导扇区病毒,当时在国内会被利用也是因为网吧有还原软件,才会有人把这种相对底层的技术引入国内。中国的病毒行业就偏向于浮躁一点的,利益相关的东西比较多,中国人一般不会研究很深然后把它(病毒)用到一个点上。其实像当年爆发的那些熊猫烧香这类病毒,也没什么技术含量,只不过是一些很简单的拼凑。现在的病毒一般都在用户可接受的范围内,所以杀毒软件的更新也没什么动力。
后来,我就从珠海来到北京,由于保密需要,他们最开始告诉我是做移动相关的开发,而移动这方面我是完全不懂的,但是没办法,于是硬着头皮买了一堆移动的书看。后来发现其实我是来做浏览器的。
来到北京之后,你就加入了猎豹团队了吗?
是的。我从最开始和猎豹浏览器一起长大,从封闭开发,一直到内测,我都在(团队)里面。一开始就是从零做起,我没有做浏览器的经验,连开源的 Chrome的架构都不了解。只能一点点探索、学习。从内测版到现在还不到一年。一开始研发、产品、测试,也就十几个人,到现在人太多我也不知道有多少,应该至少是翻倍了吧。在猎豹浏览器我负责的是核的部分,比较基础底层的服务,其他人会在我们的基础上做调用。包括双核切换这些,都是我做的。
我原来的工作偏向于对抗,而现在更像是自己和自己对抗。那边可能实时性比较强,但是现在更侧重于自己知识的不断完善,比如我做的基础接口,我就要保证我自己的能力要不断提升,如果自己没有进步的话,就会很困难。如果我能做得超出别人的预期,我就会比较开心。
以前,如果我能帮别人杀掉病毒我会很满足,现在,我的家人都在用我做的浏览器我也很满足。
业余时间都干什么?融入程序员的圈子了吗?
我不太喜欢逛街、买衣服,买化妆品什么的,我很多时间都花在看技术书上了。我的女性朋友们会问我:你下班了为什么不去逛逛街、逛逛淘宝,而要看技术书呢?我和朋友聊天的时候通常我都是被吐槽的一方,她们会和我分享她们遇到的事情,奇难杂症之类的,我就负责点头就好了(笑)。
和同事们在一起的时候,我没有特别把自己当成女生对待。因为在公司,都是女生当作男生用,男生当作畜生用。我不会因为自己是女生所以这也不愿意干,那也不愿意干。
男码农们有时候很猥琐(笑)。他们讲的好多黄色笑话都不是很好笑,但是他们自己又笑得很开心。这种情况我就自己在旁边玩手机。但是我还是很积极参与团队活动的,不可能因为笑话不好笑就不和团队成员交流沟通了。但是有时候感觉还是同类太少,无论以前在珠海的团队里,还是现在猎豹我们这个组里,都只有我一个女生。
你认为女程序员少的原因?
我觉得首先是兴趣问题。我认识这么多女程序员,真正热爱这个行业的其实就只有一个,而且她还没毕业(笑)。很多人都是因为自己学了这个专业,才从事这个职业,只是把编程当作一份工作。而且她们一般的态度都是不要去民企,最好是可以去比较轻松一点的地方,去教书,或者搞科研什么的。所以我认识的女程序员中,热爱这个行业的,还没有出现呢(笑)。兴趣这个大问题就把很多人拦了下来,大部分人(女性)连用个软件,重装个系统都很痛苦。剩下的有兴趣的人还会因为其他原因打退堂鼓,比如个人时间少、加班辛苦、家庭问题、个人问题。也正是因为前面这些问题,女程序员就已经很少了,无法形成自己的文化。所以这样造就出的男程序员文化就会进一步加剧女程序员数量少这样的现状。
做码农累不累?想做到什么时候?
刚开始的时候加班很多,比如封闭的时候需要全天都在,现在只有要发版本的时候需要加班,平时就不太需要了。时间上来讲,现在是好多了,至少可以自由出入了。但是工作的压力还是很大,因为每天跟进的问题还是在那里,比如效率不行,性能问题什么的。每天都有反馈,要迭代,我的工作有没有进展都是很容易评估的。加班不是必须的,但是我必须要把我的事情搞完,我作为团队的一份子,过不去自己责任心这一关。我现在住的地方离公司比较远。原来在珠海我住的地方离公司非常近,对面就是海。而在北京这边上下班都要赶地铁,路上的时间都比较紧。
关于做码农,我想的是,只要是我身体条件允许我就会一直做。因为听说我们这行会有一些职业病,比如颈椎病、腰疼之类。可能到了这个不得已的时候就要停下来了。做程序员体力一定要好。我在珠海的时候每天都会跑步,到了北京,发现PM2.5太高,不适合跑步。
以后我可能逐渐要向项目管理这方面靠拢,并不是从个人兴趣角度出发,而是因为项目有需求要带人。我不可能一直一个人默默地写代码,团队的运作肯定不是靠一个人,我们需要的是一群努力的人,这样的一群人肯定比挖一个很牛的人过来要更有效率。我不会为了管理而去做管理,我肯定一直都会做技术相关的工作。
相关文章
- Java要抛弃祖宗的基业,Java程序员危险了!
- 十大 Java 语言特性
- JVM 三色标记算法,原来是这么回事!
- 聊聊 Spring 事务控制策略以及 @Transactional 失效问题避坑
- 写给 Java 程序员的前端 Promise 教程
- 写给 Java 程序员的前端 Promise 教程,你学会了吗?
- Java 中为什么不全部使用 Static 方法?
- Java 池化技术你了解多少?
- Java 服务 Docker 容器化优秀实践
- Spring Boot + EasyExcel导入导出,简直太好用了!
- 我们一起聊聊 Java 内存泄漏
- CentOS 下安装 Docker 极简教程
- JDK 19 功能集冻结:Java 19 只有七个新特性
- 关于 CMS 垃圾回收器,你真的懂了吗?
- 为什么会有这么多编程语言?
- 改善Java代码的八个建议
- 接口流量突增,如何做好性能优化?
- Java 以编程方式创建JAR文件
- POJO、Java Bean是如何定义的
- Spring 的 Bean 明明设置了 Scope 为 Prototype,为什么还是只能获取到单例对象?