其他項目分享(15):學電腦的過程

抽出一篇,寫下自己和電腦的緣份。和怎樣學了各式技術。
電腦陪了自己 40 年有多,比起自己所有親人和家人都來得久。有時我會引用足球小將的典故講笑:電腦係我的朋友。

~ 最初的起頭:童年 ~

最近是幾歲時,在外婆家玩遊戲機開始。那些青蛙過河、太空侵略者、馬戲班等等經典遊戲機的年代。
之後就是任天堂,Zelda 和 Mario 的早期年代。建立了興趣,就會留意電子產品,甚麼有關電腦的都想看。那些年雜誌上也有售賣電腦的廣告。
接觸能編碼的電腦,大約是小二小三在別人家中玩過。小三那年樓上有個大哥哥,家中有部 Apple II。大軟盤、舊搖桿那種。多少人知道,以前舊搖桿的設計:搖桿在右邊,按鍵是在左邊的。

我整個小學都是玩遊戲機。而每年暑假都會上些興趣班。小五小六那年有機會去了學電腦。Dos + GWBasic,大約 4-6 課的課程;明愛中心,80286、綠螢幕的電腦、20/40 MB HDD、 5.25 /3.5 寸軟盤。電腦室總有種味道。在終端機上打甚麼都要等。而且電腦還有個 turbo 鍵,旁邊有個數字。

這階段新增掌握的電腦語言和技術
Dos, GWBasic, QBasic
普通電腦技術,打字/鍵盤操作

~ 起飛:少年 ~

因為學了 Dos + GWBasic,開始會再學其他。當年母親喜歡看工聯會課程,我在初中去了學 Pascal,和倉頡中文輸入法。VB、C/C++。家中買了部很貴的 486DX/2。然後我就越來越過著玩電腦的生活。

那些年有傳統記憶體 640K 要用到盡的限制。而很多人都是改 config.sys 來加強記憶體。初中那時就學了這些技巧。也學到一些怎樣扭設定、扭 exe、扭鍵盤輸入;或掃描記憶體、修改動態記憶;之類的技巧。這些現在都歸類入 pentesting 的技術,那些年一併當做軟技能甚麼都學。自學了 lotus 1-2-3(excel 前身)、dbase(資料庫前身)和 foxpro。中四五那些年,迷上了第一隻稱得上沉迷的遊戲:master of orion 和 xcom。第一次明白心流下時間可以這樣快。也因為 master of orion 而開始研究設計遊戲。

第一次用電腦工作,應該是中五的暑期工。本來只是做下辦公室文職。當時機構要大量發信件,就請我這類暑期工幫手。本來只是貼下郵票之類。但列印出問題,同事又不懂操作。我一個中學生便去開那個 dbase 2 的舊程序來看。幫他們修改下設計、列印之類。

到預科,幫中學出校刊、文學刊物之類。一人扛起了整個刊物的工作。大量的中文輸入、word 排版、插圖、列印,拿去印刷。

但精采的還是編程。中五中六那些年已是開始自己寫遊戲。開始對 VB、VC++ 有興趣。用 VB 寫遊戲是不難的;我寫過些 RPG 和賭博遊戲。但 VC++ 涉及 directX 和 activeX,com, com+ 之類旳深奧技術,就使我開始感到電腦世界的浩瀚。開始明白個世界很大。

還有就是 modem,和 TCP/IP。除了玩 BBS 和學一些更底層、更深奧的技能,例如 ASM 和反編譯之類。還有就是研究怎樣將電腦連起來組成網絡。這些都是預科的那些年。還有中五左右那些年開始流行互聯網,自己也開始接觸網頁;還包括 CGI, perl, html, vbscript, javascript, css, php, asp, jsp 之類。也開始接觸 java。

這階段新增掌握的電腦語言和技術
Pascal, C/C++, VB, directX, VC++, activeX, COM/COM+/DCOM, DOM, html, vbscript, jscript, javascript, css, php, asp, jsp, java, dbase 2/3/4, lotus, asm, delphi, action script / flash
TCP/IP, win 3.1, win95/9/98, unix, access / database, networking, client-server model, 倉頡/速成, word/ppt/excel/office, compiler architectures, compile/decompile/disassembler

~ 職涯選擇 ~

少年時一路走來,未中學畢業都已學了廿個電腦語言。到預科後,選人生方向時,都沒有先選電腦。自己那些年跟著預科課程,有兩張簿記證書。本來大專學習是先揀會計。但電腦也很有興趣。本來是想日間讀會計,晚間自修電腦。但忘了是誰不太贊成,建誐我不如只揀一樣。於是在轉科的最後一天都還是揀了電腦。

大專的三年,是很輕鬆的渡過。想像到,上課都是在學些中學階段自修學過的東西,只能說補充番個正統訓練而已。甚麼 C/C++、java、data structure and algoritm (俗稱 DSA) 之類,同學們覺得深奧難明的東西,我差不多都可以幫埋同學做埋功課。我的 Final year project 是個 C++ + OpenGL + 3D animation + networked 的 MMO 遊戲。拿了個 A,當年畢業展覽,放在門口當眼處。那些年是不覺得開心的,因為知道外面世界太大,太多強人了。

來源是因為讀書之餘,都參加些業界活動。microsoft 在 2000 來香港宣傳 dot net,都去看。甚麼 xml, soap, dtd 之類,是現在 restful 之類的 API architecture 的前身。還有遊戲業界認識了橙、edwin、steven 他們。他們有幾個和我一樣都是中學階段已掌握了大量深奧電腦技術,出來傾計都是討論 vi, ASM, linux command。想像下,那是 98/99 的九十年代。我也是這些階段接觸更多的 pentester、pwn-er 技術。那些年 pentester 是要看很多 header、網絡制式;因為連 packet、header 都改到。現在保安加強了,pentester 的訓練很少談改 packet 和 header。

