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

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

  •  
  •   92Developer · 1 天前 · 10396 次点击

    上周我 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:他破解的包为什么不受后端动态解压密码控制?如果绕过校检本地如何解压成功呢?

    112 条回复    2025-12-24 07:37:02 +08:00
    1  2  
    Yanu
        1
    Yanu  
       1 天前
    2. 把云端的返回结果写死,用旧的 zip 包不就可以了吗
    heyjei
        2
    heyjei  
       1 天前   ❤️ 1
    我的关注点在左上角的时间,现在搞破解的都这么勤奋的嘛!
    stinkytofux
        3
    stinkytofux  
       1 天前   ❤️ 19
    你如果会 hook 的话, 就不会有这些疑问了, 你所有的什么动态加密啥的, 根本就不用看, 找个关键函数直接返回 true 就搞定了, 谁管你用的什么算法什么密钥.

    想做好防破解, 一定要先学会破解.
    okakuyang
        4
    okakuyang  
       1 天前
    哎,别人专门搞逆向的话,很难防。逆向->反逆向->反反逆向->反反反逆向,无穷尽也。
    gam2046
        5
    gam2046  
       1 天前
    唔,如果要求严格的话,可以校验 TEE 证书链,如果校验失败,就不下发资源文件。本地设备只负责提交证书链

    这个以我目前浅薄的知识来看,是无法绕过的,可以参考代码:

    https://gist.github.com/Lua12138/81312aeb1d2360fa7ef4b756ec7d9d18#file-keystorechallenge-kt

    只需要简单调用 KeyStoreChallenge.use 方法即可,将获得的证书链提交给服务端。

    服务端收到后通过 tee_cert_chains 方法检验即可,记得一定要同时检查证书链里的包名、签名与你自己的一致(防止别人自己编写与你包名一样的应用在正常设备上进行旁路攻击),如果报告设备已经解锁,可以依据你认为的风险等级,决定是否下发资源。
    dynastysea
        6
    dynastysea  
       1 天前
    @stinkytofux 这么搞笑的么。。那还加密个毛线
    Blanke
        7
    Blanke  
       1 天前 via Android
    几个月前看到你的软件,简单逆向分析了下,因为之前是想做类似的。想看看啥方案 yolo 还是啥。发现直接能得到模型文件,用户管理用的好像是 leancloud 之类。单纯技术上来说,直接用模型文件写个功能一样的 app 很简单,或者 xp 模块也能本地破解。。纯客户端的功能几乎都能破解,只是难度和成本不同,mt 管理器也有本地破解版,它的防护算是比较强的。
    stinkytofux
        8
    stinkytofux  
       1 天前   ❤️ 1
    @dynastysea #6 纯客户端程序本来就没办法杜绝破解, 自古以来都是难题, 强如 Windows 和 各种游戏加密都办不到, 被破解只是时间问题. 什么验签加密混淆都没用, 只要是客户端上面执行的函数返回值和入参都能被轻易修改. 所以像微信这样的软件, 都放弃了加固, 只是做了简单的混淆. 重要的逻辑和数据都依赖服务端.
    dynastysea
        9
    dynastysea  
       1 天前
    @stinkytofux 那 steam 这种是怎么搞的呢?好像没见过有破解的?
    stinkytofux
        10
    stinkytofux  
       1 天前
    @dynastysea #9 steam 本身就是个商店, 数据都在服务器, 不存在破解的概念. 你要说 steam 上的游戏, 那是你见少了, 很多破解游戏都可以绕过 steam 运行.
    Anarchy
        11
    Anarchy  
       1 天前
    本地防护就是混淆代码防止找到关键函数,具体加密算法是无所谓的,毕竟可以直接调用你本身的代码逻辑。或许可以考虑简单点迁移到 Flutter 开启混淆,Flutter 的破解工具还不成熟。
    HandSonic
        12
    HandSonic  
       1 天前 via iPhone
    @dynastysea 你是否在线:GreenLuma 、Steamtools 、和其他基于这些的“Steam 假入库”,都能让你在不购买游戏的情况下直接通过 Steam 下载并游玩你未拥有的游戏,只要有清单文件就行( D 加密除外)
    blackbookbj277
        13
    blackbookbj277  
       1 天前
    报警吧:网络安全法第二十七条 任何个人和组织不得从事非法侵入他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供专门用于从事侵入网络、干扰网络正常功能及防护措施、窃取网络数据等危害网络安全活动的程序、工具;明知他人从事危害网络安全的活动的,不得为其提供技术支持、广告推广、支付结算等帮助。
    HeyWeGo
        14
    HeyWeGo  
       1 天前
    记牌器?
    92Developer
        15
    92Developer  
    OP
       23 小时 57 分钟前
    @heyjei 哈哈,可能心血来潮吧。
    92Developer
        16
    92Developer  
    OP
       23 小时 49 分钟前
    @Yanu 他用的那个工具最终能达到这种效果,具体啥原理不清楚。
    92Developer
        17
    92Developer  
    OP
       23 小时 49 分钟前
    @HeyWeGo
    Nuttertoo1s
        18
    Nuttertoo1s  
       23 小时 48 分钟前
    没有进行加固吗
    reHuo
        19
    reHuo  
       23 小时 47 分钟前
    最早用 Android killer 随便破解,这万一看你怎么看吧,有点类似国内网站挂了很多绿色破解软件哈哈哈
    92Developer
        20
    92Developer  
    OP
       23 小时 47 分钟前
    @blackbookbj277 哈哈,没有流通,到那程度再说。但法律确实最后的手段。
    92Developer
        21
    92Developer  
    OP
       23 小时 46 分钟前
    @Nuttertoo1s 最近才加固,他说加不加固也只是时间问题,防君子不防小人。
    reHuo
        22
    reHuo  
       23 小时 46 分钟前
    玩意 哈哈
    92Developer
        23
    92Developer  
    OP
       23 小时 45 分钟前
    @stinkytofux 我研究研究 hook 咋回事。
    lw10645
        24
    lw10645  
       23 小时 41 分钟前
    所以他是找你要钱吗还是干嘛
    92Developer
        25
    92Developer  
    OP
       23 小时 37 分钟前
    @Blanke 是 yolo ,很简单?你写写就知道了,内存管理,集成 onnx ,计算出牌记录等够你喝几壶了。MT 管理器,哈哈,狗日的东西。
    92Developer
        26
    92Developer  
    OP
       23 小时 35 分钟前
    @lw10645 只在群里发了一张截图,啥也没说,之后就是我和他私聊了。他副业搞 pojie ,接单的那种。
    EeveeRibbon
        27
    EeveeRibbon  
       23 小时 24 分钟前
    纯本地想破解真的就是时间问题,多少带联网功能的软件都有破解版,更别说纯本地了
    92Developer
        28
    92Developer  
    OP
       23 小时 13 分钟前
    @EeveeRibbon 哈哈,是的。
    ljkgpxs
        29
    ljkgpxs  
       22 小时 55 分钟前
    加解密和一些核心逻辑可以考虑放到 native 代码里面,能阻挡一部分破解,但是也不能完全阻止破解,套个高级点的壳也可以的,都只是增加破解难度而已
    mscsky
        30
    mscsky  
       22 小时 33 分钟前
    主要问题是软件价值多少的
    92Developer
        31
    92Developer  
    OP
       22 小时 32 分钟前
    @mscsky 还行,小众工具类,搞点小钱。
    92Developer
        32
    92Developer  
    OP
       22 小时 32 分钟前
    @ljkgpxs 是的
    tuutoo
        33
    tuutoo  
       22 小时 11 分钟前   ❤️ 1
    你就慢慢加新功能,发新版本,让他破解新版本付出点时间成本。 他没钱拿,也不会一直那么闲的盯着你的软件破解。
    92Developer
        34
    92Developer  
    OP
       21 小时 23 分钟前
    @tuutoo 哈哈
    AndyChina
        35
    AndyChina  
       21 小时 10 分钟前
    要看破解了能有什么用,不被破解不太可能,瑞幸咖啡/得物/美团系/阿里系/拼多多的风控严格不?技术牛不?照样被破解,安全是个动态过程,只有相对的安全,没有永远的安全
    amaranthf
        36
    amaranthf  
       21 小时 8 分钟前 via iPhone
    所以很多开发者更喜欢在苹果平台上开发和售卖
    SkywalkerJi
        37
    SkywalkerJi  
       20 小时 59 分钟前
    平台卡密吃抽成吧,
    KinBob
        38
    KinBob  
       20 小时 53 分钟前
    难道是自动打牌 app ?
    unco020511
        39
    unco020511  
       20 小时 51 分钟前
    破解你是阻挡不了的,这么和你说吧,我们月活一个亿的办公软件,去 tg 频道,刚发的最新版本,立马就有破解,真特么绝了,我们现在也不反抗了,只要没大面积传播就行
    daimon1
        40
    daimon1  
       20 小时 44 分钟前
    正常啦,软件加密被破解只是时间问题,强如 D 加密也只能做得延长破解时间,并非不可破解。想想人家花大钱辛辛苦苦开发的游戏,都能被破解出来免费传播,心里有没有好受点?
    triptipstop
        41
    triptipstop  
       20 小时 44 分钟前
    尝试下 主流 APP 学学别人怎么做的防护
    Gilfoyle26
        42
    Gilfoyle26  
       20 小时 22 分钟前
    android 的逆向门槛真低。看看 ios 门槛高的,ios 逆向的岗位都快绝迹了。
    92Developer
        43
    92Developer  
    OP
       20 小时 6 分钟前
    @triptipstop 多数都不加固,就是一个壳。
    92Developer
        44
    92Developer  
    OP
       20 小时 4 分钟前
    @unco020511 人外有人啊。
    92Developer
        45
    92Developer  
    OP
       20 小时 3 分钟前
    @KinBob 自动记牌
    92Developer
        46
    92Developer  
    OP
       20 小时 3 分钟前
    @AndyChina 是的。
    00244396
        47
    00244396  
       19 小时 4 分钟前
    MT 管理器 这个我还不知道,看了一下是手机操作么,真是人才,之前有需要反编译了一个 SDK 费了半天劲,手机是怎么看下去的
    zerone0086
        48
    zerone0086  
       18 小时 57 分钟前
    OP ,APP 链接 私信下,我也玩微乐😁

    emhhbmd3ZWkxMmhhb0BnbWFpbC5jb20=
    cfu18
        49
    cfu18  
       18 小时 31 分钟前
    纯本地,只是绕过一些逻辑,很初级了。

    早一些的时候,国内的一些工业软件的存储格式全是加密封闭的,法律也没有那么健全,
    想要做下游软件接他们的数据,只能逆向软件,一点点的扣,那个难度要和工作量要大一点。
    92Developer
        50
    92Developer  
    OP
       18 小时 26 分钟前
    @zerone0086 百度搜下吧,我的记牌器还处于发展阶段。
    92Developer
        51
    92Developer  
    OP
       18 小时 24 分钟前
    @daimon1 倒也不是说难受,毕竟没影响收入,主要想解开一些疑惑。
    dullwit
        52
    dullwit  
       18 小时 15 分钟前
    java 做签名校验没用,jni 方面可以通过 hook libc.so 修改 read 函数来反破解。主要还是取决于你对破解的容忍程度,容忍度越低,那么防破解手段就更复杂。如果有兴趣,可以给你说说。
    chairuosen
        53
    chairuosen  
       18 小时 9 分钟前
    你出 500 ,让他教你怎么防破解
    92Developer
        54
    92Developer  
    OP
       18 小时 5 分钟前
    @dullwit 有兴趣,bmhhbGZfYmFv
    Rorysky
        55
    Rorysky  
       18 小时 4 分钟前
    关键部分 关键函数 包含在编译语言 C rust 之类中,动态链接,甚至实时下发
    下发必须校验密钥,参考 u 盾那种动态密码
    Rorysky
        56
    Rorysky  
       18 小时 3 分钟前
    @stinkytofux 商业软件那种 授权 dongle 是比较难破的,可以参考
    xFrye
        57
    xFrye  
       18 小时 2 分钟前
    软件攻防是一场对攻战,就算包做了校验发出去的安卓包你也可以看作是裸奔的,破解成本不会非常高,关键功能最好放服务器,然后做下反作弊风控
    docx
        58
    docx  
       17 小时 58 分钟前 via iPhone
    大厂的技术有多强,还不是有破解版,这种东西你和它较劲没什么意义,也不应该把人性的坏怪罪到技术工具上去。这种攻防战一方面是得知己知彼提高保护力度,另一方面尽量从业务逻辑上降低破解产生的收益。
    comlewin
        59
    comlewin  
       17 小时 57 分钟前
    每次发版给他 50 ,让他给你录破解过程,根据破解过程修复,循环往复。
    c3de3f21
        60
    c3de3f21  
       17 小时 57 分钟前
    论持久战
    myderr
        61
    myderr  
       17 小时 54 分钟前
    把一些逻辑放服务端
    92Developer
        62
    92Developer  
    OP
       17 小时 54 分钟前
    @comlewin 手动狗头
    92Developer
        63
    92Developer  
    OP
       17 小时 54 分钟前
    @myderr 本地识别,放不了服务端。
    92Developer
        64
    92Developer  
    OP
       17 小时 50 分钟前
    @xFrye 核心业务逻辑在本地,无解。
    92Developer
        65
    92Developer  
    OP
       17 小时 47 分钟前
    @zerone0086 闲鱼一堆,月激活码 10 月一个。
    kekeabab
        66
    kekeabab  
       17 小时 47 分钟前
    纯好奇,为啥要用什么 yolo onnx 之类的这些东西实现记牌器,这些数据内存里面不是都直接有吗,还浪费性能
    helone
        67
    helone  
       17 小时 42 分钟前
    @92Developer #63 可以考虑本地识别完内容加密传给服务端,服务端解密后返回给 APP ,这样就没办法在一些签名验证的埋点直接修改逻辑去破解,即使破解了你的服务端加解密逻辑也有很多后期工作需要做,比如直接识别完直接读取结果,而不是传给服务端
    hikarugo
        68
    hikarugo  
       17 小时 42 分钟前
    破解狗真的很烦,这是一场持续战
    neoshui
        69
    neoshui  
       17 小时 41 分钟前
    你可以看一下 52pj 这个论坛,可以学到很多东西,叹为观止
    xFrye
        70
    xFrye  
       17 小时 40 分钟前
    @92Developer 全部本地的话那就没办法了,我以前见过有些单机游戏,上午发包下午就在破解平台上出现。。。
    92Developer
        71
    92Developer  
    OP
       17 小时 39 分钟前
    @kekeabab 那你说为啥市面上大多记牌器不是用 yolo 就 opencv ?
    baby0w0
        72
    baby0w0  
       17 小时 35 分钟前
    您做的这些防护都是防君子的(1 点用都没有)
    我破解过很多软件了,你说的安卓代码 不需要懂
    kekeabab
        73
    kekeabab  
       17 小时 29 分钟前
    @92Developer #71 这我怎么知道为啥,比较好奇市面上大多记牌器真的都这样吗?我玩的卡牌游戏记牌都不会用什么 yolo opencv ,数据本来就在内存直接读就好了,比如炉石传说
    92Developer
        74
    92Developer  
    OP
       17 小时 28 分钟前
    @kekeabab 具体我也不清楚,基本都玩小程序。
    stinkytofux
        75
    stinkytofux  
       17 小时 23 分钟前
    @kekeabab #73 又不是 Window, 安卓的权限很严格, 没有 root 权限的情况下无法注入目标进程, 怎么可能读到其他程序的内存. 你自己搞黑产可以用一批 root 手机或者 root 模拟器去批量操作, 想开发通用的软件分发给普通人用, 这招就不行了.
    suyuyu
        76
    suyuyu  
       17 小时 16 分钟前
    @HeyWeGo 哥,你这头像能不能换了 (
    randomx
        77
    randomx  
       17 小时 16 分钟前
    和外挂一样 真的讨厌 真的不会消失
    registerrr
        78
    registerrr  
       17 小时 14 分钟前
    你“破解”微乐,他破解你,有人又破解他,无穷尽也
    lumyx
        79
    lumyx  
       17 小时 13 分钟前
    颠覆言重了,这不是啥新技术(这估计流行快七八年了),看雪这里论坛有很多高中生看教程都会逆向了,本质上就是 3L 老哥说的,mt 会解析定位到关键的调用处,比如你 java 肯定有个 isVip ,直接把这个值换成 true 就行了。你在上层花里胡哨的加密折腾毫无影响。
    lumyx
        80
    lumyx  
       17 小时 10 分钟前   ❤️ 1
    避免用 java ,kt,我个人建议把功能用 flutter 重写一遍,混淆后再打包,这个强度相比 java 强了不少,想靠 mt 破壳 flutter 基本没戏,因为 flutter 都是 so . 门槛会高不少
    Syriana
        81
    Syriana  
       17 小时 9 分钟前
    我有个大胆的猜测,是不是他 P 的图
    92Developer
        82
    92Developer  
    OP
       17 小时 5 分钟前
    @Syriana 不是,他还发了视频。
    kasusa
        83
    kasusa  
       16 小时 57 分钟前
    业务逻辑在本地,软件是不是要激活/购买才能用。
    ios 的话走商店和许可,在本地逻辑进行前/app 启动时进行校验。
    安卓不懂,肯定也有提供激活码和管理服务的。
    Niphor
        84
    Niphor  
       16 小时 39 分钟前
    上个三代以上的加固,代码抽取转 so 的

    这个破解,一般起码得花万把块钱买课程,不然自己搞很烦。
    Chaitanya
        85
    Chaitanya  
       16 小时 34 分钟前
    基本防不住,别说你的软件了,就是 jb 的软件也防不住。但是你可以对功能进行分段式更新,每次更新都往上面加固,确保对方不能每次都按同一个手段破解,也许可以解决你的问题,当然最好的方式还是适时打折,让它破解版卖不出价
    Cloud9527
        86
    Cloud9527  
       16 小时 26 分钟前
    之前安卓 app 都是加固+混淆,不过不知道有没有被人破解了
    dnslint
        87
    dnslint  
       16 小时 16 分钟前
    flutter 据说是天然的 vmp 环境 逆向起来比较复杂可以试试看
    sheeta
        88
    sheeta  
       15 小时 55 分钟前
    改成云端识别啊,我理解你的记牌器就是 ocr 识别出出过的牌,改成服务端 ocr 识别
    kekeabab
        89
    kekeabab  
       15 小时 38 分钟前
    @stinkytofux #75 没有 root 权限一样能搞,放同一个进程就是了,或者可以用现成的也可以做一套类似小学生圈子里叫做“框架”的东西,直接虚拟一个轻量环境启动 app 就可以随便读写。我很多年没碰过安卓了,搜了下现在依然适用。
    dearmymy
        90
    dearmymy  
       15 小时 35 分钟前
    @Gilfoyle26 ios 才是简单好吧。
    irrigate2554
        91
    irrigate2554  
       15 小时 25 分钟前
    想要防住,只能把核心功能放到云端才有可能
    stinkytofux
        92
    stinkytofux  
       15 小时 16 分钟前
    @kekeabab #89 这就是重打包了, 楼主说的 mt 破解也是用的这个, 重打包有重打包的缺陷. 分发给普通人还是不方便, 你不能让别人把官方游戏卸载装你这个特殊版本, 比较适合小范围自用.
    stinkytofux
        93
    stinkytofux  
       15 小时 15 分钟前
    @kekeabab #89 所以 op 这个 ocr 识别虽然简单粗暴, 力大砖飞, 但是确实可以规避很多权限导致的麻烦. 适合大规模分发给小白用.
    jeesk
        94
    jeesk  
       15 小时 8 分钟前
    你可以做校验的, 道高一尺魔高一仗。 和他玩呗
    justsosososo
        95
    justsosososo  
       14 小时 57 分钟前
    加壳啊 老铁
    jmliang
        96
    jmliang  
       14 小时 47 分钟前
    用 flutter
    pipixiarwksb
        97
    pipixiarwksb  
       14 小时 30 分钟前
    有没有能够增加桌面端破解成本的方法,完全不被破解基本不可能,但是怎么增加破解成本呢,有大哥可以聊聊吗
    guanzhangzhang
        98
    guanzhangzhang  
       14 小时 26 分钟前
    @kekeabab #66 内存又不是直接读,你要找,而且这样上架被人举报铁定 g ,纯识图层面可以加模型在线更新支持更多游戏,
    guanzhangzhang
        99
    guanzhangzhang  
       14 小时 24 分钟前
    有个移动联盟的 so ,可以整进去,内部自带很多防逆向的。
    WngShhng
        100
    WngShhng  
       14 小时 23 分钟前
    你的签名校验是怎么写的?如果只是从 pms 里面那包的签名,那么绕过就是轻轻松松的事情。你的版本号问题,只要 hook 一下 pms 获取版本号的方法就搞定了,和 hook 签名的逻辑一样。如果你用 bool 类型把校验逻辑封装,那它可以直接修改你的函数逻辑。这些都有成套的体系。
    1  2  
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5027 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 01:13 · PVG 09:13 · LAX 17:13 · JFK 20:13
    ♥ Do have faith in what you're doing.