メモです

バイナリとかを調べてみます

ホゲゆに - UNIXハック道。アレも、これもUNIX化!UNIX(非)活用術。

ichiro.nnip.org

UNIXの世界を楽しみながら探求してみよう。
本書では、UNIXの世界を楽しむため、いくつかのUNIX化の事例を解説しています。
ユーモアやジョークを交えて、楽しみながら、UNIXを知ることができます。
これからUNIXに触れる初心者にはUNIXにハマるための読み物として、
中級者にはハッキング手引きとして、
思わずニヤリとしながら楽しむことができる本です。
  • 目次
ごあいさつ
本書の読み方
第1章 もうXつかわない
第2章 地球を守るvi入門
第3章 PDP-11で体験する創世記のUNIX
第4章 No Unix, No Life!いろんなものをUnix化する
第5章 MINIXで始めるカーネル・ハック

  • ごあいさつ
    • この書籍は「萌えないUnix」というタイトルを具現化したもの。
    • つまり、Unixそのものに萌えるので、軽率なイラストを廃した格調高い誌面となっている。
    • 「ホゲる」=「hackする」という意味。
    • 「ホゲる」とは、Unixを通じて知的な探究を楽しむこと。
    • ハッカーにとってはUnixは最高のオモチャである。
    • Let's Enjoy Happy Hacking!

  • 本書の読み方

  • 第1章 もうXつかわない
1.1 人はコンソールに還る
1.2 GNU Screenでコンソール富豪になる
1.3 コンソール de インターネット
1.4 コンソール de マルチメディア
  • 1.1 人はコンソールに還る
Windows化するUnix
突然ですが、さようならX
日本語だって使いたい - kon
広々&高機能で日本語表示 - jfbterm
emacsで日本語を入力する
アンチemacs派も安心 - skkfep

NOTE Linux, System V系Unixランレベル
NOTE FreeBSD 5.xでkonを使う
NOTE Linuxカーネルフレームバッファバイスを有効にする

COLUMN Xを使った似非コンソール
  • Windows化するUnix
    • Unixはコンソールに始まりコンソールに終わる。
    • X上でGNOMEKDEを動かすことはWindowsのパクリだでは。
    • みんな、XにWindowsに流されちゃってる(気がする)。

  • 突然ですが、さようならX
    • Xをディスクから削除する勇気はないので、
    • Linux, FreeBSDには「仮想コンソール」という機能があるのでそれを利用しよう。
      • 「仮想コンソール」機能を使うことで、複数のコンソール画面を切り替えながら使うことができる。
      • X実行中でも、Ctrl-Alt-F1, Ctrl-Alt-F2,...と仮想コンソールは7個か8個使うことができるはず。
      • 仮想コンソールからXに戻るには、Ctrl-Alt-F7かCtrl-Alt-F8を押す。

  • 第2章 地球を守るvi入門
2.1 viは環境に優しい
2.2 カーソル位置の移動
2.3 テキストの追加と変更
2.4 ファイルとシェルの操作
2.5 vi実用テクニック
オマケ・求道者のためのed入門

  • 第3章 PDP-11で体験する創世記のUNIX
3.1 3分で振り返るUNIXの歴史
3.2 PDP-11にUNIX V7をインストール
3.3 UNIX V7を探検する
3.4 viの感動を味わおう - 2BSDのインストール

  • 第4章 No Unix, No Life!いろんなものをUnix化する
4.1 犠牲者1 - DoCoMo Sigmarion II
4.2 犠牲者2 - Apple iPod
4.3 犠牲者3 - NINTENDO GAMECUBE
4.4 考察 - Much more Unixen in your life!

5.1 MINIXアーキテクチャ
5.2 QEMUMINIXをインストールする
5.3 MINIXの環境設定
5.4 カーネルハック事始め - シリアルコンソールに挑戦
5.5 MINIXは「終わった」のか?

ゲームで学ぶ探索アルゴリズム実践入門-第2章 開発環境の準備

  • サンプルコードはC++で実装されている。
  • サンプルコードを実行しながら理解できるように、C++の開発環境を構築する。
  • Windows Subsystem for Linux (WSL)のインストール
    • macOSの初期状態では、GCC版のg++ではなく、Clang版のg++が動作する。
    • Windows 11またはWindows 10 バージョン2004(ビルド19041以降)ではWSLが利用可能。
エディション	Windows 10 Home
バージョン	22H2
インストール日	2023/02/27
OS ビルド	19045.2673
エクスペリエンス	Windows Feature Experience Pack 120.2212.4190.0
  • WSLが利用可能かを確認する。
    • コマンドプロンプトを起動(一般ユーザ権限でOK)して、wslと入力して、wslの利用方法が表示されたということは、WSLはまだインストールされていないということ。
>wsl

Copyright (c) Microsoft Corporation. All rights reserved.

使用方法: wsl.exe [Argument]

引数:

    --install 