大專那幾年都是一直做 part-time 和 freelance。例如幫公司拉線;寫 VBA 程序;寫 RS232 serial port 的低層代碼。

這些年開始越走越專業。對 java, J2EE, dot net, foxpro, cobol 那些工作上會用到的技術都收納。中學階段紛雜的學了的技術,到大專階段正式有個整理。這階段為方便找工作,也考取了 CCNA 和 SCJP (現在應是 OCP)。

這階段新增掌握的電腦語言和技術
foxpro, vfoxpro, cobol, xml, soap, dtd, openGL, j2EE, javabeans, EJB, asp.net, c#.net, codewarrior, embeded C, oracle, sqlserver, sqlite, vba, sql, shell script, PL/SQL, struts, spring, hibernate
solaris, red hat, linux, pentester, pwn, CCNA. a formal computer science training.

~ 初職 ~

開始進入工作。就開始建立專業技能。中學階段我大約掌握到廿個電腦語言左右。大專大約掌握到 40 個左右。初職就是較專心研究。為免行文過長,只寫技術。30 歲前,修完了 bachelor 和 1st master。因為學術研究,能接觸到些很古老的語言。

這階段也開始進入中層,接觸管理學,和項目管理。明白商業運作、辦公室運作、營運管理等等。所以碩士時選修了管理。也考取了 PMP, SCWCD。

這階段新增掌握的電腦語言和技術
j2me, mysql, lisp, prolog, fortran, postgresql, ada, jquery, symbian C++
data mining, machine learning / AI, PMP, SCWCD, macOS, VR/AR

~ 30 歲後 ~

30 歲後漸入高層。也在這時開始流行 iphone & android。於是就是大量 mobile app 和 game dev。手機和遊戲是個大量技術的世界。也是這階段開始接觸雲服務,例如 AWS。

這階段新增掌握的電腦語言和技術
obj-C, swift 2/3/4, android java, android kotlin, json, dart, cocos2D/X, titanium, ionic, nodejs, reactnative, typescript, reactjs, vuejs, angularjs, R, unity JS/C#/C++, ruby / on rails, python / django, lua, erlang, springboot
macOS, iOS, android, xcode, AWS (S3, SC2, RDS, elastic cache, codecommit, cloud formation, cloudwatch, cloudtrail..), git, svn, redis, memcached, mongodb, dynamoDB

~ 35 歲後到現在 ~

過了 30-35 手機、手遊、雲端那些大量收納技術的日子,之後技術方向越趨穩定。開始沒有多元的技術,化繁為簡,集中在幾個主要技術,夠用就夠。

有些主要的研究,例如 containers, devops / CI/CD, 自動化流程。之後也研究 pentester / pwn-er 技術,考取了 OSCE3。也是這階段陸續取得了三個主要雲端的專業架構師認證。還有 AI。這些都是大量收納新科技的契機。

雖然這篇看來很多。應該還有很多未能盡錄,因為有些各式的研究,例如 WAF, IDS/IPS 之類,很多微細的知識和技能,都很難一一細錄。

這階段新增掌握的電腦語言和技術
go, rust, k8s, docker, kafka, scratch, appium, selenium, cucumber, scala, powershell script, solidity, blueprint, protobuf, pytorch, numpy, pandas, tensorflow, keras, godot / gdscript, etc..
jenkins, GCP, Azure, blockchain, nosql, devops, pentester / pwn-er, OSCE3, AI, sonarqube, jmeter, postman, etc..

回顧,會覺得通常大量收納語言會有幾個契機:

  1. 入門階段,甚麼都學
  2. desktop app
  3. gamedev
  4. database
  5. mobile app
  6. client-server
  7. cache / memcached / redis
  8. clouds
  9. architectures / nosql / pub-sub
  10. API architecture / gateways
  11. IoT
  12. devops
  13. blockchain
  14. AI
  15. pentester

王.邪.聖.霸.詭.我.闇 (5/5):領袖形態 – 王.邪.聖.霸

在悠長的應用、實踐、觀察裡,對領袖模式 leadership styles 的研究,漸漸建立出王邪聖霸的形態。寫在這裡。

~ 四種領袖形態 ~

領袖一般都可歸類為這四種形態之一

王道.邪道聖道霸道
核心價值王道領袖是談理性、公平。重視法治精神。

邪道的分別只是手段上較王道為低。理念上是一樣。
聖道是談犧牲與無私。霸道通常是談成就偉業。
對待下屬
(最明顯的分別)
王道的下屬,是通常有個清晰可見的晉升階梯。最終是培育出合夥人。聖道的領袖,會為跟從者獻出自己。會燃燒自己去為群眾霸道通常是會蠶食下屬,將下屬漸吸收為自己的一部份。下屬會越來越弱。

但下屬也分好與壞;羊性與狼性。羊會被霸道領袖蠶食;但狼性卻會在安全範圍上生存到、分庭抗禮。而狼也會蠶食其他同輩的羊。

於是會演化到霸道領袖的下屬,都是狼群。羊都被壓抑。容易演變成劣幣驅逐良幣
領袖的自覺最具領袖的自覺。通常知道自己的道義責任。聖道的超脫性,使人不能確定他們的領袖自覺。他們可能只是做自己。沒有執著要成為領袖。霸道領袖是很渴望被尊重為領袖。但其實最缺乏領袖的自覺的一類。他們的自覺其實是普通人。最缺乏領袖的道義責任。
優點整體是建基在理性、客觀性、科學方法旳理念上
各式方法上的最高可持續性 sustainability。
恩威並用;名聲遠播。這群體向外不斷傳播出優良的價值觀。
很高的價值標準
具啟發性、具生命訊息
容易執行
缺點對領袖的素質要求高;要很成熟的領袖才能執行。人才要求高。要有套很成熟的獎善罰惡標準。sustainabiliy 可持續性不高;容易縱容壞人;容易變成空談夢想;容易縱容虛偽價值觀標準很低;劣幣驅逐良幣、sustainability 其實也不高;會形成黑洞形態、向內崩塌;容易演化成惡人自有惡人磨。而且這群體是在向外傳播壞價值觀。
價值觀標準高/中

