daiki0508'足跡

AndroidStudioでのGithub連携がUN/PWで出来なくなった?

f:id:daiki0508:20210404214421j:plain

この間、新しいPCに「AndroidStudio」を入れてGithubと連携しようとしたら正しいユーザ名とパスワードでログインしても「404エラー」が発生してしまいました。
ネットで調べた噂によると最近のGithubの仕様変更で出来なくなった可能性がある(2021/3月時点)、とのことでした。

解決法としてはGithubでアクセストークンを発行して連携する方法があって今回、初めてやってみたのでメモ書き程度に残しておこうと思いこの記事を書こうと思いました。

目次

私の環境

OS:Windows10
AndroidStudio:4.13
Git:2.28.0

Githubでアクセストークンを発行する

f:id:daiki0508:20210330025159p:plain

まずは上記画像で赤く囲まれた部分をクリックしてその中の「Settings」を開いてください。

f:id:daiki0508:20210330025610p:plain

すると上記画像の様な画面が表示されると思うので、次に「Developer settings」を開いてください。

f:id:daiki0508:20210330025834p:plain

そして「Personal access tokens」を選択してください。
すると以下のような画面になると思います。

f:id:daiki0508:20210330030221p:plain

ここで自分が作成したアクセストークンの一覧を確認できます。
新しく作成する場合は赤く囲んだ「Generate new token」をクリックします。

f:id:daiki0508:20210330031155p:plain

この画面でアクセストークンに付与する権限の設定を行っていきます。
注意!:ここで設定するアクセストークンの権限は間違えないようにしてください

設定項目を以下に示します。

Note...アクセストークンを識別するための任意の名前(今回私はhogehogeで作成)
repo...プライベートリポジトリに関する操作に必要
workflow...Githubアクションワークフローを更新するのに必要
admin:org...組織やチームのプロジェクトの読み書きに必要
admin:repo_hook...この項目にチェックを入れないと追加のリポジトリを後で作成出来なくなる
gist...要旨の作成に必要

以上の通りに設定できていると下記画像のようにチェックボックスにチェックが入っていると思います。

f:id:daiki0508:20210330032814p:plain

その後「Generate token」をクリックして以下の画像のようにアクセストークンが表示されればOKです!

f:id:daiki0508:20210330033137p:plain

実際には黒く塗りつぶしているところに「アクセストークン」が表示されています。
注意!:表示されるアクセストークンはこの時点でメモ帳等に保存しておいてください。一度しか表示されません!(忘れた場合は再発行することになります)

Gitの設定

既に設定されている方は問題ないのですが、この先のセクションでGithubと連携した場合でもこの設定が上手くいっていないと、ちょっと面倒くさいことになるのでやっておきましょう!

設定する項目は「ユーザ名」と「メールアドレス」です。

この項目がGithubにある「ユーザ名」と「メールアドレス」と異なると、コミットしたユーザ名等が第3者になってしまいます
(私もここで躓いて、コミットしたユーザ名が本名になっていて大変でした(笑))

どちらも簡単に変更することが出来てそれぞれ以下のコマンドを実行するだけです!

git config --global user.name ユーザー名
git config --global user.email メールアドレス

無事、変更できたかどうかを以下のコマンドを実行して確認します。

git config --list

「user.name」と「user.email」が先ほど設定した値に変更されていたらOKです!

AndroidStudioでの設定とGithubへのPush

AndroidStudioでGithubと連携させたいプロジェクトを開きます。

f:id:daiki0508:20210330034250p:plain

その後「VCS」を選択して「Enable Version Control Integration...」をクリック。
次に表示される画面にはデフォルトの「Git」を選択

f:id:daiki0508:20210404202953p:plain

上手くいけば、上の画像のようにファイル名が赤色になるはずです。

その後、もう一度「VCS」をクリックして次は「Import into Version Contorol」から「Share Project on Github」をクリックするとGithubのログイン情報を求められます。

f:id:daiki0508:20210404205426p:plain

この時「Token」が表示されておらず「UserName/Password」の入力を求められている場合はウィンドウ右上に「Use Token」という青色の文字の部分をクリックすると画面が切り替わります!

