2009年11月23日 星期一

日本中國

如果我說中國是日本的一部份。中國都該稱為日本中國,二次大戰沒有美國,中國早就是日本的領土,中國人你們做何感想?

清單上沒有我的國家,有一個歧視我國的字眼出現,我若選了就是自取其辱;我不像國民黨員,不會做這種不知廉恥的羞辱國家的行徑。

一個玩弄民族主義、堅持共產主義的貪婪政權,自以為經濟強大,殊不知自己人民的道德與操守跟經濟完全不能相提並論;原本要下載RHEL5來測試的,操你媽的中國,老子拒用Redhat Linux!

2009年11月17日 星期二

ctime, atime與mtime釋疑

每個檔案都有屬性及內容。除了檔案內容很重要外,時間標記也非常重要--系統管理員可以藉由時間標記進行備份、例行性檢查;使用者可以從時間標記找出重要的檔案,硬碟的I/O也依靠時間標記(time flag)來進行處理。

UNIX系統將時間標記分成三種:

  1. atime(Access time):檔案上次被讀取的時間。
  2. ctime(status Change time):檔案的屬性或內容上次被修改的時間。
  3. mtime(Modified time):檔案的內容上次被修改的時間。

我們可以用一個很簡單的script來印證這些東西。

姑且把他命名為showTime.sh

1. 假設我們建立一個新檔:

touch newFile
執行showTime.sh,你會發現三種時間是相同的:
ctime: Nov 17 23:14
atime: Nov 17 23:14
mtime: Nov 17 23:14
2. 隔一分鐘後,寫入一些東西到檔案裡面:
echo "1st modified" > newFile
結果發現:
ctime: Nov 17 23:15
atime: Nov 17 23:14
mtime: Nov 17 23:15
3. 再隔一分鐘後,讀取這個檔案但不更動內容:
cat newFile
結果發現:
ctime: Nov 17 23:15
atime: Nov 17 23:16
mtime: Nov 17 23:15
4. 在隔一分鐘,僅修改屬性:
chmod g+wx newFile
結果發現:
ctime: Nov 17 23:17
atime: Nov 17 23:16
mtime: Nov 17 23:15

從這個lab裡我們可以得到以下結論:

  • ls -l所列出的長資訊,該時間是mtime。
  • 如果利用touch某檔案,則三種時間屬性均被更新。
  • 如果你修改了某一檔案內容,則ctime與mtime會更新。
  • 如果某檔案僅被讀取或另存新檔,則只有atime會被改變。
  • 如果你只改變檔案屬性(如權限、檔名、所有人或是suid、acl、chattr等),則只有ctime被更新。
  • atime相較之下是最常變動的時間標記,可以將之關閉以增進I/O,特別是多人多工,小檔案多以及laptop環境。filesystem設定裡可以增加noatime屬性,或是chattr +A固定住atime(chattr僅適用於ext2/3/4系列的filesystem)

2009年11月12日 星期四

linux上的pdf合併-刪除-旋轉-編輯-加密-破解密碼筆記

PDF檔案格式是目前最重要的檔案格式之一,因為她可以確實保留住檔案的格式,包含字型以及圖形顏色、比例,並且提供解析度極高的列印效果。本文僅就最常用的合併、拆解、旋轉、加解密,以及簡單的編輯功能作筆記。

