良好的软件工程与安全性

Bil*_*Ape 15 java encryption android decompiling reverse-engineering

安全性和设计准则去大篇幅概述的各种方法,使之更加难以攻击者危及应用内结算的实施.

特别值得注意的是.apk,即使通过Proguard进行模糊处理,对文件进行反向工程也是多么容易.因此,他们甚至建议修改所有示例应用程序代码,尤其是"已知入口点和出口点".

我发现缺少的是在单个方法中包含某些验证方法的任何引用,例如Security.verify()返回的静态boolean:一个好的设计实践(减少代码重复,可重用,更容易调试,自我记录等)但是所有攻击者现在需要做的就是找出那种方法并让它始终返回true......所以无论我使用它多少次,延迟或不延迟,随机或不随意,它都无所谓.

另一方面,Java没有像C/C++那样的宏,它允许减少源代码重复,但没有verify()函数的单个退出点.

所以我的问题:

众所周知的软件工程/编码实践与所谓安全设计之间是否存在内在争用?(至少在Java/Android /安全交易的背景下)

可以采取哪些措施来缓解"安全设计"的副作用,这种副作用似乎是"在脚下拍摄"过度复杂的软件,这些软件本来可以更简单,更易于维护和更容易调试?

你能推荐一些好的资料来进一步研究这个课题吗?

Nik*_*kov 7

像往常一样,这是一个权衡.使代码更难以进行逆向工程/破解,这使得它的可读性降低,难以维护.您可以根据预期的用户群,自己在该地区的技能,时间/成本等来决定要走多远.这不是Android特有的.观看此Google I/O演示文稿,了解各种混淆阶段并使您的代码防篡改.然后决定你愿意为你自己的应用程序走多远.

另一方面,您不必混淆/强化所有代码,只需处理许可等部分.这通常只是整个代码库的一小部分,并不需要经常改变,所以你可能会感到很难跟随/维持,等等.只要记下它是如何工作的,所以你提醒自己2年后:).


Reg*_*kie 5

您所描述的反制效率是冰山一角......没有软件在发布时100%无错误,那么当用户开始报告问题时您会怎么做?

在禁用日志记录,堆栈跟踪以及帮助逆向工程师帮助合法开发团队的各种其他信息之后,如何排除故障或调试现场问题?