そして「Token」の部分にGithubでアクセストークンを発行するで作成した「Token」をコピー&ペーストして「Log In」ボタンをクリックすると、下記の画像の様なウィンドウが表示されると思います。

f:id:daiki0508:20210404210544p:plain

今回私は下記のような設定にしていますが、ここは皆さんの自由でOKです!

Repository name:Test(Private)
Remote:origin
Description:none

後は「Share」ボタンをクリック!!

f:id:daiki0508:20210404211018p:plain

GithubにPushするファイルを選択、コミットメッセージを入力して「Add」ボタンをクリックするとGithubにPushされます。

f:id:daiki0508:20210404211346p:plain

注意!:AndroidStudioではプロジェクトごとにGithub連携を行う必要があります。よって1つのプロジェクトで連携をしたからといって他のプロジェクトでも連携がされていると言う訳ではありません!!

おまけ(2回目以降のCommitとPush)

AndroidStudioでの設定とGithubへのPushでは最初の1回目のコミットとPushの説明をしました。

では2回目以降は…?

これも簡単です。

f:id:daiki0508:20210330034250p:plain

VCS」から「Commit」をクリックしてコミットするファイルとコミットメッセージを入力(この時に注意メッセージが表示された場合は気にせず「Commit」を選択)、その後もう一度「VCS」から「Git」そして「Push」をクリックすれば、Pushウィンドウが表示されるので「Push」ボタンをクリック!(ここでも注意メッセージが表示された場合は「Marge」をクリック)

すると、Githubへの「Push」行われます。

まとめ

以上が「AndroidStudio」で「Token」を使ってGithub連携を行う手法になります。

結構、最近の話題ぽかったので調べても情報が少なくて大変だったので大変でした!(…どちらのバグかわかりませんが、早く修正させるといいですね(笑))

参考情報・引用

https://teratail.com/questions/319541

https://stackoverflow.com/questions/64964585/android-studio-github-login-incorrect-credentials-request-response-401-unauth

https://www.sejuku.net/blog/72246

Android端末にDrozerを入れて色々と遊ぶ

前回までUbuntuにDrozerを入れるところまでは終わったので今回はAndroid端末に実際にDrozerを入れて遊んでみようと思います。

目次

私の環境

AndroidOS:Android 8.0(エミュレータ)
AndroidStudio:4.13
ホストOS:Windows10
ゲストOS:Ubuntu20.04

Drozer-agent.apkのダウンロード

前回と同様、公式GithubページからDrozerを使うのに必要なapkファイルをダウンロードします。
ちなみに現時点(2021/03/26)でのapkの最新バージョンは2.34ですね。(…あれ?よくみると開発止まってない?)

apkファイルをダウンロードしたら次はエミュレータ(実機)にインストールするだけです

Drozer-agent.apkのインストール

ここからは実機でもエミュレータでも「AndroidStudio」を使います。

「AndroidStudio」を開くと下の方に「Terminal」があると思うのでそれを選択してください。
開くと下記画像のようになっていると思います。

f:id:daiki0508:20210326045910p:plain

そして先ほどダウンロードしたapkファイルを「platform-tools」直下に移動させます。
(別に必ずしもここに移動させる必要もないのですが、後々の面倒を考えるとここの方がいいです)

この時点でエミュレータ(もしくは実機)を起動してホストと接続しておきましょう
後はご存じの方もいるとは思いますが下記コマンドを「Androidstudio」の「Terminal」上で実行してapkファイルをインストールさせます。

$ adb install drozer-agent-x.x.x.apk
(xの部分は各自置き換え)

インストールが成功したならばホーム画面に「drozer Agent」というアプリが新たに追加されたと思います。

f:id:daiki0508:20210327044728p:plain

私の環境では上記の様に表示されました。

起動

起動をする前にエミュレータの方のみ下記のコマンドを「Androidstudio」の「Terminal」で実行してほしいです。

$ adb forward tcp:31415 tcp:31415

その後、実機もエミュレータの方もDrozerアプリを起動させてください。

