这篇想说的是同一件事的四个面。客户端守不住,所以靠它卖钱的授权和许可也守不住;代码一旦变成商品,护城河就只能搬到别处;而当本地限制失去技术意义,以它为依据的合规也就站不住了;最后落到一个更实际的问题--软件还该长成什么样,又该靠什么收钱。

四层按这个顺序往下推,前面每一层都是后一层的起点。

1792943190431.png


一、永远不要信任本地代码

先聊第一个问题:为什么把商业规则写进客户端,再靠加密、加壳去守,这条路在 AI 时代基本走不通了。 先说结论:只要代码跑在用户的机器上,破解就只是时间和成本的问题;而现在,这个成本已经降得很低了。

控制权的悖论

网络安全里有条老话:Never trust the client(永远不要信任客户端)。程序运行在谁的物理设备上,谁就拥有最高的执行环境控制权--内存、调用栈、网络请求,全都在使用者的手掌心里。

过去二十年,不少厂商习惯把授权检查、付费开关、接口拦截这些商业规则直接写进客户端代码,然后配上加密、混淆、反调试,维持控制。这类做法有个专门的名字:隐蔽式安全(Security by Obscurity)。它们不是完全没用,但只能抬高绕过的时间成本,提供不了真正的安全。试图在一台归使用者所有的机器上,永久规定一段程序只能按厂商的意志运行,这种设想本身就自相矛盾。游戏行业的反作弊投入了二十年,结论也一直没变:只要敏感数据和计算逻辑落在本地,被破解只是早晚的事。

1792943220984.png

变化在哪里:AI 补上了最后一公里

过去的逆向工程是有门槛的。要会 IDA、OllyDbg,要懂汇编,破解者做好补丁或注册机之后,还得写一篇长教程告诉别人怎么用。传播本身也是成本。

现在这两头的门槛都在快速下降:

  1. 需要传播的东西不再是完整补丁。社区里留下几句关键线索就够了,比如"某权限判断在 trade_gate.dll 偏移 0x4F 的位置,是个 Bool 检查";
  2. 普通使用者把这几句话连同上下文喂给大模型,AI 就能自己读懂指令逻辑,补出缺失的代码,甚至生成可以直接运行的脚本。破解的"最后一公里"由模型代劳了;
  3. 于是攻防成本变得很不对称:厂商每次升级防护都要花真金白银的研发成本,而一条线索一旦公开,借助 AI 复制和复现的成本趋近于零。协议层面的不对称尤其明显:客户端程序可以反复打补丁,通信协议却远比改软件难动--升级要考虑和旧版本、旧客户端的兼容性,动不动就得权衡"要不要兼容旧协议"。一条协议一旦暴露,往往在此后很多年里都照样好使,破解方拿到的是一份长期资产。

加壳和反调试也挡不住

先看不设防的软件,几乎是裸奔:把调试器直接 attach 到进程上--Linux 上是 gdb/ptrace 那一套--整个软件的机器码和运行时状态,包括内存、寄存器、每一次系统调用,基本全在眼皮底下。照着数据流看一遍,通信协议就到手了,很多时候连"修改软件"这一步都不需要,二进制都不用碰。

那要是软件上了 VMP 这一类内存保护、虚拟化加壳、反调试呢?正面硬啃虚拟化确实费劲,但可以完全绕开拆解这一步:attach 不上去,就换低一层的录制手段,把程序跑过的硬件指令整个记录下来,交给反汇编器重建逻辑。WinDbg 的 TTD(Time Travel Debugging)能做指令级的录制和回放;QEMU 可以把软件整个放进自己手里的模拟器跑,逐条 trace 它执行过的每条指令;如果面对的是嵌入式设备,就干脆买一块对应的开发板,挂上硬件调试器在总线层取证。拿到的是真实执行过的指令流,壳里藏的字节码怎么变换,已经不重要了。程序可以检查自己有没有被调试,却无从知道自己正跑在谁准备的环境里--软件怎么运行,从来就不是发行者控制得了的事。

1792943258645.png

说到底,本地那道防线是可以被改掉的。既然改得掉,"怎么守得更严"就不再是重点;更值得问的是:靠这道防线卖出去的授权和许可,还值多少钱。


二、当实现代码沦为普通商品

问题也就从技术转到了生意上:靠代码保密撑起来的利润,还守不守得住。 先说结论:**AI 正在剥离软件里"仅仅因为代码难写而产生的溢价"**。一个产品如果主要靠实现难度维持高利润,这部分利润被竞争挤掉的速度,会远远超出过去的预期。

