Articles of 安全

Android 4.3:如何检查用户是否启用了锁定?

如果用户没有锁定屏幕或仅启用了滑动,我希望我的应用程序表现不同(不存储内容)。 这里的最佳答案是: 检查是否已启用锁定,以便在升级到Android 4.3后代码不再有效。 无论如何在Android 4.3上检测到这个?

使用Phonegap(或等效的)包装的HTML5应用程序进行身份validation

有没有办法,只使用JavaScript(客户端),以确保HTTP请求实际来自我的Phonegap应用程序? 请注意:我不是在谈论对用户进行身份validation,而是在某种意义上说,是关于对应用程序本身进行身份validation。 没有(也不一定是)与此相关的任何types的用户交互。 甚至没有谈论通信的机密性(我没有使用HTTPS,有效载荷没有加密)。 我的猜测是,最终,这不可避免地需要某种硬编码密钥 。 问题是,正如你在这里看到的那样,几乎任何人都可以访问这样的密钥 – 这个问题不仅出现在Javascript资产上,还出现在Android中的Java中。 如果没有办法使用Phonegap或任何Cordova插件,你能否建议一个可以使这个东西成为可能的等效框架(或像Icenium这样的环境)? 或者,最后,如果不对上述情况采取这种预防措施,是否会有任何真正的风险? 编辑:Kurt Du Bois提醒我,我没有提到SSL客户端身份validation。 无论适用/方便与否,它总是会导致保密私钥的问题。 我发现这里有很好的描述,并在句子中总结:“确保密钥未被导出的保证仅与密钥存储本身一样强”。

在没有ProtectionParameter的情况下在KeyStore中存储密钥

到目前为止,我已经习惯使用以下代码将我的应用程序机密存储到KeyStore : // creating a instance KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); // generating a secret key SecretKey secretKey = KeyGenerator.getInstance(“AES”).generateKey(); // store the secret key KeyStore.Entry keyStoreEntry = new KeyStore.SecretKeyEntry(secretKey); ProtectionParameter keyPassword = new PasswordProtection(“myPassword”.toCharArray()); keyStore.setEntry(“mySecretKey”, keyStoreEntry, keyPassword); 根据API 14+中的此Stackoverflowpost , KeyStore凭据存储受设备解锁密码保护,因此不需要ProtectionParameter 。 但是如何在不提供第三个参数的情况下设置KeyStore条目?

Android M – 用于存储用户名/密码的钥匙串

以下是我试图在Android上实现的iOS工作流程: 用户首次启动应用程序并使用凭据成功登录(发送到API进行validation)。 要求注册Touch ID的提示节目 用户选择YES =>用户名/密码存储在Keychain中 用户注销,关闭并重新启动应用程序。 提示显示要求使用指纹进行身份validation 用户使用指纹进行身份validation=>从Keychain检索用户名/密码,然后发送到API 是否有Android等效的iOS Keychain API? 据我所知,Keystore似乎只能存储密钥和证书。

缓存混淆密钥的漏洞? Android许可

每当Android Market Licensing ping服务器返回GRANT_ACCESS pong时,我都会缓存用户的身份validation。 有没有人看到这个策略有任何漏洞? 我相信它非常强大,因为我混淆了一把钥匙,而且不混淆的唯一方法就是知道盐。 现在,有人可以想象打开apk并寻找盐,但这并不是真正的破解程度我觉得太重要了,不用担心。 如您所见,设备特定信息正被添加到混淆技术中。 // Try to use more data here. ANDROID_ID is a single point of attack. String deviceId = Secure.getString(getContentResolver(), Secure.ANDROID_ID); obfuscator = new AESObfuscator(SALT, getPackageName(), deviceId); mChecker = new LicenseChecker(this, new ServerManagedPolicy(this, obfuscator), BASE64_PUBLIC_KEY ); 接下来创建持久化数据: public void allow() { SharedPreferences settings = getSharedPreferences(PREFERENCES_EULA, 0); SharedPreferences.Editor editor […]

在Android上保护Twitter密钥

