KaliLinuxでIDA-Demoを使う

環境

おそらくDebian系ならこれでできると思う

IDA Demo 6.95 for Linuxをダウンロードする

$ mkdir temp
$ cd temp
$ wget https://out7.hex-rays.com/files/idademo695_linux.tgz
$ tar xvzf idademo695_linux.tgz
$ cd idademo695

ソースではなく実行形式が含まれているので

$ ./idaq

で実行できるがこのKaliLinuxのバージョンではライブラリ等が足りないので

 bash: ./idaq: そのようなファイルやディレクトリはありません

となる。

本記事はこれを実行できるように試行錯誤したものなので、

結果だけ知りたいという人は最後のコマンドを実行してください

前準備

$ apt update
$ apt upgrade

ライブラリのインストール

IDA-Demoでは32ビットのライブラリが必要なので

$ dpkg -S libgthread-2.0.so.0
libglib2.0-0:amd64: /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0.4800.1
libglib2.0-0:amd64: /usr/lib/x86_64-linux-gnu/libgthread-2.0.so.0

dpkgでライブラリが含まれているパッケージを探す今回は

$ apt install libglib2.0-0:amd64
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
libglib2.0-0 はすでに最新バージョン (2.48.1-2) です。
libglib2.0-0 は手動でインストールしたと設定されました。
アップグレード: 0 個、新規インストール: 0 個、削除: 0 個、保留: 0 個。

amd64だけではなくi386も必要なので

$ apt install libglib2.0-0:i386
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
E: パッケージ libglib2.0-0:i386 が見つかりません
E: 'libglib2.0-0' に一致するパッケージは見つかりませんでした
E: 正規表現 'libglib2.0-0' ではパッケージは見つかりませんでした

OSが64ビットなので32ビットのパッケージのリポジトリは追加されていないのでみつからない、なので

$ dpkg --add-architecture i386
$ apt update
ヒット:1 http://ftp.ne.jp/Linux/packages/kali/kali kali-rolling InRelease
取得:2 http://ftp.ne.jp/Linux/packages/kali/kali kali-rolling/main i386 Packages [13.9 MB]
取得:3 http://ftp.ne.jp/Linux/packages/kali/kali kali-rolling/non-free i386 Packages [135 kB]
取得:4 http://ftp.ne.jp/Linux/packages/kali/kali kali-rolling/contrib i386 Packages [86.7 kB]
14.1 MB を 11秒 で取得しました (1,186 kB/s)                                    
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています       
状態情報を読み取っています... 完了
パッケージはすべて最新です。

追加してからもう一度インストールする

$ apt install libglib2.0-0:i386
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  gcc-6-base:i386 libc6:i386 libffi6:i386 libgcc1:i386 libpcre3:i386
  libselinux1:i386 zlib1g:i386
提案パッケージ:
  glibc-doc:i386 libc-l10n:i386
以下のパッケージが新たにインストールされます:
  gcc-6-base:i386 libc6:i386 libffi6:i386 libgcc1:i386 libglib2.0-0:i386
  libpcre3:i386 libselinux1:i386 zlib1g:i386
アップグレード: 0 個、新規インストール: 8 個、削除: 0 個、保留: 0 個。
5,986 kB のアーカイブを取得する必要があります。
この操作後に追加で 16.7 MB のディスク容量が消費されます。
続行しますか? [Y/n] y

実行してみる

$ ./idaq 
./idaq: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

まだライブラリが足りないようなので

$ ldd idaq | \grep 'not found' | awk '{ print $1 }' | xargs dpkg -S | awk '{ print $1 "i386" }' | sort | uniq
libstdc++6:amd64:i386
libx11-6:amd64:i386

足りないパッケージの32ビット版をインストールしていく

$ apt install libstdc++6:i386 libx11-6:i386
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
  libxau6:i386 libxcb1:i386 libxdmcp6:i386
以下のパッケージが新たにインストールされます:
  libstdc++6:i386 libx11-6:i386 libxau6:i386 libxcb1:i386 libxdmcp6:i386
アップグレード: 0 個、新規インストール: 5 個、削除: 0 個、保留: 0 個。
1,281 kB のアーカイブを取得する必要があります。
この操作後に追加で 3,933 kB のディスク容量が消費されます。
続行しますか? [Y/n] y

もう一度実行してみる

$ ./idaq
This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".

Available platform plugins are: linuxfb, minimal, xcb.

Reinstalling the application may fix this problem.
中止

今度はQt関連のエラーが出る

なのでライブラリをインストールしていく

