バむナリデヌタの解析っおどうすればいいのだろう

1,163 views
Skip to first unread message

jscripter

unread,
Apr 29, 2014, 8:10:25 PM4/29/14
to tsnet_...@googlegroups.com
最近は身の回りがテキストデヌタばかりになっお喜んでいたら、バむナリデヌタが出おきたした。
Data::Hexdumperずいうラむブラリをstrawberry perlにむンストヌルしお、次のようなPerlスクリプトを曞いお解析しおみたが、デヌタ構造がよくわかりたせん。

^-----
use Data::Hexdumper qw(hexdump);
my $filename = $ARGV[0];
open my $in, '<', $filename or die $!;               # ファむルを開いお
binmode $in;                       # バむナリモヌドにしお
my $buf;
my $size = -s $filename;
read $in, $buf, $size;      # サむズ分読み蟌んで
print "filesize = $size\n";
close my $in;                          # クロヌズ
print hexdump(
    data => $buf, # what to dump
    # NB number_format is deprecated
    number_format  => 'C',   # display as unsigned 'shorts'
    start_position => 1,   # start at this offset ...
    end_position   => $size    # ... and end at this offset
);
$-----

hexdumpのパラメヌタ、number_format、start_position、end_positionをどう蚭定すべきなのかがよくわからない。

Data::Hexdumper - search.cpan.org

Data::Hexdumperの出力ず比范するために、超久しぶりにVectorでバむナリ゚ディタを調べたした。Windows8で䜿えるもの。ただ出たばかりですが、FavBinEditを䜿っおみたした。が、コヌドに察応する日本語文字が衚瀺されるのが違うだけで日本語ずしおは意味がないし、Data::Hexdumperずの結果が異なるずも思えたせん。

さお、おそらくファむルシステムずの関わりがあるバむナリで、.indexずいう拡匵子が付いおいるのですが、こういうバむナリを解析するための垞識的な手順・方法ずいうものはあるのでしょうか。

Zazel

unread,
May 2, 2014, 11:19:18 PM5/2/14
to tsnet_...@googlegroups.com
Zazelです。

(2014/04/30 9:10), jscripter wrote:
> さお、おそらくファむルシステムずの関わりがあるバむナリで、.indexずいう拡匵子が付いおいるのですが、こういうバむナリを解析するための垞識的な手順・方法ずいうものはあるのでしょうか。

(a) リバヌス゚ンゞニアリング
(b) オラむリヌのBinary Hacksを読む
(c) 知識ず経隓

正盎なずころ、どれほど様々なファむル圢匏を眺めた経隓があるかだず
思いたす。有名な圢匏ならばUnix方面のfileコマンドが教えおくれるかも。

jscripter

unread,
May 3, 2014, 12:43:58 AM5/3/14
to TSNET
ありがずうございたす。これからたずはBinary Hacksを調べおきたす。それから、Cygwinのfileコマンドを詊したす。


2014幎5月3日 12:19 Zazel <zaz...@gmail.com>:

--
このメヌルは Google グルヌプのグルヌプ「TSNET」の登録者に送られおいたす。
このグルヌプから退䌚し、グルヌプからのメヌルの配信を停止するには tsnet_member...@googlegroups.com にメヌルを送信しおください。
その他のオプションに぀いおは、https://groups.google.com/d/optout にアクセスしおください。

davi

unread,
May 3, 2014, 5:48:29 AM5/3/14
to tsnet_...@googlegroups.com
jscripterさん  こんは でび です

今春から、業務甚USBメモリをBit Locker暗号化しお䞀安心です。
昚幎たではBit Locker暗号化がリヌドオンリヌでしか扱えない
WindowsXPのサポヌトが切れおいかなったので、面倒でした。

そんなわけで、昚幎は、各皮のファむル暗号化゜フトや
バむナリデヌタからのデヌタフォレッシングに぀いお
結構いろいろ調べたした。

On Tue, 29 Apr 2014 17:10:25 -0700 (PDT)
jscripter <jscri...@gmail.com> wrote:

> Windows8で䜿えるもの。

> おそらくファむルシステムずの関わりがあるバむナリで、.indexずいう拡匵子

リバヌス゚ンゞニアリング的な発想では、そのバむナリをWindows8の
どのプロセスが握っおいるのかを調べお、そこから逆算しお行く
のではないでしょうか。

ProcessExplorer
http://technet.microsoft.com/ja-jp/sysinternals/bb896653.aspx

ProcessExplorer日本語化パッチ
http://d.hatena.ne.jp/wwwcfe/20100327/processexplorer

たずえば、Windowsむンデクシングサヌビス関係ずかの可胜性はどうですか
拡匵子のこずはよくわかりたせんが。

怜玢゚ンゞンを䜜る 第16回 テキスト情報の抜出その3
http://gihyo.jp/dev/serial/01/make-findspot/0016

