APKが特定のソースコードからビルドされていることを確認する


10

同じアプリの場合、私は持っています:

  • アプリストアからのAPK
  • 同じバージョンのソースコードであると主張されているもの。かなり通常のGradleビルドスクリプトと構造を使用します。

APKがそのソースコードから本当にビルドされたかどうか確認したいと思います。
それを確認するには?

ノート:

  • APKは難読化されていません。
  • 私は誰かの署名を信頼する理由はありません。私はソースコードのみを信頼しています。
  • 私はすでに自分用にアプリを作成しましたが、APKが正常であったかどうかを知りたいです。
  • Linuxコマンドラインツールが望ましいですが、どのツールでも問題ありません。

2
私は試していませんが、この目的でApktoolを使用できるはず.apkです。両方のファイルをリバースエンジニアリングしてから、結果のディレクトリに対してdiffを実行します。その場合、違いのみが署名になります(明白な理由で一致することはできません)。考えてみてください。単に.apkファイルを解凍し、バイナリdiffを実行するだけで同じことができます。もちろん両方とも、最初にコンパイルするときに同じライブラリバージョンなどを使用する必要があります:)
Izzy

@Izzy:「同じライブラリバージョン」:APIバージョンはGradleスクリプトのマニフェストとライブラリバージョンに記述されているため、その部分は問題ないはずです。無視できるファイル/フォルダーのリストは、すばらしい答えになります(実際のコマンドラインのボーナス)。
Nicolas Raoul

1
現在は外出中の自宅のコンピューターを使用している場合は、そうすることができます。しかし、それが「名誉ある答え」になるためには、まず自分で試してみる必要があります:)忘れてしまった場合(他の誰も私の前にそれをしなかった場合)は、遠慮なく別のping(チャットなど)を送ってください。 8..10h :)
イジー

@Izzy diffメソッドはすっきりしているように見えますが、アプリストアの担当者がAPKをコンパイル中に難読化した場合はどうなりますか?
グリモア

ここでApktoolが登場します。リンクを確認しましたか?これを使用するLibRadarも見てください。AFAIRは、難読化を解除するのに役立ちます(何かが必要です。そうしないと、LibRadarがそれらのライブラリーを検出するのが困難になります)。
イジー

回答:


2

これは、再現可能なビルドでのみ実行でき ます。

「同じソースコード、ビルド環境、ビルドの指示が与えられれば、ビルドは再現可能であり、すべての当事者が、指定されたすべてのアーティファクトのビットごとの同一のコピーを再作成できます。」

したがって、アプリデベロッパーまたはアプリストアが機能するためには、そのメンバーである必要があります。
それ以外の場合の唯一の選択肢は、自分で構築することです。

現在これを行っている開発者の一例がOpen Whisper Systemsです:https : //github.com/WhisperSystems/Signal-Android/wiki/Reproducible-Builds


とても興味深い!では、開発者がいないと比較ができないのは確かですか?残念ながら(当然ですが)ほとんどのオープンソースアプリはビルドにDockerなどを使用せず、メンテナーが実行するシステムに基づいてビルドされているだけです。
Nicolas Raoul

ソースからアプリをビルドする人がビルド環境を正確に再現できる限り、開発者である必要はありません。これらのタイプのビルドを設定する場合、依存関係は非常に困難な場合があります。
andDevW 2017

「ビルド環境を正確に再現」:推測することは可能ですか?たとえば、何らかの理由でMacまたはLinuxでビルドすると別のAPKが生成される場合、アプリストアのAPKがMacまたはLinuxでビルドされているかどうかを推測できますか?
Nicolas Raoul

推測して意味のある結果を得ることはできません。結局、これは実装がより簡単になり、それを実行するオープンソースプロジェクトがますます多く見られるようになります。
andDevW 2017

1

JavaとAPKの優れた点の1つは、APKをJavaソースコードに完全に逆コンパイルできることです。

ただし、結果のソースコードが同一であるとは限りません。

結果のソースコードを既知のリビジョンと照合するための良い方法の1つは、リポジトリ内の既知のコミットの直前と直後に行われた変更をチェックし、それらの変更が逆コンパイルされたソースにも存在するかどうかを確認することです。

逆コンパイルするには、dex2jarJD-Guiを使用します。

編集 Linuxツールが欲しかったことに気づきました。私の唯一の経験はWindowsですが、Linuxにも同様のツールが存在することは間違いありません。


私が正しく理解している場合、あなたの方法は、ソースコードのリポジトリの最新の変更を確認してからAPKを逆コンパイルし、逆変換したコードにも最新の変更があるかどうかを手動で確認することです。興味深いアプローチですが、オートコールまたは埋め込み広告がAPKバージョンに追加されているかどうかはわかりませんよね?
Nicolas Raoul 2016

1
これは、未知のAPKをソースリビジョンと照合するためにオフィスで使用したアプローチです。開発者を信頼できることがわかっている場合は、これで十分です。しかし、あなたが言うように、おそらく信頼できない当事者が何かをこっそり侵入する可能性はまだあります。誰かがより明確な答えを提供してくれることを私も期待しています。
Mark Ch

自分でソースをAPKにコンパイルしてから、ソースコードに逆コンパイルし、それをPlayストアAPKの逆コンパイルされたソースと比較してみませんか?誰かこれを試しましたか?
セルギーBelozorov

1
@SergiyBelozorov申し訳ありませんが、これに答えることはできません。私は本当にアンドロイドでは動作しませんが、それは非常に良い考えのように聞こえます。
Mark Ch
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.