pretty code

2022年5月26日 星期四

消失的記憶 - NTFS

一直到剛剛終於有時間拿出《File System Forensic Analysis》一書來複習一下消失的記憶!

NTFS 雖然是微軟最常使用的檔案系統之一,但因為並沒有公開的規格書,故網路上的資料都有一些不齊全之處。

記得我當初回答同事問題時,也是在網路上找了許久,最後才找到這本書有比較詳盡的描述。

但我印象當初看時,好像也是有一半的地方是看不懂的?

趁著這次重看的機會,看是否能把它搞懂?

---------------------------------------------------------------------

Q1:
為何有些 MFT Entry(FILE RECORD) 資料會有 $BITMAP(0xB0) ,有些就又沒有,他出現的時機是什麼?因為實際的資料不是在 $DATA(0x80) 裡面就可以取到了?

Ans:


Q2:
Metadata 中的 $MFT 大約會拿硬碟的 12.5, 25, 37.5, 50% 的空間來放 $MFT,有的 $MFT 會拿連繼的空間,有的取 $MFT 就要自己去 $DATA 的 DATA RUN 裡面取。

MFT Zone Reservation IS NOT STORED ON DISK
MFT Zone (reserved space for MFT)
1 = 12.5%
2 = 25.0%
3 = 37.5%
4 = 50.0%
Where is this stored on disk?

Ans:
我的猜測如下,對應到 MFT Zone 的位置的 $BITMAP 會被設為 1,表示被使用中,故只有微軟作業系統知道放在哪裡,我想那個表示被使用中的 Entry 如果跳到該 Entry 看,應該是空的。

如果今天 MFT Entry 都用完了,是不是表示就是硬碟滿了?之前有實驗建一個 10MB 的硬碟,用小檔把 MFT Entry 全用滿,後來就沒法再建檔案/目錄了,不過如果 1K空間(MFT Entry)還夠,還是可以建 ADS。

Ans:我覺得是,但我想嘗試去填滿它(Active Disk Editor),寫入失敗。順帶一提,我寫的是 $BITMAP 這個 meta data 指到的 Data Run 位置,但我不確定這樣對嗎?還是應該也改 $MFT meta data 的 $BITMAP attribute(我這兩邊讀到的位置不一樣,不確定是不是我算錯了,差了 1K)?

補充:我搞混了,$MFT 的 $BITMAP attribute 是針對 MFT Entry 的,$BITMAP 的 Data Run 是針對 Cluster 的,那天不知為何一時想混了。


另一個硬碟滿的條件,那就是只用一個檔案,讓他內容超大,ex: 10MB HD 為例,檔案大於 7~8MB ,那 $BITMAP 裡面的Cluster空間就都會被用掉。

上述是否正確,或是還有什麼情況下,NTFS 會爆掉?

Ans:我也只能想到這兩種,但我直覺會先讓 MFT Entry 爆掉,之後一定無法新增檔案了。

Q 3:
目錄都會有 $INDEX_ROOT(0x90),當目錄下檔案多時,就會有 $INDEX_ALLOCATION (0xA0),0x90是 Resident 而 0xA0 是 Non-Resident 的,如果是 0xA0 INDX 申請出來的空間,不會在 $MFT 裡面,所以今天如果只取到 $MFT 想處理目錄,就沒法靠 0x90/0xA0 做 B+Tree 的列舉,就只能自己靠 $MFT 裡面的 0x30 裡面的 Parent directory file record number 去做處理了對嗎?

Ans:
我只知道從 $. parse 的方法,我不知道可以從 $MFT 找到根目錄的方法,而且 0x30 我以為是指 $FILE_NAME attribute?我不確定這邊的 Parent directory file record number 是指什麼?

《文豪們的私房酒單》在 Kobo Elipsa 的閱讀結果

網路上有人說這本書在 Kobo 看起來不正常,我原本以為他是某家買的,但在我打字的同時想想又不太對,會問這個問題的人應該不懂 EPUB 格式,理論上是沒有能力把這本書拿出來放到別的機器上才對?