王.邪.聖.霸.詭.我.闇 系列:
王.邪.聖.霸.詭.我.闇 (1/5):序言
王.邪.聖.霸.詭.我.闇 (2/5):基礎篇
王.邪.聖.霸.詭.我.闇 (3/5):中級篇
王.邪.聖.霸.詭.我.闇 (4/5):應用篇
王.邪.聖.霸.詭.我.闇 (5/5):領袖形態 – 王.邪.聖.霸

影評:Mission: Impossible – Fallout (MI-6)

~ 簡評 ~

ImDB 77%,Rotten Tomatos 98%。筆者評 90%。簡評:MI-4 後都是系列穩定作品。惟這集是連貫著上一集;需要先看 MI-5 才明白劇情。Julia 重新在劇情中出現;交代感人情節。

~ 任務 ~

第一任務第二任務第三任務第四任務第五任務
接任務部份Ethan 處於 Belfast 從惡夢中驚醒。有人敲門,交給他一本書。書是錄影帶,交代任務。總部中發佈任務Alanna 基地中交代基地中自發。追縱 Solomon 找到鈈元素。
任務地點BerlinBerlinParisParisKashmir
任務阻止 John Lark 與 Apostles 取得核武欺騙 Nils Delbruuk 取得核武和 John Lark 資料潛入 nightclub 購買鈈元素從押解中救出 Solomon Lane阻止核彈。拆彈。
方法Ethan 想藉購買取得鈈元素。捉到 Nils,造假新聞,使他自願供出密碼解鎖手機資料Ethan 裝扮成 John Lark 接洽軍火商 Alanna Mitsopolis 以購買鈈元素攔截並救出目標Ethan 要取得遙控器;而 Luther 和 Benji 在兩處解除炸彈。
團隊Ethan Hunt:前鋒
Benji Dunn:前鋒
Luther Stickell:駭客
Ethan Hunt:前鋒
Luther Stickell:前鋒
Benji Dunn:新聞報導員
Ethan Hunt:前鋒
August Walker:前鋒
Ilsa Faust:介入
Ethan Hunt:前鋒
August Walker:前鋒
Benji Dunn:潛水取得 Solomon
Luther Stickell:協助
Ilsa Faust:介入
Ethan Hunt:前鋒
Benji Dunn:隊一
Ilsa Faust:隊一
Luther Stickell:隊二
Julia Meade:隊二
意外Luther 被 Apostles 捉了。Ethan 為救 Luther 時鈈元素被搶去。Ilsa 殺死了 John Lark。途中被女警發現,要改變計劃背棄 Alanna。Ilsa 介入攻擊 Solomon。
結果失敗。鈈被搶去。成功,取得資料Ethan 取得一個鈈;但需要執行下一任務以取得其他兩個成功。取得 Solomon成功拆彈。
電影時間點1:5010:4517:1541:301:39:10

~ 劇情 ~

  1. 一開始 Ethan 從惡夢中驚醒。取得任務後要購買鈈元素。為救 Luther 而失敗。
  2. 第二任務。欺騙 Nils 取得資料一幕。
  3. 第三任務。Ethan 裝扮 John Lark 接洽 Alanna Mitsopolis 購買鈈元素。Alanna 是中間人,賣家其實是 Apostle。Apostle 不要錢,要救出 Solomon Lane 以換取鈈元素。
  4. 第四任務。Ethan 救出 Solomon。和 Ilsa 衝突。
  5. 之後藉 Benji 裝扮 Solomon,而得知 August Walker 才是 John Lark。IMF 主管 Hunley 向 CIA 主管 Sloane 通知;CIA 特工介入要將整班人送返總部。途中叛變。Hunley 被刺死;August 和 Solomon 都逃走了。
  6. 第五任務。團隊追縱 Solomon 去到 Kashmir,得知核彈已部署。團隊去拆彈。捉回 Solomon;Ethan 擊敗並殺死 August。完。

~ 劇照 ~

影評:Mission: Impossible – Rogue Nation (MI-5)

~ 簡評 ~

ImDB 74%,Rotten Tomatos 94%。筆者評 90%。簡評:系列自 MI-3 後奠定了主要形態;而在 MI-4 後漸見掌握到系列特色、穩定下來而漸見佳績。MI-4 之後都是很可靠的 MI 系列電影。這集 Luther 也重新有重要戲份。而值得一提這集是第一次在接收任務的場景有突發事故,突顯 Syndicate 的能力。而且也在系列中加入了特工女角 Ilsa。

~ 任務 ~

