2012-01-10 68 views
15

Security and Design指南詳細列出了各種方法,使攻擊者更難以妥協應用內計費實施。良好的軟件工程與安全

尤其值得注意的是,即使通過Proguard進行混淆,對.apk文件進行反向工程也是多麼容易。所以他們甚至建議修改所有示例應用程序代碼,特別是「已知的入口點和出口點」。

我發現缺少的是在一個方法的任何參照包裝某些驗證方法,如靜態Security.verify()返回boolean:一個好的設計(減少了代碼重複,可重複使用,容易調試,自我記錄等),但是攻擊者現在需要做的就是識別該方法並使其始終返回true ...因此,不管我多少次使用它,延遲或不延遲,隨機或不隨機,它都無關緊要。另一方面,Java在C/C++中沒有宏,這允許減少源代碼重複,但是對於verify()函數沒有單個退出點。

所以我的問題:

有著名的軟件工程/編碼實踐和設計用於所謂的安全性之間存在着固有的競爭? (至少在Java/Android /安全交易方面)

可以採取什麼措施來減輕「安全設計」的副作用,這似乎是「過度複雜化」軟件本來可以更簡單,更易維護且更容易調試?

您能否推薦進一步學習該主題的好資源?

+0

Maday!我認爲我們有黑客! – 2012-01-10 02:56:35

+0

對於應用程序內我相信安全類必須是您的應用程序服務器。 – 2012-01-10 02:59:02

+0

代碼混淆的價值引起了熱烈的爭論,它不是* stackoverflow的用途。 – 2012-01-10 03:00:33

回答

7

像往常一樣,這是一個折衷。讓你的代碼更難以反向工程/破解涉及使其不易讀和更難維護。您可以根據自己的用戶羣,自己在該地區的技能,時間/成本等因素決定走多遠。這不是特定於Android的。觀看this Google I/O presentation進行混淆並使您的代碼防篡改的各個階段。然後決定你願意爲自己的應用程序走多遠。另一方面,您不必混淆/硬化等。所有您的代碼,只是處理授權等的部分。這通常是整個代碼庫的一小部分,並且並不需要經常改變,所以你可以忍受它很難遵守/維護等等。只是記錄它如何工作,所以你提醒自己2年後:)。

+0

謝謝您確認我一直在觀察的內容,但沒有真正確定這一點,因爲這不是我研究的領域。直到現在,在第一次使用應用內結算之前,我開始意識到它是如何適應(試圖)保護軟件的。 – 2012-01-10 03:44:27

5

您所描述的計數器生產力是冰山一角......沒有軟件在發佈時100%無錯誤,因此當用戶開始報告問題時,您會做什麼?

在禁用日誌記錄,堆棧跟蹤和其他各種幫助反向工程師並幫助合法開發團隊的信息後,如何排除或調試字段問題?

3

不管困難的混淆方法是什麼,總是有一種方法來對它們進行反向工程。我的意思是,如果您的軟件在黑客社區中更受歡迎,最終有人會嘗試對其進行逆向工程。

混淆僅僅是一種使逆向工程更加棘手的方法。

所以是包裝。我認爲很多包裝方法都是可用的,但是對其進行逆向工程的過程也是如此。

您可以查看www.tuts4you.com以查看大量指南是否可用。

我不是像許多人一樣的專家,但這是我在學習逆向工程過程中的經驗。最近我也看到了很多有關Android應用程序逆向工程的指南。我甚至在nullc0n(不知道)CTF中看到過,在Reversing Android中有一個應用程序。如果你願意,我可以在搜索後提及該網站。

+2

也許這是很好的信息kidd0,但它很難閱讀。我們通常不會在StackOverflow上混淆回答:) – 2012-01-30 18:34:05

+0

@owlstead:對於可憐的編輯,我真的很抱歉。新的到stackoverflow。 :(我編輯它。如果你認爲它的某些用途,請使它0(聲譽) – 2012-01-31 08:31:22