我前幾天看到這篇文章的第一直覺應該是 meta data 或 span 區塊,至少我知道某家很多版式書籍會這樣編排。

剛下班後馬上手刀速速的購買此書來驗證,果然跟我想的一樣,有 span 區塊存在,但並不是我以為的圖片 + append 文字的版式書籍。

那看來應該是沒轉 EPUB 的關係?果然在沒轉的情況下,所有 span 區塊裡的文字會浮在圖片上面,這個問題在轉了 KEPUB 之後就迎刃而解。


2022/06/01 更新

雖然轉 KEPUB 後,Kobo 就能正常顯示,但因為翻頁速度有點慢,故嘗試改用 Plato 來閱讀,看起來 Plato 也無法處理帶有 span 區塊的固定版面書籍,其顯示效果會先顯示圖片,再來換另一頁顯示 span 區塊裡的內容。 

HyRead Gaze Pocket 不關機待機測試

被測試資料搞得一頭霧水,所以今天比較早下班XD

來看一下久沒關機跟上網的 Pocket 狀況,想不到待機情況比我想像中的好,真是對現在的開放式機器刮目相看,不過 CPU 還是差了點沒錯,雖然前一陣子有新的 Note Plus 預購,但問了 CPU 規格也得不到答案,著實是讓人沒勁。

2022年5月24日 星期二

睡不著的老人

真糟糕,又睡不著覺了。

今天已經很早就開始上工,但已經做了一個多小時才想到沒有打卡XD

真是精實的一個多小時,檢查了 2 個測試的問題,寫好郵件,還順手檢查了一個兩年前寫好的工具的測試結果,好跟我們這一季做的實驗看是否有匹配?

我果然是個認真的好員工呀XD

WFH 其實是個很好的政策,想要驗證什麼馬上可以驗證,不用像以前一樣要等到隔天上班才能知道結果,對我這個急性子的人來說真是煎熬?

每家公司都應該要支持 WFH 才對,只要招募到正常值以上的員工,整體來說一定是 Z > B。

2022年5月13日 星期五

令人失望的台北等公車 App

除了新手機有時候第一下觸控會沒反應外,我最不能忍受的就是無法復原台北等公車 App 的常用站牌了,不過這個跟新手機無關,完全是這個 App 在搞人而已。

不確定是哪一個版本開始,一直希望使用者登入帳號,不然就是什麼種樹任務,這些都是小事,反正就是點掉就好,我也覺得無可厚非,一直到前天晚上使用新手機後才發現不再能夠手動從備份檔還原常用站牌。

原本我還以為是我記錯位置,找了老半天還是沒看到相關功能,過程中為了測試,也嘗試登入帳號,反而把我新手機亂打的站牌同步上去了。

還好我兩年前購買 Hisense A5 時有測試過台北等公車 App,我 A5 上裝的還是舊版的台北等公車,這個版本確定是有復原常用站牌的功能。

最後還是靠著 ADB install old.apk 先安裝舊版本,接著還原站牌資料,最後才是更新 App,終於我儲存好的站牌都回來了。

要注意的是,因為我之前登入帳號已經誤把亂儲存的站牌資料同步上去,故我用上面這招還原資料後,千萬不能登入帳號,不然 App 會無腦的把我的雲端資料蓋過我還原好的,那我先前做的事都白費了。

雖然我是可以找客服幫忙砍掉雲端資料再重新登入帳號備份新資料,但我就是討厭 App 強制要人登入的行為,我寧願你 App 賣錢,也不要拿掉這個手動備份的功能。

世界變化很快,我預估再兩年後,隨著智慧站牌的普及,這個 App 應該也沒什麼作用了,目前就先這樣解決,反正我舊程式都有放在 Google 硬碟,兩年後真的不行再用同樣一招解決就好。

不是說 App 不能營利,但不要用這種讓使用者反感的強迫行為,不論是賣斷或是訂閱制都比你拿掉最重要的功能還好!

