CTF Forensic

Command gadgets

  • ハッシュ値生成

md5sum sha1sum sha224sum sha256sum

find

通常のファイル検索

find `pwd` -name "${1}" -print 2>/dev/null

どんな種類のファイルがあるか検索

find ./ | xargs file

xz

圧縮

xz -zk ファイル

展開

unxz -dk ファイル

ディスクイメージからzipファイルを抜き出す(python)

dは1個目、yは二個目

$python
>>> d = open("入力ファイル名","rb").read()
>>> z = d[d.find("PK\x03\x04"):d.find("PK\x05\x06")+22]
>>> len(z)
>>> open("出力ファイル名","wb").write(d[d.find("PK\x03\x04"):d.find("PK\x05\x06")+22])
>>> y = d[d.find("PK\x05\x06")+22:]
>>> open("出力ファイル名","wb").write(y[y.find("PK\x03\x04"):y.find("PK\x05\x06")+22])

gzipファイルに付けられたコメントを表示する

標準的なコマンドがない。ただ、

  • ファイル名
  • NULL(0x00)
  • コメント

というフォーマットになっているので、がんばれは読めると思われる。

参考:http://www.gzip.org/zlib/rfc-gzip.html

ちなみにコメントの有無は、fileコマンドで

comment,

が出てきたらコメント在り。

zipファイルに付けられたコメントを表示する

zipの中のファイル毎にコメントを付けられる仕様。あんまり使われてないけど。

unzip -lz a.zip

Exif情報を取得する

ImageMagickでExif情報を取得するには、identifyコマンドを使う。

identify -verbose a.jpg

ddコマンドで保存したイメージファイルをマウントする

% sudo fdisk -u -l disk_20130530-1400.img

ディスク acid_20130530-1400.img: 4012 MB, 4012900352 バイト
ヘッド 255, セクタ 63, シリンダ 487, 合計 7837696 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x00014d34

デバイス ブート 始点 終点 ブロック Id システム
disk_20130530-1400.img1 8192 122879 57344 c W95 FAT32 (LBA)
disk_20130530-1400.img2 122880 7774207 3825664 83 Linux

% sudo mount -o loop,offset=$((512*122880)) disk_20130530-1400.img /mnt

時刻指定でgrepする

find_by_date.sh

#!/bin/sh

DATE_FROM="201504250000.00"
DATE_TO="201504262359.59"

touch -t $DATE_FROM /tmp/tmp_date_from.$$
touch -t $DATE_TO   /tmp/tmp_date_to.$$

find $SEARCH_PATH -type f -newer /tmp/tmp_date_from.$$ ! -newer /tmp/tmp_date_to.$$ -ls;

exit 0

grep_by_date.sh

#!/bin/sh

LIST=`/usr/local/bin/find_by_date.sh $1 $2 $3|awk '{print $NF'}`

for WORD in ${LIST}
do
        grep $4 ${WORD} 2>/dev/null
        if [ $? = "0" ]
        then
                echo "########## ${WORD} is founded ##########"
        fi
done

exit 0

画像ファイルのEXIF情報を取得する

$ identify -verbose ファイルPATH

俺的備忘録 〜なんかいろいろ〜 - コンソール上でImageMagickを使って画像ファイルのEXIF情報を取得する

WebService / Application

Online TrID File Identifier

http://mark0.net/onlinetrid.aspx

binvis.io - バイナリビューア

http://binvis.io/#/

Setup

hachoir-subfile のインストール

CentOSへのhachoir-subfileのインストール

$ cd /home/user/PythonSandBox
$ source bin/activate # virtualenvによる仮想環境に移行

