2012-01-09 39 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工具是很容易的反編譯(混淆!)代碼比較原始樣品,並從中任何需要妥協該帳戶扣除。完全防止破裂是不可能的,但是你應該儘可能地讓它變得困難。

相關問題