検索
プロジェクト
全般
プロフィール
ログイン
ホーム
プロジェクト
検索
:
A painter and a black cat
全プロジェクト
A painter and a black cat
概要
活動
ニュース
Wiki
ファイル
ダウンロード (1.77 KB)
CTF Forensic
» zlib_extraction.sh
引数のファイルに含まれるzlib圧縮部分を抽出・展開してファイルに保存する -
kanata
, 2025/04/13 14:34
#!/bin/bash
# zlib_extraction.sh ver 2.0
# 引数のファイルに含まれるzlib圧縮部分を抽出・展開してファイルに保存する
# 2015.10.06 kanata
if
[
!
-f
"
${
1
}
"
]
then
echo
"file open error (
$1
)"
exit
1
fi
if
echo
"
${
2
}
"
|egrep
'(BOOST|boost|Boost)'
>
/dev/null
then
MODE
=
"BOOST_MODE"
else
MODE
=
"NORMAL_MODE"
fi
FILESIZE
=
`
ls
-l
${
1
}
|awk
'{print $5}'
`
ZLIBPART
=
"
${
1
##*/
}
"
ZLIBPART
=
"
${
ZLIBPART
%.*
}
"
I
=
"0"
FORK_COUNT
=
"0"
if
[
"
${
MODE
}
"
=
"NORMAL_MODE"
]
then
#--------------#
# シリアル処理 #
#--------------#
while
[
"
${
I
}
"
-lt
"
${
FILESIZE
}
"
]
do
ZLIBPART_FILE
=
"
${
ZLIBPART
}
_
${
I
}
.bin"
cat
${
1
}
|
dd
bs
=
1
skip
=
${
I
}
| openssl zlib
-d
>
${
ZLIBPART_FILE
}
2>/dev/null
if
[
-s
${
ZLIBPART_FILE
}
]
then
file
${
ZLIBPART_FILE
}
else
rm
-f
${
ZLIBPART_FILE
}
fi
echo
-ne
"checking.. "
`
printf
"%d/%d"
"
${
I
}
"
"
${
FILESIZE
}
"
`
"
\r
"
I
=
$((
I
+
1
))
done
else
#----------#
# 並列処理 #
#----------#
while
[
"
${
I
}
"
-lt
"
${
FILESIZE
}
"
]
do
ZLIBPART_FILE
=
"
${
ZLIBPART
}
_
${
I
}
.bin"
(
cat
${
1
}
|
dd
bs
=
1
skip
=
${
I
}
| openssl zlib
-d
>
${
ZLIBPART_FILE
}
2>/dev/null
;
if
[
-s
${
ZLIBPART_FILE
}
]
;
then
file
${
ZLIBPART_FILE
}
;
else
rm
-f
${
ZLIBPART_FILE
}
;
fi
)
&
# 並列実行時のサブシェルが増大していくのを抑止
# 同時35多重までに抑止 25回に1度チェック ( 数値を弄ってチューニングできます )
if
[
$((
I
%
25
))
-eq
"0"
]
;
then
FORK_COUNT
=
`
ps
-u
|fgrep
-c
${
0
}
`
;
fi
while
[
"
${
FORK_COUNT
}
"
-gt
"35"
]
do
printf
"[WARNING] SubProcess Exceed Limit. fork:%s offset:%s
\n
"
${
FORK_COUNT
}
${
I
}
FORK_COUNT
=
`
ps
-u
|fgrep
-c
${
0
}
`
done
echo
-ne
"checking.. "
`
printf
"%d/%d"
"
${
I
}
"
"
${
FILESIZE
}
"
`
"
\r
"
I
=
$((
I
+
1
))
done
fi
exit
0
(1-1/1)
ロード中...