将twitter身份validation添加到我的Android应用程序,转到Twitter开发时 ,我惊讶地发现我必须像这样初始化Twitter的Fabric : import io.fabric.sdk.android.Fabric; import com.twitter.sdk.android.Twitter; import com.twitter.sdk.android.core.TwitterAuthConfig; … @Override public void onCreate() { super.onCreate(); TwitterAuthConfig authConfig = new TwitterAuthConfig(“consumerKey”, “consumerSecret”); Fabric.with(this, new Twitter(authConfig)); } 他们正式建议我将API Key和API Secret作为明文放在我的应用程序中。 即使在此官方示例中 ,密钥也存储在BuildConfig 。 我正在使用Proguard,但即便如此,我无法保证坚定的黑客无法利用我的API秘密 。 像Quora这样的既定应用程序是否也公开了这些密钥 有人可以发布一个例子来克服这个漏洞,或者说一下为什么Twitter会这样做吗? 相比之下, 谷歌和Facebook只要求我添加一个AppID ,我不得不哈希我的签名证书并将哈希链接到相应的应用程序。 这比以上更安全。

SSRS网页的Monodroid WebView身份validation

我尝试使用身份validation访问网站时尝试了两次,我不确定我的尝试有什么问题。 我会列出每一个。 有没有人试过这个并让它起作用? 这对Java Android程序员来说应该不难理解,也不应该让我使用monodroid EDIT (它很重要,因为我在下面有一个Java实现工作得很好) END EDIT 。 我试图通过WebView访问SSRS RDL,我需要插入一些通用凭据。 活动: public static string username = “…”; public static string password = “…”; public static string website = “http://10.0.0.5/Reports”; private WebView webView; private void setupWebView(int attempt) { webView.Settings.JavaScriptEnabled = true; webView.Settings.BlockNetworkLoads = false; switch (attempt) { case 1: { webView.SetHttpAuthUsernamePassword(website, “”, username, password); […]

如何防止Android的应用内购买项目被破解

我有免费下载Android应用程序,它附带应用程序内购买项目(非消耗品) 最近,我发现几个黑市都带有我的Android应用程序,所有应用内购买项目都可以自由访问。 我在想,这些cookies是怎么做到的? 这就是我在我身边所做的。 有程序来混淆我的Android代码。 从Google官方示例中获取以下应用内购买代码。 我的onCreate将触发updateIsPremium 。 代码如下 private void updateIsPremium() { if (mHelper != null) { return; } /* base64EncodedPublicKey should be YOUR APPLICATION’S PUBLIC KEY * (that you got from the Google Play developer console). This is not your * developer public key, it’s the *app-specific* public key. * * Instead of […]

我是否只能在某些Android版本中获得许可?

GCM在JellyBean及更高版本上不需要android.permission.GET_ACCOUNTS。 但是,我的应用程序适用于API级别11及更高级别,因此我需要在这些设备上声明它。 由于我不需要使用GCM以外的帐户,我是否只能在API级别16以下的Android版本上注册此权限? 我的应用程序非常注重安全性,因此避免此许可将是一个巨大的优势。

是否有可能为Android手机编写wifi crack util? 监控模式与多播?

考虑为android平台编写一个wifi破解( wep , wpa )审计工具,但我想知道是否有可能没有root电话。 由于手机wifi芯片忽略了没有发往手机的数据包,我原本以为无法在无根电话上运行。 也就是说,如果没有将wifi芯片设置为监控模式的能力,许多这些攻击都无法工作。 我很惊讶地发现android支持多播数据包 。 也就是说,Android手机可以设置为接收未发送给他们的数据包。 我的问题是: 拥有多播锁意味着我可以接收所有广播数据包,还是仅适用于具有多播标志的数据包(如果存在这样的话)? 监控模式和组播之间有区别吗? android api有没有切换频道的系统? 更一般地说,我很好奇: 是否有人熟悉在Android上运行的其他wifi破解项目(谷歌搜索出现的很少)? 我可能遇到什么困难? 这个问题与SO问题有关无论如何将Android WIFI(机器人手机)置于多种监控模式 ?