gpt4 book ai didi

android - 如何在运行时验证已安装的应用程序以防止网络钓鱼攻击?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:04:06 26 4
gpt4 key购买 nike

我的设备中有一个支付应用程序,我的应用程序连接到该应用程序的服务以获得启动支付 Activity 的待定 Intent ,然后在 onActivityResult() 方法中收听结果。(类似于应用程序内购买场景)

我为支付意向设置了包裹名称。但您知道,这并不能保证支付应用程序是可信的。如果有人通过未知来源安装具有相同包名和相同 aidl 服务实现的虚假应用程序,那么它可以给我未决 Intent 和网络钓鱼我的用户信息。

我使用某种机制验证支付结果,这只会保护我的应用程序免受虚假支付结果的影响,但我的应用程序用户在网络钓鱼应用程序中输入了他们的数据。(这一段说我的问题是不信任支付响应应用程序,我的问题是在启动他们的 Activity 之前信任支付应用程序)

我知道一些可以检查其他应用程序签名和公钥的方法。 如果Android 操作系统保证公钥和签名是只读的并且与已安装的应用程序匹配,我可以依靠它并在发送 Intent 之前检查支付应用程序的公钥.但我猜这些不是只读的,只在安装时检查匹配。

任何防止网络钓鱼攻击的建议(相似或不同的方法)?

已更新:大约 50% 的应用程序用户直接从我公司的网站安装应用程序(未知来源)。

最佳答案

Android 提供了一种本地方法来验证应用程序是否已从 Play 商店(甚至是 Amazon App Store)安装。但它适用于其他应用程序吗?

看看方法:

PackageManager.getInstallerPackageName(String packageName) (Documentation)

对你来说幸运的是,getInstallerPackageName 接受一个字符串包名称,这意味着你可以将你的邻居应用程序的包 ID 提供给它,并让它返回安装它的包名称!

这个例子会告诉你你的 neighbor-app 是否是由 Play Store 安装的,也就是 com.android.vending:

if(context.getPackageManager().getInstallerPackageName("com.untrusted.app") ==
"com.android.vending") { // ^^^ CHANGE ^^^

//Verified; app installed directly from Play Store
}

亚马逊应用商店有一个奇怪的包名:

if(context.getPackageManager().getInstallerPackageName("com.untrusted.app") ==
"com.amazon.venezia") {

//Verified; app installed directly from Amazon App Store
}

这应该是您需要的一切,希望对您有所帮助!

关于android - 如何在运行时验证已安装的应用程序以防止网络钓鱼攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36444172/

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