起動させると以下のような画像のトップ画面が表示されると思うので、画面下部の「Embedded Server」の部分をタップして「ON」にしてください。

f:id:daiki0508:20210327044902p:plain

あとは前回の記事でインストールしたDrozer(私の環境ではUbuntu20.04)と繋げる作業だけです。

$ drozer console connect

エミュレータの方

エミュレータの方のコマンドはシンプルです。

$ drozer console connect

実機の方

実機の方はAndroid端末のIPアドレスを指定する必要があります。

$ drozer console connect --server xxx.xxx.x.xxx
(xは各自Android端末のIPで置き換え)

両方とも下記画像のようになれば接続成功です!

f:id:daiki0508:20210327045742p:plain

色々遊んでみる

ここからはDrozerが持っている機能を使って色々と遊んでみましょう!!
(今回は2つの状況を再現します)

注意!:この先の演習で使うアプリを演習が終わった後も端末内に残しておくことは推奨しません

clipboardの盗聴

この機能を用いることでclipボードに共有されている情報を取得できます。
(つまり悪意ある第3者アプリが情報を盗めるかどうかを調査出来る)

準備

clipboardの盗聴に使うモジュールを検索してみましょう。

dz > module search clipboard

f:id:daiki0508:20210327050357p:plain

私の環境では「metall0id.capture.clipboard」が見つかりました。

ちなみにですが下記コマンドを実行することで引数に指定したmodule名の詳細情報を確認出来ます。

dz > module search metall0id.capture.clipboard -d

f:id:daiki0508:20210327050527p:plain

このモジュールをインストールすれば後はOKです。

dz > module install metall0id.capture.clipboard

f:id:daiki0508:20210327052313p:plain

(…私の環境では既にインストールされているので「1 already」ってなってますけど)

実践

今回はそれっぽい状況にマッチするアプリをこちらで用意しました。
ここからapkファイルをダウンロード、そしてインストールしてください。

f:id:daiki0508:20210327053712p:plain

起動すると上の画像の様なトップ画面が起動すると思います。
また、このアプリの流れは以下のようになっています。

1.パスワードを入力(n4DL2Udc)
2.OKボタンをタップするともう一度パスワードを求められる
3.もう一度パスワードを入力してOKボタンをタップ
4.入力が正しければ「Success!!」というトーストが表示される

しかし3の時、ユーザがもう一度パスワードを入力するのが面倒で1のパスワードをクリップボードにコピーした場合が非常にマズイです!

では実際にパスワードをクリップボードにコピーして先ほどインストールしたmodule(metall0id.post.clipboard)を実行させてみましょう!
moduleを実行するコマンドは以下の通りです

dz > run post.capture.clipboard

f:id:daiki0508:20210327063500p:plain

つまり、悪意あるアプリがclipboardを盗聴する機能を持っていたとすると簡単にパスワード(機密情報)が漏洩することになります。

脆弱なContentProvider

次は脆弱な「ContentProvider」で実装されたDBをDrozerを用いて盗聴する手法について説明します!

準備

特になし!(初期状態でDrozerに入っているmoduleで出来ます)

実践

このセクションもこちらで脆弱なContentProviderによって実装されたDBを使用しているアプリを用意しておきましたので、こちらから該当apkファイルをダウンロード、そしてインストールしてください。

f:id:daiki0508:20210329062302p:plain

アプリのトップ画面にはそれぞれのユーザが表示されています。
アプリ画面内の説明からadminに関する情報を盗めればOKのようですね。

ちなみにこのアプリの簡単な概要を先に説明すると以下のようになります。

・脆弱なContentProviderを用いてDBを作成
・UserとAdminのテーブルを差別化
・名前だけ表示(E-mail,passwordは非表示)

今回のような場合に役に立つ「module」がいくつかあるので順に使いながら紹介していきます。

まずアプリケーションのコンテンツプロバイダの動的解析を開始するには、アタックサーフェイスを列挙する必要があるので「app.provider.info」を使います。

dz > run app.provider.info -a com.websarva.wings.android.drozer_content_provider