・・・
  • CPUの仮想化機能の確認
    • WSL2を利用するには、CPUの仮想化機能を有効にする必要がある。
      • CPUの仮想化機能が有効かを確認する。
      • タスクマネージャ(Control-Alt-Delete)→ 詳細 → 「パフォーマンス」タブ → 仮想化:有効 !になっているのでOK。「無効」ならBIOSの設定が必要となる。
>wsl --install
要求された操作には管理者特権が必要です。
インストール中: 仮想マシン プラットフォーム
仮想マシン プラットフォーム はインストールされました。
インストール中: LinuxWindows サブシステム
LinuxWindows サブシステム  はインストールされました。
インストール中: LinuxWindows サブシステム
LinuxWindows サブシステム  はインストールされました。
インストール中: Ubuntu
Ubuntu はインストールされました。
要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。
Ubuntu は既にインストールされています。
Ubuntu を開始しています...
Installing, this may take a few minutes...
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username: whoami
New password:
Retype new password:
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.90.1-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

This message is shown once a day. To disable it please create the
/home/whoami/.hushlogin file.
whoami@PC-NAME:~$
Microsoft Windows [Version 10.0.19045.2673]
(c) Microsoft Corporation. All rights reserved.

C:\Users\whoami>wsl
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

whoami@PC-NAME:/mnt/c/Users/whoami$
  • パッケージの一覧を更新
$ sudo apt update
$ sudo apt upgrade -y # インストール済みのパッケージが最新版に更新される。
  • C++開発環境のインストール
    • GCC版のg++をインストールする(g++だけではないけれど)。
    • g++のバージョンは、11.3.0
$ sudo apt install build-essential