pdftk(pdf toolkit)是一套可以拆解、合併pdf的超實用小工具,還可以進行加解密,頁面旋轉、解出metedata,書籤、資料欄位等非常多專業功能!解決了往常只有Adobe Acrobat Professional才能使用的功能。隨著pdf越來越普及,字型跟格式都越來越要求跟在不同平台下有完全相同的呈現方式,我們確實是需要學習這樣的實用工具。更棒的是,他是開放原始碼並且以GPL授權的軟體,在許多linux上都是可以直接安裝的,太方便了!
以下我僅翻譯網頁中的範例,在加上自己的註解作為筆記。

  1. 合併多個pdf檔:
    pdftk 1.pdf 2.pdf 3.pdf cat output 123.pdf
  2. 從數個pdf檔取出某幾頁並合併成另一個檔案:
    pdftk A=1.pdf B=2.pdf cat A1-7odd B2-endeven output combined.pdf
    取出1.pdf的1,3,5,7頁跟2.pdf的2~最末頁,合併成combined.pdf
  3. 頁面旋轉:
    pdftk src.pdf cat 1E 2-endoddW 2-endevenS output.pdf
    第一頁順時針旋轉90度,之後的奇數頁逆時針90度,偶數頁轉180度。
    其中,E=R(right), S=D(down), W=L(left),當然也可以ESW跟RDL混用。
  4. 整份文件上下顛倒:
    如上,其實就是使用D或S參數:
    pdftk src.pdf cat 1-endS output rotated.pdf
  5. 加密pdf檔案:
    pdftk預設的加密強度是128bits,範例如下:
    pdftk plane.pdf output encypt.pdf owner_pw 加密密碼
    另一個強度較小的為40bits,他可以節省不小檔案大小:
    pdftk plane.pdf output encrypt.pdf owner_pw 加密密碼 encrypt_40bit
  6. 加密檔案其實只是限制你不能修改某些受限的部份,如果要求輸入密碼才能開啟這份pdf檔:
    pdftk encrypt.pdf output lock-encrypt.pdf user_pw 使用者密碼
  7. 解密檔案:
    pdftk encrypt.pdf input_pw 加密密碼 output decrypt.pdf
  8. 檔案加密還為了防止他人複製、修改及列印內容。要允許使用者可以列印:
    pdftk plane.pdf output encrypt.pdf owner_pw 加密密碼 user_pw 使用者密碼 allow printing
    允許的動作如下:
    1. Printing

      高品質列印
    2. DegradedPrinting

      低品質列印
    3. ModifyContents

      允許修改內容(包含架構)
    4. Assembly

      僅允許修改架構
    5. CopyContents

      Also allows ScreenReaders
    6. ScreenReaders

      ...這個不是很懂
    7. ModifyAnnotations

      可修改註解
    8. FillIn

      ...這個不是很懂
    9. AllFeatures

      以上所有的options全都開放。
  9. 合併兩個檔案成一個為加密的檔;其中一個檔為加密檔案:
    pdftk A=encrypt.pdf B=plane.pdf input_pw A=加密密碼 cat A B output combined.pdf
  10. (少用)若pdf的page串流有經過壓縮,則會無法修改pdf code。利用uncompress來解壓縮:
    pdftk src.pdf output plane.pdf uncompress
    同理,你也可以下compress指令來壓縮。
  11. 將pdf檔每一頁獨立存成個別的pdf檔:利用burst指令
    pdftk large.pdf burst
    他會在當前目錄產生一個doc_data.txt的log檔作為紀錄。
  12. (少用)修復資料串流長度以及XREF table:
    pdftk broken.pdf output fixed.pdf
  13. (少用)加入浮水印:
    pdftk contents.pdf background Watermark.pdf output contents_WM.pdf
    pdftk contents.pdf stamp Watermark.pdf output contents_WM.pdf
    從指令上也能看出是否要讓浮水印蓋過圖片,細節上還請參考Lloyd神人的在 PDF 上加浮水印
  14. 印出pdf檔裡所有的metedata(就是書籤、頁籤、所有屬性等等):
    pdftk A.pdf dump_data output report.txt