(PythonSandBox)$ cd tmp
(PythonSandBox)$ mkdir hachoir
(PythonSandBox)$ hachoir
(PythonSandBox)$ wget http://cheeseshop.python.org/packages/source/h/hachoir-core/hachoir-core-1.3.3.tar.gz
(PythonSandBox)$ wget http://cheeseshop.python.org/packages/source/h/hachoir-parser/hachoir-parser-1.3.4.tar.gz
(PythonSandBox)$ wget http://cheeseshop.python.org/packages/source/h/hachoir-metadata/hachoir-metadata-1.3.3.tar.gz
(PythonSandBox)$ wget http://cheeseshop.python.org/packages/source/h/hachoir-urwid/hachoir-urwid-1.1.tar.gz
(PythonSandBox)$ wget http://cheeseshop.python.org/packages/source/h/hachoir-wx/hachoir-wx-0.3.tar.gz
(PythonSandBox)$ wget http://cheeseshop.python.org/packages/source/h/hachoir-subfile/hachoir-subfile-0.5.3.tar.gz
(PythonSandBox)$ wget http://cheeseshop.python.org/packages/source/h/hachoir-regex/hachoir-regex-1.0.5.tar.gz

次に、ダウンロードした全てのファイルをtar xvfzで展開。その中に入っているsetup.py全てについて

(PythonSandBox)$./setup.py build
(PythonSandBox)$./setup.py install

を実施する。順番はあんまり関係ないみたい

zpipeのインストール

zlib部分の圧縮・伸張ができるプログラム

使い方

$ zpipe < src.bin > dest.bin    #圧縮
$ zpipe -d < src.bin > dest.bin #伸張

注: deflateInitで圧縮されたzlib圧縮データのことである。deflateInit2でGZIP圧縮されたデータではない。

ビルド方法

$ cd /tmp
$ git clone https://github.com/madler/zlib
$ cd zlib
$ ./configure
$ make
$ cd examples
$ gcc zpipe.c -lz -o zpipe

フォレンジック調査で使用するマウント関連のコマンド

http://sec-v6.blogspot.jp/2013/03/blog-post.html

ディスクイメージをそのままマウントする

mount [image_file] [mount_point]

特定のパーティションをマウントする

ディスクイメージの中の特定パーティションのみマウントするにはまずオフセットを調べる。
オフセットを調べるには fdisk または mmls を使用する。

fdisk -lu [image_file]
mmls [image_file]

mmls は sleuthkit.org で開発されている sleuthkit に入っているコマンド。SIFT ではデフォルトで使用可能。
マウントしたいパーティションの start となっている数値にセクタサイズ(通常512)をかけた数が offset となり、この値を mount コマンドで指定する。

mount -o loop,offset=[start*512] [image_file] [mount_point]

フォレンジック調査なら読み取り専用のオプション -o ro loop、ファイルタイプとして -t ntfs とか nls=utf8 とか付け加える。

E01 イメージの取り扱い

EnCase image file format で保全されたディスクイメージを扱いたい場合にいは SIFT に入っている ewfmount を使う。
ewfmount により E01 イメージを dd イメージで操作できる。

ewfmount [e01_image_file] [mount_point]

E01 イメージが一つではなく複数に分割されている場合は末尾がE01のファイルを指定するだけ。
この状態で [mount_point] 配下に ewf1 という dd イメージファイルができ、それをマウントすることができる。 アンマウントは通常通り umount コマンドでできる。

イメージディスクの作成

イメージディスクの作成は下記コマンドで実行。

dd if=[input_disk] of=[output_file] bs=512 obs=1024k count=[number] conv=sync,noerror 

メモリフォレンジック

volatility

volatility一択

ちなみにこの分野は日本語書籍がほぼ無い

  1. imageinfoオプションで、OS判別してvolatilityのプロファイルを特定
  2. その上で、各種コマンドを叩いて調べる
  3. SANSのチートシートから怪しいプロセスを発見するのがまず一歩か

1個しかないプロセスが複数あるとか、親プロセスがおかしいとか

  • dllの読み込みは、false false false だったら怪しい、true false true は正常な可能性が高い

DLLの隠蔽、DLLのリンクは三種類の双方向リストで管理されており、これを細工して隠蔽できる

  • 後述のstringsコマンドで抽出した文字列を、volatilityを使ってメモリイメージと紐付けられる。それをgrepでいろいろ見る。
# Help
volatility -h
volatility pslist --help

# Info これでOSを特定する
volatility -f [image] imageinfo