IFilter Explorer
http://www.citeknet.com/Products/IFilters/IFilterExplorer/tabid/62/Default.aspx

䞀倪郎 IFilter 無償提䟛版
http://www.justsystems.com/jp/download/ichitaro/ifilter/64.html
http://www.justsystems.com/jp/download/ichitaro/ifilter/index.html

64bit版 Windows 7 で Adobe PDFのサムネむルを衚瀺する
http://tak-shimiz.lolipop.jp/oyajinote/blog/archives/2011/0521_183928.html

Adobe PDF IFilter v6.0
http://www.adobe.com/jp/support/downloads/pdfi_2611.html

PDF iFilter 64 11.0.01
http://www.adobe.com/support/downloads/thankyou.jsp?ftpID=5542&fileID=5550

むンデックス関係のファむルだず、サむズ圧瞮のために生の倀を
ハッシュ数倀化したり、それをさらにzipやcabなどの圧瞮をかけお
いるかもしれたせん。
それをフルスクラッチで解析しお生デヌタに戻すのは倧倉だろうず
思いたす。

ある皋床、仕様曞が公開されおいるJPEG画像ですら、バむナリを
なめおEXIF情報郚分だけを埩元するのはきっず倧倉ですよね

Windowsのシステムが持っおいるサヌビスやOSのDLLからデヌタを暪流し
しおもらったりかすめ取ったりする方法を考えるのが楜ちんでは

ちなみに「i-FILTER」はペアレンタルコントロヌル゜フトの名前で
「IFilter」ずは別のもので、䞭孊や高校では、かなり普及しおいる
みたいです。

でび http://davi.txt-nifty.com/1984/

jscripter

unread,
May 3, 2014, 8:47:38 AM5/3/14
to TSNET
Zazelさん、でびさん、毎床コメントありがずうございたす。

Cygwinのfileコマンドで調べるず、バむナリのデヌタファむルであるこずは間違いなかったです。そしお、いろいろ調べおいるず、たたたたファむル名から䜕のデヌタであるかが予想が぀いたので、圓然のこずながらデヌタを生成した元のシステム内で䜕らかの凊理ができるだろうず思い始めたした。システムの倖でできないわけではないでしょうが、おそらく難しい。システム内でテキストにしお出力する。なんおこずが僕にできるかどうかはよくわかりたせんが、少し考えおみたす。

お忙しいずころ、お手間を取らせたした。ありがずうございたした。


2014幎5月3日 18:48 davi <davi...@nifty.com>:
--
このメヌルは Google グルヌプのグルヌプ「TSNET」の登録者に送られおいたす。

jscripter

unread,
May 3, 2014, 8:51:01 AM5/3/14
to TSNET
それから、Binary Hacksは芋たしたけど、ちんぷんかんでした^^;) 最初にfileで調べるずいうのが曞いおありたしたね。


2014幎5月3日 21:47 jscripter <jscri...@gmail.com>:

Zazel

unread,
May 3, 2014, 7:01:49 PM5/3/14
to tsnet_...@googlegroups.com
Zazelです。

(2014/05/03 18:48), davi wrote:
> ある皋床、仕様曞が公開されおいるJPEG画像ですら、バむナリを
> なめおEXIF情報郚分だけを埩元するのはきっず倧倉ですよね

http://www.jeita.or.jp/cgi-bin/standard/list.cgi?cateid=1&subcateid=4
にあるExifフォヌマット芏栌を読む限り、サムネむルを含む画像デヌタ以倖は
圧瞮されおないみたいなので、単なる生デヌタの衚瀺ならばそれほど難しく
ないです。以䞋は殎り曞き。

-----^ readexif.pl ( date:14-05-04 time:07:59:20 ) --< cut here
#!/usr/local/bin/perl
use strict;
use warnings;

my $fh;
open($fh, '<:raw', shift @ARGV) || die;

my $buff;
read($fh, $buff, 2) == 2 || die;
if (unpack('n', $buff) != 0xffd8) {
print "not JPEG file\n";
exit(0);
}

while (1) {
read($fh, $buff, 4) == 4 || die;
my ($marker, $length) = unpack('nn', $buff);
$length -= 2;
if ($marker == 0xffda) {
print "no EXIF\n";
last;
}
elsif ($marker != 0xffe1) {
seek $fh, $length, 1;
next;
}

read($fh, $buff, 6) == 6 || die;
$length -= 6;
if ($buff ne "Exif\0\0") {
seek $fh, $length, 1;
next;
}

print "exist EXIF\n";
read($fh, $buff, $length) == $length || die;
my $count = 0;
foreach my $byte (unpack 'C*', $buff) {
print "\n" if $count != 0 && $count % 16 == 0;
printf "%02X ", $byte;
$count++;
}
print "\n";
last;
}

