gpt4 book ai didi

android - 防止/使修补二进制程序集变得困难

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:50 26 4
gpt4 key购买 nike

我不确定术语是否正确,您可以使用哪些代码实践来使某人难以修改二进制文件/程序集以绕过检查:

例如在源代码中。

bool verificationResult = verify();
if (verificationResult){
allow_Something();
}else{
prevent_Something();
}

如果查看上述代码的反汇编版本的人可以修改“跳转操作码(?)”以运行 allow_Something,即使验证结果为假。

这里有类似的内容 http://www.codeproject.com/Articles/18961/Tamper-Aware-and-Self-Healing-Code#pre0

请注意,我正在用 C++ 创建二进制文件,以便通过 NDK 在 Android 上使用它。

最佳答案

由于目前的普遍共识,不可能阻止任何人执意要“破解”您的 APK。混淆技术只会增加一次“破解”APK 所需的复杂性。在它被上传到无数提供免费托管 APK 的网站后,它甚至与 Android noobs 的“noob-est”相去甚远。

还有 security through obscurityNOT get you far .

关于保护您的 APK 免遭黑客攻击,我会推荐以下讨论 license validation of APKs on Android 当前状态的文章.其中描述的技术应该让您了解需要防范的常见攻击向量。

Proguard是一个很好的起点 obfuscating your APK .

在您设法获得混淆后的 APK 后,请务必通过以下工具运行它并观察反编译源。所有这些都是非常流行的免费和开源工具,肯定是任何体面的“破解者”都会尝试的第一件事:
1. baksmali
2. apktool
3. Dex2Jar + JD-Gui

不断向您的代码添加混淆层,直到您对上述工具的输出相当复杂而难以理解感到满意为止。 (同样不要低估一个带着可乐、比萨饼和 the knowledge of DVM opcodes 的大学毕业生在一个周末可以完成的事情)。

关于 link 中讨论的技术你分享了,我看不出如何实现它们来保护 .dex 在 Android 上。如果您最终在单独的 .so 中实现验证逻辑 那么所有“破解者”需要做的就是将 java 代码中的调用修补到 .so 中的 verify() 函数。 .


更新:

额外的混淆步骤来保护 .so .

<强>1。不要遵循或多或少的线性路径。
在整个地方添加额外的跳转,通过用如此多的潜在目标淹没“破解者”来工作,如果保护被绕过,这些目标需要单独修改和修补并验证。

<强>2。添加时序检查这主要是通过使代码在调试和实际运行时遵循不同的路径来摆脱“破解者”。如果两点之间花费的时间比平时多很多,那么它清楚地表明您的程序正在调试。即是时候进入计算世界上钢琴数量的垃圾代码部分了。

<强>3。编写自修改代码
这再次阻碍了静态分析。例如,如果您跳转 进入验证函数在二进制文件中不存在,但作为 .so 中某些 init() 函数的一部分在各处进行了修补。 .

所有上述技术(以及更多)在以下关于 anti-debugging techniques 的文章中通过示例进行了描述.

更全面的指南是 Ultimate Anti Debugging Reference by Peter Ferrie .

关于android - 防止/使修补二进制程序集变得困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17225590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com