$ apt install libqt5gui5:i386
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libglew1.13
これを削除するには 'apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  libbsd0:i386 libdbus-1-3:i386 libdrm-amdgpu1:i386 libdrm-intel1:i386
  libdrm-nouveau2:i386 libdrm-radeon1:i386 libdrm2:i386 libedit2:i386
  libegl1-mesa:i386 libelf1:i386 libevdev2:i386 libexpat1:i386
  libfontconfig1:i386 libfreetype6:i386 libgbm1:i386 libgcrypt20:i386
  libgl1-mesa-dri:i386 libgl1-mesa-glx:i386 libglapi-mesa:i386
  libglew1.13:i386 libglu1-mesa:i386 libgpg-error0:i386 libgraphite2-3:i386
  libgudev-1.0-0:i386 libharfbuzz0b:i386 libice6:i386 libicu57:i386
  libinput10:i386 libjpeg62-turbo:i386 libllvm3.8:i386 liblzma5:i386
  libmtdev1:i386 libpciaccess0:i386 libpcre16-3:i386 libpng16-16:i386
  libproxy1v5:i386 libqt5core5a:i386 libqt5dbus5:i386 libqt5network5:i386
  libqt5svg5:i386 libqt5widgets5:i386 libsm6:i386 libsystemd0:i386
  libtinfo5:i386 libtxc-dxtn-s2tc0:i386 libudev1:i386 libuuid1:i386
  libwacom2:i386 libwayland-client0:i386 libwayland-server0:i386
  libx11-xcb1:i386 libxcb-dri2-0:i386 libxcb-dri3-0:i386 libxcb-glx0:i386
  libxcb-icccm4:i386 libxcb-image0:i386 libxcb-keysyms1:i386
  libxcb-present0:i386 libxcb-randr0:i386 libxcb-render-util0:i386
  libxcb-render0:i386 libxcb-shape0:i386 libxcb-shm0:i386 libxcb-sync1:i386
  libxcb-util0:i386 libxcb-xfixes0:i386 libxcb-xinerama0:i386 libxcb-xkb1:i386
  libxdamage1:i386 libxext6:i386 libxfixes3:i386 libxi6:i386
  libxkbcommon-x11-0:i386 libxkbcommon0:i386 libxrender1:i386
  libxshmfence1:i386 libxxf86vm1:i386 mesa-utils:i386
提案パッケージ:
  rng-tools:i386 glew-utils:i386 libthai0:i386 libqt5libqgtk2:i386
  qt5-image-formats-plugins:i386 qtwayland5:i386
推奨パッケージ:
  qttranslations5-l10n:i386
以下のパッケージは「削除」されます:
  mesa-utils
以下のパッケージが新たにインストールされます:
  libbsd0:i386 libdbus-1-3:i386 libdrm-amdgpu1:i386 libdrm-intel1:i386
  libdrm-nouveau2:i386 libdrm-radeon1:i386 libdrm2:i386 libedit2:i386
  libegl1-mesa:i386 libelf1:i386 libevdev2:i386 libexpat1:i386
  libfontconfig1:i386 libfreetype6:i386 libgbm1:i386 libgcrypt20:i386
  libgl1-mesa-dri:i386 libgl1-mesa-glx:i386 libglapi-mesa:i386
  libglew1.13:i386 libglu1-mesa:i386 libgpg-error0:i386 libgraphite2-3:i386
  libgudev-1.0-0:i386 libharfbuzz0b:i386 libice6:i386 libicu57:i386
  libinput10:i386 libjpeg62-turbo:i386 libllvm3.8:i386 liblzma5:i386
  libmtdev1:i386 libpciaccess0:i386 libpcre16-3:i386 libpng16-16:i386
  libproxy1v5:i386 libqt5core5a:i386 libqt5dbus5:i386 libqt5gui5:i386
  libqt5network5:i386 libqt5svg5:i386 libqt5widgets5:i386 libsm6:i386
  libsystemd0:i386 libtinfo5:i386 libtxc-dxtn-s2tc0:i386 libudev1:i386
  libuuid1:i386 libwacom2:i386 libwayland-client0:i386 libwayland-server0:i386
  libx11-xcb1:i386 libxcb-dri2-0:i386 libxcb-dri3-0:i386 libxcb-glx0:i386
  libxcb-icccm4:i386 libxcb-image0:i386 libxcb-keysyms1:i386
  libxcb-present0:i386 libxcb-randr0:i386 libxcb-render-util0:i386
  libxcb-render0:i386 libxcb-shape0:i386 libxcb-shm0:i386 libxcb-sync1:i386
  libxcb-util0:i386 libxcb-xfixes0:i386 libxcb-xinerama0:i386 libxcb-xkb1:i386
  libxdamage1:i386 libxext6:i386 libxfixes3:i386 libxi6:i386
  libxkbcommon-x11-0:i386 libxkbcommon0:i386 libxrender1:i386
  libxshmfence1:i386 libxxf86vm1:i386 mesa-utils:i386
アップグレード: 0 個、新規インストール: 79 個、削除: 1 個、保留: 0 個。
40.6 MB のアーカイブを取得する必要があります。
この操作後に追加で 249 MB のディスク容量が消費されます。
続行しますか? [Y/n] y

GUIを拡張するためにGTKのライブラリもインストールする