故事前任務被捉和逃離第一任務:調查第二任務:取賬本第三任務:解碼第三任務的交收
接任務部份Ethan 進入一間古式唱片零售店。女店員接洽,進入聽播室聽取任務,發現已被 syndicate 駭入。Ethan 寄歌劇票給 Benji。Benji 來到維也納,途人塞個包裹給他,內裡有通訊眼鏡。Ethan 撤離後,回到船基地。看 Ilsa 留下的唇膏,去到 Morocco。見面取得任務Ilsa 被監察看到。團隊去見她。Benji 在過程中被捉。Solomon 在電話中授予任務Ethan 聯絡 Solomon 交收
任務地點Minsk, BelarusLondonVienna, AustriaCasablanca, MoroccoLondonLondon
任務攔阻毒氣貨物升空在聽播室被氣體迷暈後,被帶到審刑室逼供找到駭入倫敦店的男人。查出 Syndicate 的資訊。進入發電廠取得數碼賬本。從總理取得瞳孔掃描、指模、聲音去解鎖紅盒子交收已解鎖的紅盒子資料
方法登上正起飛的運輸機,然後拉開貨物的降傘逃離潛入,截取。結果是攔截了 syndicate 刺殺 Austria 總理的事件。需要潛水進入水庫更換登入資料,以便 Benji 可以通過保安Ethan 裝扮成 MI6 總管 Atlee,捉到總理。並使總理與 Atlee 供出 Syndicate 確實存在。Ethan 破壞了紅盒子,記住了所有資料。威脅 Solomon,救出了 Benji。殺了 Solomon 的部下,引出 Solomon。
團隊Ethan Hunt:前鋒
Benji Dunn:駭客
Luther Stickell:駭客協助
Ethan Hunt:前鋒
Ilsa Faust:臥底
Ethan Hunt:前鋒
Benji Dunn:駭客
Ethan Hunt:前鋒,潛水
Benji Dunn:前峰,取資料
Ilsa Faust:駭客
Ethan Hunt:前鋒
William Brandt:前峰
Luther Stickell:駭客
Ethan Hunt:前鋒
意外Benji 搞了很久開不到門Ethan 在水庫內被機器撞倒,混亂了兩張 profile 卡。然後保安系統重啟了,使 Ilsa 失去電腦控制。Ethan 開不到逃離門,結果 Ilsa 潛進去救他。
結果成功,順利撤離順利逃離Ethan 與 Ilsa 一起撤離。Austria 被汽車炸彈殺死。成功,取得資料。但是Ilsa 搶了資料逃離成功,解鎖紅盒子成功救出了 Benji。活捉了 Solomon
電影時間點00:00 一開始6:0025:2045:001:34:451:47:20

~ 劇情 ~

  1. 一開場是攔截升空的運輸機。
  2. 然後是倫敦基地被駭的一幕。Solomon 露面。Ethan 被捉。
  3. Ethan 逃離時認識 Ilsa。劇情交代了 IMF 和 CIA 的矛盾。Benji 收到歌劇票,協助 Ethan。
  4. 維也納的第一任務。Ethan 取得了唇膏中的資料。聯絡上 Ilsa。
  5. 摩洛哥的第二任務。Ethan 和 Ilsa 取得了紅盒子。Ilsa 逃走。
  6. Ilsa 去交給 Atlee;被 Atlee 欺騙,因為 Atlee 不想暴露 Syndicate 的存在。然後 Ilsa 回去見 Solomon 發現碟是空的。
  7. Ilsa 暴露在監察下,被 Ethan 團隊找到。Benji 被捉成人質;Solomon 威脅下用解鎖了的紅盒子交換。
  8. 倫敦的第三任務。
  9. 解鎖後去交收。救出了 Benji。最後活捉 Solomon。

~ 劇照 ~

影評:Mission: Impossible – Ghost Protocol (MI-4)

~ 簡評 ~

ImDB 74%,Rotten Tomatos 93%。筆者評 90%。簡評:為系列自第一集後最好的一部。無乜無謂的戀愛線;特技充足;畫面拍攝得好看;劇情具深度;將很普通的核戰劇情拍得好看。充份利用環境條件,例如高樓大廈和沙塵暴。惟劇情有點犯駁誇張。

~ 任務 ~

故事前任務第一任務第二任務第三任務
接任務部份Ethan 從電話亭中觀看影片。片段最後的自動銷毀失靈,Ethan 上前敲了一下觸發Ethan 從醫院逃走後,上了 IMF 局長的車。由局長口授,並取得檔案儲存Ethan 藉 Bogdan 找軍火商 Fog 取得衛星情報。然後在飛往印度的飛機上講述任務
任務地點Budapest克里姆林宮 Gremlin, MoscowDubaiMumbai, India
任務攔截取得文件。文件是核彈發射密碼找出 Cobalt 身份的資料截取密碼。並捉到 Marius Wistrom 和 MoreauEthan 想從衛星攔截發射
方法Jane 找出誰人㩗帶文件;Hanaway 負責取得,並撤離裝扮軍官、潛入Jane 裝扮成 Moreau;Ethan, Brandt 裝扮成 Wistrom, Lisenker。做 MITM 攔截。Brandt 用磁力衣跳進伺服器。然後插入傳輸器。Jane 色誘取得密碼。
團隊Jane Carter:前鋒
Trevor Hanaway:第二前鋒
Benji Dunn:駭客
Ethan Hunt:前鋒
Jane Carter:前鋒
Benji Dunn:駭客
Ethan Hunt:裝扮成 Wistrom
William Brandt:裝扮成 Lisenker
Jane Carter:裝扮成 Moreau
Benji Dunn:駭客
Ethan Hunt:前鋒
William Brandt:進入伺服器房。
Jane Carter:臥底
Benji Dunn:駭客
意外Hanaway 被殺手 Sabine Moreau 殺死IMF 通訊溝道被入侵;文件已被銷毀;Cobalt 炸了宮殿;嫁禍在 IMF 身上爬牆手套無電。砌玻璃途中火花震開了手套。Moreau 早到了。Ethan 用不到門回去,從外牆跳下,繩帶不夠長,結果用擺盪跳進去,撞到牆,由隊拉住。需要重置密碼印刷;引致團隊爭執。面具印壞了。Wistrom 帶了 Leonid Lisenker 來檢驗密碼。Brandt 被 Moreau 看出眼中藏了晶片。Jane 打鬥中殺了 Moreau。杜拜警方在 Ethan 追 Wistrom 途中截住 Ethan。沙塵暴。Hendricks 從衛星下截病毒,封鎖了伺服器;致使攔截不到衛星。風扇開了,Brandt 危險地撤離。核彈發射了。Wistrom 毀壞了伺服器和電力。
結果失敗。Hanaway 被殺;文件遺失。失敗。取不到文件。被嫁禍。被捉拿。失敗。Wistrom(由 Kurt Hendricks 裝扮)取得了核彈密碼。逃去無踪。成功。最後 1.13 秒截停報廢了彈頭。
電影時間點00:00 一開始17:4538:20, 45:301:33:00

