gpt4 book ai didi

android - 是否可以窃取 Intents 发送的消息?

转载 作者:行者123 更新时间:2023-11-29 18:10:23 24 4
gpt4 key购买 nike

更新:我花了2个多小时去谷歌,但我找不到答案。我添加了一个 main.java 来处理从登录 Activity 发送的 Activity 。现在文件树看起来像: enter image description here

还是报错

E/AndroidRuntime(1282): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=com.goodboy.loginIntent.action.main cat=[android.intent.category.DEFAULT] (has extras) }

我知道这个问题很简单,我是 android 的新手,任何帮助将不胜感激:)

Android 允许具有特定接收者(Activity 或服务)的 Intent 以及在整个系统中广播到可能正在监听的任何组件的 Intent。

我想做一个PoC(Proof of Concept),如果我们不设置setClassName,其他人可以听到你的私信。

这个 PoC 很简单,假设 App Goodboy 有一个 Login Activity,当用户在登录 Activity 中输入他的用户名和密码,并点击登录按钮时,来自 App Badboy 的邪恶 Activity 窃取了这条消息。

然而,失败了:(

当我点击登录按钮时,失败: enter image description here

邪恶的 Intent 一无所获:

enter image description here

登录Activity的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>

作恶 Activity 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();
}
}

感谢@David Wasser,登录应用 list (更新):

<?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 的 list :

<?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>

最佳答案

你应该看看Intent Intercept ,一个针对开发人员的应用程序,顾名思义,它拦截任何“公共(public)” Intent ,允许您浏览 Intent 设置和数据。 Intent Intercept 是开源的,您可以在 GitHub 上浏览代码

至于您的问题,请检查 BadBoy 应用程序是否已针对您正在使用的操作进行注册。另外,查看 goodlogin 上 logcat 中的堆栈跟踪,了解 Activity 崩溃的位置。

关于android - 是否可以窃取 Intents 发送的消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11011578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com