1

更新: グーグルに2時間以上費やしましたが、答えが見つかりません。Loginアクティビティからアクティビティが送信するハンドルをmain.javaに追加しました。これで、ファイルツリーは次のようになります。 ここに画像の説明を入力してください

しかし、それでもエラーが発生しました

E / AndroidRuntime(1282):android.content.ActivityNotFoundException:インテントを処理するアクティビティが見つかりません{act = com.goodboy.loginIntent.action.main cat = [android.intent.category.DEFAULT](追加機能あり)}

私はこの質問が単純であることを知っています、私はアンドロイドに不慣れです、どんな助けもいただければ幸いです:)

Androidでは、特定の受信者(アクティビティまたはサービス)を持つインテントと、システム全体でリッスンしている可能性のあるコンポーネントにブロードキャストされるインテントを使用できます。

setClassNameを設定しないと、他の人があなたのプライベートメッセージを聞くことができるPoC(概念実証)を作りたいと思います。

このPoCは単純です。ユーザーがログインアクティビティにユーザー名とパスワードを入力し、ログインボタンをクリックすると、App Goodboyのログインアクティビティがあり、AppBadboyからの邪悪なアクティビティがこのメッセージを盗みます。

しかし、失敗しました:(

ログインボタンをクリックすると失敗しました: ここに画像の説明を入力してください

そして、悪意は何も得られませんでした:

ここに画像の説明を入力してください

ログインアクティビティのJavaソースコード

package com.goodboy.loginIntent;
import com.goodboy.loginIntent.R;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class GoodloginActivity extends Activity {
    private EditText et_user;
    private EditText et_pwd;
    private Button btn_login;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login);
        et_user = (EditText) findViewById(R.id.et_user);
        et_pwd = (EditText) findViewById(R.id.et_pwd);
        btn_login = (Button) findViewById(R.id.btn_login);
        btn_login.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
                Intent m_intent = new Intent();
                m_intent.putExtra("username", et_user.getText().toString());
                m_intent.putExtra("password", et_pwd.getText().toString());
                m_intent.setAction("com.goodboy.loginIntent.action.main");
                m_intent.addCategory(Intent.CATEGORY_DEFAULT);
                startActivity(m_intent);
            }
        });
    }
}

main.javaのソースコード

package com.goodboy.loginIntent;
import android.app.Activity;
import android.os.Bundle;
import com.goodboy.loginIntent.R;
public class main  extends Activity {
@Override
 public void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
  }
}

ログインレイアウト:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >


    <EditText
        android:id="@+id/et_user"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >

        <requestFocus />
    </EditText>


    <EditText
        android:id="@+id/et_pwd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10"
        android:inputType="textPassword" />


    <Button
        android:id="@+id/btn_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

邪悪な活動のJavaソースコード:

package com.badboy.stealIntent;

import com.badboy.stealIntent.R;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class BadIntentActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Toast.makeText(getBaseContext(),
                "username: "+this.getIntent().getStringExtra("username")+
                "\npassword: "+this.getIntent().getStringExtra("password"),
                Toast.LENGTH_SHORT).show();
    }
}

ログインアプリのマニフェストである@DavidWasserに感謝します(update):

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.goodboy.loginIntent"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="15" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".GoodloginActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".main"
            android:label="@string/main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

badIntentのマニフェスト:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.badboy.stealIntent"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk android:minSdkVersion="15" />

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".BadIntentActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>
4

2 に答える 2

2

名前が示すように、「パブリック」インテントをインターセプトし、インテントのセットアップとデータを参照できるようにする、開発者向けのアプリケーションであるIntent Interceptを確認する必要があります。Intent Intercept はオープン ソースです。コードはGitHubで参照できます。

問題については、使用しているアクションに BadBoy アプリケーションが登録されていることを確認してください。また、goodlogin の logcat のスタック トレースを見て、アクティビティがクラッシュする場所を確認してください。

于 2012-06-13T09:16:10.143 に答える
1

応答するシステムに認識されているアクティビティがないため、おそらくActivityNotFoundException呼び出し時に をstartActivity()取得しています。GoodloginActivity

ACTION = "com.goodboy.loginIntent.action.main" and
CATEGORY = CATEGORY_DEFAULT

logcat の出力を見てください。

于 2012-06-13T09:54:19.410 に答える