~ 劇情 ~

  1. 一開場是 Hanaway 失手被殺;密碼文件被 Moreau 奪去。
  2. 特工從莫斯科監獄救出 Ethan;帶同 Bogdan 逃走。
  3. Ethan 接到第一任務。失敗;在醫院醒來,被警察問話。
  4. Ethan 逃走後上了 IMF 局長的車。 得知 Cobalt 是 Kurt Hendricks。得到第二任務的資料。局長被殺。Ethan, Brandt 找到綠色車卡的祕密基地取得情報和物資。
  5. 在杜拜執行第二任務。沙塵暴後 Hendricks 逃去無踪。Ethan 藉 Bogdan 找到軍火商 Fog 取得衛星情報。飛去 Mumbai 途中解釋第三任務。
  6. 執行第三任務。Hendricks 封鎖了衛星,使團隊攔截不到。結果 Ethan 與 Hendricks 打鬥,取得發射器而最後 1.13 秒報廢彈頭。
  7. 劇末 Luther 出現。Ethan 向團隊解釋下一任務。並揭露妻子 Julia 仍活著。

~ 劇照 ~

影評:MI-3

~ 簡評 ~

ImDB 69%,Rotten Tomatos 73%。筆者評 75%。簡評:這集加入了妻子 Julia 的角色。也開始奠定了 MI 系列以任務貫穿的形態。MI 系列開始較有自己的定位和風格。值得一讚的是這集對不同角色的運用都很好;也大概是最多女角的一集,導演也很能善用女角。而且也開始了有固定的團隊隊友:Julia Meade(妻子,Michelle Monaghan 飾),Luther Stickell(固定駭客,Ving Rhames 飾)、Benji Dunn(情報,Simon Pegg 飾)。

~ 任務 ~


第一任務第二任務第三任務第三任務的交收
接任務部份Ethan 在派對中途接到電話;到便利店接洽接頭人;得到即影相機;片段在即影相片的鏡頭播放Benji Dunn 在兩部電腦的爛硬碟中,回收到廿多封電郵。而得知 Owen 在兩天後去梵蒂岡,有關價值 850M USD 的兔腳Ethan 被 IMF 拘留。IMF Director of Operations John Musgrave 用唇語告知他去上海鳳山大廈 1406 室Ethan 交收兔腳途中被捉。妻子也被脇持。
任務地點Berlin 柏林梵蒂岡上海,衡山路大廈 56 樓上海
任務找到並救出 IMF 特工 Lindsey Farris;在監視軍火商 Owen Davian 任務中失踪 11 小時。並取得兩部電腦的資料。擄走 Owen偷出兔腳逃走並救出妻子。取回兔腳。
方法潛入、救出、撤離潛入。Zhen 負責弄濕 Owen。然後在洗手間內團隊將 Ethan 擄走。Ethan 裝扮成 Owen 然後跟 Zhen 離開。從旁邊大廈盪過去。潛入、偷走、撤離。潛入部份沒有多少交代。打鬥、槍戰
團隊Ethan Hunt:前鋒
Declan Gormley:直升機駕駛
Zhen Lei:第二前鋒 + 車駕駛
Luther Stickell:駭客
Ethan Hunt:前鋒
Declan Gormley:第三前鋒
Zhen Lei:第二前鋒
Luther Stickell:駭客
Ethan Hunt:前鋒
Declan Gormley:輔助攻擊 + 駕駛
Zhen Lei:輔助攻擊
Luther Stickell:駭客
Ethan Hunt:前鋒
Julia Meade:妻子
Benji Dunn:電腦支援
意外Lindsey 腦內有微型炸彈中途保鏢進入洗手間電話無訊號
結果失敗。Lindsey 救出後逃走途中死亡。成功。據走 Owen。成功。偷走兔腳,並聯絡到 Owen成功。救出妻子、取回兔腳。安全撤離
電影時間點7:2031:001:13:301:33:30

~ 劇情 ~

  1. 一開場是 Ethan 與妻 Julia 被 Owen 脇持的段落。
  2. 回溯到訂婚派對。途中 Ethan 接到任務,要救出 Lindsey。
  3. 執行第一任務。失敗。喪禮。回收資料。決定出發第二任務。婚禮。
  4. 執行第二任務。成功。運送途中恢復到 Lindsey 的影片,指 IMF director Theodore Brassel 可能是內奸。運送途中 Owen 被劫走。
  5. Ethan 知道妻子有危險。去救妻子。失敗。回到 IMF 總部。Ethan 被捉。Musgrave 告知他去上海。
  6. 執行第三任務。取得兔腳。交收兔腳時被捉。得悉 Musgrave 才是內奸。
  7. 逃出後去救出妻子。也取回兔腳。安全撤離。

~ 劇照 ~

影評:MI-2

~ 簡評 ~

ImDB 61%,Rotten Tomatos 57%。筆者評 60%,為系列中最差的一部。扣分位:(1) 很多犯駁情節 (2) 故意誇張化很多動作鏡頭 (3) 而且主角光環可以自動步槍前直走避子彈 (4) 主要劇情太簡單,其實只有一個任務,卻鋪張來講故事 (5) 結局有拖戲情況,不好看 (6) 系列中只有這套刻意加入無謂的性感和床戲 (7) 無團隊感;與其與是團隊,不如說是男女主角情侶演出。例如,寫這篇文時,我發覺連找一幅團隊齊人的相片都很難;差不多整個團隊沒有同時出現在一個鏡頭中。

簡評:MI 系列一直有個主要問題。因為 MI 和 007 都是間諜動作片,若 MI 沒有做到自己的特色,便很容易與 007 的邊界模糊。MI-2 是整個系列中邊界最模糊的一部:團隊感不足、無謂性感、曖昧女角、無謂打鬥、主角光環。卻失去了團隊智取的效果。

~ 任務 ~

先講任務

主要任務的第一部份主要任務的第二部份主要任務的第三部份主要任務的第四部份主要任務的第五部份
接任務部份Ethan 爬到山頂,由直升機射火箭給他,裝載智能眼鏡在 Seville 與 IMF director Swanbeck 滙合。面授。馬場中 IMF 團隊應變,看到 Sean 持有記憶卡。於是通訊中讓 Nyah 執行任務。Ethan 捉了 McCloy,取得一切所需資訊。並計劃潛入 Biocyte 總部因 Nyah 被捉,要救援。另外需要消滅病毒或取回,也要取得疫苗。
任務地點Seville, SpainSydneySydney 馬場Biocyte 總部一個任意島嶼
任務為取回失物 Chimera,招募隊員 Nyah Nordoff Hall取回失物 Chimera。第二部份是潛入臥底。
第三部份是先找到 Chimera 是甚麼。消滅 Chimera救援 Nyah,取回或消滅病毒,取得疫苗
方法搭上 Nyah派 Nyah 潛入做臥底,在壞蛋 Sean Ambrose 做情人Biocyte’s CEO, John McCloy 與 Sean Ambrose 見面。Ethan 希望 Nyah 替他從 Sean 左衫袋中取得記憶卡潛入並消滅潛入、打鬥
團隊Ethan HuntEthan Hunt:前線一
Nyah:臥底
Luther Stickell:駭客
Billy Baird:前線二
Ethan Hunt:前線一
Nyah:臥底
Luther Stickell:駭客
Billy Baird:前線二
Ethan Hunt:前線一
Luther Stickell:駭客
Billy Baird:前線二,直升機駕駛
Ethan Hunt:前線一
Luther Stickell:駭客
Billy Baird:前線二,直升機駕駛
意外Nyah 將記憶卡放回衫袋時,放了進右邊,而且被 Sean 發覺Nyah 被揭發並被脇持到總部。槍戰。Nyah 將病毒打進自己體內。
結果成功。招募隊員。成功。順利潛入。成功。取得資訊。成功 & 失敗。成功消滅了病毒,除了最後一份注射了進 Nyah 體內。成功 & 失敗。成功救回 Nyah,消滅病毒。但 Swanbeck 的評語是應該是要取回。
電影時間點8:3024:0046:3056:101:26:50

~ 劇情 ~

  1. 開場是科學家 Vladimir Nekhorvich 取走病毒。最後在洛基山脈墜機。
  2. Ethan 爬山畫面。收到任務。招募 Nyah。
  3. 和 IMF Director Swanbeck 見面。知道任務後,派 Nyah 潛入做臥底。
  4. 馬場場景。取得記憶卡。然後脇持 McCloy,取得主要資訊。但同時間 Nyah 臥底身份失手爆光。
  5. 團隊潛入 Biocyte 總部,消滅病毒。Sean 帶 Nyah 來阻止。槍戰。最後一枝打進了 Nyah 體內。Ethan 跳傘逃走。
  6. McCloy 與 Sean 交易,Ethan 潛入阻止。最後救到 Nyah,消烕病毒。

~ 劇照 ~

影評:Mission Impossible – MI-1 (1996)

之前寫過 007 系列;一直都想寫 MI 系列。兩者可比對一下。MI 就是 Mission Impossible 不可能的任務系列。來到 2025 MI 系列是第八集。各集主要來說都是獨立的故事;但熟悉系列的觀察也會找到加分的彩蛋連結。性質是特務電影,大量科技、潛入、動作、槍戰、追車、打鬥鏡頭。MI-1 是 1996,MI-8 是 2025;八集都是由 Tom Cruise 主演,2025 時他是 62 歲。

MI 系列的電影是種有套路得來又好看的電影。這篇文章的定位是想做分析和拆解電影技術的角度。所以會重點分析一下劇情和電影資料。劇透慎入。

MI 的電影套路,每集都是主要由幾個主線任務組成。然後當中有些意外發生,造成主角團隊的應變。然後有些過場牽帶,然後進入下一個任務。電影既是叫作《不可能的任務》,就由任務作為主軸講起。

~ 簡評 ~

ImDB 72%,Rotten Tomatos 65%。筆者評 75%。簡評:劇情基本充足,可靠,高潮迭起。而且有明顯團隊感。

~ 不可能的任務 ~

第一集的任務

開場場景任務第一任務第二任務第二任務的交收
接任務部份Jim Phelps,飛機上,由空姐交給他影帶,用飛機電影設備 8 吋螢幕播放Ethan 與 軍火諜報商 Max 的協議Ethan 需要將資料交給 Max,火車上見面
任務地點KIEV 基輔Prague 布拉格Langley, VirginiaParis Train 往巴黎的火車上
任務取得明斯克接頭人的名字防止東歐特工名單流出;拍攝盜竊證據,找出買家,並將偷竊者與買家拘捕從 CIA 中央資料庫取得所有特工名單Ethan 要阻止名單流出,但要找出 Job 是誰
方法Ethan 裝扮成對方的同伴,騙取情報。Ethan 潛入安裝鏡頭拍攝,然後跟隨偷竊者找到買家拘捕Ethan 潛入中央資料庫取得Max 那邊,Ethan 假意交出名單;然後 Luther 用電腦攔截;交給 Eugene Kittridge IMF Director 將之逮捕。