$ volatility  -f win7_trial_64bit.raw imageinfo
Volatility Foundation Volatility Framework 2.4
Determining profile based on KDBG search...

          Suggested Profile(s) : Win7SP0x64, Win7SP1x64, Win2008R2SP0x64, Win2008R2SP1x64
                     AS Layer1 : AMD64PagedMemory (Kernel AS)
                     AS Layer2 : FileAddressSpace (/Users/Michael/Desktop/win7_trial_64bit.raw)
                      PAE type : PAE
                           DTB : 0x187000L
                          KDBG : 0xf80002803070
          Number of Processors : 1
     Image Type (Service Pack) : 0
                KPCR for CPU 0 : 0xfffff80002804d00L
             KUSER_SHARED_DATA : 0xfffff78000000000L
           Image date and time : 2012-02-22 11:29:02 UTC+0000
     Image local date and time : 2012-02-22 03:29:02 -0800

この場合、プロファイルは Win7SP0x64 か Win2008R2SP0x64 (Image Type (Service Pack) : 0 から絞り込める)

# Process
volatility -f [image] --profile=[OS Profile] pslist
volatility -f [image] --profile=[OS Profile] psscan
volatility -f [image] --profile=[OS Profile] pstree
volatility -f [image] --profile=[OS Profile] psxview
volatility -f [image] --profile=[OS Profile] psxview --apply-rules

# Network
volatility -f [image] --profile=[OS Profile] netscan #Vista以降
volatility -f [image] --profile=[OS Profile] connections #
volatility -f [image] --profile=[OS Profile] connscan    #
volatility -f [image] --profile=[OS Profile] sockscan    #

# Registry
volatility -f [image] --profile=[OS Profile] hivelist
volatility -f [image] --profile=[OS Profile] printkey -K "[registry key]"
volatility -f [image] --profile=[OS Profile] userassist
volatility -f [image] --profile=[OS Profile] shellbags
volatility -f [image] --profile=[OS Profile] shellbags --output-file=[shellbags.body] --output=body
volatility -f [image] --profile=[OS Profile] shimcache
volatility -f [image] --profile=[OS Profile] getsids --offset [address]
volatility -f [image] --profile=[OS Profile] privs --offset [address]
volatility -f [image] --profile=[OS Profile] hashdump
volatility -f [image] --profile=[OS Profile] lsadump

# Command history
volatility -f [image] --profile=[OS Profile] cmdscan
volatility -f [image] --profile=[OS Profile] consoles

# DLL
volatility -f [image] --profile=[OS Profile] dlllist
volatility -f [image] --profile=[OS Profile] handles -p [pid] -t File
volatility -f [image] --profile=[OS Profile] handles -p [pid] -t Key
volatility -f [image] --profile=[OS Profile] handles -p [pid] -t Directory
volatility -f [image] --profile=[OS Profile] handles -p [pid] -t Port
volatility -f [image] --profile=[OS Profile] handles -p [pid] -t Mutant
volatility -f [image] --profile=[OS Profile] handles --offset [address]

# evtlog
volatility -f [image] --profile=[OS Profile] evtlogs -D [Directory]
volatility -f [image] --profile=[OS Profile] evtlogs --save-evt -D [Directory]

# Service
volatility -f [image] --profile=[OS Profile] svcscan

# FileSystem
volatility -f [image] --profile=[OS Profile] mftparser --output-file=[outfile.txt]
volatility -f [image] --profile=[OS Profile] mftparser --output-file=[outfile.txt] --output=body # body形式は別のソフトで読める

# Dump
volatility -f [image] --profile=[OS Profile] dlldump -p [pid] -D [Directory]
volatility -f [image] --profile=[OS Profile] procdump -p [pid] -D [Directory]
volatility -f [image] --profile=[OS Profile] dumpfiles -r .evtx$ --ignore-case -D [Directory]
procdump -p [pid] --dump-dir=/tmp
photorec /d [Directory] [image]

# Timeline
volatility -f [image] --profile=[OS Profile] timeliner --output-file=timeliner.body --output=body

 # bodyファイルは結合できる
 cat [BodyFile.1] [BodyFile.2] [BodyFile.3] > [BodyFile]

 # mactime
 mactime --help
 mactime -b [BodyFile] -d -z UTC

