Ⅰ. 概要
Androidマルウェア分析に必要な概念を学びます。apkファイルを解凍する際のコード分析方法について説明し、特にAndroidManifest.xmlの構造について取り上げます。ADB演習を通じて、Androidデバイスへの接続方法とLinuxベースのディレクトリ構造について簡単に説明します。
Ⅱ. Android マルウェア分析のための概念的理解
'jadx-gui' プログラムのようなもの Android アプリケーションapk)ファイルを解凍する際には、その構造を理解する必要があります。これはコード分析を通じて脆弱性を探すためです。apkファイルの構造を見てみましょう。

jadx-gui プログラム別サンプル apk ファイルが解凍されたときの構造以前見たことがありますか。 Java開発をしたことがある人なら、そのことはよくご存知でしょう。 Java に基づいて Androidしたがって、 Android アプリケーションも OOP(Object Oriented Programming)オブジェクト指向プログラミングにおいて Java Class 構造があります。開発者が書いたコードを完全に示してはいませんが、コードを分析するには十分です。com.metasploit.stage'「パッケージ」とは、アプリケーション全体を指し、その中で a~g クラスはそれぞれの役割を果たしています。 MainActivity, MainBroadcastReceiver, MainService以前の投稿でもこれについて話しました。 Android このアプリはコンポーネントの役割を果たしています。もちろん、このようなクラスの実際の役割はクラス名では明確に示されていない可能性があります。開発中は明確なクラス名が使用されていましたが、実際には開発に関わるすべての人が、デコンパイルを通じてコード分析が可能であることを知っています。 商用化(アプリの展開)の段階では、セキュリティ上の理由から非表示にします。
リソースディレクトリアプリケーションが使用するテキスト、画像などの静的データがあります META-INF, AndroidManifest.xml, Classes.dex, Resources.arscあります。 META-INFアプリ署名の公開鍵を含む証明書です AndroidManifest.xmlは、パッケージ情報または認可されたアプリケーションのコンポーネント(構成要素)です Activity, BroadcastReceiver 以下のような情報が含まれています Classes.dex上記のソースコードをクラスに整理し、アプリケーション実行用のバイトコードに変換しました dex これは、フォーマットに最適化された形式です。最後に、 Resources.arscコンパイル済みのリソース(文字列、デザインなど)があります。

では、コード分析に関する各点について見ていきましょう。まず、上の画像では、 AndroidManifest.xmlです。 Android このファイルには、アプリケーションを構成する各コンポーネント、許可に関する情報、およびハードウェアに関する情報が含まれています。このファイルを最初に開くのは、アプリケーションがどのような機能を持っているかを概観的に把握できるためです。もちろん、これだけではすべての情報が得られません。一部のアプリケーションには、現在インストールされているため実際には使用されていない許可に関する情報が含まれています。 Android これは、携帯電話が実際の用途に使用されているかどうかを区別するためです。 uses-permission アイテムを追加していきながら、見ていきましょう アプリがロード中のときに、Bluetooth をオンまたはオフにしたり、ネットワーク接続を確認したり、加速度計を使用したりすることで、原因を調べることができます。 これは悪意のあるコードのアプリケーションだけでなく、通常のユーザーアプリケーションにも同じ理由で当てはまります。 uses-permissionそれらが構成しているケースもあります
すべての Android アプリケーションには、固有のパッケージ名が必要です。Linux ベースの Android オペレーティングシステムでは、これらのパッケージ名と PIDを通じて プロセスを管理します。上の画像では、パッケージ名は 'com.metasploit.stage' であり、通常は com. で始まりますが、必須ではありません。

まず、 android:targetSdkVersion 簡単に言うと、アプリケーションを実行することです。のための これは最小限必要なバージョンです。 Jar ファイルを実行する場合 Java バージョンチェックと同様に、アプリは実行および操作のために上記のバージョン要件を満たす必要があります。 uses-permission その部分を見れば、正確に知らなくても、簡単に英語に翻訳できます。 Android特定のシステムでどの権限が使用されているかを見ることができますか。つまり、アプリが必須データやハードウェアなどを使用するために明示的に要求した権限のリストです。これは事前に定義されているはずです。 Android オペレーティングシステムでは、検証後に実際のハードウェアまたはデータを使用することができます。
※ アプリケーションをインストールしたり使用したときに、許可を求められることがあるでしょう。これは開発者がユーザーに責任を押し付けるための手法ですが、単に受け入れることができます…