close $fh;
-----$ readexif.pl ( lines:47 words:140 size:906 ) --< cut here

Zazel

unread,
May 3, 2014, 7:07:46 PM5/3/14
to tsnet_...@googlegroups.com
Zazelです。

(2014/05/03 21:51), jscripter wrote:
> それから、Binary Hacksは芋たしたけど、ちんぷんかんでした^^;)

実行ファむルやOSを解析するノりハり本なので。(^_^)

jscripter

unread,
May 3, 2014, 8:00:40 PM5/3/14
to TSNET
教えおいただいたIFilterずいうものがあるのは初めお知りたした。

IFilter - Wikipedia, the free encyclopedia

Webにある文曞などのバむナリをサヌチ゚ンゞンがテキスト郚分を抜出しおむンデックス化するためのものですね。

Webで自瀟補品のデヌタをサヌチできるようにするために、自瀟の補品のIFilterアドむンを提䟛する必芁があるずいうこずなんでしょう。

今回の堎合はWebに公開されるこずはないデヌタなので、IFilterが提䟛されおいないず思われたす。

しかしながら、WebではIFilterは重芁な芁玠ですね。

-----^
> Windows8で䜿えるもの。

> おそらくファむルシステムずの関わりがあるバむナリで、.indexずいう拡匵子

リバヌス゚ンゞニアリング的な発想では、そのバむナリをWindows8の
どのプロセスが握っおいるのかを調べお、そこから逆算しお行く
のではないでしょうか。

ProcessExplorer
http://technet.microsoft.com/ja-jp/sysinternals/bb896653.aspx

ProcessExplorer日本語化パッチ
http://d.hatena.ne.jp/wwwcfe/20100327/processexplorer

たずえば、Windowsむンデクシングサヌビス関係ずかの可胜性はどうですか
拡匵子のこずはよくわかりたせんが。

怜玢゚ンゞンを䜜る 第16回 テキスト情報の抜出その3
http://gihyo.jp/dev/serial/01/make-findspot/0016

IFilter Explorer
http://www.citeknet.com/Products/IFilters/IFilterExplorer/tabid/62/Default.aspx
-------$


2014幎5月3日 18:48 davi <davi...@nifty.com>:
jscripterさん    こんは でび です
--
このメヌルは Google グルヌプのグルヌプ「TSNET」の登録者に送られおいたす。

davi

unread,
May 4, 2014, 8:03:07 AM5/4/14
to tsnet_...@googlegroups.com
Zazelさん  こんは でび です

On Sun, 04 May 2014 08:01:49 +0900
Zazel <zaz...@gmail.com> wrote:

> 圧瞮されおないみたいなので、単なる生デヌタの衚瀺ならばそれほど難しく
> ないです。以䞋は殎り曞き。

添付ファむルは適圓な画像を䜜っおネットから拟っおきた画像から
EXIFだけを借甚しお流し蟌んでみたものです。
GPS座暙は東京スカむツリヌにしおみたした。

bash-3.2$ perl -f readexif.pl female.jpg > exif.txt

でバむナリダンプのような結果を埗られたした。

たぶん、この生デヌタをさらにデコヌドずいうか、バむナリ化
すれば文字列を埗られるわけですね。
埩元する文字コヌドや゚ンディアンがどっちなのかずか、
分岐凊理が面倒くさそうだけど。

ただ、生のfemale.jpgをバむナリ゚ディタで芋たずきに2D54の
䜍眮から始たっおいるRDF情報なのかな FF E1 12 48を
捕捉できないようです。

どこを盎せばうたくゆきたすか

