我知道这个主题已多次打开,我学到了很多,但我偶然发现了一个我真正需要建议的问题.
我正在使用带有混淆的LVL.我更改了默认的LVL ALOT,以便防LVL不会破坏它.但是,Lucky Patcher只需点击一下即可打破它!我试图看到新破坏的APK.是的,它只是简称为"允许方法".
我的问题是,如果有人可以推荐一种方法来阻止Lucky Patcher破坏它吗?我知道我不能防弹,但我希望它至少对于一键式软件来说不那么容易.
我正在使用Unity(适用于Android和iOS)开发应用程序.我正在使用SOOMLA插件允许用户通过In App Purchase购买Gems(虚拟货币).
用户和Gems以及所有其他游戏逻辑都通过Azure上的服务器.
我希望以下过程以某种方式作为单个事务发生:
但是如果互联网连接在步骤1和步骤2之间发生故障 - 用户付钱给他没有收到的宝石(不好!)
所以我目前的做法是这样的:
这样,用户可以保证购买他购买的宝石,但我不能保证得到报酬(不是很好......)
注意: 我不想在商店本身管理用户Gems.我希望我自己的服务器上的一切.所以SOOMLA的平衡对我来说毫无意义.我不在乎.
我想也许应用程序可以将购买数据存储在持久存储中,直到它设法通知服务器有关它,然后删除它.但我也认为这可能是一个糟糕的解决方案.因此这个问题.
我认为最好的解决方案可以正确处理这种情况:
然后,用户可以在其他设备上安装该应用:
到目前为止,似乎无论如何这都是不可能的,这让我对IAP的技术感到失望.希望找到能证明我错误的答案.
似乎我所需要的只是能够从我的服务器获取用户的购买历史记录,并向Google Play或Apple Store提供安全请求.但这不是框架的一部分.
那么其他人在做什么?什么是最好的方法?
应用内结算概述中的安全控制部分指示在远程服务器而不是应用程序(在Android设备上本地运行)执行"签名验证":
通过执行签名验证,您可以帮助检测已被篡改或已被欺骗的响应.您可以在应用程序中执行此签名验证步骤; 但是,如果您的应用程序连接到安全的远程服务器,那么我们建议您在该服务器上执行签名验证.
但是,如果我在远程服务器上执行签名验证,只期望一个yes/no或true/false答案,这实际上是不是更容易被攻击者拦截和修改?
如果来自远程服务器的答案是另一个签名,那么如何在设备上本地验证第二个签名比第一个(市场)签名更安全?
我错过了什么?
更新: @alf正确地指出,如果服务器还负责提供购买的内容并且在服务器上执行签名验证,那么即使攻击者破坏了应用程序,服务器也不会提供通过应用程序内计费购买的内容.这是微不足道的,也是很好理解的.
我最初没有提到的是,我实际上指的是服务器不提供任何内容而只是验证签名的场景,以便应用程序可以决定是否解锁某些功能.在这种情况下,远程服务器签名验证优于应用程序内的优势是什么?
我是Android开发的新手,我刚刚为我的免费应用程序发布了付费的pro解锁器.
我在2天前发布它,在它上线的12小时内我用谷歌搜索我的应用程序和theres至少8个网站列出我的免费应用程序,但修补所以应该锁定在免费的所有付费功能都解锁.他们基本上复制了我的整个商店列表描述,略微改变了措辞,并将几个镜像发布到修补后的apk.
反正有没有避免这个?
由于这些被如此快速地发布,它让我相信它是自动完成的.使用什么工具,我在哪里可以得到它?我可以做什么编码来阻止修补它的能力?谷歌开发者控制台中有哪些地方可以报告盗版博客/网站?
付费应用是正常的吗?谢谢!
我不确定术语是否正确您可以使用哪些代码实践来使某人难以修改二进制/程序集以绕过检查:
例如在源代码中.
bool verificationResult = verify();
if (verificationResult){
allow_Something();
}else{
prevent_Something();
}
Run Code Online (Sandbox Code Playgroud)
如果查看上述代码的反汇编版本的人可以修改'jump opcodes(?)'以运行allow_Something,即使验证结果为false也是如此.
这里有类似的内容 http://www.codeproject.com/Articles/18961/Tamper-Aware-and-Self-Healing-Code#pre0
注意我在C++中创建二进制文件,以便在Android上通过NDK使用它.
android ×5
patch ×2
android-lvl ×1
android-ndk ×1
apk ×1
decompiling ×1
disassembly ×1
encryption ×1
ios ×1
java ×1
soomla ×1