$ g++ --version
g++ (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0

OllyDbgでバイナリを追う(「デバッガによるx86プログラム解析入門」)

www.shuwasystem.co.jp

OllyDbgのインストールと日本語化
BOOKMARK.DLL
Cmdline.dll
dbghelp.dll
license.txt
OLLYDBG.EXE
OLLYDBG.HLP
PSAPI.DLL
readme.txt
register.txt
  • OllyDbgの設定情報はレジストリではなくINIファイル("ollydbg.ini")に保存される仕様、関連ファイルはインストールフォルダに集約される。
  • OllyDbgを起動せずに、日本語化に進むこと、OllyDbgは起動すると、終了時に自動で設定を保存する仕様になっているため。
  • OllyDbg日本語化パッチの入手と適用
j10n140106.zip
OllyDbg110_J.EXE
Ver1.10J.txt
    • OllyDbgフォルダ("C:\APP\Olly\")に移動する。
    • j10n140106.zipは、OllyDbgでプログラムが参照する日本語文字列を表示可能にするプラグイン"xj10n.dll"なのでこれもOllyDbgフォルダ("C:\APP\Olly\")に置く。
j10n.txt
j10n140_src.zip
xj10n.dll
    • OllyDbg110_J.EXEを実行する。
    • OllyDbg.EXEを起動して、フォントの設定を行う。
      • OllyDbgを右クリックして、管理者権限で実行する。
      • オプション→環境設定→フォント→Terminal 6が選択されている状態で、「変更」ボタンをクリック→MS ゴシック→標準→11ポイント

p.006 pefileを使ってPEフォーマットを分析(マルウェアデータサイエンス)

www.malwaredatascience.com
まず、VMova(BookVM.ova)を上のページ(Ubuntu Virtual Machine)からダウンロードしておく。
このダウンロードがなかなか出来ない。
BookVM.ovaVBにインポートする。
そして、VMを起動させ、
上のページにかかれているように、

The username is "osboxes.org" and the password is "osboxes.org".

ということで進める。

まず、デバイスクリップボード共有を双方向に設定して、
VMをrebootする。
これでターミナルの文字をコピペできるようになる。

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="17.10 (Artful Aardvark)" # と分かる。
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 17.10"
VERSION_ID="17.10"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=artful
UBUNTU_CODENAME=artful
$ pwd
/home/osboxes

osboxes@osboxes:~$ ls -lF
total 12
drwxr-xr-x  2 osboxes osboxes 4096 Oct 22  2017 Desktop/
drwxr-xr-x  2 osboxes osboxes 4096 Oct 22  2017 Downloads/
drwxr-xr-x 12 osboxes osboxes 4096 Sep  3  2018 malware_data_science/ # サンプルコードなどがすでにある。

$ ls -lF malware_data_science/
total 40
drwxr-xr-x 2 osboxes osboxes 4096 Sep  3  2018 ch1/
drwxr-xr-x 4 osboxes osboxes 4096 Sep  3  2018 ch11/
drwxr-xr-x 2 osboxes osboxes 4096 Sep  3  2018 ch2/
drwxr-xr-x 2 osboxes osboxes 4096 Sep  3  2018 ch3/
drwxr-xr-x 4 osboxes osboxes 4096 Sep  3  2018 ch4/
drwxr-xr-x 4 osboxes osboxes 4096 Sep  3  2018 ch5/
drwxr-xr-x 2 osboxes osboxes 4096 Sep  3  2018 ch6/
drwxr-xr-x 2 osboxes osboxes 4096 Sep  3  2018 ch7/
drwxr-xr-x 4 osboxes osboxes 4096 Sep  3  2018 ch8/
drwxr-xr-x 4 osboxes osboxes 4096 Sep  3  2018 ch9/
1.2 pefileを使ってPEフォーマットを分析する

github.com

    • ch1/ircbot.exeを分析する。
$ pip -V
pip 9.0.1 from /usr/lib/python2.7/dist-packages (python 2.7)

$ pip list installed | grep pefile
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
pefile (2017.11.5)

$ pip install pefile # VMには既にインストールされているので、これを実行する必要はない。
$ cd ~/malware_data_science/ch
$ ls
fakepdfmalware.exe  fakeword.exe  ircbot.exe

$ python --version
Python 2.7.14

$ python
>>> import pefile
>>> pe = pefile.PE("ircbot.exe")

>>> for section in pe.sections:
...     print(section.Name, hex(section.VirtualAddress), hex(section.Misc_VirtualSize), section.SizeOfRawData)
... 
('.text\x00\x00\x00', '0x1000', '0x32830', 207360)
('.rdata\x00\x00', '0x34000', '0x427a', 17408)
('.data\x00\x00\x00', '0x39000', '0x5cff8', 10752)
('.idata\x00\x00', '0x96000', '0xbb0', 3072)
('.reloc\x00\x00', '0x97000', '0x211d', 8704)

Ghidra on Win10、インストール

JavaをWin10にインストール

learn.microsoft.com
ここの、
Winのx64のmsiをダウンロードする。
現時点では、17.0.6が最新バージョンみたい。
https://aka.ms/download-jdk/microsoft-jdk-17.0.6-windows-x64.msi
インストーラに従いインストールするだけ。
PCのリブートとかは必要なし。

Ghidraのインストール

github.com
こちらに行き、
10.2.3が最新バージョンみたいなので、
これをダウンロードする。
https://github.com/NationalSecurityAgency/ghidra/releases/download/Ghidra_10.2.3_build/ghidra_10.2.3_PUBLIC_20230208.zip
zipを展開すると、
置き場所は下みたいな感じで、
"C:\Ghidra\ghidra_10.2.3_PUBLIC_20230208\"
ghidraRun.bat
があるので、
これをダブルクリックするとGhidraが起動する。
(タスクバーにピン留めができないが。。。)

p.28 表層解析-文字列の抽出(「初めてのマルウェア解析」)

文字列とはファイルに埋め込まれたASCIIおよびUnicodeで表現可能な文字列のこと。

stringsコマンドによる文字列の抽出(Linux
  • stringsコマンドはデフォルトで4文字以上のASCII文字列を抽出する。
  • -aオプションによりファイル全体から文字列を抽出する。
  • -elオプションによりUnicode(1文字あたり2バイト)文字列を抽出する。
$ strings HxD.exe | grep ^[^._] | less
This program must be run under Win64
`.data
@.pdata
@.rsrc
Boolean
False

$ strings -a -el HxD.exe | grep ^[^._] | less
pestudioによる文字列の抽出(Windows

https://www.winitor.com/

  • ASCIIとUnicode両方に対応。
  • pestudio以外にもWindowsに移植されたstringsコマンドやPPEEというツールもある。

p.22 表層解析-マルウェアのフィンガープリント(「初めてのマルウェア解析」)

フィンガープリント

ツールによるハッシュ値生成
  • Linuxはmd5sum, sha256sum, sha1sum
$ md5sum HxD.exe 
86408be71abc0d8cbd60914e51500ef0  HxD.exe

$ sha256sum HxD.exe 
0c0d54b28674f9311e7dc9b164bc711d04ed1f1281ac3e8ea5a1435ed1c4bad9  HxD.exe

$ sha1sum HxD.exe 
eac1d136f9ec432fa0256c4aab53ec5e84db2f85  HxD.exe
  • Winは色々あるが、HashMyFilesがいいらしい。

https://www.nirsoft.net/utils/hashmyfiles.zip
zipを展開すると、
hashmyfile.exe
が出来上がる。

日本語化のためには、
https://www.nirsoft.net/utils/trans/hashmyfiles_japanese.zip
このzipを展開して、
出てきた、
HashMyFiles_lng.ini
をhasymyfile.exeと同じフォルダに入れるだけ。

同じハッシュ値を持つファイルは同じ色で強調表示してくれる。

Pythonによるハッシュ値生成
>>> import hashlib
>>> content = open(r"HxD.exe","rb").read()
>>> print hashlib.md5(content).hexdigest()
86408be71abc0d8cbd60914e51500ef0

>>> print hashlib.sha256(content).hexdigest()
0c0d54b28674f9311e7dc9b164bc711d04ed1f1281ac3e8ea5a1435ed1c4bad9

>>> print hashlib.sha1(content).hexdigest()
eac1d136f9ec432fa0256c4aab53ec5e84db2f85