圖1 與客戶端建立連接
圖2 獲得客戶端狀態信息
圖3 配置客戶端規則
圖4 客戶端指定本地端口
圖5 客戶端執行控制指令
圖6 客戶端執行文件插入指令
CSDN編者按】本文的作者是一名軟件開發工程師,在讀過《大教堂與市集》的作者、《新黑客詞典》的維護人、著名黑客ESR(Eric Steven Raymond)的博客文章《如何成為一名黑客》之后,對計算機程序產生濃厚興趣,并受此影響走向軟件開發的職業道路。來了解下他的故事和對于黑客的見解吧!
作者 | Zach Alberico
譯者 | 蘇本如,責編 | 夕顏
頭圖 | CSDN付費下載自視覺中國
出品 | CSDN(ID:CSDNnews)
以下為譯文:
為什么要寫這篇文章?
當我十三歲開始上高中的時候,我讀了ESR寫的這篇博客文章:如何成為一名黑客(http://www.catb.org/~esr/faqs/hacker-howto.html)。這篇文章讓我了解了程序員們一起在互聯網上構建東西的社區,這讓我很興奮。我試著開始著手安裝Fedora Core 4,最終安裝成功了Ubuntu 6.06,通過這一過程,我自己學到了很多關于故障排除的知識,并且努力嘗試著讓系統真正工作起來。這個過程對于培養幫助我獲得現在這份工作的技能至關重要。我讀了關于Python的書,寫了一些小程序,然后決定學習計算機科學,了解計算機是如何工作的。在我不確定自己將來想做什么的時候,這對我來說是一個相當有影響力的文章。
在布法羅郊區長大的我,在紐約可能感到相當孤獨。雖然我很幸運,我父親在大學里因為好玩而編寫了一個Apple II程序(所以我應該有一些編程背景/黑客精神),但他對更現代的軟件開發知之甚少。我喜歡電腦,也喜歡玩電腦,但我不知道什么是計算機可以做到的,甚至不知道在哪里可以了解更多計算機知識。當搜索空間如此之大,并且有許多未知的信息時,你甚至很難找到好的信息來源來學習。有能力選擇好的信息來源需要一些現有的知識,如果沒有經驗豐富的人的指導,這可能會很困難。我認為,現在互聯網更發達,情況可能會更好,但在某種程度上說,現在比過去可能更加困難,因為有更多的選擇需要篩選。
16年后,我想寫我自己的版本的《如何成為一名黑客》,來對ESR的原著進行補充,這一定是件很有趣的事。我想在這篇文章加入那些我在13歲時想讀到的一些東西,并且重點關注那些我覺得很有幫助的其他內容。現在很多關于編程及其相關主題的文章都在拼命鼓噪,試圖說服你采用特定的編程語言、框架、操作系統、或者特定的編程方法。本文在這些方面著墨不多,盡管我也提出了一些建議,但它們只是一些溫和的觀點。本文的主要目標是填補那些在ESR的原始文章未曾觸及而我非常想了解的空白(所以你應該先讀ESR的那篇文章)。
要學習的東西有很多
記得在剛開始的時候,我讀過一些文章和書,但對其中的很多行業術語不甚理解 - 這很正常。隨著你接觸到了更多的事情,并深入到每一件你不理解的事情中去,那些一開始看起來不可理解的事情會慢慢變得可以理解。保持繼續閱讀并且挺過這段艱難時期是很好的方法,當你不理解的時候就去查找,當你可以提問的時候就去問問題(ESR也有一篇關于如何問好問題的文章)。
每個人都會在某個時候第一次學到一些東西,然后這些東西就會慢慢地積累起來,直到你掌握了那些基本知識為止。我記得一開始我不懂任何細節(比如:我不知道如何在終端中輸入命令來運行它們,或者cd代表“change directory”)。你從接觸中獲得這些知識,你玩得越多,你接觸得就越多,你積累的知識和經驗也就越多。如果你有幸生活在一個地區有一群對軟件感興趣的人,你就能夠更快地學習。
不要害怕你不理解的事情
學習一些復雜的新事物開始時往往會感到困難 - 如果感覺很容易,那么它可能是你已經知道的東西,或者它可能不是真正考驗你的知識(閱讀如何解決一個物理問題并認為“它很合理”,比你自己用剛剛學會的工具解決一個問題要容易得多)。感覺吃力是個好現象 - 這意味著你真的在學習,集中精力一直堅持做下去,當你感覺變好的時候你的學習就會變得更容易。
我認為,一個新人在這方面甚至有一點優勢:當你積累了一點經驗后,只做你已經知道怎么做的事情,而不是學習新的東西,會讓你感覺容易和舒適。這會導致你陷入一個停滯期,在那里你只是重復做你已經知道怎么做的事情,就像一個人只能用吉他彈一首歌,并且他總是彈同一首歌一樣。對于一個新人來說,一切都很難,但這樣做不應該是一個新人真正的選擇。
第一次學習一些復雜的東西應該會感覺有點痛苦 - 你應該習慣這種感覺,因為這是件好事,意味著你在成長。不要因此覺得自己不夠聰明而被嚇跑了。因為有太多東西要學,有太多不同的途徑要走(僅就計算機科學來說,就有很多東西,像計算機圖形學、計算機安全、機器學習、算法、移動、網絡、基礎設施等等分支),所以有一個讓自己成長并走出舒適區去學習新事物的心態是至關重要的。
學習編程 - 邊做邊學
僅僅通過閱讀一本關于編程的書來學習編程,就像僅僅通過閱讀一本關于跳傘的書來學習跳傘一樣。你可能需要讀一本書(而且在開始的時候你需要用它作為一個起點),但是除非你同時也在寫一些小程序,否則你從中得到的有限。木匠通過建造東西來使技術變得更熟練,作家通過撰寫文章來使文筆變得更優美,而程序員則通過編寫代碼來提高編碼水平。這并不意味著你不應該讀書,也不意味著一本好書不能給你帶來價值。但是僅僅這樣做會很容易讓你陷入一個誤區:你只是在那里讀關于編程的書而不是自己做任何事情,會讓你覺得讀起來容易,做起來也容易。然而,當你真正開始編程的時候,你會發現憑空想象出來一些程序是很困難的。
我同意ESR的觀點,Python是一種很好的作為編程起點的語言,而且有一個很好的學習網站,名為苦學Python,專門針對初學者,并在教學過程中使用一些練習。
一開始,你會覺得語法很難理解,當你開始學習的時候,很多時間都花在了語法上。因為每種編程語言都有不同的語法,它們看起來非常不同。當你開始掌握語法后,你更多的精力就會放在關于如何解決問題和使用什么數據結構的通用知識上。最終,你對于使用常見的數據結構已經相當嫻熟,然后你的重點將會轉向更高層次的抽象和更通用的設計或基礎架構,這些設計或基礎架構使得軟件開發更易于在規模上管理或在將來更易于更改。
在掌握了一門編程語言的語法并且能夠編寫簡單的程序之后,學習數據結構是最重要的下一步。Cracking the Coding Interview這本書對一些核心的數據結構有很詳細的描述(并且還附帶有一些示例問題)。令人困惑的是,不同的語言在實現相同的數據結構時往往有不同的名稱(比如,Python稱哈希表(hash table)為‘字典( dictionary)’),但大多數語言都會實現一些核心數據結構,即使它們都有一個不同的名稱。
故障排除或調試也是一項核心編程技能 - 大多數編程時間實際上都是在調試,因此,如果你喜歡調試代碼,這可能是一個好現象。當你不得不到處搜索以試圖理解某件事情,或者當你正在閱讀的文檔不起作用,或者當你在環境中遇到一些意外錯誤時,不要氣餒 ,記住這是正常的,而且這也不是你能力低下的反映。
大多數軟件都不工作,而且經常有未記錄的error、bug和一些難以糾正的瑣碎問題。例如,Github上的大多數開源項目都有某種構建系統,用于處理將軟件配置為運行的問題。這將執行諸如拉入依賴項(需要與之配合工作的其他代碼)之類的操作,以及執行任何必要的命令來實際運行它。如果你要在Github上下載一個有趣的項目并嘗試運行它,你可能會在這個過程中遇到很多意外的錯誤,而這些錯誤通常沒有文檔記錄。
運行時遇到這些錯誤并且將問題解決是很正常的事情,經驗豐富的程序員也必須處理這些問題(如果幸運的話,我們以前也見過這種類型的問題)。我見過有人遇到這樣的錯誤,并且認為自己做錯了什么,但實際上錯不是你,而是編程就是這樣的過程。圍繞著構建系統并試圖使其更好,有很多相互競爭的工具甚至行業(這可能會使初學者更加困惑,因為沒有真正的標準化,并且配置軟件使之運行的正確方法也因為編程環境和語言的不同而各不相同)。
計算機實際上是如何工作的?
我記得那時我很沮喪,因為我很難找到關于計算機實際工作方式的信息。我能找到的關于計算機的一切都是用毫無用處的過于簡單的類比(比如,磁盤是“存放文件的柜子”),我找不到任何我可以閱讀并且幫助我真正理解計算機是如何工作的,并且如果把我轉移到過去,我就能真正解釋如何構建出一個計算機的東西。這些是比軟件更具體的電子或計算機工程,它們在幫助理解硬件方面仍然有很多價值(這很有趣!)。
我愿意推薦的最好的書是Charles Petzold撰寫的《Code》。它引導你從電子位開始,一直到布爾邏輯和電路設計的歷史,再到簡單電路的實際圖形,以及如何將位存儲在內存中。這是知識依照發現的歷史背景一步步地介紹給你,直到構建出一個真正的小CPU。Charles Petzold還學習了一些匯編和基本的計算機圖形學。他是一個邏輯非常清楚的作家和老師,所以這本書的細節具備令人驚訝的可讀性。
關于計算機的更多的歷史背景,我推薦Mitchell Waldrop的《夢幻機器》和Steven Levy的《黑客》。書中的敘述性的故事使學習和記憶更容易,我認為這些發現的背景有助于學習事物的實際工作方式。
軟件工具:代碼編輯器,編程環境
工具是有趣的,了解你的工具是件好事,但是你可以永遠定制一些東西,爭論一些無關緊要的小細節。當你剛開始的時候,定制工具是一個有趣的學習方式,但是我看到人們花了大量的時間在這個上面,與實際編寫解決問題的程序或者學習更多的通用編程技巧相比,它產生的價值相對較小(關于這點的一本很好的書是設計數據密集型應用程序)。過于專注于定制工具會束縛你前進的腳步。
不要太擔心Vim或Emacs之類的工具,也不要太擔心你正在使用何種操作系統 -你可以在任何地方學習這些核心技能(這是我與ESR原始文章的最大分歧)。也就是說,玩Linux對我來說是一個非常有價值的學習故障排除的方法 - 主要是因為我的Linux沒有很好地工作,我不得不花上幾個小時來嘗試讓無線互聯網正常工作,讓筆記本電腦成功掛起,甚至讓用戶界面出現(現在情況稍微好一點)。
我開始嘗試安裝Gentoo(實際上從未成功)。這種故障排除技巧對于我獲得現在的工作非常有幫助,所以如果你喜歡玩不同的操作系統,我肯定會鼓勵你,我只是不認為這是必要的。不過,在macOS或Linux上學習可能更容易,因為大多數現有的工具都是針對這些環境,而且大多數程序員都在使用這兩種工具中的一種。
值得一提的另外一個特定工具是版本控制,特別是git。花點時間熟悉其基本知識是值得的,但它可能是在你編程一段時間之后才需要關注的東西。
不要沒完沒了地研究
在開始一個項目之前,進行沒完沒了地“研究”會導致項目容易拖延 - 閱讀和探索可用的選項(研究)會很有趣,花一點時間做一點這樣的事情會很好,但你也可能永遠被困在這樣的事情中。當有疑問的時候,只需選擇一個已經開始了一段時間并且最受歡迎的項目。使用這個項目,如果它很受歡迎,它可能有一個像樣的社區,你可以向它學習,如果它存在一段時間,它可能會更穩定(或者至少它會更充實,不太可能被拋棄)。
計算機科學
我真的很喜歡學習計算機科學,并且認為這可能仍然是獲得最大機會的最佳途徑(尤其是如果你像我一樣住在郊區,周圍沒有很多軟件人員的話)。如果可能的話,我認為嘗試學習最好的計算機科學課程是很好的。網上也有很多好的課程,但是如果你的生活和我高中時一樣,在家里很難真正利用這些。
編程面試
如果說學習是獲得好成績的天然解決方案,那么做好一個酷項目編程就是在編程面試中表現出色的天然解決方案。要想在競爭激烈的公司的編程面試中處于有利地位,你需要對leetcode網站上和Cracking the Coding Interview這本書中提到的編程問題非常熟悉。編程面試需要大量的實踐,并且它是一個可以讓自身能力得以發展的獨特技能。
你可以獲得一個完整的計算機科學學位,但仍然不知道如何編程。你也可以獲得一個計算機科學學位,但仍然不能通過編程面試(這兩個可能是默認情況)。學會編程,學會在編程面試中做得更好,你需要自己集中精力在這些方面。計算機科學學位可能有助于一些方向和重點項目(Lambda School可能更適合培養編程人員,也許最終會更適合),但你必須自己掌握很多這方面的知識。
角色和職位
除了“軟件工程師”之外,還有很多不同的角色。SRE(網站可靠性工程師)關注代碼運行的基礎設施,并為其編寫軟件。內部工具和devops開發人員專注于自動化軟件構建和測試所需的所有工具(閱讀The Phoenix Project,了解一個有趣的故事來說明這一點)。除此之外,有些角色和用戶有密集的交互,如開發者支持工程師(developer support engineer)幫助用戶處理API、解決bug或配置問題)。還有些角色重點關注游戲引擎,有些角色重點關注虛擬現實或計算機圖形。有些角色則關注編寫新的計算機語言和新的編譯器。
在所有這些角色中,根據使用的產品和使用的為解決新問題而創建的新工具的不同,有更多的專業化。計算機安全也是一個有趣的領域,對此領域我所知不多,并且我認為ESR在他的文章中對此是持輕視態度的,但我認為它也是一個很難開始的地方,因為它需要對事物是如何工作的已知理解的基礎上才能知道事物是如何被打破的。我記得我很早就開始讀Hacking: The Art of Exploitation這本書,但當時我對這個領域還是一知半解。
當然,你也可以創辦自己的公司,建立自己的創始人角色。
還有很多東西要學(再來一次)
一輩子是很長的一段時間,而專業化并不是永遠的,所以要深入到不同的事物中去。你可以接觸很多新事物,一路玩得開心。
獎勵:社區
ESR在他的文章中談到加入一個本地Linux用戶組,但是至少對我來說,當我讀到他的文章的時候,這是不現實的,一方面是因為這個用戶組真的沒有那么多人,另一方面是因為我太小了不能開車,我自己也沒法那么容易地到達任何地方。有一些在線社區我覺得很有趣,如果換在那時我想我也會覺得很有趣。
Hacker News:Ycombinator的新聞網站(海灣地區的創業孵化器)。對它的評價有好有壞,但好處在于它確實很好,很多業內人士都在那里出現。Paul Graham和Jessica Livingston是Ycombinator的創始人,Paul寫了很多有趣的文章。
Twitter:很大程度上取決于你在關注誰,但如果你想的話,它可以成為一個好地方。很難知道你應該從誰開始關注,但你可以看看我從誰開始關注。
Less Wrong:不是注重編程的社區,但是理性社區和編程社區之間有相當多的重疊,我喜歡那里的很多文章,這肯定是我在發現如何成為黑客的同時,希望找到的東西。這里有一個我非常喜歡的例子:Disputing Definitions
歡迎聯系我
我有更多的文章和書,都鏈接在我自己網站的about網頁上。
我記得在我讀到他的文章時,ESR回復了我發給他的一封關于讓iPod在Fedora Core 4工作的郵件,我很確定Richard Stallman也回復了我當時發的一些郵件。我覺得那樣做對初學者來說很好。本著以他們為榜樣的精神,如果你愿意的話,請隨時向我提出任何具體的問題。
原文鏈接:
https://zalberico.com/essay/2020/04/19/how-to-become-a-hacker.html
本文為CSDN翻譯文章,轉載請注明出處。
?Facebook 公司:如何清除 960 萬句“臟話”?
?Linux 之父怒刪工程師提交的補丁,稱“太蠢了”網友:懟得好!
?張一鳴是如何練就字節跳動的
?性能超越最新序列推薦模型,華為諾亞方舟提出記憶增強的圖神經網絡
?DevOps 在移動應用程序開發中扮演什么角色?
?穩定幣經濟:十大穩定幣簡史
017年福布斯發布的中國30位30歲以下精英榜上,陳宇森的名字赫然在列。這位畢業于浙江大學計算機學院的中國網絡安全界新貴,即便在一群同領域的青年才俊中,也年輕優秀得足以讓人驚嘆。
這個才二十六歲的青年的履歷閃著光:他曾免試保送進入浙江大學竺可楨學院求是科學班,從學生時代開始就進入網絡安全攻防領域,從浙大AAA戰隊到業界赫赫有名的藍蓮花戰隊,再到嶄露頭角野心勃勃的長亭科技,他的身份不止于黑客、創始人和核心成員。
時間流轉到四年前的一晚,2014年8月24日,第二屆“360杯全國大學生信息安全技術大賽”(CTF)在北京圓滿落下帷幕。來自浙江大學的AAA戰隊力挫國內九大校園安全團隊,奪得本次大賽總冠軍。作為AAA戰隊組建時的“元老”,彼時陳宇森已經大四了。為了準備這場比賽,他說,在前一天只睡了兩個小時。而在本次比賽中,這支年輕的隊伍也是在最后的五分鐘逆風翻盤,力挫清華大學的團隊,最終贏得了勝利。
AAA是Azure Assassin Alliance的縮寫,中文名“藍色刺客聯盟”。拿下國內冠軍,沖入國際總決賽時,浙大AAA戰隊成立不過兩年,卻沖勁十足。這支人數不多的隊伍,卻培養了不少信息安全領域的大牛,很多一流的互聯網公司總是對AAA戰隊的成員敞開大門,甚至還沒有畢業,他們手里早已接到了不止一家國際互聯網公司的工作邀約。陳宇森亦是如此,畢業前夕,他手握許多別人夢寐以求的機會,還未曾想到未來會走上創業之路。他滿懷對信息安全的一腔熱愛,帶著浙大烙印的“求是創新”精神,年輕而無所畏懼。
在此不久前,陳宇森剛作為“藍蓮花”戰隊的成員參加了2014年DEFCON奪旗賽全球總決賽,并以團隊第五的成績再次刷新了藍蓮花的戰績。陳宇森回憶道,“國內的比賽只要你愿意學習,都比較容易,而國際比賽挑戰更大。”
陳宇森坦言,出于對信息安全方面的熱愛,他花費了大量時間提高技術和打比賽,也會無暇顧及一些基礎課,但是足以應付。在專業課方面,他本身是計算機科學與技術專業,雖然不是計算機安全科班出身,專業課方面扎實的基本功是必修的。為了成為一名優秀的黑客,止于興趣的公開課、網絡提供的資料和自學顯然已不能滿足他,于是他把目光投向了CTF。
此外,浙江大學對學生的這項興趣愛好也非常支持,尤其是設備和軟件方面的采購。學校會提供部分經費,并派出專業老師給予指導。
“曾夢想仗劍走天涯,看一看世界的繁華”,陳宇森說,這是我們走出校門后的初衷。于是,當曾經藍蓮花戰隊的朱文雷提議“我們不如通過創業來拯救世界”的時候,陳宇森立即響應,直接放棄了阿里巴巴、360這一票大公司的 Offer,飛往北京準備創業。
那么,短短數年時間里,這群野心勃勃,“妄想”拯救世界的年輕人做到了什么呢?
在2016年的315晚會上,一段神奇的代碼釋放出了巨大的威力。
隨著屏幕一掃而過,攻擊開始:遠程控制攝像頭,做畫面監視,按照控制者要求任意變換角度和方向。
當網絡安全之于個人生活第一次以如此真實可感的方式呈現出來,觀眾一時嘩然:只是一串串看似簡單幾可忽略的字符,竟有如此令人恐怖的“魔力”?更不可思議的是,創造這段代碼的,居然是一個非常詩意的名字——長亭科技,這就是陳宇森與并肩作戰的兄弟們一起創立的網絡安全公司。
長亭科技CEO兼聯合創始人,這是許多不了解CTF的人第一次認識到的陳宇森。
2017年福布斯發布的中國30位30歲以下精英榜上,陳宇森的名字赫然在列。這位畢業于浙江大學計算機學院的中國網絡安全界新貴,即便在一群同領域的青年才俊中,也年輕得足以讓人驚嘆。
“出任CEO”在大眾眼里已是“走上了人生巔峰”,可陳宇森和同事們白手起家,既要做技術又要做銷售,忙得團團轉的坎坷創業之路并不為許多人知。
陳宇森說,最早外界對我們的評價是——“技術不錯的學生團隊”,但怎樣從這個起點出發,將技術轉化為產品,開拓市場,奠定品牌,打破外界的固有印象,成為一家做得還算不錯的創業公司?我們現在做到了,但這個過程讓我覺得“紙上得來終覺淺,絕知此事要躬行”。
商場比非黑即白的賽博世界要復雜黑暗得多,初出茅廬的陳宇森不過是個“毛頭小子”,在現實面前屢屢碰壁。那時他的工作常態是白天忙著產品研發,晚上親自飛往全國去見客戶,卻常常空耗時間,一無所獲。
有人毫不留情地問他:你們只是一個網絡安全比賽領域的強隊,打打比賽,拿一些冠軍。但一群每天對著電腦的 geek,會服務客戶、拓展市場嗎?面對業界的種種質疑,甚至被行業大佬預言“你們(公司)活不過一年”,這群不服輸的年輕人最終頂住了壓力,抱著“怎么著也得撐過一年”的決心,交出了一份令人驚艷的成績單:
截至目前,全中國前20家最大的銀行,有 60% 成為了長亭科技的客戶;中國最大的券商 50% 成為了長亭科技的客戶;三大運營商全部成為了長亭科技的客戶;國家電網、很多三甲醫院、數家 985 高校都成為了長亭科技的客戶。
2018年,長亭科技的安全產品已經增加到了四個。“雷池”“諦聽”“洞鑒”“牧云”,四個浪漫的名字湊成了一桌麻將。完成新一輪上億元融資,長亭科技估值不菲。
而陳宇森和他的長亭科技還年輕,這顆信息安全界的新星,前途不可限量。
文字來源:陳欣妤
圖片來源:陳宇森
部分內容來源:《福布斯榜上的90后黑客陳宇森:世界終會留給我一條逆襲的路》(淺黑科技微信公眾號 作者:史中)
本文編輯:浙江大學微訊社 田柳燕