套利的逻辑

金融市场里,同一种资产在两个交易所价格不一样,套利者就会在低价的地方买入、高价的地方卖出,直到价差被抹平。软件市场也有类似的机制,严格说更接近经济学里的竞争性进入(Competitive Entry):需求被验证了、产品能赚钱、定价又高,竞争者就一定会来,剩下的问题只是他来得有多快。

过去这个问题的答案是"几个月起步"。复刻一套成熟系统需要整个团队和完整的开发周期,这个周期本身就挡住了大多数人,也就成了事实上的壁垒。现在大模型把写代码和搭架构的成本压得极低,复刻周期从以月、年计缩到以天、小时计。更关键的是,跟进者甚至不需要你的源码--他需要的只是那个被验证过的答案:用户要什么、产品流程长什么样、怎么收费。设计、流程和收费模式一旦公开,套利的条件也就齐全了。原作者承担了探索市场的高昂成本,跟进者直接从正确答案开始。

1792943277824.png

冲击来自三个方向

同一件"代码变便宜"的事,会从三个方向冲击商业模式,落点各不相同:

  1. 破解(Cracking):直接修改原软件的本地限制、绕过付费开关。前面已经说过这条路走不通,它打击的是本地授权和许可收费;
  2. 复刻(Cloning):另起炉灶写一套功能相似的替代软件。表单工具、简单 CRUD、套一层壳的 AI 应用,这类产品的实现壁垒最先崩掉,紧接着就是价格战;
  3. 替代入口(Disintermediation):不动你的代码,用第三方客户端或 AI Agent 直接调用你的服务。用户查询、下单、撤单、转账,都不必打开你设计的界面。官方客户端退化成众多入口之一,围绕界面建立的广告位、推荐位和交叉销售,也就无从谈起。

不过这里要说句公道话:竞争者能廉价复刻功能,不等于他能廉价获得你的用户。获客、维护、支持、信任,哪一样都还要花钱;第一次把功能做出来,和长年把它维护好,是两回事。所以套利不会把价格瞬间抹平。但只要用户迁移容易、产品之间差异又小,上面这三条就会一步步兑现。

搬到服务端,救不了生意

很多厂商的直觉答案是:把代码收回服务端,做成 SaaS,护城河就保住了。

鉴权和限流确实有用,但它们解决的是"谁能用、能用多少",防的是无偿占用资源的人;它们防不了竞争者--独立实现一套一模一样的服务端能力,不需要碰你的代码。你的接口毛利越高,越是在替跟进者验证"这条路值得走"。能限制访问,不等于能留住客户。

护城河搬到了哪里

代码商品化(Code as a Commodity)之后,防线要挪到 AI 凭空造不出、对手搬不走的地方:

  1. 数据引力(Data Gravity):用户长年积累的历史数据、知识库、协同记录。代码可以被重写,这些沉淀没法被复刻;
  2. 工作流集成:系统在企业内部的审批、风控、财务和多系统协同里嵌得有多深,用户迁走时就有多痛。迁移的代价接近一次业务事故,换软件只是第一步;
  3. 履约责任与担保:出事故时有人兜底。客户真正买单的,是代码背后的专业背书、运维责任和赔付能力,这些是破解版和个人模仿者给不了的;
  4. 网络效应与品牌信任:跨企业的协作网络、长期积累的信任。关系长在人和公司之间,搬不走。

1792943392555.png

这四条有个共同点:都不写在代码里,都长在时间和关系里。 数据引力是时间攒出来的--用户用得越久,历史记录、知识库、协同痕迹越厚,没有捷径可走;工作流集成是关系长出来的--一套系统嵌进审批和风控,牵动的是几个部门之间的约定,换掉它得把这些约定重新谈一遍;履约责任背后是长期的赔付记录与口碑,网络效应背后是企业之间已经跑通的协作路径。它们和代码最大的区别是:复制成本会随时间上升:时间越久,越难复制。 代码抄一遍是一天的事,这些东西抄一遍得花同样的年头。

所以 AI 压低的是"实现"的价格,压不低"积累"的价格。同一件事也可以反过来说:一门生意如果主要靠实现撑着,它的溢价会被很快挤干;如果主要靠积累撑着,AI 反而可能成为放大器--同样的工具,让已经积累了数据和关系的一方跑得更快。

1792943419684.png

