如何让“安卓解锁”应用更安全地抵御破解?

     2023-03-22     152

关键词:

【中文标题】如何让“安卓解锁”应用更安全地抵御破解?【英文标题】:How to make an 'android unlocker' app safer against crackers? 【发布时间】:2012-05-19 08:24:13 【问题描述】:

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

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

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

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

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

重写此类安全功能只是对代码进行逆向工程并使其始终返回true。不是吗?我们如何保护我们的 Android 应用免受这种情况的影响?是的,代码被 ProGuard 混淆了。不过,对于足够熟练的人来说应该不会太难。

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

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

【问题讨论】:

如果IFDEF 使用java 等效项,或者将isPremiumVersion 设为常量,然后依赖编译器对其进行优化。 不是破解问题的解决方案,但是如果您使用 android 库项目(不可启动),则应该可以缓解重复代码的问题。它或多或少是一个可以从可启动应用程序调用的类/布局/可绘制的共享库。创建您的应用程序的两个版本(免费、付费)并创建一个包含所有通用代码的库。在您的免费/付费版本中,您可以覆盖 layouts/strings/drawables/etc,如果它们需要与共享库中的不同。应该满足您的需求:developer.android.com/guide/developing/projects/… @Gophermofur 是的,我知道图书馆的方法,但我不喜欢它,它伴随着其他“问题”。不过,无需深入探讨,它与问题无关。我很久以前就决定使用“解锁”方法,那里没有讨论。不过我很感谢你的建议:) 您只能从脚本 Kiddo 中阻止它。创建一个网络服务并隐藏它背后的高级功能。 @lukas 这不会导致同样的问题吗?我的意思是,无论我做什么,服务器检查将始终返回“许可”或“未许可”,然后我要么启用或不启用高级功能。到头来都是一样的……还是我遗漏了什么? 【参考方案1】:

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

您必须尝试掩盖它。以下是一些提示:

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

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

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