# Vad
volatility -f [image] --profile=[OS Profile] -p [pid] vadinfo
volatility -f [image] --profile=[OS Profile] -p vaddump -D [Directory]

# Strings
strings -td -a [image] >> strings.txt # "FREE MEMORY"という単語がなんかしらないがよく使うらしい
strings -td -el -a [image] >> strings.txt

volatility -f [image] --profile=[OS Profile] strings -s strings.txt > [out.txt]

grep [string] out.txt # IPアドレス等で引っ掛けて -A -B のオプションでその前後を出力して調査

# Malware Check
volatility -f [image] --profile=[OS Profile] ldrmodules -p [pid]
volatility -f [image] --profile=[OS Profile] malfind -p [pid]

# Yarascan
volatility -f [image] --profile=[OS Profile] yarascan --yara-rules="[strings]"
volatility -f [image] --profile=[OS Profile] yarascan -p [pid] --yara-rules="[binary code]"
volatility -f [image] --profile=[OS Profile] yarascan -p [pid] --yara-rules="[strings]"

# Misc
volatility -f [image] --profile=[OS Profile] objtypescan # Object Acan
volatility -f [image] --profile=[OS Profile] Volshell    # Volshell
volatility -f [image] --profile=[OS Profile] iehistory   # IEの履歴

FileSystem

ファイルシステムソムリエ

Gentoo metalog - ファイルシステムソムリエになる話
http://gentoo.hatenablog.com/entry/2016/06/17/020107

Linux ファイルシステムを理解したい
https://www.kimullaa.com/entry/2019/12/01/130347

FATファイルシステム

FATファイルシステム(その1)
http://memes.sakura.ne.jp/memes/?page_id=2303

FATファイルシステム(その2)
http://memes.sakura.ne.jp/memes/?page_id=2402

Qiita - FAT12,FAT16の構造(予約領域編)
https://qiita.com/iria_piyo/items/d949b93bc056a8c370d6

FAT16

参考 - ねんどろいど伊401に時報を喋らせるガジェットを作ってみた
http://tech.recruit-mp.co.jp/gadget/pic-inside-i401/

NTFS

VSS削除後の復元

https://github.com/mnrkbys/vss_carver

USNジャーナル(ファイルのwriteの記録)

CDI 山崎さんのUSNジャーナルの分析ツールの発表。クオリティが半端ないw

本家
https://github.com/simsong/bulk_extractor

カービングツール
https://www.kazamiya.net/bulk_extractor-rec

分析ツール
https://www.kazamiya.net/usn_analytics/

資料はこちら
https://www.jpcert.or.jp/event/jsac2018.html

シグネチャとして固定部分(ヘッダ:USN_RECORD_V2)/ レコード長 / ファイル名の長さを使用している。

Python script to parse the NTFS USN Journal
https://github.com/PoorBillionaire/USN-Journal-Parser

ext

Qiita - 知っておきたいLinuxファイルシステムの概念
https://qiita.com/Rairaiden/items/539d429729d5819de0aa

Magic Number

trid(コマンドかオンラインでファイルを判別するツール)
http://mark0.net/onlinetrid.aspx

File Signature Database
http://www.filesignatures.net/index.php?page=search

http://www.astro.keele.ac.uk/oldusers/rno/Computing/File_magic.html

実行形式