然後裝扮成 Jim 在行李車卡找出內鬼。
團隊Jack Harmon:操作電腦
Claire Phelps:扮演同伴
Ethan Hunt:扮演同伴
Sarah Davies:臥底
Jack Harmon:駭客
Hannah Joan Williams:監視目標
Claire Phelps:駕駛
Ethan Hunt:前鋒
Ethan Hunt:前鋒
Claire Phelps:臥底
Luther Stickell:駭客
Franz Krieger:前線與機師
Ethan Hunt:前鋒
Luther Stickell:駭客

Jim, Claire 和 Franz 都是敵對方
意外用了太多時間全隊被人伏擊,Ethan 和 Claire 以外全隊全滅。老鼠,致使 Ethan 下墮,靠 Franz 拉住。之後跌下了刀,以致觸動警報。服務員將手機歸還 Luther 使攔截失敗。但因為進入隧道而仍有效攔截。
結果成功失敗。隊員除兩人外死亡。名單被流出;捉不到人。成功。取得資料並順利撤離成功。Jim, Claire, Franz 皆身亡。攔截流出並捉到 Max。
電影時間點00:00 一開場03:45 電影標題後隨即進入50:00 中途1:28:10 末段

~ 劇情 ~

  1. 開場任務不久,就有第一任務。
  2. 第一任務失敗。Ethan 致電總部向 IMF director Eugene Kittridge 滙報事件;被在綠區餐廳見面;本來得到護照準備撤離 Prague。結果留意到第一任務的真正目的是找出內鬼;而名單和偷盜者都是假的。也得悉了 Max 與 Job 3-14 的情報。結果 Ethan 逃離。
  3. Ethan 退回集合點,遇到 Claire。然後從 Job 3:14 找到聯絡 Max 的方法。聯絡上了 Max。
  4. Ethan 從 Max 證實資料是假,從而取得信任。也取得了第二任務。
  5. 執行後,準備交收。Ethan 父母被 CIA 用藉口拘捕了。Ethan 去打電話後,遇到 Jim,驚覺 Jim 才是內奸 Job。
  6. 然後準備交收。Ethan 事前通知了 Eugene 去拘捕 Max。也找出了 Jim;並捕捉 Jim 過程中 Jim, Claire, Franz 身亡。

資安 pwn 技術研究所:Heap pwn 篇 (4) – 技術方法

談到方法,例如傳統 stack pwn 會有 buffer overflow、format string、ROP 之類的方法和技術。而 heap pwn 則和 stack pwn 有著一系列很不同的方法。這篇做個列表,方便檢索。各方法的詳細,在此不贅。可查找 reference 中的連結參考。

~ 基本功 ~

名稱概念目的參考
Double Free1. Free 了兩次同一個 pointer
2. 然後 alloc 時,這個 pointer 就會被 alloc 兩次。
3. free 其中一個,剩下的便可以有個 editable freed chunk。
Editable Freed Chunk
Heap Consolidation1. 修改 chunk metadata,使它以為是一個 freed chunk。
2. 調用 free(..),使 consolidation 發生
3. 再 alloc,便會多一個 pointer 指向同一個 chunk。
4. 同 double free:都是有個 editable freed chunk。
Editable Freed Chunk
Use After Free純粹將一個 free(..) 的 pointer 寫入資料Editable Freed Chunk
Unlink將兩個 freed chunk 的 FD BK 改寫,達到 arbitrary write 的效果Arbitrary Alloc
Arbitrary Write
Off By One字串寫入時溢出 1 byte。導致在 heap 上可以偽造下一節的 prev_inuse,使到偽造出 freed 效果。然後導致prev_size 可用;但也可以偽造 prev_size。prev_inuse overwrite (faked free)
prev_size overwrite
https://ctf-wiki.org/pwn/linux/user-mode/heap/ptmalloc2/off-by-one/
Heap Grooming /
also aka “Heap Feng Shui"
原意是指出 alloc / free 都是可預測的有效控制 alloc / free 來自 BlackHat 2007 發佈
https://www.blackhat.com/presentations/bh-europe-07/Sotirov/Presentation/bh-eu-07-sotirov-apr19.pdf
Fake Chunk
偽造節
在 stack 或用其他變數偽造成 chunk 格式。Arbitrary Alloc
Arbitrary Write
Editable Freed Chunk

~ 元素技 ~

名稱概念目的
Fast bin Attack利用 fastbin 的 single linked-list 原理。改寫 FD 指向目的地址。然後 fastbin alloc 就會派出了目的地址。Arbitrary Alloc
Unsorted bin Attack利用 unsortedbin 的 doubly linked-list 原理。改寫 FD BK。然後 unsorted bin alloc 就會派出目的地址。Arbitrary Alloc
Large bin Attack類似 fastbin 和 unsortedbin attacks。有不同的是,largebin 會按大小排列擺放。所以當有個新的 freed chunk 排入時,就會有個 arbitrary write 動作。Arbitrary Alloc
Arbitrary Write
Tcache Attack和 fastbin attack 類似。Arbitrary Alloc

~ 組合技 ~