f:id:daiki0508:20210329063706p:plain

このことからこのアプリは1つのContentProviderがエクスポートされ、パーミッションも必要ないことが分かります。
AndroidのContentProviderに対しては「content://」で始めるのですが、まだ完全にパスが判明したわけではありません。

これを解決する「scanner.provider.finduris」を用いてパスを導き出していきましょう!

dz > run scanner.provider.finduris -a com.websarva.wings.android.drozer_content_provider

f:id:daiki0508:20210329064908p:plain

実行してみると、いかにも怪しい「admin」というcontentが見つかりましたね!

最後にこのcontentに対してアクセスして内容を見てみましょう。
使うmoduleは「app.privider.query」です。

dz > run app.provider.query content://com.websarva.wings.android.drozer_content_provider/admin/ --vertical

f:id:daiki0508:20210329065705p:plain

無事、adminに関する情報を抽出出来ました!!
(passwordはbase64エンコードしてます)

まとめ

どうでしたでしょうか?

私は今回Drozerを実際に使ってみて意外と多くの機能があって便利と思いました。
まだまだ使っていない機能が多くあるのでまたの機会に紹介できたらいいなと思います!

参考情報

https://qiita.com/mitsu9/items/1457331992e1eb02b29f

https://codechacha.com/ja/android-contentprovider/

http://ichitcltk.hustle.ne.jp/gudon2/index.php?pageType=file&id=Android033_ContentProvider

https://coky-t.gitbook.io/owasp-mstg-ja/

Ubutnu20.04にDrozerをダウンロード・インストールしてみた

Androidの動的解析を行う際にDrozerというツールが便利という話を聞いたのでダウンロード・インストールしてみようと思ったのですが、かなり手間取ったので記事に残しておくことにしました。

Drozerとは

Drozer(以前のMercury)は、Android向けの主要なセキュリティテストフレームワークです。

また、Drozerを使用するとアプリの役割を引き受け、Dalvik VM、他のアプリのIPCエンドポイント、および基盤となるOSと対話することで、アプリやデバイスのセキュリティの脆弱性を検索できます。

Drozerは、Androidの公開エクスプロイトを使用、共有、理解するのに役立つツールを提供します。これは、悪用またはソーシャルエンジニアリングを通じてDrozerAgentをデバイスに展開するのに役立ちます。イタチ(MWRの高度な悪用ペイロード)を使用すると、Drozerは、完全なエージェントをインストールするか、実行中のプロセスに限定されたエージェントを挿入するか、リモートアクセスツール(RAT)として機能するリバースシェルを接続することにより、使用可能なアクセス許可を最大化できます。

私の初期環境

仮想OS:Ubuntu20.04
Python 3.8.5
openjdk version "11.0.10"

Drozerに必要な環境

Python 2.7のインストール

この時点でPython2系が入っていない人は下記のコマンドをターミナルで実行しましょう。

$sudo apt install python2

その後、Python2系に対応したpipをインストールするのですが、ここで早速問題が発生しました。
なんとpipが上手くインストール出来ませんでした!

普段私はpipをインストールする際に『get-pip.py』を使うのですが最近のアップデートでPython3系のインストールのみ対応に変更したようで、何度実行してもpipがエラーが発生してインストールされませんでした。

そこで『get-pip.py』のアーカイブを下記のURLからダウンロードしました。

https://bootstrap.pypa.io/

その後、下記のコマンドでインストールを行うことで上手くインストール出来ました。

$sudo python2 get-pip.py

Protobuf 2.6 以上のインストール

ここから少し同じような作業が続きます。

$sudo pip install protobuf

Pyopenssl 16.2 以上のインストール

$sudo pip install pyOpenSSL

Twisted 10.2 以上のインストール

$sudo pip install Twisted

Java Development Kit 1.7のインストール

ここで少し躓きました。
このDrozerではjavaの環境が必要になり、筆者の環境にもjavaオープンソースである『openjdk』が入っています。

では何が大変かというとこのDrozer、実はversion7でしか動きません!
ここで私の環境を見てみてください……はい、version11ですね。

