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

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

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

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

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

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

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

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