上周我 app 用户群来了一位不速之客,发了一张图片

我一看,我艹,这不被破解了嘛。 随即我踢了他,然后当天下午加了他 wx ,他同意了。 整个聊天过程没有急眼,他还表明破解的这个包没有流传出去。 因为那个人只愿出几十块钱,他肯定不会成交的,纯试试水,就破了。
从聊天记录我总结出以下几点:
1:他不懂安卓代码,纯靠几个工具 [其中有 MT 管理器[狗东西,开发者天敌]] 就能快速重签打包,我在 Java 和 cpp 中有几个签名验证的埋点,他依然能打包,并正常运行。
2:我的 app 核心功能要用到安装包中的本地带密 zip ,解压密码由后台配置信息接口返回,每个版本的安装包中的 zip 解压密码都不一致,所以我故意改了后台配置信息接口中的密码,他破解的老包功能依然正常使用,我轻描淡写问了他,他说就一个工具就能搞定。
3:他还能破包后加卡密弹窗,说这是基操。视频链接: https://m.okjike.com/originalPosts/69493b881cc9bc8e54a2608d?s=eyJ1IjoiNjM1Nzg4ZjM0N2RkNjRhN2Y3Y2RiMTk0In0%3D
经过几天的 v 站查帖和看 B 站视频,我知道业务逻辑在本地是无法完全防破解的,只是有几点疑问。
1:加卡密弹窗的云注入平台为爱发电?就没人投诉吗?
2:他破解的包为什么不受后端动态解压密码控制?如果绕过校检本地如何解压成功呢?
1
Yanu 1 天前
2. 把云端的返回结果写死,用旧的 zip 包不就可以了吗
|
2
heyjei 1 天前 我的关注点在左上角的时间,现在搞破解的都这么勤奋的嘛!
|
3
stinkytofux 1 天前 你如果会 hook 的话, 就不会有这些疑问了, 你所有的什么动态加密啥的, 根本就不用看, 找个关键函数直接返回 true 就搞定了, 谁管你用的什么算法什么密钥.
想做好防破解, 一定要先学会破解. |
4
okakuyang 1 天前
哎,别人专门搞逆向的话,很难防。逆向->反逆向->反反逆向->反反反逆向,无穷尽也。
|
5
gam2046 1 天前
唔,如果要求严格的话,可以校验 TEE 证书链,如果校验失败,就不下发资源文件。本地设备只负责提交证书链
这个以我目前浅薄的知识来看,是无法绕过的,可以参考代码: https://gist.github.com/Lua12138/81312aeb1d2360fa7ef4b756ec7d9d18#file-keystorechallenge-kt 只需要简单调用 KeyStoreChallenge.use 方法即可,将获得的证书链提交给服务端。 服务端收到后通过 tee_cert_chains 方法检验即可,记得一定要同时检查证书链里的包名、签名与你自己的一致(防止别人自己编写与你包名一样的应用在正常设备上进行旁路攻击),如果报告设备已经解锁,可以依据你认为的风险等级,决定是否下发资源。 |
6
dynastysea 23 小时 47 分钟前
@stinkytofux 这么搞笑的么。。那还加密个毛线
|
7
Blanke 23 小时 21 分钟前 via Android
几个月前看到你的软件,简单逆向分析了下,因为之前是想做类似的。想看看啥方案 yolo 还是啥。发现直接能得到模型文件,用户管理用的好像是 leancloud 之类。单纯技术上来说,直接用模型文件写个功能一样的 app 很简单,或者 xp 模块也能本地破解。。纯客户端的功能几乎都能破解,只是难度和成本不同,mt 管理器也有本地破解版,它的防护算是比较强的。
|
8
stinkytofux 23 小时 21 分钟前
@dynastysea #6 纯客户端程序本来就没办法杜绝破解, 自古以来都是难题, 强如 Windows 和 各种游戏加密都办不到, 被破解只是时间问题. 什么验签加密混淆都没用, 只要是客户端上面执行的函数返回值和入参都能被轻易修改. 所以像微信这样的软件, 都放弃了加固, 只是做了简单的混淆. 重要的逻辑和数据都依赖服务端.
|
9
dynastysea 23 小时 9 分钟前
@stinkytofux 那 steam 这种是怎么搞的呢?好像没见过有破解的?
|
10
stinkytofux 23 小时 4 分钟前
@dynastysea #9 steam 本身就是个商店, 数据都在服务器, 不存在破解的概念. 你要说 steam 上的游戏, 那是你见少了, 很多破解游戏都可以绕过 steam 运行.
|
11
Anarchy 22 小时 16 分钟前
本地防护就是混淆代码防止找到关键函数,具体加密算法是无所谓的,毕竟可以直接调用你本身的代码逻辑。或许可以考虑简单点迁移到 Flutter 开启混淆,Flutter 的破解工具还不成熟。
|
12
HandSonic 22 小时 16 分钟前 via iPhone
@dynastysea 你是否在线:GreenLuma 、Steamtools 、和其他基于这些的“Steam 假入库”,都能让你在不购买游戏的情况下直接通过 Steam 下载并游玩你未拥有的游戏,只要有清单文件就行( D 加密除外)
|
13
blackbookbj277 14 小时 30 分钟前
报警吧:网络安全法第二十七条 任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供专门用于从事侵入网络、干扰网络正常功能及防护措施、窃取网络数据等危害网络安全活动的程序、工具;明知他人从事危害网络安全的活动的,不得为其提供技术支持、广告推广、支付结算等帮助。
|
14
HeyWeGo 14 小时 30 分钟前
记牌器?
|
15
92Developer OP @heyjei 哈哈,可能心血来潮吧。
|
16
92Developer OP @Yanu 他用的那个工具最终能达到这种效果,具体啥原理不清楚。
|
17
92Developer OP @HeyWeGo 恩
|
18
Nuttertoo1s 13 小时 28 分钟前
没有进行加固吗
|
19
reHuo 13 小时 27 分钟前
最早用 Android killer 随便破解,这万一看你怎么看吧,有点类似国内网站挂了很多绿色破解软件哈哈哈
|
20
92Developer OP @blackbookbj277 哈哈,没有流通,到那程度再说。但法律确实最后的手段。
|
21
92Developer OP @Nuttertoo1s 最近才加固,他说加不加固也只是时间问题,防君子不防小人。
|
22
reHuo 13 小时 25 分钟前
玩意 哈哈
|
23
92Developer OP @stinkytofux 我研究研究 hook 咋回事。
|
24
lw10645 13 小时 20 分钟前
所以他是找你要钱吗还是干嘛
|
25
92Developer OP @Blanke 是 yolo ,很简单?你写写就知道了,内存管理,集成 onnx ,计算出牌记录等够你喝几壶了。MT 管理器,哈哈,狗日的东西。
|
26
92Developer OP @lw10645 只在群里发了一张截图,啥也没说,之后就是我和他私聊了。他副业搞 pojie ,接单的那种。
|
27
EeveeRibbon 13 小时 3 分钟前
纯本地想破解真的就是时间问题,多少带联网功能的软件都有破解版,更别说纯本地了
|
28
92Developer OP @EeveeRibbon 哈哈,是的。
|
29
ljkgpxs 12 小时 34 分钟前
加解密和一些核心逻辑可以考虑放到 native 代码里面,能阻挡一部分破解,但是也不能完全阻止破解,套个高级点的壳也可以的,都只是增加破解难度而已
|
30
mscsky 12 小时 12 分钟前
主要问题是软件价值多少的
|
31
92Developer OP @mscsky 还行,小众工具类,搞点小钱。
|
32
92Developer OP @ljkgpxs 是的
|
33
tuutoo 11 小时 50 分钟前 你就慢慢加新功能,发新版本,让他破解新版本付出点时间成本。 他没钱拿,也不会一直那么闲的盯着你的软件破解。
|
34
92Developer OP @tuutoo 哈哈
|
35
AndyChina 10 小时 50 分钟前
要看破解了能有什么用,不被破解不太可能,瑞幸咖啡/得物/美团系/阿里系/拼多多的风控严格不?技术牛不?照样被破解,安全是个动态过程,只有相对的安全,没有永远的安全
|
36
amaranthf 10 小时 47 分钟前 via iPhone
所以很多开发者更喜欢在苹果平台上开发和售卖
|
37
SkywalkerJi 10 小时 39 分钟前
平台卡密吃抽成吧,
|
38
KinBob 10 小时 33 分钟前
难道是自动打牌 app ?
|
39
unco020511 10 小时 30 分钟前
破解你是阻挡不了的,这么和你说吧,我们月活一个亿的办公软件,去 tg 频道,刚发的最新版本,立马就有破解,真特么绝了,我们现在也不反抗了,只要没大面积传播就行
|
40
daimon1 10 小时 23 分钟前
正常啦,软件加密被破解只是时间问题,强如 D 加密也只能做得延长破解时间,并非不可破解。想想人家花大钱辛辛苦苦开发的游戏,都能被破解出来免费传播,心里有没有好受点?
|
41
triptipstop 10 小时 23 分钟前
尝试下 主流 APP 学学别人怎么做的防护
|
42
Gilfoyle26 10 小时 2 分钟前
android 的逆向门槛真低。看看 ios 门槛高的,ios 逆向的岗位都快绝迹了。
|
43
92Developer OP @triptipstop 多数都不加固,就是一个壳。
|
44
92Developer OP @unco020511 人外有人啊。
|
45
92Developer OP @KinBob 自动记牌
|
46
92Developer OP @AndyChina 是的。
|
47
00244396 8 小时 44 分钟前
MT 管理器 这个我还不知道,看了一下是手机操作么,真是人才,之前有需要反编译了一个 SDK 费了半天劲,手机是怎么看下去的
|
48
zerone0086 8 小时 36 分钟前
OP ,APP 链接 私信下,我也玩微乐😁
emhhbmd3ZWkxMmhhb0BnbWFpbC5jb20= |
49
cfu18 8 小时 10 分钟前
纯本地,只是绕过一些逻辑,很初级了。
早一些的时候,国内的一些工业软件的存储格式全是加密封闭的,法律也没有那么健全, 想要做下游软件接他们的数据,只能逆向软件,一点点的扣,那个难度要和工作量要大一点。 |
50
92Developer OP @zerone0086 百度搜下吧,我的记牌器还处于发展阶段。
|
51
92Developer OP @daimon1 倒也不是说难受,毕竟没影响收入,主要想解开一些疑惑。
|
52
dullwit 7 小时 54 分钟前
java 做签名校验没用,jni 方面可以通过 hook libc.so 修改 read 函数来反破解。主要还是取决于你对破解的容忍程度,容忍度越低,那么防破解手段就更复杂。如果有兴趣,可以给你说说。
|
53
chairuosen 7 小时 48 分钟前
你出 500 ,让他教你怎么防破解
|
54
92Developer OP @dullwit 有兴趣,bmhhbGZfYmFv
|
55
Rorysky 7 小时 43 分钟前
关键部分 关键函数 包含在编译语言 C rust 之类中,动态链接,甚至实时下发
下发必须校验密钥,参考 u 盾那种动态密码 |
56
Rorysky 7 小时 42 分钟前
@stinkytofux 商业软件那种 授权 dongle 是比较难破的,可以参考
|
57
xFrye 7 小时 42 分钟前
软件攻防是一场对攻战,就算包做了校验发出去的安卓包你也可以看作是裸奔的,破解成本不会非常高,关键功能最好放服务器,然后做下反作弊风控
|
58
docx 7 小时 37 分钟前 via iPhone
大厂的技术有多强,还不是有破解版,这种东西你和它较劲没什么意义,也不应该把人性的坏怪罪到技术工具上去。这种攻防战一方面是得知己知彼提高保护力度,另一方面尽量从业务逻辑上降低破解产生的收益。
|
59
comlewin 7 小时 36 分钟前
每次发版给他 50 ,让他给你录破解过程,根据破解过程修复,循环往复。
|
60
c3de3f21 7 小时 36 分钟前
论持久战
|
61
myderr 7 小时 34 分钟前
把一些逻辑放服务端
|
62
92Developer OP @comlewin 手动狗头
|
63
92Developer OP @myderr 本地识别,放不了服务端。
|
64
92Developer OP @xFrye 核心业务逻辑在本地,无解。
|
65
92Developer OP @zerone0086 闲鱼一堆,月激活码 10 月一个。
|
66
kekeabab 7 小时 26 分钟前
纯好奇,为啥要用什么 yolo onnx 之类的这些东西实现记牌器,这些数据内存里面不是都直接有吗,还浪费性能
|
67
helone 7 小时 21 分钟前
@92Developer #63 可以考虑本地识别完内容加密传给服务端,服务端解密后返回给 APP ,这样就没办法在一些签名验证的埋点直接修改逻辑去破解,即使破解了你的服务端加解密逻辑也有很多后期工作需要做,比如直接识别完直接读取结果,而不是传给服务端
|
68
hikarugo 7 小时 21 分钟前
破解狗真的很烦,这是一场持续战
|
69
neoshui 7 小时 21 分钟前
你可以看一下 52pj 这个论坛,可以学到很多东西,叹为观止
|
70
xFrye 7 小时 19 分钟前
@92Developer 全部本地的话那就没办法了,我以前见过有些单机游戏,上午发包下午就在破解平台上出现。。。
|
71
92Developer OP @kekeabab 那你说为啥市面上大多记牌器不是用 yolo 就 opencv ?
|
72
baby0w0 7 小时 15 分钟前
您做的这些防护都是防君子的(1 点用都没有)
我破解过很多软件了,你说的安卓代码 不需要懂 |
73
kekeabab 7 小时 9 分钟前
@92Developer #71 这我怎么知道为啥,比较好奇市面上大多记牌器真的都这样吗?我玩的卡牌游戏记牌都不会用什么 yolo opencv ,数据本来就在内存直接读就好了,比如炉石传说
|
74
92Developer OP @kekeabab 具体我也不清楚,基本都玩小程序。
|
75
stinkytofux 7 小时 2 分钟前
@kekeabab #73 又不是 Window, 安卓的权限很严格, 没有 root 权限的情况下无法注入目标进程, 怎么可能读到其他程序的内存. 你自己搞黑产可以用一批 root 手机或者 root 模拟器去批量操作, 想开发通用的软件分发给普通人用, 这招就不行了.
|
77
randomx 6 小时 56 分钟前
和外挂一样 真的讨厌 真的不会消失
|
78
registerrr 6 小时 53 分钟前
你“破解”微乐,他破解你,有人又破解他,无穷尽也
|
79
lumyx 6 小时 53 分钟前
颠覆言重了,这不是啥新技术(这估计流行快七八年了),看雪这里论坛有很多高中生看教程都会逆向了,本质上就是 3L 老哥说的,mt 会解析定位到关键的调用处,比如你 java 肯定有个 isVip ,直接把这个值换成 true 就行了。你在上层花里胡哨的加密折腾毫无影响。
|
80
lumyx 6 小时 50 分钟前 避免用 java ,kt,我个人建议把功能用 flutter 重写一遍,混淆后再打包,这个强度相比 java 强了不少,想靠 mt 破壳 flutter 基本没戏,因为 flutter 都是 so . 门槛会高不少
|
81
Syriana 6 小时 49 分钟前
我有个大胆的猜测,是不是他 P 的图
|
82
92Developer OP @Syriana 不是,他还发了视频。
|
83
kasusa 6 小时 36 分钟前
业务逻辑在本地,软件是不是要激活/购买才能用。
ios 的话走商店和许可,在本地逻辑进行前/app 启动时进行校验。 安卓不懂,肯定也有提供激活码和管理服务的。 |
84
Niphor 6 小时 19 分钟前
|
85
Chaitanya 6 小时 13 分钟前
基本防不住,别说你的软件了,就是 jb 的软件也防不住。但是你可以对功能进行分段式更新,每次更新都往上面加固,确保对方不能每次都按同一个手段破解,也许可以解决你的问题,当然最好的方式还是适时打折,让它破解版卖不出价
|
86
Cloud9527 6 小时 5 分钟前
之前安卓 app 都是加固+混淆,不过不知道有没有被人破解了
|
87
dnslint 5 小时 55 分钟前
flutter 据说是天然的 vmp 环境 逆向起来比较复杂可以试试看
|
88
sheeta 5 小时 34 分钟前
改成云端识别啊,我理解你的记牌器就是 ocr 识别出出过的牌,改成服务端 ocr 识别
|
89
kekeabab 5 小时 17 分钟前
@stinkytofux #75 没有 root 权限一样能搞,放同一个进程就是了,或者可以用现成的也可以做一套类似小学生圈子里叫做“框架”的东西,直接虚拟一个轻量环境启动 app 就可以随便读写。我很多年没碰过安卓了,搜了下现在依然适用。
|
90
dearmymy 5 小时 14 分钟前
@Gilfoyle26 ios 才是简单好吧。
|
91
irrigate2554 5 小时 4 分钟前
想要防住,只能把核心功能放到云端才有可能
|
92
stinkytofux 4 小时 56 分钟前
@kekeabab #89 这就是重打包了, 楼主说的 mt 破解也是用的这个, 重打包有重打包的缺陷. 分发给普通人还是不方便, 你不能让别人把官方游戏卸载装你这个特殊版本, 比较适合小范围自用.
|
93
stinkytofux 4 小时 54 分钟前
@kekeabab #89 所以 op 这个 ocr 识别虽然简单粗暴, 力大砖飞, 但是确实可以规避很多权限导致的麻烦. 适合大规模分发给小白用.
|
94
jeesk 4 小时 47 分钟前
你可以做校验的, 道高一尺魔高一仗。 和他玩呗
|
95
justsosososo 4 小时 36 分钟前
加壳啊 老铁
|
96
jmliang 4 小时 27 分钟前
用 flutter
|
97
pipixiarwksb 4 小时 9 分钟前
有没有能够增加桌面端破解成本的方法,完全不被破解基本不可能,但是怎么增加破解成本呢,有大哥可以聊聊吗
|
98
guanzhangzhang 4 小时 6 分钟前
@kekeabab #66 内存又不是直接读,你要找,而且这样上架被人举报铁定 g ,纯识图层面可以加模型在线更新支持更多游戏,
|
99
guanzhangzhang 4 小时 3 分钟前
有个移动联盟的 so ,可以整进去,内部自带很多防逆向的。
|
100
WngShhng 4 小时 3 分钟前
你的签名校验是怎么写的?如果只是从 pms 里面那包的签名,那么绕过就是轻轻松松的事情。你的版本号问题,只要 hook 一下 pms 获取版本号的方法就搞定了,和 hook 签名的逻辑一样。如果你用 bool 类型把校验逻辑封装,那它可以直接修改你的函数逻辑。这些都有成套的体系。
|