ということで、明示的にversion7をインストールする方法を解説します。

まず、version7をインストールするので以下のコマンドを順に実行してください。

# apt update; apt install -y software-properties-common
# apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 0xB1998361219BD9C9
# apt-add-repository 'deb http://repos.azulsystems.com/ubuntu stable main'
# apt update; apt install -y zulu-7

OS内に1つのjdkしか入っていないなら問題ないのですが、2つ以上の場合は以下の設定を行ってください。

まず以下のコマンドを実行してください。

$sudo update-alternatives --config java

f:id:daiki0508:20210221231052p:plain

ここでは先ほどインストールしたversionを選択してください。

その後、vimなどのエディタで

$sudo vim /etc/enviroment

を開き、以下の文を追記します。

JAVA_HOME=“/usr/lib/jvm/zulu7/jre/bin/java“

最後に以下のコマンドを実行して終了です。

$sudo source /etc/enviroment

Drozerのダウンロード

ここからようやく、Drozerのダウンロード開始です。

まずDrozerの公式GitHubページからDrozer(.tar.gz)の最新バージョンをダウンロードして解凍してください。 すると以下の様な構成のフォルダになっていると思います。

f:id:daiki0508:20210302104019p:plain

Drozerのインストール

勿論、この後 setup.pyを実行すれば良いように感じますがこの状態で実行してもスクリプトに問題があるのか

ImportEroor No module named src.drozer

上記のようなエラーが発生してしまいます。
そこでエディタ(vim等)で setup.pyを開き、スクリプトを書き換えましょう!

書き換える場所は1か所だけで

from src.drozer import meta

の部分を

from drozer import meta

に書き換えて保存するだけです。

その後、下記のコマンドを実行することで依存関係を解決させます。

$pip install drozer

後は念のため、PATHも通しておくことにします。
環境によって異なると思うので該当部分を順次書き換えながら以下のようにPATHを通してください。

$echo \$PYTHONPATH=$PYTHONPATH:/path/to/drozer/src >> ~/.profile
$echo PATH=/home/ユーザ名/Downloads(drozerがダウンロードされている場所)/drozer-2.4.4/bin:$PATH

最後に setup.pyを以下のように実行して終了です。

$python setup.py build

まとめ

いかがですか。無事、ダウンロードとインストールが出来ましたか?

私は最初、Drozerの公式ドキュメントを見ながらインストール作業を行っていたんですけどエラーばかり出て全くインストール出来ずに苦戦しました(笑)

さて、ここまで作業を終えて早速動かそうと思ってもAndroidにDrozerサーバーが入ってないと使うことが出来ないので、次回は実際にAndroidにDrozerを入れてサンプル問題を使って遊んでいきたいと思います。

参考情報

https://www.youtube.com/watch?v=7RdGuoDmhbU

Ghidraを使ってCTFの問題を解いてみる

前回の記事でGhidraのインストールと基本操作を学習したので、今回はGhidraを使って実際にCTFの問題を解いてみましょう。
まだ、前回の記事を見ていない人は下記のリンクからどうぞ!

daiki0508.hatenablog.com

問題紹介

今回解析した問題はSECCON_CTF_Beginner'sのmaskという問題です。
問題ファイルは下記のサイトにあるのでダウンロードしてみてください。

github.com

実際に解いてみる

1. fileコマンドでmaskファイルの形式を調べる
するとx86/x64のELF形式のファイルだと分かる。よって、Ghidraでファイルの中身を見てみることにする。

2. Ghidraで解析作業をする
maskファイルをGhidraで読み込んで解析すると

undefined8 main(int param_1,long param_2)

