【网络工程】如何肘赢Adobe验证
这部分内容仅在Windows11 24H2 LTSC 64位上进行了测试。Windows环境应该是正常使用的,但Linux或Mac等环境我不保证是否可以使用。
其实我觉得是可以的,毕竟Clash应该有其他版本吧……?这个也不依赖修改Hosts或者什么别的东西,但GenP这个我是真不知道。
这篇文章最后更新于2025年5月12日,截止今日,该方法仍然有效。如果失效,我会及时在这里进行更新。
关于Adobe验证的二三事
这部分是介绍Adobe是如何进行验证的。
首先,Adobe会拉取官网的主要验证方式,即试图访问ic.adobe.io
这个地址进行第一步的验证。
然后第二步是就在最近时间(25年5月),Adobe又增加了一个用户协议地址cc-api-data.adobe.io
,这个会在打开Adobe软件时弹出一个用户协议,无论你是否同意它都会借此进行验证。
最后第三步是Adobe每隔一段时间就会自动生成一个随机域名来尝试进行验证,一般格式包括:
- 0mo5a70cqa.adobe.io这样的
10位随机组合.adobe.io
的组合 - 0bj2epfqn1.adobestats.io这样的
10位随机组合.adobestats.io
的组合 - qivgqug798p.7cnli.adobestats.io这样的
8~12位随机组合.5位随机组合.adobestats.io
的组合
除此之外,Adobe官方的Creative Cloud以及万恶的Genuine Service也会有正版验证的功能。但验证渠道走的都是跟上面相同的办法,你不主动打开这两个软件进行本地校验的话也不会触发验证,至于如何删除AGS,后面会提到。
近期Adobe越来越丧心病狂,几乎每天他们上班第一件事就是生成一个随机验证地址来进行验证。虽然可以在这个网址查看民间提供的DNS列表,但天天跟Adobe斗智斗勇又不太方便,而且说不定有的人需要Hosts的修改,例如SteamCommunity之类的场合。截止2025年5月12日,这个网站已经收录了2191条用于验证的网址了,这对于你的Hosts文件而言是一个较大的负担,而且大多数使用到DNS规则的程序都会直接覆写Hosts文件,非常的不方便。
所以,我写了这篇文章,教大家如何战胜Adobe的本地验证。真不是我想用盗版软件,是因为Adobe的订阅价格实在是太贵了,而且不订阅根本不给你用,对于一些并不是经常使用Adobe进行设计的人而言太过不值得。在此先和伟大的John Warnock道个歉,希望你能尽早说服上帝用硫磺火砸了这个没有开源精神的地球。
请注意,使用破解版的Adobe软件是无法使用Adobe官方提供的素材库以及AI生成服务的。阻止这些验证地址并不会影响你正常使用Adobe的软件,但由于你并没有正版许可的账号,所以你也无法访问素材库、AI生成和工作平台等功能。在此笔者也鼓励各位真正有需求的平面设计师或视频编辑师购买正版许可。在有盈利的情况下,某些渠道下的正版的Adobe许可价格其实可以接受,也更符合法律规定与道德准则。
所需要的软件
首先我们需要一个优秀的流量反代理软件,在此我推荐并要求必须只能使用Clash,项目地址在这里。这是一个民间维护的Clash版本,叫做Clash-verge-rev。本质上是优化了Clash内核并给了一个用户友好的GUI页面,使用起来非常简洁和强大。求求你们不要再用已经停止更新的SSR相关了,还有那些问某某VPN的也不要找我。
其次是一个Adobe验证工具,叫做Adobe GenP,项目地址在这里。这个在互联网上都有很多教程,具体该如何使用这篇文章不会做过多介绍。作者在25年4月25日最新一次Releases中增加了由其他作者提供的反弹出补丁,可以阻止Adobe弹出“请停止使用无授权版本软件”的红色弹框。但即使有这个补丁,我也推荐大家尽量阻止Adobe进行在线验证,以防Adobe官方让这个补丁失效得太快。
具体操作流程
首先,你需要使用Adobe GenP来为你的Adobe软件打上破解补丁和反弹出补丁。具体该如何使用请参考其他人的视频,至于反弹出补丁则是在Pop-up Tools选项卡下的WinTrust部分,这个具体功能是如何实现的我们在后文原理部分会进行介绍。当然,如果你是第一次通过Creative Cloud安装Adobe相关组件,也不要忘记卸载AGS与禁止任何Adobe相关进程的开机自启动。
其次,我们需要打开Clash,在“订阅”选项卡下,选择全局扩展脚本,右键点击编辑文件,并且将其中内容替换为以下代码。
function main(config, profileName) {
if (!config || typeof config !== 'object') {
config = {};
}
if (!Array.isArray(config.rules)) {
config.rules = [];
}
config?.rules.unshift(
"DOMAIN-SUFFIX,ic.adobe.io,REJECT-DROP",
"DOMAIN-SUFFIX,cc-api-data.adobe.io,REJECT-DROP",
"DOMAIN-REGEX,^(?i)[a-z0-9]{10}\\.adobe\\.io$,REJECT-DROP",
"DOMAIN-REGEX,^(?i)[a-z0-9]{10}\\.adobestats\\.io$,REJECT-DROP",
"DOMAIN-REGEX,^(?i)[a-z0-9]{8,12}\\.[a-z0-9]{5}\\.adobestats\\.io$,REJECT-DROP"
);
return config;
}
之后,点击保存,关闭Clash并重新启动,就已经完成了对Adobe正版验证的阻拦了。
目前,截止北京时间2025年5月12日,这个方式仍然有效。如果后续失效,请随时联系我,我会更新代码。
对于刨根问底者的原理解答
好吧,既然你已经看到了这里,那就说明你对我不信任,或是好奇这些代码的用途是什么。首先这不算恶意代码,只是一个简单的正则过滤语句,用于告知Clash该阻拦哪些域名。本质上,修改DNS的办法是将Adobe验证地址重新用0.0.0.0
空IP重定向,导致无法访问进而阻止验证。Clash作为一个流量反代理工具,也是有相同的功能的。
那么,我们首先来分解这段代码的作用。这是一个JavaScript代码,是常见的后端脚本语言。
第一部分是函数头,声明了一个叫做main
的函数,并传递了config
这一配置对象与profileName
这两个参数。
根据一些人的反馈,笔者在此处增加了两个逻辑语句。第一段的!config
的作用是判断config
参数是否为null
或undifined
或false
等假值,而typeof config !== 'object'
是判断config
是否为正确的对象类型,若不是则将其重置为空对象({}
)。第二个逻辑语句中,Array.isArray(config.rules)
的作用是判断config.rules
是否为数组类型(Array
),否则为其执行正确的赋值。简言之,这段代码是一种防御性编程,严格确保了用户在没有订阅代理供应商时,因不存在config
或config.rule
而导致的报错或程序崩溃。
接下来是具体实现的部分,第二行代码的作用是通过可选链操作符.?
安全访问config.rules
数组,并通过unshift()
方法安全地在数组头部插入如下新规则。
最后是正常的验证返回函数return config
与函数闭合。
需要着重解释的是这段正则表达语句。
首先,我们来解释一下DOMAIN-SUFFIX
(域名后缀匹配)与DOMAIN-REGEX
(正则表达匹配)的作用。这个代码的完整语法是这样的:"匹配方式,<后缀或正则>,<动作>"
。其中,前者是匹配符合这个字符串末端的所有域名;而后者是匹配符合正则表达式的所有域名。我们注意到,ic.adobe.io
与cc-api-data.adobe.io
属于带有特征的独立域名,因此我们使用了后缀匹配来进行过滤,而自动生成的乱码域名,就需要通过正则表达式来进行过滤。同样,还有一个DOMAIN
的匹配方式,但由于这个严格要求匹配对应地址,使用起来较为麻烦而且限制性较大,所以我们通常不使用它。
接下来是关于正则表达式语法的介绍。其中,(?i)
的作用是忽略字符串中的大小写区分,虽然目前Adobe并没有丧心病狂到启用大小写,但为了未来着想,我还是选择使用了这个表达式来进行过滤。[a-z0-9]
意为这是一串含有小写字母a~z和数字0~9的随机字符串,例如a0b1c2d3e4f5g6
。{8,12}
规定了这个字符串的长度在8位到12位之间,后续的{10}
等则是精确要求了长度必须为10位。而\\.
意味着匹配域名分隔符.
——这里需要进行解释,在正则表达式中,反斜杠代表转义。因为在汇编语言里,某些富有具有明确意义,直接输入可能会引起代码混淆,因此需要用反斜杠来进行转义;而两个反斜杠则是对转义的转义,因为在汇编语言当中,反斜杠本身也是特殊符号。最后,^
与$
的含义是精确头尾匹配,即正则语句在这两个符号的包裹下即为完整,不会过滤更多级域名。
很多看到这里,并且有自己的想法的朋友们会意识到一件事:这段代码只过滤了三种类型。是的,的确如此,因为目前Adobe的随机数生成仅限于这种情况。请注意,即使是这三种域名,目前也已经涵盖了总共6210(2+623+624+625+626+627)
种组合,求对数可知大概为1033的数量级,即百万亿亿亿级的数字。等到Adobe真的穷举完了这些随机项目的那一天,宇宙估计都已经热寂了,所以完全可以不用担心域名会用完的问题。
当然,我们不排除Adobe会丧心病狂到增加新的种类,例如更多级的域名或特殊符号。看了这篇文章的各位读者可以自己尝试写一个新的域名过滤正则,或是等待我进行后续更新。
This content has only been tested on Windows 11 24H2 LTSC 64-bit. The Windows environment should work fine, but I cannot guarantee compatibility with Linux, Mac, or other environments.
Actually, I think it should be possible, since Clash likely has other versions, right...? This method doesn’t rely on modifying the Hosts file or anything like that, but as for GenP, I really don’t know.
This article was last updated on May 12, 2025, and as of today, this method is still effective. If it becomes ineffective, I will promptly update it here.
A Few Things About Adobe Verification
This section explains how Adobe performs verification.
First, Adobe pulls the primary verification method from its official website, attempting to access ic.adobe.io
for the initial verification step.
Then, in the second step, as of recent times (May 2025), Adobe added a user agreement address at cc-api-data.adobe.io
. This triggers a user agreement pop-up when launching Adobe software, and regardless of whether you agree, it uses this to perform verification.
Finally, the third step is that Adobe periodically generates a random domain for verification attempts, typically in the following formats:
- Domains like 0mo5a70cqa.adobe.io, a
10-character random string.adobe.io
combination - Domains like 0bj2epfqn1.adobestats.io, a
10-character random string.adobestats.io
combination - Domains like qivgqug798p.7cnli.adobestats.io, an
8-12 character random string.5-character random string.adobestats.io
combination
In addition, Adobe’s official Creative Cloud and the notorious Genuine Service also have genuine verification functions. However, they use the same verification channels as described above. If you don’t actively open these two applications for local validation, verification won’t be triggered. As for how to remove AGS (Adobe Genuine Service), I’ll cover that later.
Recently, Adobe has become increasingly aggressive, generating a random verification address almost every day as their first task. While you can check a community-provided DNS list at this website, constantly battling Adobe is inconvenient. Plus, some users may need to modify their Hosts file for other purposes, such as accessing SteamCommunity. As of May 12, 2025, this website has recorded 2,191 verification URLs, which is a significant burden on your Hosts file. Moreover, most programs using DNS rules overwrite the Hosts file, making it highly inconvenient.
So, I wrote this article to teach everyone how to defeat Adobe’s local verification. It’s not that I want to use pirated software—it’s just that Adobe’s subscription prices are outrageously expensive, and without a subscription, you can’t use their software at all. For those who don’t frequently use Adobe for design, it’s simply not worth it. I’d like to apologize to the great John Warnock in advance and hope you can soon convince God to smite this planet, which lacks the spirit of open source, with fire and brimstone.
Please note that using cracked Adobe software means you cannot access Adobe’s official stock library or AI generation services. Blocking these verification addresses won’t affect your normal use of Adobe software, but since you don’t have a genuine licensed account, you won’t be able to access features like the stock library, AI generation, or collaborative platforms. I also encourage graphic designers or video editors with genuine needs to purchase a legitimate license. In profitable scenarios, the price of a genuine Adobe license through certain channels is actually reasonable and aligns with legal and ethical standards.
Required Software
First, we need an excellent traffic proxy software. I recommend and require using only Clash, with the project available here. This is a community-maintained version of Clash called Clash-verge-rev. It essentially optimizes the Clash core and provides a user-friendly GUI, making it simple and powerful to use. Please, stop using outdated SSR-related software, and don’t come to me asking about certain VPNs.
Second, we need an Adobe verification tool called Adobe GenP, with the project available here. There are plenty of tutorials online about this tool, so this article won’t go into too much detail on how to use it. In the latest release on April 25, 2025, the author added a bounce-back patch provided by other contributors, which prevents Adobe from displaying the red pop-up warning, “Please stop using unauthorized software.” However, even with this patch, I recommend blocking Adobe’s online verification to prevent Adobe from invalidating the patch too quickly.
Specific Operation Steps
First, you need to use Adobe GenP to apply the crack patch and bounce-back patch to your Adobe software. For detailed instructions, refer to other people’s video tutorials. The bounce-back patch is located in the Pop-up Tools tab under the WinTrust section. We’ll discuss how this feature works in the principles section later. Also, if you’re installing Adobe components via Creative Cloud for the first time, don’t forget to uninstall AGS and disable any Adobe-related processes from auto-starting on boot.
Next, open Clash, go to the “Subscriptions” tab, select the global extension script, right-click to edit the file, and replace its contents with the following code.
function main(config, profileName) {
if (!config || typeof config !== 'object') {
config = {};
}
if (!Array.isArray(config.rules)) {
config.rules = [];
}
config?.rules.unshift(
"DOMAIN-SUFFIX,ic.adobe.io,REJECT-DROP",
"DOMAIN-SUFFIX,cc-api-data.adobe.io,REJECT-DROP",
"DOMAIN-REGEX,^(?i)[a-z0-9]{10}\\.adobe\\.io$,REJECT-DROP",
"DOMAIN-REGEX,^(?i)[a-z0-9]{10}\\.adobestats\\.io$,REJECT-DROP",
"DOMAIN-REGEX,^(?i)[a-z0-9]{8,12}\\.[a-z0-9]{5}\\.adobestats\\.io$,REJECT-DROP"
);
return config;
}
After that, click save, close Clash, and restart it. This completes the blocking of Adobe’s genuine verification.
As of Beijing time on May 12, 2025, this method is still effective. If it becomes ineffective in the future, please contact me, and I will update the code.
Principles for the Curious
Alright, if you’ve made it this far, it means you either don’t trust me or are curious about what this code does. First, this is not malicious code—it’s just a simple regex filtering statement that tells Clash which domains to block. Essentially, modifying DNS redirects Adobe’s verification addresses to a null IP (0.0.0.0
), preventing access and thus blocking verification. Clash, as a traffic proxy tool, has the same functionality.
Let’s break down what this code does. This is JavaScript code, a common backend scripting language.
The first part is the function header, declaring a function called main
that takes two parameters: the config
configuration object and profileName
.
Based on feedback from some users, the author has added two logical statements here. The first, !config
, checks whether the config
parameter is null
, undefined
, or other falsy values. The typeof config !== 'object'
statement verifies whether config
is of the correct object type; if not, it resets it to an empty object ({}
). The second logical statement, Array.isArray(config.rules)
, checks whether config.rules
is an array type (Array
); if not, it assigns the correct value. In short, this code serves as defensive programming, strictly ensuring that errors or program crashes due to missing config
or config.rules
are avoided when users lack a subscription to a proxy provider.
The next part is the implementation. The second line uses the optional chaining operator (.?
) to safely access the config.rules
array and inserts the following new rules at the beginning of the array using the unshift()
method.
Finally, it returns the config
object and closes the function.
The regex expressions need particular explanation.
First, let’s explain the roles of DOMAIN-SUFFIX
(domain suffix matching) and DOMAIN-REGEX
(regular expression matching). The complete syntax is: "match type,<suffix or regex>,<action>"
. The former matches all domains ending with the specified string, while the latter matches all domains that conform to the regex. We noticed that ic.adobe.io
and cc-api-data.adobe.io
are distinct domains with specific characteristics, so we used suffix matching to filter them. However, randomly generated gibberish domains require regex for filtering. There’s also a DOMAIN
match type, but it strictly requires matching the exact address, which is cumbersome and restrictive, so we generally don’t use it.
Next, let’s introduce the regex syntax. The (?i)
flag makes the string case-insensitive. Although Adobe hasn’t gone so far as to use case sensitivity, I included this for future-proofing. [a-z0-9]
indicates a random string containing lowercase letters a-z and digits 0-9, such as a0b1c2d3e4f5g6
. {8,12}
specifies that the string length is between 8 and 12 characters, while {10}
precisely requires a length of 10 characters. The \\.
matches the domain separator .
. This needs clarification: in regex, a backslash escapes special characters, as some characters have specific meanings in assembly language and could cause confusion if used directly. Two backslashes escape the escape, as the backslash itself is a special character in assembly language. Finally, ^
and $
denote exact start and end matching, meaning the regex between these symbols is complete and won’t filter higher-level domains.
Many readers who have their own ideas and have reached this point may realize one thing: this code only filters three types of domains. Yes, that’s correct, because Adobe’s random generation is currently limited to these cases. Note that even these three domain types cover a total of 6210(2+623+624+625+626+627)
combinations. Taking the logarithm, this is roughly on the order of 1033, or a quintillion-level number. By the time Adobe exhausts these random combinations, the universe will probably have undergone heat death, so there’s no need to worry about running out of domains.
Of course, we can’t rule out Adobe going so far as to add new types, such as multi-level domains or special characters. Readers of this article can try writing new domain-filtering regex themselves or wait for my future updates.