是否可以为每台设备进行一次试用?

是否有可能提供一种服务,其中对每个设备进行一次免费试用,而个人无法在单个设备上获得多次免费试用。 如果它不可能,你知道一种让很难获得多次免费试验的方法。

您可以根据设备的唯一ID,请求日期和您自己的私钥生成许可证密钥,以创建仅在特定日期之前有效的许可证。

您的应用程序将通过使用您的公钥解码许可证密钥并比较其到期日期和设备ID来validation许可证密钥是否有效。 由于许可证密钥仅对指定日期和给定设备ID有效,因此人们无法伪造伪造请求。

(提示:阅读有关公钥加密的内容)

但是,它并非完全万无一失。 一个真正坚定的攻击者可以根植他的设备,并安装一个自定义固件,允许他控制“getDeviceId()”返回的标识符。 这不是大多数人愿意做的事情,大多数人宁愿find另类免费应用程序或只是购买应用程序而不是通过这条路线。 对于具有这种决心和技能的破解者,你无能为力。

另一种攻击途径是使用攻击者的私钥/公钥组合替换您随应用程序一起提供的公钥,并且他可以编写可以为伪造应用程序生成许可证密钥的密钥生成器。 通过自我validation您自己的可执行文件,您可以使攻击变得困难。

但是,没有安全方案是万无一失的,java / android应用程序可以进行逆向工程,确定的黑客可以伪造您的应用程序并禁用其许可证检查。 防止未经授权使用应用程序的唯一万无一失的方法是根本不分发应用程序。

我想你可以获得99%的更复杂方案的效果,其中只有一个简单的死脑:只需在设备的某个地方存储一个文件,表明试用已经过期。 精通技术的用户将能够find并删除该文件,但绝大多数人都不会打扰 – 该设备对他们来说是一个神秘的魔法板块,干扰内部文件可能会让那些疯狂兜售的小侏儒感到不快。屏幕。

您可以通过隐藏锁定文件,根据设备ID更改名称和位置来使事情变得更具挑战性 – 这样,某人就如何逃避您的试用方案分享说明要困难得多。

正如其他答案所指出的那样:没有一个系统是万无一失的,总会有人比你聪明,谁会津津乐道破解你的计划。 诀窍是不要浪费你的时间给这个家伙一个心理锻炼,而是迎合大多数人。

当然,但您需要设置为在自己的服务器上存储设备标识符。 在iphone上,您可以使用获取UDID

UIDevice *device = [UIDevice currentDevice]; NSString *uniqueIdentifier = [device uniqueIdentifier]; 

您可以对存储的列表进行数据库调用并对uniqueIdentifier进行比较,确保每个设备只能激活一个试用版。

在android中, getDeviceID()为您提供唯一的设备标识符。 查看文档以获取更多相关信息。

如果我没有遗漏某些东西,我的解决方案将是直截了当的。 我将使应用程序提供的服务过期,而不是应用程序本身。 这可以通过使用像oAuth这样的令牌机制来完成。 (具有相当长寿命的到期令牌,在这种情况下是您的试用期)。 在客户端注册过程中,我将创建请求令牌作为android设备ID和请求时间的函数。 结账oAuth,这可能很麻烦,但几乎所有主要服务提供商都使用它。

如何存储wifi适配器的MAC地址? 可能在您的服务器上,您的应用程序将查询服务器是否已注册该MAC。

WITH USER’S PERMISSION,在第一次运行应用程序时,如果当前设备的MAC地址已经注册,则查询服务器? 如果没有,请将MAC地址存储在您的服务器上。 如果已经注册,请要求用户购买应用程序以继续使用。

这种方法可以通过Lie Ryan建议的一些加密算法来补充,以提供额外的安全性和锁定和/或试用期。

我不太了解iPhone,但我相信每个iPhone都有wifi适配器,每个wifi适配器都有唯一的MAC地址。 同时检查此解决方案的法律方面,因为存储MAC可能会引发隐私问题/疑虑。 因此,在使用此之前,请检查适用的法律。