2012-01-09 42 views
9

该类BillingService的意见建议:在BillingService模块中,需要修改哪些内容才能提高安全性?

您应该修改,并在使用前混淆这个代码。

好的,但是什么必须修改?

类名?用于记录的TAG?方法名称和数据成员?逻辑和程序流程本身?其他?

换句话说,我可以理解混淆的需要,但是我怎样才能实现建议而不重写所有从零开始(可能包含比不修改任何东西更糟的错误)?

+0

它在哪里说的? – 2012-01-29 23:06:18

回答

6

我工作的这个在这个时刻,我的做法,到目前为止,情况如下:

  1. 我使用BillingReceiver,帐单服务,PurchaseObserver和ResponseHandler所。
  2. 我已将所有常量移入自己的常量类,上述所有类都包含在我自己的包中。
  3. 我已经取消了PurchaseDatabase类,并将其集成到我自己的SQLite数据库,DBAdapter和数据访问类中。
  4. 我已将CatalogEntry更改为我自己的模型对象,并且我的UI与示例中的UI会非常不同。产品项目的RadioButton组而不是Spinner(我只有4个)。
  5. 它在安全类中说'为了安全的实现,所有这些代码应该在与应用程序通信的服务器上实现'。我很幸运,我的应用程序必须联系我的服务器,所以我将在服务器上实施这些安全措施,并且我将自己验证传递给服务器的购买信息。我正在寻求使用SSL来保护这部分通信,并且我已经需要事先存储在我的服务器上的用户名/密码(哈希值和盐值)。
  6. 我正在删除我没有使用的任何其他多余的代码,例如负载编辑。
  7. 某些方法在其签名中有5或6个参数, onPurchasestateChanged() - 我正在考虑将这些组合到一个包装对象中(但还没有这样做)。
  8. 我正在慢慢彻底地测试它,以便理解发生了什么,并遵循这些建议。我首先使用完整的示例来确保它能够工作并测试静态响应。然后,我开始做自己的修改,同时仍然进行静态测试。我仍在使用静态响应进行测试,并且我将按照消息流来了解正在进行的交换。一旦我对此感到满意,我会用我自己的产品ID进行测试,并尝试在数据和安全性方面满足自己。
  9. 我认为developerPayload字符串也可以被签名和加密,当返回到我的服务器时,解密并检查完整性。
  10. 最后,我将使用ProGuard对代码进行混淆处理,并遵循StackOverflow上提供的一些提示。

希望这会有所帮助。

+0

你的详细答案绝对值得+50。谢谢。 – 2012-02-06 03:32:45

0

他们解释如下:

的应用内结算示例程序是公开的分布式和可 任何人都可以下载,这意味着它是相对容易的 攻击者逆向如果工程应用程序您完全按照发布的样本使用示例代码 。示例应用程序旨在将 仅用作示例。如果您使用示例 应用程序的任何部分,则必须在发布应用程序之前对其进行修改,或将其作为生产应用程序的 部分发布。

特别是,攻击者在应用程序中查找已知入口点和出口点 ,因此修改代码中这些与示例应用程序相同的部分非常重要。

这意味着不要使用提供的代码,更改其中的一部分,以便黑客无法知道您使用的代码。

基本上,我不认为他们的意思是billingService本身,而是您在应用程序中使用它的方式。

+0

确定,但该评论出现在示例中的几个模块中,每个模块的开始处:BillingService,ResponseHandler,PurchaseDatabase。什么样的变化? – 2012-01-29 23:52:21

+0

更改为使用它们的应用程序,而不是直接对其进行更改。 – 2012-01-30 09:03:39

+0

我喜欢你的解释,但恐怕这与谷歌的意思相反:“如果你使用**示例应用程序的任何部分**,则必须在发布或释放它之前修改它,作为**的一部分一个生产应用程序“。对我而言,这意味着重组至少上述3个模块。 – 2012-01-30 11:54:39

3

这里没有好消息:除了使用Proguard之外,您需要更改任何可以使用的东西。这包括合并类,分裂他们,从一个模块移动某些方法到另一个,特别是加密存储在数据库中的购买信息,作为PurchaseDatabase类的说明提示:

你应该在储存之前,使用混淆任何信息到 持久性存储。混淆器应该使用特定的密钥 给设备和/或用户。否则,攻击者可以复制一个充满有效购买的数据库 并将其分发给其他人。

的原因是与像AntiLVL工具是很容易的反编译(混淆!)代码比较原始样品,并从中任何需要妥协该帐户扣除。完全防止破裂是不可能的,但是你应该尽可能地让它变得困难。

相关问题