張文君(小包):和病毒對抗,和自己對抗
張文君(小包),網名“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太高,不適合跑步。
以后我可能逐漸要向項目管理這方面靠攏,并不是從個人興趣角度出發,而是因為項目有需求要帶人。我不可能一直一個人默默地寫代碼,團隊的運作肯定不是靠一個人,我們需要的是一群努力的人,這樣的一群人肯定比挖一個很牛的人過來要更有效率。我不會為了管理而去做管理,我肯定一直都會做技術相關的工作。