我正在为Android 开发支付处理应用程序,我想阻止黑客从APK文件访问任何资源,资产或源代码.
如果有人将.apk扩展名更改为.zip,那么他们可以解压缩它并轻松访问所有应用程序的资源和资产,并使用dex2jar和Java反编译器,他们也可以访问源代码.逆向工程Android APK文件非常容易 - 有关详细信息,请参阅Stack Overflow问题从APK文件到项目的逆向工程.
我使用了随Android SDK提供的Proguard工具.当我对使用签名密钥库和Proguard生成的APK文件进行逆向工程时,我得到了混淆代码.
但是,Android组件的名称保持不变,某些代码(如应用程序中使用的键值)保持不变.根据Proguard文档,该工具不能混淆清单文件中提到的组件.
现在我的问题是:
如果我想存储要在Android应用程序中使用的用户名和密码,那么最好的方法是什么?是通过首选项屏幕(但如果用户错过了该怎么办?),或弹出一个对话框并询问用户凭据?如果是这样,我必须维护应用程序的状态.我该怎么做?
我想存储用于签署我在安全的地方开发的财务应用程序的密码.在做了一些网上冲浪后,我发现了以下选项,但每个选项都有一定的缺点.
1)KeyChain.
仅适用于OS版本4.
2)共享偏好.
它以纯文本形式存储数据,即使我加密数据,也可以通过反编译应用程序代码来破坏加密密钥.
3)访问密钥库守护程序并在其中存储凭据.
(http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html)需要记住另一个密码.
请建议我更好的方法来保护Android应用程序中的凭证信息,如IPhone KeyChain.
我正在开发oAuth 1和2访问webservices的框架,我的问题是,如何以安全的方式存储像oAuth访问密钥这样的敏感数据?这个键的问题在于某些平台如twitter会使用永久密钥,如果有人可以访问此密钥,他可以使用用户的Twitter帐户做任何他想做的事情.
那么在将数据存储到共享首选项之前是否可以自动加密数据?或者有更好的方式/地方存储非常重要的数据?
更新 - 另请阅读:在Android应用程序中存储用户设置的最合适方法是什么
我在我的应用程序中创建登录.用户输入他的信息我将其发送到Web服务以检查并获取他的ID.现在我需要将它保存在我的应用程序中,我可以检查他是否登录.
那么这个信息应该保存在哪里?我知道每个应用都有它的设置所以应该有这个信息?也许有人可以给我更多信息这是怎么做的.
谢谢.
我发现这篇文章: 在Android应用程序中存储用户设置的最合适方法是什么
我相信我的问题是重复的.但如果你有更多的东西可以分享,那就太好了.
情况:
Alice使用一个在线银行网站存储她的凭证的cookie.
在cookie过期之前,Eve向Alice发送恶意URL,随后使Alice从她的银行帐户中提取资金并将其发送给Eve.
这是Web应用程序的常见CSRF示例,但在移动应用程序中执行此操作的可行性如何?
如果Alice在她的手机上使用银行应用程序存储cookie然后访问具有类似结果的Eve的网站怎么办?
Alice本地(或混合)应用程序中的移动设备上的cookie是否容易受到操纵,或者这些cookie通常会以某种方式装在设备上?
我会假设iOS,Android等上的cookie与普通浏览器的工作方式相同,但实际情况如此吗?
编辑:
这个问题原本打算在所有移动设备上都是通用的.甚至诸如在JavaScript中创建cookie然后使用PhoneGap或Titanium之类的东西我也相信.在阅读了更多内容之后,我也很好奇,如果使用这些其他技术之一编译JavaScript会影响本机设备的cookie以及它们如何存储它们.
使用cookie的主要目的是维护用户的凭据,这样他们就不必每次都使用银行帐户注销并重新登录.在阅读了有关此问题的更多信息后,似乎每个特定设备都有不同的场景,事实上CSRF应用程序是可行的.例如,Android中的" 共享首选项"是沙盒,以防止其他应用程序访问这些值.
我有一个用户名,密码和复选框(在文本旁边'记住我').
如何实现记住我的功能以保存用户名和密码数据?
任何帮助,将不胜感激.
我正在使用SharedPreferences的自定义子类来加密我在应用程序中保存的设置,类似于第二个响应中的操作:在Android应用程序中存储用户设置的最合适方式是什么
我必须保存的偏好数量正在增加.在我使用自定义视图更新这些首选项之前,这将变得很麻烦,我想使用PreferenceActivity或PreferenceFragment.问题是,似乎没有办法让这些类中的任何一个使用我的子类访问我的数据,这意味着它从默认首选项文件中提取的数据将是乱码,因为它没有被解密.
我发现有些人已经创建了Preference的自定义实现来加密那里的数据,但是我不想这样做,因为数据已经在我的SharedPreferences子类中加密/解密了,我想保留它办法.我一直在查看PreferenceActivity和PreferenceManager的源代码,我不确定解决这个问题的最佳方法.
有没有其他人有幸做完这样的事情并对我可能从哪里开始有任何建议?
我正在开发一个应用程序,我必须存储非常敏感的数据,它不应该与用户联系.我从这个来源得知,如果一个设备是root用户,那么访问SharedPreferences和修改它就是一个很好的例子.我不想要它.那么有什么方法可以保护我SharedPreferences不被任何地方访问.或者更好的是,如果有人可以建议更安全的数据存储选项
我从谷歌播放控制台收到一些错误,其中一些用户(Pixel XL,nexus 5和Xperia Z3 +)正在获得
Caused by: java.lang.RuntimeException: javax.crypto.BadPaddingException: pad block corrupted
at com.darwins.custom.ObscuredSharedPreferences.decrypt(ObscuredSharedPreferences.java:193)
at com.darwins.custom.ObscuredSharedPreferences.getInt(ObscuredSharedPreferences.java:134)
Run Code Online (Sandbox Code Playgroud)
该应用程序在其余设备上工作正常(即使在一些nexus 5工作正常)
当用户第一次打开应用程序时,问题出现了,它尝试从共享首选项加载音乐卷.由于他们从未在选项菜单中输入以更改默认值,因此应获取默认值:
if(sp == null) sp = new ObscuredSharedPreferences(ctx, ctx.getSharedPreferences(SP_NAME, Context.MODE_PRIVATE));
if(musicVolume == -1) musicVolume = sp.getInt(KEY_SP_MUSIC_VOLUME,10);
Run Code Online (Sandbox Code Playgroud)
如果我们从ObsucredSharedPreferences输入getInt:
@Override
public int getInt(String key, int defValue) {
final String v = delegate.getString(key, null);
return v!=null ? Integer.parseInt(decrypt(v)) : defValue;
}
Run Code Online (Sandbox Code Playgroud)
因此,getString我没有得到null值,而是得到像"ERKJFER89er"这样的值(我从不在首选项中写入该值,否则它应该在每个手机上崩溃)所以当它试图解密该值时,它期望一个int值,它抛出一个javax.crypto.BadPaddingException: pad block corrupted我不知道如何解决这个或如何解决这个问题,任何想法将是apreciate
解密代码:
protected String decrypt(String value){
try {
final byte[] bytes = value!=null ? Base64.decode(value,Base64.DEFAULT) : new …Run Code Online (Sandbox Code Playgroud) android ×10
security ×3
credentials ×1
encryption ×1
ios ×1
mobile ×1
nexus-5 ×1
oauth ×1
proguard ×1
sony-xperia ×1
storage ×1