SlideShare ist ein Scribd-Unternehmen logo
1 von 40
Downloaden Sie, um offline zu lesen
言い訳
勉強会窓にkonoizさん追加し忘れていたことに
今気がついてしまったんですよ
明日15:00からですが参加しますか
私も資料今から作るのでいけます
その理屈はおかしい
昨日の22時頃…
言い訳
一応昨日の夜から資料つくり始めたんですけど作っ
てる途中で「あ、これダメだ」ってなったのを二
つほどボツにして昼ごろにこの資料を作り始めた
のではやい話が準備不足とかいうレベルじゃなく
てまともな資料ができてないし何より話す内容も
ちゃんと考えてないからこの後どうなるか私にも
皆目検討が付かなくてつまり何が言いたいかって
いうと先に謝っときますごめんなさい
目grep
by @konoiz
公開版: 青のボックスで
幾つか補足をつけてます。
目grepとは
• 早い話がバイナリエディタでバイナリを見ること
• 目でバイナリをgrepする
※grep: テキストファイルから文字列を検索するUNIXコマンド
補足: 単に「目でgrep」という事なので、実際はバイ
ナリに限った言葉ではない。身近な所だと「合格発表
の掲示から受験番号を探す」のも一種の目grep。
バイナリ見たことありますか?
とりあえず見てみる
• バイナリエディタで開いてみる
• WindowsならBzやStirling
• MacならiHexや0xED
• UNIX系ならhexdumpコマンド
とりあえず見てみる
• 今から4種類のバイナリを表示します
• 分かったら答えてください
1バイトを1ドットとしてbitmap表示
0x00(null)が白
0x01 - 0x1F (ASCII制御文字)が水色
0x20 - 0x7F (ASCII文字)が赤
0x80 - 0xFF が黒
補足: 真ん中はバイナリを16進表記にして1バイト毎
に区切ったもの、右側はそれをASCIIと解釈して文字
にしたもの(ASCIIに存在しないものは.で表示)
今ので初級編
初級編……?
• 実は4つとも右側のASCIIのところに答えが出
てる
• ファイルの区別用のシグネチャ(ヘッダ)がすご
く独特な奴ら
思いっきりPNGってかいてある
圧縮されているためバイト列がランダム
になってbitmapにするとぐちゃぐちゃ
思いっきりPDFってかいてある
PDFは複数のオブジェクトで構成され、そ
のオブジェクトのヘッダにはASCII文字が
そのまま入っているため、赤い帯が出現
細かなデータは圧縮されているのでぐちゃ
WindowsまたはMS-DOCのEXE
ファイルを示すシグネチャ
Windows用であることを示す文言
(DOSで実行すると表示される)
見る人が見ればx86_64であること
がわかるらしい
補足: 実はここにPE00というWindows用EXEである事を示すシグネチャがある。その直
後の0x4c 0x01はi386である事を示す……って書いてて気づいたけどこのファイルx86_64
じゃなかった。ごめんなさい。x86_64ならここは0x64 0x86(LEで0x8664)になります。
zipを示すシグネチャ
開発者のPhil Katzさんに由来
圧縮されているのでぐちゃぐちゃ
補足: 正確にはPKWAREのPKさんが作った
PKZIPというソフトのファイルなのでPK
補足: 中に入ってるファイルのパスがそのまま書かれてる
のが見えるので、このzipの中には動画ファイルが入ってる
事がわかる。ちなみにlollipops.wmvはCS1.6という古い
FPSゲームの動画 -> nicovideo.jp/watch/sm7138456
中級編
わかりました?
中級編
• 実は4つともテキストファイル
• 1番目以外は内容も同じ
• 文字コードが違う
補足:2∼4番目のファイルの正体はWindowsのライセンス文で、
C:¥Windows¥System32¥License.rtfをplain textにしてメモ帳で保存
しなおしたもの。ちなみにメモ帳では名前をつけて保存する際にファイ
ル名と一緒に文字コードを指定できるが、日本語版Windowsでは選択肢
のうちANSIがShift_JISを、UnicodeがUTF-16の事を指している。
ASCIIのテキストファイルなので
そのまま表示できてる
(よく見るとCSVなのもわかる)
文字だけなので真っ赤
時々改行コードの水色
ASCII部分はそのまま表示
ASCII文字と区別するためのMSB
が立ってるせいで黒っぽい
ひらがなの82xxや片仮名の83xx
が多く出現する
Shift_JIS
補足: 実はBZの場合、表示メニューから右側で表示する文字コード
を変更する事ができる。テキストっぽいと思ったらとりあえずSJIS
やUTF-8を試すと良い。文字コード指定は大抵のエディタで可能。
UTF-8
ASCII部分はそのまま表示
かなり黒っぽい
ひらがなのE3 81 xxや片仮名の
E3 83 xxが多く出現する
補足: 実は0xEFBBBFはBOMでUTF-8でしか出てこないので、ここ
で判断する事が可能。ただし、UTF-8はBOM無しの場合が多い。
UTF-16
BOM (Byte Order Mark)
FF FEまたはFE FF
ASCII部分は文字の前にnullが付
いて飛び飛びに見える
基本的に赤っぽい
ASCII文字が入ってるとnullのせい
で白のシマシマができる
上級編
どうでしょう?
上級編
• 実はどちらもLinuxの実行ファイル
• プログラムの内容も同じ
• アーキテクチャが違う
x86な実行ファイルはぐちゃぐちゃ
(命令が可変長のため)
x86
実行ファイルであることを示すシグネチャ
8バイト目が00
Linuxを示すマジックナンバー
ちなみにFreeBSDだと09
補足: 正式名称はExecutable and Linkable Format。
名前にLinkableとある通り共有ライブラリ(拡張子.so等)
などの場合もあるので、単体で実行できるとは限らない。
実行ファイルであることを示すシグネチャ
armは命令が固定長なので縦が う
8バイト目が00
Linuxを示すマジックナンバー
ちなみにFreeBSDだと09
arm
補足: 実際には縦が ってるだけではRISC系であろうことがわかる
だけでarmであることまでは特定できない。きちんと特定するには
ELFヘッダのe_machine (0x12)を見て値が0x28であることを確認
する。ちなみに、x86(i386)は0x03、x86_64 (amd64)は0x3e。
詳細はelf formatやelf-em.hなどでググると良い。
で、これ何に使うの?
用途
• 普通は必要ない
• セキュリティ系CTFとかでるなら必要
• リバースエンジニアリングする時とかには役に立
つかもしれない
• 個人的にはゲームとかでよくある のdatファイル
なんかを覗いて遊んだりしてます
補足: CTFのように意図的にヘッダ
が取り除かれていたり、ファイルが破
損したりているケースを除けば、大抵
はfileコマンドを使用して容易にフォー
マットを特定する事が可能。
メリット
• 普段から目grepしてると色んなファイルの
ファイルフォーマットが覚えられる
➡ 特定のファイルフォーマットを(バイナリレ
ベルで)弄るプログラムをすぐ書けるように
➡ まぁ今時そんなことする機会はあんまりない
今日からバイナリの世界へ…