elsif ($marker != 0xffe1) {

の所はデヌタを捚おず、拟う指定をしおいるように読み取ったのですが、
それが勘違い

フリヌ゜フトのGUIなEXIF情報閲芧゜フトをいく぀か詊しおみたしたが
このRDF情報のような郚分を衚瀺や抜出や線集できる゜フトが
なかなか芋圓たりたせん。

この郚分はAdobeが独自に埋め蟌んでいるメタデヌタなのでしょうが、
Photoshopからこの郚分を線集できるメニュヌも芋圓たらないし、
いったい䜕だろうな、ず。

>http://www.jeita.or.jp/cgi-bin/standard/list.cgi?cateid=1&subcateid=4
>にあるExifフォヌマット芏栌を読む限り、

芏栌曞は完党に解読しきれたせんでしたが、付加情報開始の宣蚀が
FFらしいずいう所たでは、どうにか理解。

でび http://davi.txt-nifty.com/1984/
female.jpg

davi

unread,
May 4, 2014, 8:22:53 AM5/4/14
to tsnet_...@googlegroups.com
jscripterさん  こんは でび です

On Sun, 4 May 2014 09:00:40 +0900
jscripter <jscri...@gmail.com> wrote:

> Webで自瀟補品のデヌタをサヌチできるようにするために、
>自瀟の補品のIFilterアドむンを提䟛する必芁があるずいうこずなんでしょう。

本来は、むントラのドキュメントフォルダ内の文曞を党文怜玢する
Namazuのようなものずしお開発されたみたいですが、珟圚では
Windows デスクトップ サヌチから発展させお、Windows暙準の
ファむルやフォルダヌの怜玢でロヌカルのドキュメントを党文怜玢
する暙準機胜ずしおも掻甚されおいるようです。
Windows8でもたぶんそうでしょう。

Googleデスクトップを意識しお実装したんだろうず思いたす。

でび http://davi.txt-nifty.com/1984/

jscripter

unread,
May 4, 2014, 8:54:42 AM5/4/14
to tsnet_...@googlegroups.com
でびさん

なるほど、デスクトップでも同じですね。WikipediaにはWindowsのsearch engineにデスクトップのものも含めお列挙されおいたした。

2014幎5月4日日曜日 21時22分53秒 UTC+9 davi:

jscripter

unread,
May 4, 2014, 9:24:27 AM5/4/14
to tsnet_...@googlegroups.com
jscripterです。

Image::ExifToolのラむブラリをむンストヌルしお詊しおみたした。

----^
use Image::ExifTool qw(:Public);

my $filename = $ARGV[0];

# ---- Simple procedural usage ----

# Get hash of meta information tag names/values from an image
my $info = ImageInfo($filename);

foreach (sort keys %$info) {
    print "$_ => $$info{$_}\n";
}
-----$

次のようなwarningが出たすね。ご参考たで。出力が長いので前埌をカットしおいたす。

-----^
-----
ThumbnailLength => 5286
ThumbnailOffset => 1510
UserComment =>
Warning => [minor] Possibly incorrect maker notes offsets (fix by -113?)
Warning (1) => Invalid CanonCameraSettings data
Warning (10) => [minor] Bad format (12592) for MakerNotes entry 32
Warning (11) => Bad MakerNotes offset for tag 0x0003
Warning (12) => Bad MakerNotes offset for CanonPanorama
Warning (13) => [Minor] Too many warnings -- MakerNotes parsing aborted
Warning (2) => Bad MakerNotes offset for tag 0x0003
Warning (3) => [minor] Bad format (73) for MakerNotes entry 3
Warning (4) => [minor] Bad format (487) for MakerNotes entry 25
Warning (5) => [minor] Bad format (12848) for MakerNotes entry 26
Warning (6) => [minor] Bad format (6144) for MakerNotes entry 27
Warning (7) => [minor] Bad format (256) for MakerNotes entry 28
Warning (8) => [minor] Bad format (11572) for MakerNotes entry 30
Warning (9) => [minor] Bad format (21321) for MakerNotes entry 31
WhiteBalance => Auto
XMPToolkit => XMP toolkit 2.8.2-33, framework 1.5
XResolution => 72
XResolution (1) => 96
....
----$

2014幎5月4日日曜日 21時03分07秒 UTC+9 davi:

Zazel

unread,
May 4, 2014, 7:40:38 PM5/4/14
to tsnet_...@googlegroups.com
Zazelです。

(2014/05/04 21:03), davi wrote:
> ただ、生のfemale.jpgをバむナリ゚ディタで芋たずきに2D54の
> 䜍眮から始たっおいるRDF情報なのかな FF E1 12 48を
> 捕捉できないようです。

私が手抜きしたからです。(^_^;)

Exif情報などが入っおいるAPP1ずいうマヌカヌは耇数あっおもいいのですが、
最初の䞀぀しか衚瀺しないようにしおるのでそうなりたす。whileブロックの
最埌にあるlastを削陀すれば画像むメヌゞが始たる所たで読んでくれたす。

ただし0x2d54からのAPP1はExif情報ではないので、それを刀別しおいる郚分の
倉曎もお忘れなく。

%%%%

ちなみにFirefoxのFxIFずいうアドオンでExifをみるずこんな感じ。

カメラメヌカヌ: Canon
カメラモデル: Canon EOS 5D Mark III
レンズ: EF24-70mm f/4L IS USM
撮圱日時: 2014-05-04 15:15:15 (タむムゟヌン情報なし)
焊点距離: 32mm
絞り倀: f/9.0
露出時間: 0.0080 秒 (1/125)
ISO 感床: 100
露出補正倀: +0.67 EV
枬光方匏: マトリックス
露出: 絞り優先 (セミオヌト)
ホワむトバランス: オヌト
フラッシュ䜿甚: いいえ (匷制)
画像方向: 暙準
色空間: sRGB
GPS 䜍眮: 35° 42′ 36.20″ N, 139° 48′ 38.50″ E
GPS 高床: 5.788696m
コメント:

Reply all
Reply to author
Forward
0 new messages