同樣的招式不能對聖鬥士使用兩次!又不是要算什麼高深數學的 App,寫一個自己的台北等公車 App 也沒有多難,千萬不要再惹程式設計師不開心了XD

2022/05/16 更新

以前寫的 GoBus 不能用了,這表示 5284 網站已改版,其實也表示我很久沒在公司那站坐公車回家了,真懷念以前吃公司便當的日子呀,每天晚上都不用煩惱該吃什麼?

回到正題,雖然 5284 網站改版了,但現在似乎更方便 parsing 了,只要找到對應的站牌 ID,簡單用個 regex 就能把公車到站時間 parsing 出來,目前先知道這樣就好!


2024/05/23 更新

上面網站只是個介面,該網站透過 timer 定期去另一個網址取得 JSON 資料,並利用該網站內嵌的 javascript 判斷 JSON 資料去更新到站時間。

換句話說,發 HTTP 請求的函式庫需使用模擬瀏覽器類行為的庫,比如 selenium,這樣就可以直接抓 HTML 元素值,否則就是要比照 javascript 自己處理 JSON 資料,主要是要判斷 n1 裡面用逗號分隔的字串,最主要是要判斷 n1[7] 及 n1[3],index 從 0 開始。

2024/07/02 更新

換了新手機,目前已經無法使用此方式還原常用站牌,只好申請另外一個帳號來同步資料,無奈。

原來還有新手機比舊手機慢這回事?

又到了兩年一度便宜手機換機的日子?兩年過去了,還是沒有國產的電子紙閱讀器手機,望著那台我目前手上最快的手機 - Hisense A5!有時候真想牙一咬著就把他當手機使用,管他什麼資安,反正不要在這台登入任何帳號就好?

以上只是說說,身為一個現代人,不能拿手機做正事還真不方便,即使我是個出門可以不帶手機的阿宅,但有一支正常的手機在身上,臨時幫家人轉帳還是比較方便。

可惜今年 HTC 沒有便宜的手機可買了,我只好在 Nokia、Moto、SHARP 這三個品牌中挑選一支便宜的手機來用,剛好我又一直喜歡小手機,於是最後便選擇了 SHARP AQUOS wish 手機!

不得不說,一拿到實機便覺得實機真是漂亮,再加上手感又比較輕盈,真的是讓我愛不釋手,拆箱後要用酒精消毒前都很捨不得怕把手機搞壞。

昨天為了 WFH 後避免再進公司,去辦公室上班了一天把需要用到機器的事全部做完,算是第一次把手機拿出門用,剛好手機也是昨天第一天正式啟用,用了一天之後,居然還讓我發現不少問題?

首先是小手機看字真的是比較吃力,打字鍵盤也變小了,實在是不好操作,也算是長個經驗,以後應該是不會再考慮小手機了!

再來是拍照很爛,為了拍園區電梯裡公告的確診告示照片,一連拍了好幾張,沒有一張是清楚的,我想我可能跟比特花一樣有手抖的症頭XD

最後則是觸控螢幕有時候會頓一下,不然就是滑一滑會多滑個一拍,AQUOS 裡該關的我都關了,看起來不太像是設定的問題,多滑個一拍只有在看 PTT 時會受到影響,故我還可以接受,但那頓一下我還真的沒辦法忍受,玩個 Hearts 的流暢度都被破壞,難怪我一直被 AI Ko。我懷疑打字不好操作也是這個原因。

總之,這台新手機就是比我前一台手機 HTC Desire 19s 體感操作還要來得慢,真是無法想像?

還好我不是個很在意速度的人,不然我一定會吐血 ...

現在的我只好學金城武一樣生活:世界越快,心要越慢呀!


2022/05/13 下午更新

與其說螢幕有時候會頓一下,不如說是有時候第一下觸控沒反應,往往需要按第 2 次才能成功,看起來跟在哪個位置無關,感覺跟驅動程式或跟這塊面板本身有關?無論如何,我是覺得可以靠更新驅動程式搞定這個問題。

