首先我不得不承认我是Android的新手,但我们知道在android中我们不能通过另一个应用程序启动应用程序的私有(private) Activity 。除非它们在它们的 intent-filter
中设置为 android:exported=true 或者它们是为 implicit
calls 制作的。
但我们应该能够从应用程序中启动私有(private) Activity 。对于浏览器(特别是在 Android 中),我们可以使用 Intent URLs
启动浏览器的私有(private) Activity。
我在 Opera Mobile 中发现了一些 Activity ,问题是我无法使用 Intent URL 运行它们,而且我不知道我在这方面做错了什么。
例如,歌剧中有一个名为 OperaMainActivity
的 Activity(或另一个名为 OperaStartActivity
),我试图像这样启动它们:
intent:#Intent;component=com.opera.browser/com.opera.android.OperaMainActivity;end
或
intent:#Intent;component=com.opera.browser/com.opera.android.OperaStartActivity;end
但这些都不会启动调用的 Activity 。
尽管我仍然可以启动 AdMarvelActivity
,它也是私有(private)的:
"intent:#Intent;S.url=https://google.com;component=com.opera.browser/com.admarvel.android.ads.AdMarvelActivity;end";
这是在 AndroidManifest
中定义 OperaMain Activity 的方式:
<activity ns0:label="@string/app_name_title" ns0:name="com.opera.android.OperaMainActivity" ns0:launchMode="singleTask" ns0:configChanges="keyboard|keyboardHidden|orientation|screenSize" ns0:windowSoftInputMode="10" />
而且没有 intent-filter
。
AndroidManifest
中的 AdMarvelActivity
是这样定义的:
<activity ns0:theme="@*ns0:style/Theme.NoTitleBar.Fullscreen" ns0:name="com.admarvel.android.ads.AdMarvelActivity" ns0:process=":helper" ns0:configChanges="keyboard|keyboardHidden|orientation" />
我看不出这两者有什么大的区别。我做错了什么?!
最佳答案
Vulnerable Handling of Intent URL Scheme很久以前就知道了,大多数流行的浏览器(如 chrome、opera)都修复了这个错误。然而,替代的 Android 浏览器仍然存在此漏洞。
我尝试了对当前版本的 Opera Mobile (v37) 的攻击,幸运的是它不起作用。您必须在较旧的 apk 上运行它。
如果您有兴趣在替代浏览器上测试这种攻击,您可以关注这个演讲:All Your Browsers Belong To Us ;其中演示了对 Dolphin 浏览器和 Mercury 浏览器的这种攻击。
关于android - 使用 Intent URL 启动 Android 浏览器的私有(private) Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39563222/