V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
92Developer
V2EX  ›  Android

我的 app 被人干了,颠覆了我的认知!

  •  
  •   92Developer · 5 天前 · 14795 次点击

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

    image

    我一看,我艹,这不被破解了嘛。 随即我踢了他,然后当天下午加了他 wx ,他同意了。 整个聊天过程没有急眼,他还表明破解的这个包没有流传出去。 因为那个人只愿出几十块钱,他肯定不会成交的,纯试试水,就破了。

    从聊天记录我总结出以下几点:

    1:他不懂安卓代码,纯靠几个工具 [其中有 MT 管理器[狗东西,开发者天敌]] 就能快速重签打包,我在 Java 和 cpp 中有几个签名验证的埋点,他依然能打包,并正常运行。

    2:我的 app 核心功能要用到安装包中的本地带密 zip ,解压密码由后台配置信息接口返回,每个版本的安装包中的 zip 解压密码都不一致,所以我故意改了后台配置信息接口中的密码,他破解的老包功能依然正常使用,我轻描淡写问了他,他说就一个工具就能搞定。

    3:他还能破包后加卡密弹窗,说这是基操。视频链接: https://m.okjike.com/originalPosts/69493b881cc9bc8e54a2608d?s=eyJ1IjoiNjM1Nzg4ZjM0N2RkNjRhN2Y3Y2RiMTk0In0%3D

    经过几天的 v 站查帖和看 B 站视频,我知道业务逻辑在本地是无法完全防破解的,只是有几点疑问。

    1:加卡密弹窗的云注入平台为爱发电?就没人投诉吗?

    2:他破解的包为什么不受后端动态解压密码控制?如果绕过校检本地如何解压成功呢?

    129 条回复    2025-12-27 09:07:44 +08:00
    1  2  
    v1
        101
    v1  
       4 天前
    南山必胜客:只有律师函是靠谱的
    treblex
        102
    treblex  
       4 天前 via iPhone
    找他合作一下,一边卖破解版,一边更新,隔段时间继续破解🌚破解当做营销手段就好了
    v1
        103
    v1  
       4 天前
    @treblex 两头吃啊
    zengxs
        104
    zengxs  
       4 天前
    @gam2046 #5
    TEE 验证在国产设备上问题很大(特别为某为设备,他们基本上不用 Google 的根证书,这部分设备占比会在 30+% 以上)
    另外这种方式也解决不了楼上说过的 hook 手段
    gam2046
        105
    gam2046  
       4 天前
    @zengxs 唔,我们现在已经不考虑华为的设备了,老鸿蒙官方也基本不维护了,新鸿蒙本身也和 Android 脱钩了。

    至于 hook ,可以明示下,可以怎么欺骗过服务端校验呢,本身设备上是拿不到签发证书的,而解锁状态也是由 TEE 写入的,设备上 hook 出来的证书链,也会载明设备已经解除 bootloader 锁,本质上就是依靠 TEE 签出的包名、应用签名、证书链来校验的。对于设备已经解锁的用户,我这里是直接拒绝使用,本身这部分用户占比就很低。
    People11
        106
    People11  
       4 天前 via Android
    现在的一键过签都很强力的,hook PM ,IO 重定向强制读原包信息都是基本操作了,你要对抗就得上一些非常规手段,例如校验内存中的 dex ,多维度校验 application 入口,热更一个 vm 从外部校验,然后把签名校验逻辑藏在某些组件的逻辑中,例如签名校验不通过就打断 mmkv 的解密而不是直接闪退弹窗什么的,让破解者诊断成本直线上升。当然你想图省事直接上数字加固,这玩意虽然能一键脱但没法一键修,并且工具也不好找,总之让破解者的成本上升。
    zengxs
        107
    zengxs  
       4 天前
    @gam2046 #105 直接 hook 把你整个验证函数替换掉就行了,根本走不到服务端校验那一步
    zengxs
        108
    zengxs  
       3 天前
    @gam2046 #105 另外这个 30% 比例是按安卓兼容的设备算得(老鸿蒙和荣耀设备,不包括纯血鸿蒙),其他主流设备走 TEE 逻辑都没啥问题,可能还会有 5% 左右设备有问题。如果能舍弃掉这部分设备的话,TEE 的逻辑问题不大。

    但是安全性用技术手段是解决不了,只要涉及到逆向的对抗,本地技术手段基本都没啥用。还是要考虑用别的手段来防止破解,比如核心逻辑放到服务端,或者调整产品策略让灰产无利可图,具体要视产品情况而定。
    jeesk
        109
    jeesk  
       3 天前
    1. 联网校验,双向 ssl 通信
    2. apk,classloader 教研
    3. root 校验

    校验到有问题,不要说出来,你只需要做一做手脚,对方毫不知情的情况下,玩一些黑魔法,对方心态就会崩溃。


    埋下陷阱, 比如直接把 key 光明正大的写到,当对方真的用这个 key 去操作的时候,说明对方真的在搞你, 然后你就可以标记为非法用户,慢慢玩对方就行了。 比如任务进行到一半卡住了,前几个识别都没问题,随机出问题。
    stinkytofux
        110
    stinkytofux  
       3 天前
    @gam2046 #105 你拒绝解除 bootloader 锁的设备使用 app 这个操作就有很多规避方法了. 你的判断函数是不可信的, 包括判断 root 之类的, 函数的返回值都可以伪造. 用重打包技术也无需解锁 root 手机, 注入代码跟你的 app 同进程了. 跟彻底的还可以自己编译安卓系统, 那真的是随便改源码随便注入了, APP 端的检测形同虚设.
    jeesk
        111
    jeesk  
       3 天前
    总的来说就是,对方破解,让你心态崩了, 其实你完全可以对等回击, 让对方心态崩就行了。 不要让对方觉得无法破解,而是一层套一层,让对方以为破解了, 然后后面出现更多的坑, 让对方猜, 到底破解了没。
    liyafe1997
        112
    liyafe1997  
       3 天前
    @gam2046 你服务器校验啥?国产安卓设备又没有一个统一的可信根,相当一部分设备(尤其低端/山寨机)不搭载 GMS 不用 Google 根证书。
    mrzx
        113
    mrzx  
       3 天前
    笑死了,zip 加密是最好破解的。。。你们作为程序员竟然不知道。。。

    ZIP 底层有个算法漏洞,不管你设多强力的密码,我也能破解掉。。

    换个 7z 的压缩格式。并且加密采用 AES-256 密码里包含数字,特殊符号,大小写,密码长度在 24 位以上。你让它破解试试看?
    mrzx
        114
    mrzx  
       3 天前
    果然是隔行如隔山,计算机里细分起来,其实分很多行业。

    而自然很多程序员会以为在计算机领域自己啥都懂。是站在计算机顶尖的存在。。。。其实,他们了解的还是太少了。。
    realpg
        115
    realpg  
    PRO
       3 天前
    @pipixiarwksb #97
    核心逻辑放远程, 联网调逻辑
    aino
        116
    aino  
       3 天前
    @Gilfoyle26 #42 错了,行内人告诉你,一般安卓逆不过去的,都是直接去逆 ios ,ios 的防护少的很多
    pursuer
        117
    pursuer  
       3 天前
    @mrzx zip 也支持 AES256 的,只是早期默认使用的 ZipCrypto 容易受到明文攻击
    Lujango
        118
    Lujango  
       3 天前
    做成在线版呢,就是数据交互都会在云端。
    workshop
        119
    workshop  
       3 天前
    apk 没加固么
    lizy0329
        120
    lizy0329  
       3 天前
    @aino 破解了 ios 版,能上架?能获得收入?
    aino
        121
    aino  
       3 天前
    @lizy0329 #120 破解方式很多种,不一定是重新签名打包,也能逆向 api 之类的,逆向工具类的是最简单,逆向 api 的价值大
    991547436
        122
    991547436  
       3 天前
    @mrzx 不懂就问 zip 是什么漏洞可以破?
    991547436
        123
    991547436  
       3 天前
    建议换个加固再加上代码混淆



    92Developer
        124
    92Developer  
    OP
       2 天前
    @991547436 我去,爱加密这么不堪一击吗?
    wangwlianl
        125
    wangwlianl  
       1 天前
    建议使用 Flutter 重写,自带 vmp ,很难被反编译,另外也不太好抓包,加三代壳,虽然可以 FART 脱壳只是时间问题,但可以增加逆向成本,他会花很多时间去逆,逆到一半估计就心态爆炸
    Vercetti
        126
    Vercetti  
       1 天前
    逆向真是一个做小饿不死,做大也饿不死的工种
    nyxsonsleep
        127
    nyxsonsleep  
       1 天前
    部分逻辑放远程就行。
    比如 y=f1(x)f2(x),只要 f2(x)在远程就行。
    你 yolo 识别完了,肯定要计算左用户和右用户现存牌量吧。这个逻辑放远程就行。
    而破解者要猜测这个被放到远程的内容是什么,这就是复杂度。破解就是在对抗这部分复杂度,复杂度越大成本越高,只要成本高到一定程度就能筛选掉一部分破解者。

    典型的如私服游戏,如果源码没有泄露,原理就是客户端视作开源,将服务端的黑盒补全。
    在本地的所有内容都应该视作安全泄露,而云端为什么安全?因为云端不在破解者手里。
    Aliceeeeee
        128
    Aliceeeeee  
       21 小时 48 分钟前 via iPhone
    呵呵,你不开源自然有人帮你开源
    kero991
        129
    kero991  
       13 小时 58 分钟前 via Android
    @dynastysea Steam 没有破解? Steam 几乎等于没有加密,各种入库工具,各种一个 dll 通杀所有 Steam 单机的多的是,gog 倒是真的连验证都没有。

    破解最无脑的就是暴力破解,找到你输入授权码的函数无脑返回 Ture ,或者判断是不是会员的函数无脑返回 Ture 。然后找找暗桩继续返回 Ture 。
    过了爆破这一关,能挡住 80%的破解作者吧,倒也不是真这么多人只会爆破,而是真进去搞加密算法比较费时间,你不一定值得人家这么搞而已。
    单机游戏女角色穿什么都不一定了,你还指望挡得住一个运行
    1  2  
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   2614 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 15:05 · PVG 23:05 · LAX 07:05 · JFK 10:05
    ♥ Do have faith in what you're doing.