生涯第一次面試

    3.27我早上起來接到HR微信消息,通知我下午去面試,以前上週說的不要實習生原本已經讓我放棄了的,但是這突如其來的消息又讓我躍躍欲試。我想了一想,我須要一個早上溫習一下,就回復HR將面試時間改成3.28的下午。面試

    時間似箭,一去如梭,我越複習腦子裏的漿糊就越多越稠,事實證實妄圖短期內掌握大量繁雜的知識是個愚蠢的決定,索性挑出少許重點溫習了一下。微信

    兩點恰好達到公司前臺,前臺聯繫了一下就讓一個工程師過來面試我了。進入房間前,工程師想讓我作一下技能筆試,我內心當時是懵逼的,心想難道我就要GG在這裏了嗎。我一直不認爲我以後學的知識會像中小學生涯那樣鬧鬧記住來考試,因此我根本就不擅長閉卷筆試這種考覈,互聯網的存在讓我以爲本身根本不須要儲備那些固定的知識,只須要記住原理框架就好了,到如今我也不知道本身的想法是否正確,但我以爲腦海裏的知識得成體系成網狀是必須的。言歸正傳,還好HR已經和前臺交代過我不須要技能筆試,因此我直接進行面試了。數據結構

  1. 一開場,就任位的興趣入題,問我從何時開始關注逆向;「我回答本身高中就關注了,可是正是學習是從去年5月開始的」。緊接着是一個開放性問題,他問我怎麼看待逆向工程,聽到這個問題我感受很玄學,我逆向經驗其實不算多,可是好在日常有一些本身思考。「逆向它是一個體力活,可是是一個須要經驗以及基礎內功的體力活,首先得有很好的基礎知識,它們會讓你對程序的大體運行了然於心,而且不會調入某些細節的坑(好比SEH觸發時有個壓棧Next SEH Handler的操做)裏。雖然你有了基礎內功,可是你也不是已經天下無敵,這個時候有須要不少逆向的經驗(好比看到QueryPerformanceCounter就要有時間計數反調試的Idea,還有各類語言編譯事後的樣式)來幫助你分析程序。最後你內功和經驗都有了,但是若是遇到一個比較生疏的程序,你仍是得花時間去不斷地分析程序熟悉程序,這是必有的通過。綜上,逆向是一個須要基礎內功與經驗的體力活
  2. 接下來他仔細看了個人簡歷,對個人mini-kernel比較感興趣,面試官可能也比較熟悉Kernel,他問我是否是獨立(不借助參考資料)作出來的,我心想怎麼可能,Linus還差很少,我只能如實回答我藉助了好些參考資料才寫出來了。同時他也問了是否實現了多線程以及用到TSS,恰好我在開學一週把多線程部分給實現出來了,經過時鐘中斷來調度,用一個push target_address;ret的操做來實現的多線程,並無用到TSS。以後他又問了關於內存管理的過程以及尋址的流程,「內存管理就是須要先將有限的物理內存先用數據結構進行統計管理,以後在線程中須要malloc的時候給定程序一個規定好的虛擬地址(每一個線程都擁有完整的虛擬地址空間,因此每一個線程都能霸佔這個堆),以後再在內核中經過物理內存數據結構的管理分配處可用的物理內存,並將它映射到相應進程的虛擬內存中(經過設置相應進程的頁目錄);至於尋址的話則是使用高10位來做爲頁目錄索引,中間10位做爲頁表索引,找到具體的頁表項,最後12位做爲頁中偏移定位具體地址(一頁4KB恰好12位)。"
  3. 以上的都是基礎知識的考察和概覽,面試官恰好問到我記得比較熟的點,運氣不可謂很差。以後他看到我寫了掌握基礎漏洞原理,就讓我說一下漏洞概況。說實話,這部分其實個人practice不算多,因此很不紮實,惟一調試得最多的屬棧溢出漏洞而且輔以一些bypass技巧。「棧溢出就是經過ret指令(約等於pop eip)的機制來形成的,而還有一種是堆漏洞,好比UAF就可能發生堆漏洞,當咱們第二次申請與上次釋放內存塊大小相同時候,系統可能會直接給咱們上次釋放的內存塊,然而上面若是有咱們input的污染數據,那麼可能致使漏洞的發生。」以後他問了我什麼狀況下咱們能input進去污染數據,這時候因爲我漏洞知識的不紮實,致使我徹底答不上來,「@#¥%%@#...」我本身都不知道在說什麼。到了這裏以後,還好面試官沒有再難爲我,估計也是看出來我就這點斤兩,開始問我時間以及將來規劃的問題,同時也和我提及我進去會作的工做(安卓端漏洞+Win端漏洞)。
  4. 通過此次面試,我知道本身的亮點是Kernel部分基礎掌握得還不錯,沒有渾水摸魚作出這個Kernel,其中仍是掌握了好些東西的,這樣說明咱們的基礎課程課設(Computer Arch/OS/Compiler/Network)真的得偏實際一點,不去coding一下,理論模型徹底就很空泛,學了不久就會忘。其次,若是是作漏洞挖掘,我目前建議在熟悉調試+OS原理以後儘快跟上CVE來進入真正的漏洞環境,感覺真實的觸發條件,以及利用技巧,真正的Hacker不是活在lab中的

    以上純屬我的思考和經歷,若有錯誤,但願不吝賜教多線程

相關文章
相關標籤/搜索