ファイルフォーマット HEX ASCII Note
ELF 7F
PE(.exe .dll .ocx .scr .cpl .com .fon) 4D 5A MZ 頭の方(0x80~0xf0のあたり)が 50 40 00 00 4C 01 で32bit 50 40 00 00 64 86 で64bit PE(50 40)から始まっているので、見つけやすい
Javaクラスファイル CA FE BA BE
gzip 1F 8B
Compress(.Z) 1F 9D
Bzip(.bz) 42 5a BZ
zip 50 4B PK
TAR (pre-POSIX) (a filename)
TAR (POSIX) 75 73 74 61 72 ustar
zip 50 4B 03 04 PK 終端は PK 0x05 0x06 の後ろに18Byte コメントが付けられるので可変長ではある
zlib 78 9c 78 DA や 78 01 の場合も?ある
LHA(lh0) ?? ?? 2D 6C 68 30 2D ??-lh0-
LHA(lh4) ?? ?? 2D 6C 68 34 2D ??-lh4-
LHA(lh5) ?? ?? 2D 6C 68 35 2D ??-lh5-
7z 37 7A BC AF 27 1C 7z
xz fd 37 7a 58 5a 00 ?7zXZ
cab 4d 53 43 46 MSCF
RAR 52 61 72 21 Rar!
Jpeg FF D8 FF E0 ?? ?? 4A 46 49 46 ??????JFIF 終端は FF D9 "・ル"
PNG 89 50 4E 47 ?PNG → 臼NG 終端は 00 00 00 00 49 45 4E 44 AE 42 60 82 "IENDョB`"
WebP 52 49 46 46 ?? ?? ?? ?? 57 45 42 50 RIFF????WEBP ????はファイルサイズ
HEIF(HEIC) ?? ?? ?? ?? 66 74 79 70 ??????ftypmif1????mif1heichevc ftypとheicという文字が見えるとHEIFっぽい
GIF(89a) 47 49 46 38 39 61 GIF89a 終端は 3B
GIF(87a) 47 49 46 38 37 61 GIF87a
BMP 42 4D BM
BGP 42 50 47 fb 20 00 BGP
TIFF 49 49 または 4d 4d II または MM 「4D 4D」なら上位から下位バイトへ読み、「49 49」なら下位から上位バイトで読みます
Postscript 25 21 %!
Microsoft Offic e D0 CF 11 E0 A1 B1 1A E1
PDF 25 50 44 46 2D %PDF-バージョン番号
wav 52 49 46 46 RIFF
swf 43 57 53 または 46 53 57 CSW または FSW
wma 30 26 0&
pgp public ring 99 00
pgp security ring 95 01
pgp security ring 95 00
pgp encrypted data a6 00
pcap(tcpdump) d4 c3 b2 a1 ヤテイ。

Repair

文字化けリペア

=?ISO-2022-JP?B?GyRCJD8hIxsoQg==?= のような件名など
From, Subjectなどの読めないヘッダを修復

http://purl.org/net/masaka/mr/mime.php