Weitere ähnliche Inhalte

Was ist angesagt?

画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないことNorishige Fukushima
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Yoshifumi Kawai
 
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングなぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングSatoshi Kodaira
 
UniTask入門
UniTask入門UniTask入門
UniTask入門torisoup
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践Yoshifumi Kawai
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnity Technologies Japan K.K.
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作るtorisoup
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説murachue
 
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術Unity Technologies Japan K.K.
 
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~torisoup
 
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-torisoup
 
MapboxVectorTileで陸・海・空を制覇せよ
MapboxVectorTileで陸・海・空を制覇せよMapboxVectorTileで陸・海・空を制覇せよ
MapboxVectorTileで陸・海・空を制覇せよAyumiShibamoto
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理torisoup
 
Assembly Definition あれやこれ
Assembly Definition あれやこれAssembly Definition あれやこれ
Assembly Definition あれやこれNakanoYosuke1
 
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメントヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメントhistoria_Inc
 

Was ist angesagt? (20)

画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
 
猫でも分かる UE4のAnimation Blueprintの運用について
猫でも分かる UE4のAnimation Blueprintの運用について猫でも分かる UE4のAnimation Blueprintの運用について
猫でも分かる UE4のAnimation Blueprintの運用について
 
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングなぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
 
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
[4.20版] UE4におけるLoadingとGCのProfilingと最適化手法
 
UniTask入門
UniTask入門UniTask入門
UniTask入門
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
Unityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTipsUnityでパフォーマンスの良いUIを作る為のTips
Unityでパフォーマンスの良いUIを作る為のTips
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
 
UE4とUnrealC++について
UE4とUnrealC++についてUE4とUnrealC++について
UE4とUnrealC++について
 
目grep入門 +解説
目grep入門 +解説目grep入門 +解説
目grep入門 +解説
 
UE4のスレッドの流れと Input Latency改善の仕組み
UE4のスレッドの流れとInput Latency改善の仕組みUE4のスレッドの流れとInput Latency改善の仕組み
UE4のスレッドの流れと Input Latency改善の仕組み
 
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
【Unity道場スペシャル 2017京都】最適化をする前に覚えておきたい技術
 
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
 
未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-未来のプログラミング技術をUnityで -UniRx-
未来のプログラミング技術をUnityで -UniRx-
 
MapboxVectorTileで陸・海・空を制覇せよ
MapboxVectorTileで陸・海・空を制覇せよMapboxVectorTileで陸・海・空を制覇せよ
MapboxVectorTileで陸・海・空を制覇せよ
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理
 
Assembly Definition あれやこれ
Assembly Definition あれやこれAssembly Definition あれやこれ
Assembly Definition あれやこれ
 
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメントヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
ヒストリア HelixCore(Perforce) 運用レギュレーションドキュメント
 
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
猫でも分かるUE4を使った VRコンテンツ開発 超入門編 2021
 

目grepのはなし