事實上還有更多細節的功能,不過礙於自己也不是很懂,節錄這些常用的功能應該就非常足夠。另外,關於PDF密碼的一些概念,這裡作一些簡單的介紹。pdf的「密碼」大致兩種類型,一種叫Document-open password,另一種則是Permission password。Document-open password是開啟這個pdf檔所需要的密碼,跟使用者比較相關,也稱之為user_pw;Permission password比較像是administrator/owner的密碼,只有所有人才能修改裡面的內容以及關鍵屬性,又稱之為owner_pw。在pdf 1.4以及更早的時代(也就是acrobat 5.0),加密強度僅40bits;到了現在強度已經到128bits;到了Acrobat 9.0以後,導入了AES加密演算法之後,加密強度已經高達256bits,不過pdftk還不支援這麼高的強度;就算支援,做雜湊加密跟解密的時間也會很久。

其實你還可以找到pdftk的gui版本--GUI for pdftk,該作者也大方的提供了各種不同版本給各種作業系統使用,不過他所使用的函式庫實在是太舊了,就算我用軟連結仿造一個他要的版本給他,在執行上仍會有macro mismatch的錯誤,反正pdktk幾乎是無敵的,我也就不理會是否有圖形介面了。

在Windows下有著名的軟體:PDF password recovery--能破解pdf密碼的障礙,那麼在linux底下呢?

pdfcrack是一套基於GPL的開放原始碼的程式,她自動偵測加密長度,並且用內建字典逐個測試。破解密碼時間的長短仰賴於cpu的能力。sourseforge僅提供原始碼,不過別擔心,編譯一定會成功的,只要你有裝gcc的話。


另一個方法是使用wine去模擬windows下破解pdf密碼的軟體。我以pdf password remover做測試,並且利用pdftk隨便加密一個pdf來試驗,發現雖然她似乎能很快的
產生一個乾淨的pdf檔,但是我的pdf內容卻全部被清空!不知道是wine的原因還是如何,總是這看來不太成功。

另一個解決方案則是GuaPDF。GuaPDF這間公司提供了Demo, Local Quad, Distributed以及UNLIMITED四種版本,包含solaris,linux,windows,macos四種平台。Demo版本是免費使用的,如果你的顯示卡是nvidia的晶片且安裝了cuda驅動程式,解密速度可以比一般僅用cpu功能的電腦快上七倍。

linux Demo
MacOS Demo(Intel)
Solaris Demo
Solaris x86 Demo



利用GuaPDF能快速的產生一個未經加密的pdf檔,解密之後用Acrobat reader可能會有一些錯誤訊息,這是很正常的。


但是畢竟是demo版,您可能會遇到下列錯訊息:

  Guaranteed PDF Decrypter v. 3.1 (freeware DEMO version) - CPU version
 (c) PSW-soft, 2000-09, by P. Semjanov, S. Lysak. http://www.guapdf.com
 This product includes software developed by the OpenSSL Project
 for use in the OpenSSL Toolkit. (http://www.openssl.org/)

'Corring, Kay, JP 2001, slab window Argentina.pdf' is the uncompressed document with 40-bit RC4 encryption
This document has no user password, only restrictions present

Key found! (exact value is  7F 7A AC E3 FC)
Would you like to decrypt it now?y
Decryption in progress, please wait...
  0% complete
Warning: Demo limitation reached in line 430
Your file is 100% supported by GuaPDF and decryption is guaranteed, but
demo limitation was reached and file was not fully decrypted and saved as
'Corring, Kay, JP 2001, slab window Argentina.decrypted.pdf'.
It may contain only few (or zero) readable pages and/or produce any error messages.
Please get the full version to correctly decrypt this file.
這是因為demo版限制只能用在430行以內的pdf檔,只好依照需求去跟他買羅~

所以現在我可以用pdftk來任意整理我的pdf文件,GuaPDF來克服某些學術檔案無法列印或複製的問題。

如果要編輯pdf檔案本身,除了要有好工具之外,還需要會一些pdf的語法,這就超過了筆者的能力範圍;不過簡易的修改pdf,仍然可以透過pdfedit這個小程式來幫忙:


pdfedit可以從套件庫裡直接安裝喔!建議閱讀官方網站提供的閱讀文件。如此一來,編修pdf檔時就不需要用vbox開一個windows又使用盜版軟體了!