我知道所有这些检查最终都会映射到一个布尔值(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: 尝试使用您使用的代码检查完全有效的位置。这可能会掩盖你在那里真正做的事情。这可能包括调用代码来检查这是哪个版本的应用程序,但没有做任何有意义的事情。或者,在我之前的示例中,将 md5 与 012 或 999 进行比较,只是为了稀释这些变量的实际用途。

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

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

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

【讨论】:

我想我的代码需要变得凌乱...我讨厌凌乱的代码,这是我的问题:(【参考方案2】:

你可能已经看过了,但这里有一些代码可以用来实现你所说的:

http://groups.google.com/group/android-developers/browse_thread/thread/4ad3d67f735f16d7/948b4f9eee2490a3?pli=1

它会检查免费应用和解锁应用上的签名是否相同。因此,某人不可能人为地创建具有正确名称的应用程序,因为签名会有所不同。但是,人们仍然有可能从手机上撕下 apk 并分发它。解决这个问题的唯一方法是使用某种服务器身份验证,但这会增加成本和复杂性。

【讨论】:

Apache Shiro“使用 JSF 2.0”!进展如何?

】ApacheShiro“使用JSF2.0”!进展如何?【英文标题】:ApacheShiro"withJSF2.0"!Howdoesitgo?【发布时间】:2011-10-1123:03:42【问题描述】:我正在寻找javaweb应用程序中用于身份验证/用户登录管理/安全性的框架/解决方案,它可以使... 查看详情

如何让音频在 React 中更流畅地循环播放?

】如何让音频在React中更流畅地循环播放?【英文标题】:HowdoIgetaudiotoloopmoresmoothlyinReact?【发布时间】:2020-04-1413:14:08【问题描述】:问题我正在尝试使用useEffect在使用create-react-app创建的React应用程序中循环播放一些音频。我已... 查看详情

密码盐如何帮助抵御彩虹表攻击?

】密码盐如何帮助抵御彩虹表攻击?【英文标题】:Howdoespasswordsalthelpagainstarainbowtableattack?【发布时间】:2010-09-3001:38:27【问题描述】:我在理解密码加盐的用途时遇到了一些麻烦。据我了解,主要用途是阻止彩虹表攻击。然而... 查看详情

mob云验证,让身份验证更简单

传统的登录注册时期,在“如何设置一个符合要求、十分复杂、自己容易记住而***却很难破解的密码”这一问题上,无数用户耗费了无数脑细胞。因而短信验证登陆应运而出,并在2015年掀起了一波使用热潮。随着科技的不断发... 查看详情

什么是ddos攻击?如何抵御ddos攻击?

什么是DDoS攻击?如何抵御DDos攻击?单纯的土豆 2016-05-23安全报道显示2015年DDoS攻击强度创下新纪录,那么DDoS到底是什么呢?了解一些,对产品经理与后台的同事沟通有好处。分布式拒绝服务(DDoS:DistributedDenialofService)攻击指借... 查看详情

如何在应用程序代码中安全地硬编码身份验证令牌 - Java

】如何在应用程序代码中安全地硬编码身份验证令牌-Java【英文标题】:Howtosafelyhardcodeanauthenticationtokenwithinanapplicationcode-Java【发布时间】:2021-11-2405:24:55【问题描述】:我知道将密码硬编码到程序中本质上是不安全的。大部分... 查看详情

使用elastic8.1版加速应用开发,抵御新型攻击

作者 DanCourcy2022年3月9日今天,我们很高兴地宣布,全球领先的搜索驱动型解决方案平台的最新版本Elastic8.1正式上线。通过Elastic8.1版,我们的客户和社区能够更深入地了解无服务器架构和CI/CD管道,从而进一步加... 查看详情

如何让机器人更有效地回应提及

】如何让机器人更有效地回应提及【英文标题】:Howtomakebotrespondtomentionsmoreefficiently【发布时间】:2020-09-0123:33:57【问题描述】:我已经知道如何通过执行message.mentions.has(bot.user)让机器人响应提及但是当有人ping所有人时,它会响... 查看详情

xss网站漏洞如何修复大牛支招让您网站更安全

XSS网站漏洞如何修复大牛支招让您网站更安全分类专栏:网站被黑网站安全如何防止网站被黑如何防止网站被侵入如何防止网站被挂马网站安全服务网站安全防护服务网站安全维护网站安全问题怎么查找网站漏洞ecshop漏洞修复Met... 查看详情

如何在退出前安全地关闭所有线程[重复]

】如何在退出前安全地关闭所有线程[重复]【英文标题】:Howtosafelycloseallthreadsbeforeexit[duplicate]【发布时间】:2019-02-2422:21:37【问题描述】:我有一个启动几个线程的应用程序,最终一个线程可能需要退出整个应用程序,但是其... 查看详情

如何让自己的代码更加安全?

前言Python因其在开发更大、更复杂应用程序方面独特的便捷性,使得它在计算机环境中变得越来越不可或缺。虽然其明显的语言清晰度和使用友好度使得软件工程师和系统管理员放下了戒备,但是他们的编码错误还是有可能会带... 查看详情

让数据传输更安全

...,本篇就来总结下数据安全相关的概念以及浏览器HTTPS的应用。通过介绍,你会了解到:数据安全的基本概念加密算法数字证书和证书机构ssl和openssl基本介绍https应用数据安全的基本概念数据要在网络中传输,就会存在安全问题... 查看详情

Windows 上的 InternetOpenUrl 功能是不是足够安全?如果没有,如何让它变得更强?

...Windows上的InternetOpenUrl功能是不是足够安全?如果没有,如何让它变得更强?【英文标题】:IsInternetOpenUrlfunctiononWindowssecureenough?Ifnot,howtomakeitstronger?Windows上的InternetOpenUrl功能是否足够安全?如果没有,如何让它变得更强?【发布... 查看详情

FMDB 如何让 sqlite 更简单 iOS?

】FMDB如何让sqlite更简单iOS?【英文标题】:HowFMDBmakessqlitemoresimpleriOS?【发布时间】:2012-03-1112:02:09【问题描述】:我想在我的iPhone应用程序中使用fmdb。使用sqlite和fmdb不使用fmdb有什么区别?我需要能够编写查询。fmdb如何比单个s... 查看详情

步骤详解|助您轻松提交googleplay数据安全表单

...分,将为开发者们提供简单的方法,在用户安装应用之前展示应用的整体安全性,让用户得以更深入地了解应用的隐私和安全实践,并解释应用可能收集的数据以及这么做的原因。本文将为 查看详情

步骤详解|助您轻松提交googleplay数据安全表单

...分,将为开发者们提供简单的方法,在用户安装应用之前展示应用的整体安全性,让用户得以更深入地了解应用的隐私和安全实践,并解释应用可能收集的数据以及这么做的原因。本文将为 查看详情

如何让自己更自律

之前写过一篇如何克服拖延的文章《想得很好,做起来总是不行?》,这次聊得更主动一些,「如何让自己变得自律」,更积极主动地拥抱未来的自己。SamThomasDavies曾经精辟地概括过「自律」。他认为自律就... 查看详情

618techtalk丨大促活动如何抵御大流量ddos攻击?

...按需使用DDoS防护。本篇文章由专业的安全团队为你分享如何根据DDoS攻击情况和业务健康状况,实时调整防护策略,保障业务稳定性的同时,节省大量安全防护和运营成本。如果你的网站或应用程序 查看详情