2022/05/14 更新

早上無聊來跑個分看看,一開始先在新手機安裝軟體,之後便切去舊手機安裝軟體,新手機還在安裝的同時,舊手機已經安裝完畢並開始跑分,但這有可能是新手機 4G 速度的問題?

等到新手機安裝完畢並開始跑分一陣子後,終於開始有買了新手機的感覺,不但超車了舊手機的進度,最後還一直以舊手機兩倍的進度在跑分,單看測試跑分果然像支新手機?不過真實使用上感覺還是原本的舊手機比較流暢,不過因為作業系統不同,故也很難有客觀的比較!


2022/06/09 更新

6/6 那天手機收到更新通知,居然是 Android 12 的系統更新,我終於跟其他人一樣,有一個即時的作業系統版本,不然我以前手機系統都比其他旗艦機種舊一兩個版本。

2024/07/02 更新

之前頓一下的問題不知在哪次更新完後就不翼而飛了?

最近因為手機開始有發熱的感覺,換了一支 Pixel 8a,沒想到也是有頓一下的問題,也是感覺比原本舊手機慢?待觀察中…

2022年5月6日 星期五

Python Regex Capturing Groups

用括弧圈起來的 Regex pattern 是 Regex group,如果 group 裡面需要 group,這時順序從最外層的開始,舉例來說:

content = CHA Rank0 NF ...
pattern = (CH[AB] Rank[0-3] (NF|OF) ...)

使用 Python code -> res = re.findall(pattern, content) 後

res[0][0] = CHA Rank0 NF
res[0][1] = NF

其他語言我想應該也是由左至右?

2022/05/17 更新

如果要搜尋的字串本身就有括弧,使用 '\\('  and '\\)'  跳脫字元即可,JavaScript  字串裡的括弧也是比照辦理。

人笨沒藥醫

早上為了一個前晚的錯誤記憶 debug code 一個多小時,連起身去找計算紙都懶,只好克難的用手邊的衛生紙驗證,就只是因為邊界設錯,害我圖畫不出來,一直以為我的 python code 有問題,對著這個圖看了又看,真是個阿雜的早晨呀XD

溫心小叮嚀:log 有 16 進位值時,最好也印一份 10 進位值,比較容易一眼看出錯誤,這也是約耳談軟體有提到的技巧呀 ~~

2022年5月2日 星期一

HyRead Gaze Note Plus 7.8 吋一日限量預購

目前時間晚上 10:30 分,還在跟我的 C++ 教材奮戰,為了轉換一下心情,看了一下官網,限量 200 台,優惠價為 NT $8,299 的 7.8 吋閱讀器,目前還是可以順利的加入到購物車。

去年經歷了 Kobo Elipsa 的預購,那時就覺得整個活動熱潮比不上之前讀墨一代 10 吋的預購。這次 HyRead 的活動,只是 200 台的數量,想不到還是無法順利完銷?

我想原因應該是出在 CPU 的使用效能不如文石的開放式閱讀器吧,雖說兩者的價差還是有將近 2000 塊,但看起來似乎消費者不太願意買單,支持 HyRead 的讀者,我想應該都已經入手了閱讀器,再加上過年前才剛推出 Gaze X Plus 10 吋閱讀器,應該也是影響了新 7.8 吋機器的銷售。

無獨有偶,Readmoo 也在最近推出新的 7.8 吋閱讀器預購,雖然我已經退出社團很久了,但我估計應該會比 HyRead 賣的好,畢竟讀墨社團的催敗力及向心力一直都是讓我很佩服的行銷範例。

雖然我不覺得影片在知識傳播上會比文字來得讓人易懂,但以行銷方面來說,影片確實會比較吸睛,這點讀墨確實是比凌網強。

考慮了良久,還是沒有下單 Gaze Note Plus 這台機器,在很大的機會上還是延用同一家 CPU 情況下,實在不是讓人很感興趣。算了,還是用我的 Gaze Pocket 吧!畢竟目前上網速度都還在可以接受的範圍內。