$ apt install libgtk2.0-0:i386 gtk2-engines-murrine:i386 gtk2-engines-pixbuf:i386 
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libglew1.13
これを削除するには 'apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  libatk1.0-0:i386 libavahi-client3:i386 libavahi-common-data:i386 libavahi-common3:i386 libcairo2:i386 libcomerr2:i386 libcups2:i386 libdatrie1:i386 libgail-common:i386 libgail18:i386 libgdk-pixbuf2.0-0:i386
  libgmp10:i386 libgnutls30:i386 libgssapi-krb5-2:i386 libhogweed4:i386 libidn11:i386 libjbig0:i386 libk5crypto3:i386 libkeyutils1:i386 libkrb5-3:i386 libkrb5support0:i386 libnettle6:i386 libp11-kit0:i386
  libpango-1.0-0:i386 libpangocairo-1.0-0:i386 libpangoft2-1.0-0:i386 libpixman-1-0:i386 libtasn1-6:i386 libthai0:i386 libtiff5:i386 libxcomposite1:i386 libxcursor1:i386 libxinerama1:i386 libxrandr2:i386
提案パッケージ:
  gnutls-bin:i386 krb5-doc:i386 krb5-user:i386 librsvg2-common:i386 gvfs:i386
推奨パッケージ:
  murrine-themes:i386
以下のパッケージが新たにインストールされます:
  gtk2-engines-murrine:i386 gtk2-engines-pixbuf:i386 libatk1.0-0:i386 libavahi-client3:i386 libavahi-common-data:i386 libavahi-common3:i386 libcairo2:i386 libcomerr2:i386 libcups2:i386 libdatrie1:i386
  libgail-common:i386 libgail18:i386 libgdk-pixbuf2.0-0:i386 libgmp10:i386 libgnutls30:i386 libgssapi-krb5-2:i386 libgtk2.0-0:i386 libhogweed4:i386 libidn11:i386 libjbig0:i386 libk5crypto3:i386
  libkeyutils1:i386 libkrb5-3:i386 libkrb5support0:i386 libnettle6:i386 libp11-kit0:i386 libpango-1.0-0:i386 libpangocairo-1.0-0:i386 libpangoft2-1.0-0:i386 libpixman-1-0:i386 libtasn1-6:i386 libthai0:i386
  libtiff5:i386 libxcomposite1:i386 libxcursor1:i386 libxinerama1:i386 libxrandr2:i386
アップグレード: 0 個、新規インストール: 37 個、削除: 0 個、保留: 0 個。
8,173 kB のアーカイブを取得する必要があります。
この操作後に追加で 21.6 MB のディスク容量が消費されます。
続行しますか? [Y/n] y

実行できるが何かメッセージがあるので

$ ./idaq
Gtk-Message: Failed to load module "atk-bridge"
Gtk-Message: Failed to load module "canberra-gtk-module"

それぞれインストールする

$ apt install libatk-adaptor:i386 libgail-common:i386
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
libgail-common:i386 はすでに最新バージョン (2.24.30-4) です。
libgail-common:i386 は手動でインストールしたと設定されました。
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libglew1.13
これを削除するには 'apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  libatk-bridge2.0-0:i386 libatspi2.0-0:i386
以下のパッケージが新たにインストールされます:
  libatk-adaptor:i386 libatk-bridge2.0-0:i386 libatspi2.0-0:i386
アップグレード: 0 個、新規インストール: 3 個、削除: 0 個、保留: 0 個。
141 kB のアーカイブを取得する必要があります。
この操作後に追加で 495 kB のディスク容量が消費されます。
続行しますか? [Y/n] y
$ sudo apt install libcanberra-gtk-module:i386
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています                
状態情報を読み取っています... 完了
以下のパッケージが自動でインストールされましたが、もう必要とされていません:
  libglew1.13
これを削除するには 'sudo apt autoremove' を利用してください。
以下の追加パッケージがインストールされます:
  libasound2:i386 libcanberra-gtk0:i386 libcanberra0:i386 libltdl7:i386 libogg0:i386 libtdb1:i386 libvorbis0a:i386 libvorbisfile3:i386
提案パッケージ:
  libasound2-plugins:i386 libcanberra-pulse:i386
以下のパッケージが新たにインストールされます:
  libasound2:i386 libcanberra-gtk-module:i386 libcanberra-gtk0:i386 libcanberra0:i386 libltdl7:i386 libogg0:i386 libtdb1:i386 libvorbis0a:i386 libvorbisfile3:i386
アップグレード: 0 個、新規インストール: 9 個、削除: 0 個、保留: 0 個。
863 kB のアーカイブを取得する必要があります。
この操作後に追加で 2,251 kB のディスク容量が消費されます。
続行しますか? [Y/n] y

これで実行できる

結局次のコマンドを実行すればいい

$ sudo dpkg --add-architecture i386
$ sudo apt update
$ sudo apt upgrade
$ sudo apt install libglib2.0-0:i386 libstdc++6:i386 libx11-6:i386 libqt5gui5:i386 libgtk2.0-0:i386 gtk2-engines-murrine:i386 gtk2-engines-pixbuf:i386 libatk-adaptor:i386 libgail-common:i386 libcanberra-gtk-module:i386