安卓开发收费会员系统,被反编译,一个用户的返回数据无数人嫖用!

2020-07-10 10:18:32 +08:00
 atfeel

一直对安卓的安全性很担忧,被反编译的可能性很高,反编译了竟然还能重新打包!!!无语了

APP 用 360 免费加固,不知道有没有 5%的可能性被完美反编译。

破解者用一个正常的账号从服务器请求到正常的会员信息,途中无论用什么加密。

因为 APP 被反编译了,在客户端最终会得到解密后的明文。

破解者是不是就可以用解密的明文肆无忌惮地免费用软件,还重新打包拿去倒卖

这样的局该如何破呢。。

好头痛,还是异想天开了?完全没有思路了

14729 次点击
所在节点    Android
68 条回复
kzfile
2020-07-10 10:22:30 +08:00
不大明白你的这个会员信息是什么类型的,没有多登录限制吗?
spcharc
2020-07-10 10:25:57 +08:00
你的 app 如果提供的是本地服务,那么无论如何都可以破的
提供在线服务,就服务端验证呗,怎么样都破不了的
jimliang
2020-07-10 10:26:49 +08:00
把加密的逻辑和安全要求比较高的代码用 native 实现(例如 c++或者 rust ),增加破解的成本。
tctc4869
2020-07-10 10:28:39 +08:00
不要信任客户端,所有关键的用户服务,尽量放在服务器上,加固服务端的校验就可以了。
wujieyuan
2020-07-10 10:31:08 +08:00
首先要说明, 不管用何种加固方案, 都有对应的脱壳方法然后修改代码重新打包, 对此是没有任何办法的. 所以软件混淆要尽量复杂,可以自定义混淆字典,让代码越难看越好.
我的解决方法有两种:
1.是在软件里面埋点, 比如隔一段时间上报软件的签名 sha1,md5 等校验信息, 重新打包之肯定会改变, 然后在服务器冻结这些账号. 上报的代码尽量隐蔽, 上传频率尽量低. 比如在 so 中写几份,java 中写几份
2.远程执行代码, 利用 socket 推送消息,执行相应代码(sha1,md5 等)并上报到指定域名, 这个域名一定不要在软件中写死,容易被发现,写在 socket 消息中, 隔个几天发送一次检测消息,一般人很难发现
murmur
2020-07-10 10:34:14 +08:00
是的,在国内做工具类软件的结局只有死,ios 可能有情怀用户付费
wujieyuan
2020-07-10 10:35:17 +08:00
其实我也深受此种破解方法的困扰, 导致收费软件损失惨重, 楼上说的什么服务端校验,服务端逻辑根本行不通, 破解者只要代理服务器 api, 就可以通过一个付费账号代理无数个免费账号, 客户端只要重新打包或者 hook 修改即可
wujieyuan
2020-07-10 10:40:08 +08:00
最后还有一个无奈的方法, 就是限制关键 api 的每日访问次数, 就算服务端被一个付费账号代理了, 也只能使用一段时间, 破解者只能购买多个付费账号, 可以降低一些损失. 当然如果破解者爬取了所有的服务端数据,提供离线访问, 完全切断和服务器的连接, 那就神仙都救不了了
takemeaway
2020-07-10 10:49:06 +08:00
没有用的,只能想能否用另外的方式提供服务。
spcharc
2020-07-10 10:49:41 +08:00
@wujieyuan #7
遇到这种异常访问的,那就封号呗。说不正当使用,违反某条反正也没人看的用户协议
这样破解者的会员账号被封几次他就不想破解了吧?
wujieyuan
2020-07-10 10:50:57 +08:00
@spcharc 你完全低估了这些破解者的耐心, 只要有钱赚他就会搞你, 没钱赚也会 DDOS 恶心你
atfeel
2020-07-10 10:57:20 +08:00
@kzfile APP 要会员登录才能使用区安监部功能,那是不是要验证用户信息呢,要不要登录账号呢,要不要返回站好信息呢
miv
2020-07-10 10:59:33 +08:00
@wujieyuan 学到了,谢谢老哥分享,感觉搞这方面非常不容易
Cheons
2020-07-10 11:04:23 +08:00
好奇什么服务
ggght
2020-07-10 11:06:53 +08:00
客户端不要认为有任何安全性,就当成浏览器环境就行。安全啥的应该交给服务端来保证。
zjsxwc
2020-07-10 11:08:05 +08:00
盗版网络小说被禁了吗?

目前可行的解决办法就是参考方正字体这种高额版权费呗。
hugedeffing
2020-07-10 11:09:34 +08:00
目前也没有好的方案,建议就是将用户和设备进行识别绑定,一般认为一个正常会员最多 2-3 个手机,新设备加入需要抵掉旧设备,可以直接提示修改密码,让其邮件验证等,提高验证水平。
locoz
2020-07-10 11:11:48 +08:00
我用攻击者角度,给你分析一下吧:
360 免费加固这种是可以秒脱的,毫无难度,甚至淘宝都有卖脱壳服务的,花点小钱就搞定了。但高级的加固也好不到哪去,无非就是多了个修复步骤而已;然后你前面说被反编译了之后还重新打包了,说明你没有采用一些能让反编译工具出错的防范措施,导致别人可以直接反编译出非常清晰的代码并直接导出使用。如果人家不需要大改你的 APP 的话,甚至直接在 smali 层面植入自己的东西就能搞完。
基本的安全措施没有做到位,发生这种事情很正常。

话说你所说的这种情况,是有人重打包了你的 APP 然后放到网上骗了一些普通用户,普通用户在你这充了会员之后,重打包的那人通过这个 APP 得到了普通用户的登录态,并用普通用户的登录态来免费用你的软件?
这基本无解的啊,你只能是尽量确保所有正规下载渠道(应用商店)都覆盖到你的正版 APP,避免普通用户下到重打包的盗版。或者,通过法律手段解决问题。

然后是楼下的建议:
在线服务、服务端验证...这种都可以忽略了,这种会员可见的模式只能通过反逆向和风控来限制。
加密逻辑或安全要求比较高的代码采用 native 实现可行,但也只能是增加成本而已。
代码里埋坑是可以的,但必须得要让人难以分辨出是干什么用的,不要混在主要逻辑中,要不然很容易被发现。另外,由于对方已经反编译并重打包过你的 APP,所以如果你要埋坑的话,一定要先把代码混淆和加固弄好了再发出去,要不然别人可以很轻易地通过代码对比发现你埋的坑。

---

其实所有设备 ID 、签名信息之类的都不可信,说白了就是客户端生成一下的事情...还是得要结合实际业务逻辑来做风控。
jdgui
2020-07-10 11:13:31 +08:00
360 这些都有成熟的反编译方案了
你真的想要防止反编译,就把校验的部分放 so 库里。
但是这些并不能从根本上解决,只能说增加成本,从而让破解者感觉划不来
ksssdh123
2020-07-10 11:23:28 +08:00
移动端能做安全策略很有限的,只要有利可图,破解者分分钟夸张点,少则 1 天多则几天的功夫就把你给破解了,然后重新打包上架赚广告费或者自己做运营都有可能

道高一尺,魔高一丈,通过移动端去做只是增加了破解者破解的时间,你更应该从后台的反爬虫策略出发,还有就是楼上说的,保证几个正规的大渠道分发的都是你的包即可

至于后台的反爬虫策略,我不记得是豆瓣还是哪个平台,人家就算是收费用户在连续看了前几十页的内容后,后面的内容就不给看了,认为是爬虫程序在爬数据,为了反爬都做到这种地步了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/688777

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX