[Linux] 用 strace 找出 7zip 載入解碼器 Codecs 的路徑

[Linux] 用 strace 找出 7zip 載入解碼器 Codecs 的路徑

最近專案的程式有用到 lib7zip 來呼叫 7zip,

不過有個奇怪的問題,就是用 WinRAR 作出來的 .rar 檔案,

如果「檔案名稱」有加密的話 (如下),我呼叫 lib7zip 的程式是解不出來的,但是 7z 本身可以:

Screen Shot 2016-01-19 at 11.14.56 PM  

 

當然如果去查 7zip 的原始碼的話,應該是有機會挖出來差別在哪裡,

問題是 7zip 的原始碼相當的龐大,要理解它應該不是一時三刻可以搞定…

 

後來用 strace 意外地解決了問題~

用 strace 跑一下 7z 時,有瞄到一些 Codecs 的字串快速的閃過去,來 grep 看看:

testuser@localhost ~ $ strace tool/p7zip/7z l enc_filename.rar 2>&1 | egrep -i codec
lstat("tool/p7zip/Codecs", {st_mode=S_IFDIR|0755, st_size=21, ...}) = 0
openat(AT_FDCWD, "tool/p7zip/Codecs", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
lstat("tool/p7zip/Codecs/.", {st_mode=S_IFDIR|0755, st_size=21, ...}) = 0
lstat("tool/p7zip/Codecs/..", {st_mode=S_IFDIR|0755, st_size=76, ...}) = 0
lstat("tool/p7zip/Codecs/Rar29.so", {st_mode=S_IFREG|0755, st_size=102568, ...}) = 0
open("tool/p7zip/Codecs/Rar29.so", O_RDONLY|O_CLOEXEC) = 4

 

看來 7z 會去找 Codecs 目錄下的 Rar29.so,感覺這裡很可疑,

是不是 Rar29.so 裡面有提供一些資訊,讓 7z 可以解開上面那種「檔案名稱加密」的 RAR 檔案呢?

 

同樣用 strace 跑一下自己的程式,果然找不到 Codecs 這個字串出現…

在目錄下增加一個 symbolic link 指向 p7zip 的 Codecs 目錄,就解決問題了,

我的程式也能用到 Codecs 下的 Rar29.so 並解開「檔案名稱加密」的 RAR 檔案囉~

感謝 strace 這次的幫忙呀~^^

 

(本頁面已被瀏覽過 62 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料