{
  int input_len;
  size_t input_len;
  long in_FS_OFFSET;
  int (long)idx;
  byte input_arg [64];
  byte param1 [64];
  byte param2 [72];
  long local_10;
  
  local_10 = *(long *)(in_FS_OFFSET + 0x28);
  if (param_1 == 1) {
    puts("Usage: ./mask [FLAG]");
  }
  else {
    strcpy((char *)input_arg,*(char **)(param_2 + 8));
    input_len = strlen((char *)input_arg);
    input_len = (int)sVar2;
    puts("Putting on masks...");
    (long)idx = 0;
    while ((long)idx < iVar1) {
      param1[(long)idx] = input_arg[(long)idx] & 0x75;
      param2[(long)idx] = input_arg[(long)idx] & 0xeb;
      (long)idx = (long)idx + 1;
    }
    param1[input_len] = 0;
    param2[input_len] = 0;
    puts((char *)param1);
    puts((char *)param2);
    input_len = strcmp((char *)param1,"atd4`qdedtUpetepqeUdaaeUeaqau");
    if ((input_len == 0) && (input_len = strcmp((char *)param2,"c`b bk`kj`KbababcaKbacaKiacki"), input_len == 0)
       ) {
      puts("Correct! Submit your FLAG.");
    }
    else {
      puts("Wrong FLAG. Try again.");
    }
  }
  if (local_10 == *(long *)(in_FS_OFFSET + 0x28)) {
    return 0;
  }
                    /* WARNING: Subroutine does not return */
  __stack_chk_fail();
}
すると上のようなソースコードが「decompiler」ウィンドウに表示されると思います。
(上のコードは分かりやすいように若干書き換えてあります)

3. maskファイルがどのようなプログラムなのか考える
まず、先ほどのGhidraで解析したソースコードの以下の部分に注目してください。

param1[(long)idx] = input_arg[(long)idx] & 0x75;
param2[(long)idx] = input_arg[(long)idx] & 0xeb;

上記よりparam1には入力した任意の文字列と0x75との論理積が代入され、
param2の値には入力した任意の文字列と0xebとの論理積が代入される。

また、下記のコードより
 input_len = strcmp((char *)param1,"atd4`qdedtUpetepqeUdaaeUeaqau");
    if ((input_len == 0) && (input_len = strcmp((char *)param2,"c`b bk`kj`KbababcaKbacaKiacki"), input_len == 0) 
) {
      puts("Correct! Submit your FLAG.");
}

param1が『atd4`qdedtUpetepqeUdaaeUeaqau』
param2が『c`b bk`kj`KbababcaKbacaKiacki』になるのであれば、それがflagと言える。

4. 解析コードを書いてみる
先ほど考えたmaskのアルゴリズムからflagを逆算するコードをpythonで書いてみる。
また、flag文字列はparam1かparam2のどちらかになればいい(論理和)のでORを求めるのが良いと思う。

  # -*- coding: utf-8 -*-
param1 = 'atd4`qdedtUpetepqeUdaaeUeaqau'
param2 = 'c`b bk`kj`KbababcaKbacaKiacki'
ans = ''
for i,j in zip(param1, param2):
    ans += chr(ord(i) | ord(j))    # ordでASCIを取得、chrでASCIを文字列にする

print(ans)


これを実行することで以下のflagを得ることが出来た。
ctf4b{dont_reverse_face_mask}

Ghidraのインストールと基本操作

今回は今話題となっているGhidraのインストール手順や、簡単な基本操作を紹介していきたいと思います。

Ghidraとは

f:id:daiki0508:20200619222352p:plain:w570

Ghidraは、国家安全保障局が開発した無料のオープンソースリバースエンジニアリングツールです。バイナリは2019年3月のRSA会議でリリースされました。ソースは1か月後にGitHubで公開されました。(wikipedia引用)

Ghidraと似たようなツールにIDAというツールが存在します。このツールもGhidraと同じく逆アセンブルが可能なのですが、有償版のIDAProでしかデバッグ機能がありません。
その反面、IDAにも劣る部分もあるのですがGhidraはオープンソースソフトウェアなので様々な方々からプラグイン拡張機能)が配布されると思うのでいずれはIDAより優秀なツールになるのでは……?

Ghidraのインストール要件

  • メモリ4GB推奨
  • 1GBのストレージ容量
  • OracleJDKのインストール

OracleJDKのインストール方法(Ubuntuの場合)

こちらのサイトを参考にしました。

www.sejuku.net


1. アップデートの確認を行う
sudo apt update