顺便说一句,这对本地软件不全是坏消息。隐私、离线、低延迟仍是真实需求;用户拿回控制权,也意味着修复停更软件、做自动化和互操作更容易了。真正要变的是盈利逻辑:从保护一份代码,转向持续交付值得付费的价值。

但还有一层东西没解决:这些限制为什么明知没用,还要一直做下去?


三、形式合规的失效与服务端风控转向

相当一部分本地限制,能挡住的人有限,主要作用在于满足流程上的要求。合规关注的侧重点也和生意不太一样:它更看重可以核查的证据,实际效果则被放在后面。 先说结论:当"绕过限制"从一门手艺退化成几句话,靠封禁工具来落实的合规就很难再维持,风控只能往服务端收。

一份可以核查的清单

在金融与企业软件里,客户端的限制大致是同一组动作:禁止导出文件,掐掉量化客户端的外部网络,把账号和设备绑死,只允许官方客户端连进来。单看技术效果,这些拦截挡不住一个真想绕过去的人--前面已经说过为什么。但它们本来也不是为那个人准备的。

它们在实际流程里更多是在满足审计的要求。合规部门需要一份可供检查的清单,监管需要看到"已经采取措施"的证据,采购和法务需要有人对这条链路负责。客户端拦截器恰好同时满足这三件事:它有安装记录,有开关状态,有日志,在审计和检查时能用来证明"这里已经做了限制"。至于它到底能挡住多少真想绕过去的人,通常不是关注重点。

于是就形成一种默契:厂商提供限制手段,用户表示遵守,双方都能对流程有个交代。这就是常说的形式合规:重点在留下记录,能不能真正防住谁,并没有那么要紧。它优先保护的,是流程上的责任归属,系统本身倒在其次。

1792943439033.png

一串数字算不算工具

这套默契能运转很久,是因为它依赖一个前提:绕过限制需要工具,而工具是可以被禁的。

1999 年的 DeCSS 案就动摇过这个前提。那段 DVD 解密代码被印在 T 恤上,被写成诗,被压缩成一串数字;法院要在"非法破解工具"和"受宪法保护的言论"之间画一条线,画到最后发现这条线本来就不成立--代码是文本,文本是表达,表达受保护;可它同时又是拿起来就能用的东西。

AI 把这种模糊放大了几个数量级。现在要公开一条绕过路径,需要的不是可执行文件,可能只需要论坛里的一条经验:某个权限检查在哪里、属于什么类型、改掉之后会怎样。这句话在传统法律里属于信息交流,谁都可以说;但把它交给模型,模型就能补齐上下文,推出一套完整的绕过方案。

传统法律区分"破解工具"和"技术讨论",标准其实很朴素:前者已经具备可执行的功能,后者只是信息。可当一句话交给模型就能变成可执行脚本,同一句话就既是信息、又是工具。

这条界线的两端合到了一起:问题已经超出了"模糊"的范畴,传统的二分法很难再直接套用。

监管也很难穷尽所有技术信息的传播渠道。所以单靠封禁工具来治理,效果会越来越有限。

1792943455791.png

防线只能建在服务端

既然工具封不住,能管的就只剩"用"这件事本身。

  1. 客户端报上来的状态,不能当作事实。设备指纹、版本号、校验结果,都只是请求里的一段自我声明;服务端要用签名、鉴权和业务校验重新确认一遍;
  2. 限制要落在服务端的规则里,客户端里的开关靠不住。频率、额度、时段、单账户的累计敞口,放在服务端才真正生效--改客户端不会让它们消失;
  3. 行为特征比身份更难伪装。请求的节奏、报单的间隔、下单与撤单的比例、常用链路的变化,这些在服务端看得见,在客户端里也很难伪造干净。

换成监管的语言,焦点就从"阻断工具产生"变成了"规范使用者的实际行为与法律责任"。而对交易所和券商来说,该盯住的,是每个账户在服务端的请求频率、下单与撤单的节奏、额度和敞口;客户端装了什么,参考价值有限--这些在自己的系统里就能看见,也真正管得住。

客户端装没装拦截器,至多说明机构采取过一项措施;一个账户一天发多少请求、撤单比例是否异常、有没有在多个账户之间来回搬单,才是能被记录、被追责的事实。风控的价值,最终体现在把行为本身看清楚,"拦住工具"算不上它的功劳。

剩下要回答的,就是软件该长成什么样,又该靠什么收钱。


四、未来软件的生存法则与服务化重构

答案要从架构和收入两头找。 先说结论:客户端退化成可信度为零的渲染层,计算、规则与数据收拢到服务端;收入也从"卖一份代码"变成"持续交付搬不走的服务"。

客户端只剩一层薄壳

零信任客户端(Zero-Trust Client)这个词听着新,落到架构上,无非是把前面那些结论翻译一遍。

服务端收到任何一个请求,都假设它来自一台被人研究过的机器:身份重新验,签名重新校,业务合法性重新查。思路是直接"假定那道检查已经被人改掉了",不必再"在客户端多加一道检查"。

客户端不再保存关键逻辑和最终状态,只负责渲染、收集输入、发起请求,把判断交回服务端。这样做的结果是客户端变得很薄,也很容易被替换:网页、桌面程序、第三方工具、AI Agent,谁都可以当这个入口。对习惯把客户端当护城河的团队来说,这很难接受,但换个角度看,它把战场从自己必败的地方挪开了。

1792943475337.png

与其堵,不如把接口开出来

第三方客户端和 AI Agent 已经在调用你的服务了。这件事不会因为接口被封而停止,只会让调用方从"看得见的第三方"退到"看不见的脚本"--从能审计、能限流、能随时切断的对象,变成一群只能靠客户端特征去猜的流量。封堵并没有减少调用的数量,它改变的是调用的可见度。

所以更现实的选择是主动把接口标准化、开放出来。客户端堵不完,不如在服务端把入口管起来。 网页、桌面、第三方工具、AI Agent,谁都可以来调,但都从同一道网关进:身份怎么认、配额多少、按什么计费、出了事怎么追溯,全在这一层定。

这道网关要做的事不复杂,但得一次做全:

  1. 身份与授权:每一次调用都要落到具体账户和具体应用上,不能停在"某客户端"这一层;
  2. 限流与配额:按账户、按应用、按接口分别限,不让任何一方把服务打穿;
  3. 计量与计费:调用量、数据量、下单次数,都可以成为计费的口径;
  4. 审计与吊销:谁在什么时候做了什么,都可查、可回放,必要时一键停掉某个应用。

这样一来,用户查询、下单、撤单、转账从哪个界面发起,就不再是最重要的事。重要的是这些动作在服务端是否合规、是否可追溯,以及调用方有没有为它占用的资源付钱。对厂商来说,开放接口并没有让出控制权,只是把原来游走在灰色地带的调用请到正门,换成一份可以计量、可以定价、也可以随时中止的合同。

当然,这会带来新的责任:限流没做好,一次脚本风暴就能把系统打穿;权限没收紧,第三方应用可能替用户做他没有授权的事。可这些都是工程问题,比在客户端里和破解者打一场必败的仗要可控得多--前者可以修,后者只能拖。

1792943495058.png

那还靠什么收钱

代码不再保密、功能可以被复刻之后,定价依据必须换一个来源。比较稳的几类,都不在代码里:

  1. 托管与高可用(Managed Services):代码可以复刻,99.99% 的可用性、多机房灾备、凌晨三点有人接电话,复刻不了;
  2. 动态数据与情报(Data Feed):实时行情、风控规则库、模型需要的上下文,这些每天都在更新,不是一次性交付;
  3. 合规背书与风险承担(Liability):出了事故有人兜底。企业客户买的除了功能,还有能写进合同的责任;
  4. 网络效应与生态(Ecosystem):上下游、协同流程、身份体系连在一起,换掉它等于换一种协作方式,光换一套软件解决不了。

这四条和前面说的护城河是同一件事,只是从"防守"换成了"报价"。它们都不依赖"用户看不懂代码",也就不怕模型越来越会写代码。

1792943521762.png

结语:从控制者到服务者

1792943540922.png

AI 时代终结的不是软件行业,而是**"隐蔽式安全"与"买断式代码"**这两样东西。厂商不必再假定自己能控制用户机器上的那段程序,也没必要把力气花在一条注定守不住的防线上。

把客户端当成不可信的入口,把计算和规则收回服务端,把收入建立在持续交付上,不再依赖一次性封锁--从试图控制使用者的"防守者",变成用不可替代的价值换取信任的"服务者"。这条路更长,但方向是对的。

客户端守不住,代码不值钱,靠本地拦截落实的合规同样守不住;能守住的,只剩下一直在交付的那部分价值。

1792943559691.png


以上只是我个人的技术观察和思考,不构成对任何具体产品、公司或机构安全性的评价。