名稱概念目的參考
House of Spirit用 Fake Chunk 偽造節,再調用 free(..)。再 alloc 就會派出這個偽造節。Arbitrary Alloc
House of Lore類似 House of Spirit。不過是連結到 small bin / large bin 的 FD BK pointer 上。同樣 alloc 就會派出去。Arbitrary Alloc
House of Force改寫 heap wilderness value;再 alloc 一個很大的 block 作對位作用。然後下一個 alloc 就會派出 arbitrary alloc,例如 Stack Alloc 或 BSS Alloc。Arbitrary Alloc
House of Einherjar類似 House of Spirit 和 House of Lore。不同的是利用向後合併。用一個 controlled chunk 控制節地址上接駁了目的地址。然後改寫了 metadata,致使 free(..) 的時候觸發向後合併 consolidation。然後 alloc.就會派出目的地址。Arbitrary Alloc
House of Rabbit和 House of Lore 很像,不過是用 fastbin FD pointer。fastbin 是 single linked-list。
改寫 FD 為目的地址後,alloc 一個大於 0x10000 (64K) 的節,觸發 fastbin consolidation;fastbin 就會進入 unsorted bin。然後是 unsorted bin attack。
Arbitrary Allochttps://www.kn0sky.com/?p=d22edd6b-7d44-4bd9-baea-bdecc73a8da2
House of Orange主要原理是在沒有 free(..) 的情況下,用 top chunk release 來模擬 free(..)。方法是當 top chunk 不足以 alloc,就會調用 brk,舊的 trunk 就會被 free 到 unsorted bin。然後是 unsorted bin attack。Arbitrary Allochttps://ctf-wiki.org/pwn/linux/user-mode/heap/ptmalloc2/house-of-orange/
House of Roman是個很複雜的組合技。
用 Fake Chunk 偽造節 free 了進入 unsorted bin。然後修改 FD 和 malloc,使 malloc_hook 寫為 main_arena+88.
再將 malloc_hook 最低三字節改寫 one_gadget。調用 free(..) 或 malloc(..) 兩次,就會依次取得 malloc_printerr 和 get_shell。
Shellhttps://www.kn0sky.com/?p=761e0f77-6a76-44a9-a0d6-52d647d9e249

https://ctf-wiki.org/pwn/linux/user-mode/heap/ptmalloc2/house-of-roman/
House of Pig是個很複雜的組合技。用 largebin attack, tcache stashing unlink attack,可以得到 getshell。有不少限制,而且不易用;通常可以用較簡單的方式取代。Shellhttps://www.anquanke.com/post/id/242640#h2-3
House of Storm是很複雜的組合技。用 unsortedbin attack,將 BK 指向目的地址 addr。然後 largebin attack 將 BK 指向 addr+0x10;BK_nextsize 指向 addr-0x20+3.
然後 alloc 0x50 就會取得目的地址。
Arbitrary Allochttps://www.kn0sky.com/?p=195d505e-1310-4e6d-b9cd-20eadd7200b9
其實還有
House of Kiwi
House of Emma
House of Apple
House of Banana
House of Water
House of Tangerine
House of Botcake
House of Mind
House of gods
House of Prime
House of Chaos
普遍技術研究較少提及。未能盡錄。
這 House of xx 傳統,改名最初來自這個帖

https://github.com/Malformation/Notes/blob/master/MallocMaleficarum.txt

概念啟發來自這本書

https://en.wikipedia.org/wiki/Malleus_Maleficarum

~ Reference ~

https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/house_of_rabbit/
https://ctf-wiki.org/pwn/linux/user-mode/heap/ptmalloc2/house-of-rabbit/
https://guyinatuxedo.github.io/43-house_of_orange/house_orange_exp/index.html

《資安 pwn 不正常技術研究所》系列:

資安 pwn 技術研究所:Heap pwn 篇 (3) – Free 與 alloc 流程

~ 檢查 ~

Free 之前,會用一系列的 check 檢查:

  1. chunk 是對齊 2*SIZE_SZ 的整數倍
    • 同前文:在 64-bit 環境下,SIZE_SZ=8;32-bit 環境下 SIZE_SZ=4。
  2. free 是可行的。例如不是太小、太大、不對齊,或越過了程式的邊界的地址空間。
  3. chunk 是在 arena 的址址空間內。
  4. chunk 不是已標記成 freed。這是檢查下一個 chunk 的 PREV_INUSE bit。

~ Free 演算法 ~

Free 的演算法如下所示:

  1. 如果 pointer 為 null,則不用運行 free;
  2. 將 chunk 變成 free 狀態(但未必會將下一個 chunk 的 PREV_ISUSE 設為 0,視乎哪一個 bin)
  3. 做上面的 sanity check 檢查;
  4. 若可以放進 tcache bin,就放進去;除非滿了七個,就繼續往下面;
  5. 如果 IS_MAPPED=1,那麼是要 munmaped;
  6. 否則就要取得 thread heap lock,然後做下面步驟;
  7. 若可以放進 fast bin,就放進去;
  8. 若 chunk 大於 64KB,就將 fastbin 都放進 unsorted bin;
  9. 若前一個 chunk 是 freed,那麼就會向前合併。若下一個 chunk 是 freed,那麼就會向後合併;然後放進 unsorted bin;
  10. 若是處於邊界,就會做 trimming,而不會進入 bin;
  11. 若以上皆不是,就會標籤為 freed,然後放進 unsorted bin。
  12. 完。

~ malloc 演算法 ~

malloc 演算法如下所示:

  1. 若 tcache bin 有適用的 chunk,就用;
  2. 若 size 是大到需要用 mmap,就用;
  3. 否則就要取得 thread heap lock,然後做下面步驟;
  4. 檢查 fastbin 和 small bin
    • 若 fastbin 有,就用;
    • 否則,若 small bin 有,就用;
    • 有可能將 chunk 升級進 tcache bin
  5. 檢查 unsorted bin
    • 將 fast bin 的都解放進 unsorted bin
    • 若 unsorted bin 有,就用,而且停下;否則,就將檢查到的 unsorted bin chunk 放進 small 或 large bin;
    • 有可能將 unsorted bin chunk 升級進 tcache bin
  6. 檢查 large bin
    • 若 size 是符合 large bin,就檢查 large bin;同樣,有,就用;
  7. 造出新 chunk
    • 若以上都不符合,就嘗試從 top of the heap 取得;
    • 若 top of the heap 不夠大,就運行 sbrk 以增大;
    • 若 top of the heap 不能增大(即 sbrk 失敗),就運行 mmap 以取得 chunk;
  8. 若以上都不合,則回傳 NULL

《資安 pwn 不正常技術研究所》系列: