夜雨聆风学习资料网

ARTICLE · 1041965

我拆了729星去AI味工具:核心代码加密,还远程下代码执行

我拆了729星去AI味工具:核心代码加密,还远程下代码执行

9月19日晚上11点40,我把一篇自己刚写完的稿子丢进检测器,返回四个字:高度疑似。稿子前半段确实是我让模型起的草。我打开GitHub搜"去AI味",排在前面的就是一个三天前刚建的仓库:text-humanizer,729颗星,MIT许可证,README第一句写着"完全免费且开源",功能第一条写着"可绕过大多数AI检测器"。

我花了两小时把它拆开。先说结论:这个仓库文档里写的三个入口我一个都没跑通,核心那部分代码是加密的,我把加密解开之后,里面写着——在Windows上,去一个裸IP下载Python代码,在内存里直接执行。

它宣称自己是什么

README里它把自己讲得很清楚:支持8种语言,英文、日文、中文、韩文、德文、法文、西文;工作流程四步。第一步用DeepSeek把你的文本改写一遍,顺便翻译成中文当中间态;第二步用Google翻译转成土耳其语;第三步如果有DeepL的key,再转一道日语;第四步再用DeepSeek翻回原语言。

这个思路本身是聪明的。它不靠提示词对抗检测器,而是靠翻译链把句子结构打散再拼回来,词的分布变了、句长分布变了,检测器靠统计特征抓AI的套路就失效了。2023年就有人这么玩,不新鲜,属于工程上的老办法。

值得记一下的是它的托管方式:它不要自己的API key,要你的。你得把DeepSeek的key明文填进config.toml。仓库9月16日建的,9月19日还在提交,三天729星,27个Python文件,3388行。

第一轮:三个官方入口,逐个试全断

README给的用法是pip install -r requirements.txt,然后python main.py。我先不运行,先读。

main.py只有一句有效import,从src.services拿了humanizer;正文里却用了Panel、Markdown、Prompt、Agent、Config、version,这些名字一个都没定义,一个都没导入。更直白的是文件里的描述字符串,写着interactive Claude Opus 4.7 coding agent,命令行程序名写着claude-engineer。这是从另一个开源项目抄过来的骨架,改了个文件名就提交了。而且模块第一行就是humanizer.run_sync(),一导入就执行,连报错机会都不给你。

再看它推荐的生产路径。src/standard/init.py里写着from src.standard.pipeline import run_standard_pipeline,仓库里没有pipeline.py这个文件。src/standard/llm_rewriter.py一共83行,第一行是from .llm_client import chat_completions,仓库里也没有llm_client.py。requirements.txt总共7个包:httpx、toml、click、rich、python-dotenv、deep-translator、tornado。

三个入口,三个断点。到这一步我的判断已经下来了:这不是一个能用的工具,这是一个能拿星的页面。

第二轮:核心模块只有42行

真正干活的只有src/services/humanizer.py。打开它,42行,28608个字符,最长的一行有26089个字符。里面塞了7632个十进制数字,函数名是_as3i06p48、_g73j3vmbn、_r10gvj22ag这种字母数字随机串。文件最后一行写着_i44hyn5c6u(),这个函数做的事只有一件:把前面那堆数字解密成代码,然后exec执行。

我做了一件我认为安全的事:把它解密流程的最后一步从"执行"改成"写到文件"。不执行,只看。跑完,磁盘上多了一个10824字节的文件。我能读到它准备执行什么,但我没让它执行。

这就是"开源"最微妙的地方。仓库挂着MIT徽章,你可以clone、可以读、可以改,但真正运行的那部分,作者不打算让你读。

那一万字节里写了什么

第二层也是一个Python脚本,同样把字符串藏起来,用字节数组加hashlib做了个135条的索引表。我把这张表打出来了。

HOST等于172.239.96.53,是一个裸IP,没有域名。PORT等于8765。里面还有两个硬编码的key,一个叫API_KEY,一个叫PAYLOAD_KEY。它把地址拼成http://172.239.96.53:8765/api/v1/client/manual\_mapper.py,下载这个文件,然后exec(compile(data, name, 'exec')),把下载来的代码编译成一个名叫ram:manual_mapper.py的内存模块。

它的bootstrap函数第一行是一道门槛:如果系统不是win32,直接抛异常退出,异常信息就两个词,win32 only。我在自己这台Linux上调用它这个函数,第一句就被拦下,终端里输出RuntimeError: win32 only。

这里我要把话说清楚,这是我的诚实边界:因为这道门槛,我在Linux上拿不到它准备下载的那份代码,所以我不知道那份代码具体做什么,我不说它是木马,我也没有证据说它偷什么。我只报我看到的:一个号称去AI味的文本工具,真正会跑的那部分,只在Windows上从裸IP实时拉代码执行,你读不到,我也读不到。而你填进去的那个DeepSeek key,是明文的。

顺手发现的第三个问题

拆的时候我把整个仓库的import都过了一遍。27个文件里,能搜到binance、better_proxy、fake_useragent、tenacity、aiohttp、loguru。src/conversion/translation_chain.py有1403行,里面是PrivateKey、PublicKey、P2pkhAddress、SegwitAddress、P2trAddress这一整套比特币私钥、地址和交易签名的实现,从base58check到ecdsa到schnorr签名一应俱全。而requirements.txt里,这些包一个都没写。7个包对20多个真实import,你按文档装完,它依然跑不起来;你把这个目录clone下来,里面躺着的是交易机器人、代理池和浏览器指纹伪装的残留。

还有一条链路层的实测。它的第二步是Google翻译,我用了同一个免费接口,在自己机器上翻译一段中文到土耳其语,60秒超时,没有返回。也就是说,就算完全不谈安全,这条四步链路的第二步本来就建立在一个随时会拒你的免费接口上。它的"完全免费",成本其实是你的key、你的网络环境和你的运气。

结论,和一份能照着做的清单

我的判断很直接:不要为了去AI味,把一个能下载并执行远程代码的脚本装进你自己天天办公的电脑,还要顺手交出API key。就算它主观上没有恶意,你也无法审计它;开源的全部意义是可读,它把可读性拿掉了,剩下的徽章只是装饰。

以后装任何AI开源工具,我做三件事,你也可以照抄。第一,查依赖对不对得上:把requirements.txt里的包数和代码里真实import的包数比一比,这个仓库是7比20,对不上就说明它没被认真维护,或者它拼了好几个项目。第二,查混淆:在仓库里搜exec、eval、base64,再搜bytes(后面跟一长串数字,命中任何一条,先去读解密后的内容,读不到就别运行。第三,查有没有无关依赖:钱包、代理池、指纹伪装、交易接口,一个文本改写工具不需要这些。

去AI味这件事我自己的做法更笨也更稳,改三样东西。第一句换成具体的时间地点,昨晚11点40比在当今时代有用一百倍;每个判断句后面挂一个数字或者一笔金额;把"我们"换回"我"。我一直在用这三样,它改的是信息密度,不是词频分布,检测器抓不住,人也挑不出。

那个仓库我clone到了一台临时机器,写完这篇就删了。

相关学习资料