验证android消息传递应用

Sam*_*msh 2 security authentication encryption android

这是一个消息应用程序.它没有登录名(用户名或密码).这意味着它必须向服务器发送消息,服务器必须相信它来自它所说的来自的电话号码.

你是怎样做的?

1)将令牌发送到具有短信服务的电话

Fre*_*Ben 6

不幸的是,您无法100%确定向服务器报告的电话号码是否来自该电话号码.原因是无论您做什么,客户端代码都可以进行逆向工程.虽然重要的是你不要依赖于100%的安全性,但是你可以做一些事情来使它变得更加困难.如果您需要100%保证,那么您需要通过传统方式让应用程序对服务器进行身份验证.

我这样做的方法是在释放的每个客户端副本中嵌入一个令牌,这样每个客户端都有一个不同的令牌.令牌应具有极大的熵(例如128位或更大的整数),并且您应该在服务器上保留一个列表,该列表是您使用设备的电话号码发出的令牌,因此您可以检查它们的有效性.需要重新安装应用程序才能使用新令牌,并将之前的令牌列入黑名单,以便不再使用它.可以使用UID,但要注意它很容易被root设备欺骗.

每次都将此令牌提交给服务器,并确保应用声称永远不会更改的电话号码.为了让逆向工程师更难在代码中找到令牌,你可以xor使用额外的令牌进行一次或多次,并且还可以在服务器上列入黑名单的整个代码中布置一堆假令牌.

您还可以使用从服务器检索的密钥对其进行加密,以便在与服务器进行实时交互期间,RE必须检索嵌入式令牌.同样,这绝不能保证令牌不会被发现和更改/被盗,但它为潜在的逆向工程师提高了标准.

为了防止有人嗅探线路并获取和/或篡改您的令牌,或者使用像Burp Suite这样的代理来捕获/篡改它,您应该使用加密的HMAC.如果您以前从未使用过HMAC,请注意,除非您对其进行加密,否则它只提供身份验证和完整性,而不是机密性.

编辑:

还应该补充一点,您应该在部署之前通过Obfuscator运行代码.这不会混淆令牌,但它会混淆反编译的代码,所以它看起来像RE的乱码.这会强制RE使用您应用中的字节代码/汇编代码,这要困难得多.