3

既存の Android アプリを見ると、完全なソースがあります。実行中のアプリの特定の画面の UI からどのアダプターがイベントを処理するかを判断する方法を考えています。

多数のレイアウト (XML) ファイルと、一握り (劇的に少ない数) のアダプターがあります。これまでのところ、デバッグポイントを推測、grep、および設定しても、問題のアダプターにたどり着きませんでした。(率直に言って、作業しようとしている画面の正しいレイアウト ファイルを見つけることができるかさえわかりません!)

私は Web 開発と PHP に精通しており、アプリケーションが与えられた場合、「コントローラー」コードへの道を見つける方法がたくさんあります。また、Java についてもかなりよく知っており、これまでアプリにモッドを作成してきましたが、今は立ち往生しています... Android アプリのリバース エンジニアリングについて教えてもらえますか?

4

3 に答える 3

2

前回これを行ったのは1年前で、Androidのセキュリティが最悪だった(そしてプロガードはそれほど多くなかった)ので、Eclipse逆コンパイラとdex2jarを使用しました。実際、私は驚いています - どうやって完全なコードを入手できたのですか?

eclipse を使用する利点は、呼び出し元を機能するまでバックトレースできることです。

問題は、あなたがアダプターを求めているとは思わないということです。画面がリストの場合は、実際にはListView(アダプターを含む) の後にいます。アダプターには、リストビュー自体への参照が含まれている場合もあります。そのため、アダプターではなくビューを見つけてください

リストビューの場合は、実際には、「行」という単語が含まれる「xxxx_row.xml」という名前のものを探します。これは、リストビュー ビューの標準的な規則であるためです。

于 2012-11-13T19:16:51.010 に答える
2

これは、ほとんどの Android アプリで機能します。

一般に、各画面は Activity クラスのインスタンスによって構築されます。

  • プロジェクトのルートにある AndroidManifest.xml を確認します。次のようなインテント フィルタを含むアクティビティ宣言を探します。

        <intent-filter>
            <action android:name="android.intent.action.MAIN"/>
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    
    </activity>
    

これはアプリケーションへの「エントリ」ポイントであり、厳密には当てはまりませんが、このタスクには十分近いものです。実際、Android は Application クラスの内部シングルトン インスタンスを作成します。これは拡張される可能性がありますが、通常は拡張されません。"extends Application" または " : Application" を grep して確認します。

  • この場合、アクティビティ名と同じ名前のクラス ファイルを見つけます。SampleAppMainActivity.

  • このクラス ファイルを開き、onCreate() を見つけます。これは、アクティビティがインスタンス化されたときに Android が呼び出す最初のメソッドです。

  • setContentView() を見つけます。このように、 res/layout またはそのサブフォルダーにあるレイアウトを参照します。R.layout.sampleappmainlayout. ファイル自体は XML になります。このファイルは、アクティビティ画面で使用される UI 要素を定義します (他のレイアウトをマージするためのインクルードが含まれている場合があります)。

  • 複数のアクティビティがある場合は、このアクティビティでクラスのインスタンスの作成を探しますIntent。通常は、ボタンまたはメニューのクリック リスナーにアタッチされます。

ステップ2からの再帰:)

他の回答は、アダプターの詳細を扱います。それともそうではないでしょうか?Android はアダプターを使用してデータの取得を処理し、それらのデータを UI 要素にバインドします。「UI イベントに応答」しません。おそらく、MVC モデルのビュー コントローラーについてお尋ねですか?

幸運を。

PS クライアントが何を払っても、それだけでは十分ではありません。どうやってこのギグにたどり着いたかは推測できるが、まあ。ただええ。

于 2012-11-13T22:16:18.533 に答える
-1

OS Windows の手順:

  1. dex2jar-0.0.7.10-SNAPSHOT.zip (バージョンは異なる場合があります) をダウンロードし、D:\Decompile フォルダーに解凍します。
  2. Java Decompiler ie JD-GUIをダウンロードし、同じフォルダに展開します。
  3. apktool1.4.1.tar.bz2とapktool -install-windows-r04-brut1.tar.bz2をダウンロードし、システム フォルダー (C:\Windows) に解凍します。
  4. たとえば、アプリケーションは Calculator.apk と呼ばれ、Java Decompilerdex2jarのあるフォルダーに移動します。
  5. コマンド ライン ツールを開く C:\Windows\System32\cmd.exe
  6. ディレクトリをdex2jarがあるフォルダーに変更し、コマンドを入力します。dex2jar Calculator.apk同じフォルダーにすべて成功した場合は、ファイルCalculator.apk.dex2jar.jarが表示されます。
  7. jd-gui前の手順のファイルを開いて開きます。
  8. ファイルを選択File-Save All Sourcesして保存します。
  9. 結果の zip アーカイブを抽出します。
  10. 結果のフォルダーをフォルダー src に配置します (事前に作成する必要があります)。(この構造を回避するには、D:\Decompile\Calculator\src\com\android)。
  11. 再度、コマンド ラインでコマンドを入力しapktool d Calculator.apk Calculatorます。ここで、Calculator.apk-package name、Calculator-folder を逆コンパイルします。
  12. すべてが順調であれば、フォルダーには 2 つの形式 (java と smali) のソース、リソースとファイル AndroidManifest.xml、apktool.yml があります。
于 2012-11-13T19:49:57.217 に答える