可能因为我的水平有限,我所能想到的加密方式似乎都没有实际用处。
比如,某个业务场景是付费用户可以创建无限的素材,而非付费用户只能创建不高于某数量的素材。
虽然我已经用了各种方式来加密这个“某数量”的值,不过不管前面写的多绕,但是最终还是会回归到一个 if
逻辑判断。
比如,针对上述场景,我是这样写的:
val a = "RWM="
val b = a.decodeBase64()?.string(Charset.forName("utf8")) ?: "${Char(0)}${Char(0)}"
val realNum = 10
if (realNum <= b.toCharArray()[1].code - b.toCharArray()[0].code) {
println("pass")
}
else {
println("you need pay first")
}
但是反编译下来是这样的:
(节选)
if (realNum <= var8 - var3) {
var4 = "pass";
System.out.println(var4);
} else {
var4 = "you need pay first";
System.out.println(var4);
}
不管你前面写的有多复杂,最终还是会回归到简单的 if
逻辑判断,别人修改时只需要删除或者直接改一下这个判断就能轻松破解了。
判断是否付费同理,不管前面写的多复杂,最终会回归到简单的逻辑判断。
所以我现在加密完全依赖于加固,但是加固也只能防的住“脚本小子”一键破解,如果是有大牛专门破解的话,也很容易被脱壳。
虽然防住“脚本小子”已经满足我的需求了,但是我还是想知道,应该怎么在不加固的情况下避免被“一键”破解呢?
据我所知,某个业内有名的 APP ,就没有使用加固,但是就是至今没被破解,甚至作者还专门搞了个悬赏,让别人区破解它。据我了解的是,至今没人破解成功。
补充:
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.