2. javaが自分の環境に導入されているか確認する
java --version
この時にjavaのバージョンが表示されている人は既にjavaが導入されているので大丈夫です。
また、下記のメッセージが表示されている人はjavaが導入されていないので、javaを導入しましょう。

Command 'java' not found, but can be installed with:


3. まずJREを導入する。
sudo apt install default-jre
これでJREの導入は終了です。

さて、次にJDKを導入するのですが実はこの時点で既にJDKが導入されている可能性があります。
もう一度、
java --version
を実行しましょう。
ここで(2020年5月時点)

openjdk 11.0.7 2020-04-14
OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-2ubuntu218.04)
OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-2ubuntu218.04, mixed mode, sharing)

と表示されていればOKです。
最近の環境だとほぼ確実にこの時点でJDKがインストールされるようなので、この時点でJDKがインストールされてない方は参考サイトに書いてあることを実行してみてください。(ここでは説明を省略します)

Ghidraのインストール

それでは実際にGhidraをインストールしていきましょう。

1. [Ghidraの公式サイト](https://ghidra-sre.org/)にアクセス

2. ダウンロードボタンをクリックし、ダウンロード

3. ダウンロードしたZIPファイルを解凍してください

(Ghidraにインストーラは存在しないため、これでGhidraのインストール作業は終了になります。)

Ghidraの起動

1. 端末を起動し先ほど解凍したGhidraのディレクトリに移動してください

2. ghidraRunを実行します。
f:id:daiki0508:20200620155316p:plain:w1000
似たような名前のghidraRun.batもあるので間違えないようにしてください
(ghidraRun.batはwindows用の実行ファイルです)

3. 表示されるラインセンスに同意してください
f:id:daiki0508:20200620155819p:plain:w780

4. 『Ghidra:NO ACTIVE PROJRCT』、『Ghidra HELP』と『Tip of the Day』の3つが開かれます
また、『Ghidra:NO ACTIVE PROJRCT』以外は閉じて構いません。

5. 新しいプロジェクトを作成します
「File」から「New Project」を選択してください
f:id:daiki0508:20200620162131p:plain:w1000

その後、プロジェクトを共有するか聞かれるので今回は「Non-Shared Project」を選択しました。
f:id:daiki0508:20200620162459p:plain:w1000

そしてプロジェクトを作成するディレクトリの場所とプロジェクトの名前を設定します。 f:id:daiki0508:20200620163114p:plain:w1000
これでプロジェクトの作成は終了です。

6. ファイルを解析する
まず初めに、『Project』ウィンドウのドラゴンのアイコンをクリックする。
f:id:daiki0508:20200620163717p:plain:w1000

そうすると解析ウィンドウが表示されるので、上の「File」タブから「Import File」をクリックし解析したいファイルの選択画面を表示させます。

今回コンパイルしたソースコードは以下の通りです。

#include <stdio.h>
int main(void){
     int a, b;
     a = 5;
     b = 10;
     printf("answer_is_%d\n", a + b);
     return 0;
}

f:id:daiki0508:20200620164005p:plain:w1000

読み込ませたいファイルを選択したら、「Select File To Inport」をクリックしてファイルを読み込ませます。
f:id:daiki0508:20200620164659p:plain:w1000

その後、『フォーマット設定』や『言語設定』を設定した後にOKボタンをクリックすることでファイルの読み込みが完了します。
f:id:daiki0508:20200620164939p:plain:w1000

6. 読み込んだファイルを解析する
先ほどのファイルの読み込み作業が終わると直ぐに「Analyze」ウィンドウが開くので「Yes」をクリックしてください。
f:id:daiki0508:20200620165553p:plain:w1000

すると解析オプションの設定を聞かれますが普通は初期設定で構わないので「Analyze」ボタンをクリックしてください。
これで解析作業は終了です。
ここまで終了すると『Decompiler』ウィンドウに元のソースコードに近いものが表示されているのではないでしょうか?
f:id:daiki0508:20200620171208p:plain:w1000

また、以下の記事で実際にGhidraを用いてCTFの問題を解いているので見てみてください。

daiki0508.hatenablog.com