$B$3$l$O(JJIS$B$NJ8$G$9!#(Jのような文字化け
文字化けしている本文の修復

http://purl.org/net/masaka/mr/jmr.php

こん...のような、 '&#' と ';' に数字が挟まれたコードが連続する本文
Unicode文字参照になっている本文の解読

http://purl.org/net/masaka/mr/r2u.php

pcapリペア
http://f00l.de/hacking/pcapfix.php

zipリペア
http://www.gigafree.net/utility/archive/diskinternalsziprepair.html


Foremost ファイル復元方法(Linux編)
http://brand-jin.tk/?p=463

foremostというバイナリファイルの中からファイルを復元できるツール
https://github.com/kira924age/CTF/tree/master/SECCON2014%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E4%BA%88%E9%81%B8(%E6%97%A5%E6%9C%AC%E8%AA%9E)/%E6%8D%8F%E9%80%A0%E3%81%95%E3%82%8C%E3%81%9F%E5%A5%91%E7%B4%84%E6%9B%B8%E3%82%92%E6%9A%B4%E3%81%91

俺的備忘録 〜なんかいろいろ〜 - バイナリやファイル、ディスクから中のデータを抽出・復元する『foremost』コマンド
https://orebibou.com/2017/04/%e3%83%90%e3%82%a4%e3%83%8a%e3%83%aa%e3%82%84%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%80%81%e3%83%87%e3%82%a3%e3%82%b9%e3%82%af%e3%81%8b%e3%82%89%e4%b8%ad%e3%81%ae%e3%83%87%e3%83%bc%e3%82%bf%e3%82%92/

$ ./foremst -t all -i Timestamp.dd

「PhotoRec」の使い方 ファイル復元ソフト
https://pctrouble.net/software/photorec.html

ファイル解析

rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc.
https://phiresky.github.io/blog/2019/rga--ripgrep-for-zip-targz-docx-odt-epub-jpg/

これが全般的に使えるんじゃないかと気になっている
pdfやdocx、sqlite、画像や動画のメタデータなどを全部grepできるツール

pdfの解析

PDF中の画像ファイルのみを抽出する
https://qiita.com/aokomoriuta/items/066b760a28da461531b6

libre Office Draw でpdfが編集できる

peepdf - PDF Analysis Tool
http://eternal-todo.com/tools/peepdf-pdf-analysis-tool

Kali Linux に同梱されている

かわろぐ - peepdf を使って攻撃コードの入ったPDFを解析してみた
http://blog.kawa-xxx.jp/entry/2016/09/19/165709

PDF Stream Dumper 使用例
http://sandsprite.com/blogs/index.php?uid=7&pid=57

PDFからテキストを抽出するプログラム
https://osdn.jp/users/mocchi_2012/pf/mocchi_stack_room/wiki/extract_pdf

pdfファイル中のstream~endstream間は、zlib圧縮されてたりするのだが、展開くれて、json形式で出力してくれる。

プログラムモグモグ - 詳細PDF入門 ー 実装して学ぼう!PDFファイルの構造とその書き方読み方
http://itchyny.hatenablog.com/entry/2015/09/16/100000

corkami - PDFのトリックに関するレジュメ - エンコーディング,構成,JavaScriptなど
https://code.google.com/p/corkami/wiki/PDFTricks

pdfcrack
http://pdfcrack.sourceforge.net/

あと辞書

evince
https://ja.wikipedia.org/wiki/Evince

コピー禁止とか無視できたりする

pngの解析

pngcheck

Office形式のファイル解析

OfficeMalScanner
http://www.reconstructer.org/

73spica's Blog - EKOPARTY CTF 2016 Write-up
http://73spica.tech/blog/ekoparty-ctf-2016-write-up/

Github - MalwareCantFly/Vba2Graph (VBAの解析・可視化)
https://github.com/MalwareCantFly/Vba2Graph

zlibの解析

展開は、以下でできる。

$ cat src.bin |openssl zlib -d >dest.bin

zpipeでも可

$ zpipe < src.bin > dest.bin    #圧縮
$ zpipe -d < src.bin > dest.bin #伸張

pythonシェル芸だとこう

python -c 'import zlib; print zlib.decompress(open("File").read())'

バイナリからzlib圧縮データを探す
http://teraapi.blogspot.jp/2012/05/zlib.html

よくある: 
78 01, 78 5e, 78 9c, 78 da 

稀 :
08 1d, 08 5b, 08 99, 08 d7, 18 19, 18 57, 18 95, 18 d3, 
 28 15, 28 53, 28 91, 28 cf, 38 11, 38 4f, 38 8d, 38 cb, 
 48 0d, 48 4b, 48 89, 48 c7, 58 09, 58 47, 58 85, 58 c3, 
 68 05, 68 43, 68 81, 68 de 

極稀:
08 3c, 08 7a, 08 b8, 08 f6, 18 38, 18 76, 18 b4, 18 f2, 
 28 34, 28 72, 28 b0, 28 ee, 38 30, 38 6e, 38 ac, 38 ea, 
 48 2c, 48 6a, 48 a8, 48 e6, 58 28, 58 66, 58 a4, 58 e2, 
 68 24, 68 62, 68 bf, 68 fd, 78 3f, 78 7d, 78 bb, 78 f9  

引数のファイルに含まれるzlib圧縮部分を抽出・展開してファイルに保存する

自作ツール。CentOSで動作確認済み。Kali Linuxだとopensslでzlibのdecodeが出来なかったので、たぶん、Debian でも動かないかも。
まぁ、zpipeで代替すれば、どの環境でも行けるはず。
ちなみに、動作はめっちゃ遅い。

zlib_extraction.sh

#!/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

その他の展開方法

zlib.exe - zlib でデータを圧縮/展開するだけのプログラム
http://cetus.sakura.ne.jp/softlab/toolbox2/#zlibexe

各プログラム言語でのコーディング方法サンプル - Zlib Decompress
http://swiftapi.com/api/Zlib_Decompress

$ python -c 'import zlib; print zlib.decompress(open("/directory/file").read())'

DXアーカイブ(data.dxa)の展開

henteko - 2012TeResAI(DXアーカイブの展開ができる)
https://github.com/henteko/2012TeResAI/tree/master/2012TeResAI/2012teresAI/DX%20lib/DxLib_VC/Tool/DXArchive

Macの.DS_Storeの解析

Python .DS_Store parser
https://github.com/gehaxelt/Python-dsstore

PEファイルフォーマット

PE(Portable Executable)ファイルフォーマットの基本構造 めも
https://task4233.dev/article/20200101_pefile.html#pe-portable-executable-format

動画解析

動画差分

動画のフレームごとの差を求めて変化してた場合に保存するプログラム
https://github.com/teatime13/search_movie_diff

比較明合成

SiriusCompを使う

テンプレートマッチング

Qiita - SECCON 2018 Online CTF Needle in a haystack テンプレートマッチングで照明点灯判定を自動化する
https://qiita.com/DoranekoSystems/items/f2fd95fb9ff4ddea369f

Memo

アンタイ・フォレンジック伝道者の独り言 - NTFS 代替データストリームとは?
http://port139.hatenablog.com/entries/2005/09/08

FOCA - 文書のスキャンでメタデータと隠された情報を検索するためのツール
https://www.elevenpaths.com/labstools/foca/

φ(・・*)ゞ ウーン カーネルとか弄ったりのメモ - ext4:ディスクレイアウト調査中めも1
http://kernhack.hatenablog.com/entry/2014/01/28/230808

俺的備忘録 〜なんかいろいろ〜 - fuseを使ってファイルシステムをモニタリングできる『loggedfs』
https://orebibou.com/2017/04/fuse%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%a6%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%b7%e3%82%b9%e3%83%86%e3%83%a0%e3%82%92%e3%83%a2%e3%83%8b%e3%82%bf%e3%83%aa%e3%83%b3%e3%82%b0%e3%81%a7%e3%81%8d/

CTFでのバイナリ実行の挙動を追いかけるのに便利そう

Visualizing ELF binaries
https://reverseengineering.stackexchange.com/questions/6003/visualizing-elf-binaries

Ubuntu で $ rm ~/.bashrc を実行してしまった - Linuxで誤って削除したファイルの復活の話
https://blog.fenrir-inc.com/jp/2017/10/resurrected_rm_files.html

Automate Linux Swap Analysis: swap_digger - Linux Swap解析ツール(Bashスクリプト)。SwapからLinuxアカウント情報、ウェブアカウント情報、BASIC認証、WiFi SSID・鍵等が取得可能。フォレンジック調査・ペンテスト用。
https://n0where.net/automate-linux-swap-analysis-swap_digger/

SANS DFIR Windows Forensic Analysis POSTER
https://www.sans.org/security-resources/posters/windows-forensic-analysis/170/download

Shi0shishi0 - Defcon DFIR CTF 2018 Writeup(HR Server + File Server)
http://ecoha0630.hatenablog.com/entry/2018/11/22/180306

Windows 10 Timeline 解析記事のメモ
https://soji256.hatenablog.jp/entry/2019/10/05/153559?utm_source=feed

DFIR や Malware 解析などについての記事まとめ(2019年10月~2019月12月)
https://soji256.hatenablog.jp/entry/2020/01/16/082000

Windowsイベントログ解析ツール「Hayabusa」を使ってみる
https://itib.hatenablog.com/entry/2021/12/31/222946

競技セキュリティまとめのまとめ
https://blog.hamayanhamayan.com/entry/2023/02/22/085938

zlib_extraction.sh Magnifier - 引数のファイルに含まれるzlib圧縮部分を抽出・展開してファイルに保存する (1.768 KB) kanata, 2016/08/03 20:36

クリップボードから画像を追加 (サイズの上限: 100 MB)