applicationの activity, receiver, service その部分は Android コンポーネントその構造の詳細な部分については、さらなる研究が必要ですが、 intent以前の投稿でも触れましたが、これはエントリポイントを指し、その一例です。 android.intent.category.LAUNCHERアプリに入るためにユーザーに表示されるアイコンが、コンポーネントを意味します。要約すると、コンポーネントとは activityユーザーに表示される部分ですUI)そして broadcastreceiver内部イベント処理のための そして servicesこれは、ここでは存在しないバックグラウンドタスクセクションです content providerそれは共有データを提供する部分についてです。 さらに例として、receiver セクション android.intent.action.BOOT_COMPLETED では、電話が起動が完了した後にアプリを起動することができます。
※ Androidエントリーポイントはたくさんあります。アイコンをタップしてアプリを起動したり、通知メッセージを受け取ったり、バックグラウンドで音楽を再生したり、インターネット広告をクリックしたりすることで、CoupangやKakaoTalkなどのアプリにアクセスできます。悪質ではありませんが、遭遇した場合はコードを分析する価値はあります。 activityそうしたケースもあります。
III. ADB 練習
ADB(Android Debug Bridge)Android のデバッグのための Toolこれを使用して、デバイスの内部構造を調べたり、複数のアプリケーションの中で悪意のあるコードを含むアプリケーションを特定するなど、さまざまな作業を行うことができます。 Windowsそれがあなたの役に立ちます。
SDK プラットフォームツール リリースノート | Android 開発者 | Android Developers
ここからダウンロードできます,
Android デバッグブリッジ(adb) | Android 開発者 | Android Developers
の使用方法については、こちらをご覧ください。
コマンドの簡単な紹介として、、
コマンド | 説明 |
adb devices | PCに接続されているデバイスとエミュレータのリストを確認し、「adb kill-server」で切断します |
adb install [apkfilename.apk] | デバイスにapkファイルをインストールする |
adb uninstall [パッケージ名] | デバイスにインストールされているパッケージを削除する |
adb push [PC のパス] [android のパス] | PCに保存されているファイルをデバイスにコピーします |
adb pull [android パス] | デバイスに保存されているファイルを PC にコピーする |
adb shell | 接続されたデバイスのシェルを実行します |
adb logcat | 接続されたデバイスのログの監視 |
adb connect 127.0.0.1:62001 | 127.0.0.1のポート62001にあるadbに接続します |
adb shell pm list packages | 接続されたデバイスにインストールされているすべてのパッケージの一覧を表示します |
adb shell pm list permissions | 接続されたデバイス上のアプリケーションの許可一覧 |
ADBを通じて 実習を実行するには、Android デバイスが必要です。そこで、Nox Player をインストールして実行しました。
Nox AppPlayer - PCでモバイルゲームを安全に、かつ遅延なく楽しめます。
最後に、ダウンロードした ADB のファイルパスを環境変数として登録し、任意のパスから簡単に使用できるようにしました。
これを実行するには、[設定] - [システム] に移動します

情報を入力してください。入力すると、中央に「詳細システム設定」が表示されます。これをクリックしてください。

環境変数が存在します。を入力してください

その Path をクリックし、「作成」をクリックして、ADB ファイルへのパスを入力します。
次に、ADB コマンドを使用してデバイスに接続してみましょう(そして、その前に、Nox を実行してください)。

だから adb devicesそれを入力すると、デバイスが表示されません。なので、現在、 Nox探してみるよ。

tasklist は現在実行中のプロセスを一覧表示し、findstr は特定の文字列に対応する結果だけを出力します。netstat -ano は現在開いているすべてのサーバの IP アドレスとポートを一覧表示します。Nox の場合、ポート 62001 に接続します。

接続を試みると、それがうまくいく場合、adb shell Linuxシェルが開きます。これは、接続に成功したことを意味します。接続を切断する場合は、exitでシェルを終了し、その後、adb kill-serverで接続を初期化します。
次のディレクトリを知っておく必要があります: /data/app, /data/data, /system/vendor/lib, /proc, /storage/emulated/0. 最初のディレクトリ /data は、共通データとapk実行可能ファイルが格納されるアプリケーション共有ディレクトリです。/system はシステム構成ファイルのセクションであり、/proc はプロセス関連のディレクトリです。Linuxのファイル構造を考えてみてください。最後に、/storageはSDカードを指します。個人ユーザ情報は、Linuxで作成される/home/ユーザアカウントディレクトリと同じように、ユーザアカウントディレクトリに格納されます。これにより、他の一般ユーザがアクセスできないようにします。
ログイン