gpt4 book ai didi

android - 如何使 'android unlocker' 应用程序更安全地抵御黑客攻击?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:35:10 25 4
gpt4 key购买 nike

对于我的应用程序的付费版本,我选择了解锁器应用程序路线,因为它易于实现,允许在开发者控制台中显示个人统计信息,但主要是因为我不需要维护 2 个代码库(一个用于免费版本和另一个付费版本)。即使我使用 CVS(我这样做),继续合并功能和错误修复仍然是一件令人头疼的事情。解锁器应用程序整体上更容易实现......

但这有一个严重的缺点,很容易越过安全检查;除非我在这里遗漏了什么。

无论我做什么,这样的实现总是会导致一个简单的if,就像这样:

if(Program.isPremiumVersion()) {
// Remove ads...
}

isPremiumVersion() 方法负责检查付费解锁器应用程序安装的所有工作,如果证书匹配等等。是的,解锁器应用程序受 LVL 保护(尽管我读过几篇文章提到 LVL 是多么不安全,但这不是现在的重点)。但最后,无论 isPremiumVersion() 中的代码变得多么复杂,它总是会返回一个 truefalse 值。

覆盖此类安全功能只是对代码进行逆向工程并使其始终返回 true 的问题。不是吗?我们如何保护我们的 Android 应用程序免受此影响?是的,代码使用 ProGuard 进行了混淆处理。尽管如此,对于足够熟练的人来说应该不会太难。

请注意,我不是要与 cookies 打架,我们根本赢不了。我不会为此失眠,在“完美解决方案”上浪费无数时间。我只是在寻找一种使它更安全的方法。这似乎很容易破解,至少在理论上是这样。我错了吗?

有什么想法可以提高此类功能的安全性吗?

最佳答案

没有简单的方法解决这个问题。

你必须试着掩盖它。这里有一些提示:

提示 1: 返回 bool 值太明显了。尝试返回一个值(例如 int)。然后,使用比较来查看这是否是一个有效的已知返回值。

例如:获取包含某些内容的字符串的 md5,您可以从中判断它是否优质。假设您在每个应用程序上都有一个静态最终字符串。也许一个的 md5 以 9 开​​头,另一个以 1 开头。在这种情况下,计算 md5 并查看它是否大于您知道它位于其他两个数字之间的“随机”数字。假设“premium”的md5是987,“free”的md5是123,你可以算出md5和456比较。

技巧 2 - 更好:复制一些代码并每次都使用不同的值(而不是 456)!希望这将使解码混淆代码变得更加困难。

我知道所有这些检查最终都会映射到一个 bool 值(if(1 > 2) 将被评估为 if(true) )但它应该是更难对您的应用进行逆向工程。

提示 3:不要在最明显的地方运行“isPremium”检查。例如,不要在启动应用程序时进行检查,因为这是最明显的地方。如果您想根据应用程序的版本使用条件逻辑,可能很难避免某些明显的地方,但请在这里尽力而为!

提示 4:构建和混淆您的应用。针对您的 apk 运行逆向工程工具。阅读并查看它的外观。

最后,每天早餐时观看这个 Google IO 演示:Evading Pirates and Stopping Vampires using License Verification Library, In-App Billing, and App Engine

[编辑 - 更多提示]

提示 6:尝试使用您用来 checkin 完全有效的地方的代码。这可能会掩盖你在那里真正做的事情。这可能包括调用代码来检查这是哪个版本的应用程序,但没有对它做任何有意义的事情。或者,在我之前的例子中,将 md5 与 012 或 999 进行比较,只是为了淡化这些变量的实际用途。

提示 7:您可以考虑在运行时构造字符串,而不是依赖于单个字符串。决赛和静力学也可能引起太多关注,因此避免这些可能是一件好事。

提示 8:永远不要使用谷歌教程中提供的 LVL 代码。修改它。很多!

注意:我不确定这些技巧中的任何一个是否真的会产生很大的不同,但你应该有很好的机会至少让破解者的生活更艰难一些。

关于android - 如何使 'android unlocker' 应用程序更安全地抵御黑客攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10539499/

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