Skip to content

Latest commit

 

History

History
216 lines (158 loc) · 20.4 KB

easter-eggs.md

File metadata and controls

216 lines (158 loc) · 20.4 KB

彩蛋集:淘米源码里的工程师遗留物

本文是在 上海淘米(Taomee)2007–2013 年网页 Flash 页游服务端真源码 里挖到的"工程师遗留物"合集——脏话命名、TODO/HACK、署名足迹、明文凭据、搞笑命名、业务吐槽、GM 后门、ASCII 艺术与传说注释。 所有引用均为逐字原文(GBK 乱码已用 iconv -f gbk 还原),路径相对仓库根,行号经 grep/Read 实证。回总入口见 ../README.md;协议全景见 ./protocol.md;各模块「实际干啥」见 ./deep/ 与 ./modules/。


🏆 名场面 Top 10

从八大主题里私心精选,每条:逐字原文 + 可点击源码链接 + 一句点评。

1. 把"版本号校验"命令字正经命名成 fuck

#define gf_fuck_version_check_cmd           (0x0604 )

gf/db/ser/src/proto.h:38 · 不是注释,是真·标识符,声明(Croute_func.h:773)、注册、实现三连贯穿,整条调用链都带着这个名字跑在生产环境。工程师对客户端版本校验的怨气直接焊进了协议号。

2. 紧挨着的"卖道具"命令叫 bitch

#define gf_bitch_sell_items_cmd             (0x0605 )

gf/db/ser/src/proto.h:40 · fuck 完 version check 接着 bitch 卖东西,连号 0x0604/0x0605 的"骂街二连",堪称协议表里的名场面。

3. team_id 字段后面连发三个"靠"

uint32_t  team_id;//靠靠靠

gf/gongfu_online/player.hpp:758 · 功夫派组队系统,一个普通字段后挂"靠靠靠"。多半是被组队逻辑折磨惨了,边写边骂。

4. 全公司万能 DB 口令:ta0mee

EXEC_MYSQL="mysql -uroot -pta0mee --skip-column-names -A"

common-tools/linux/anticheat/trunk/query_ill/ref2/show_records_range:17 · taomee 的 leet 写法,root 账号 + 这把口令在仓库里出现 460+ 次,是淘米所有游戏 DB 的"万能钥匙"。(凭据已死,见下方免责声明)

5. 客户端↔在线服 DES 主密钥 >ta:mee<

#define DES_KEY ">ta:mee<"

mole/online/proto.h:15 · 摩尔庄园 Flash 客户端与在线服报文加密的核心,8 字节,"" 的变形。功夫派 cache 服 GS_KEY 完全同款,印证全公司共用一套 session DES 体系。

6. 唯一一条外网真实邮箱口令(键盘对角线乱打)

mail.SetPassword("[口令已隐去]");   // 原文是一串键盘对角线乱打的明文

common-tools/win/netstat-checker/code/SendMailDlg.cpp:87 · 网络诊断小工具把某真实外网邮箱的登录口令明文写进 MFC 源码(L86 SetLogin / L87 SetPassword)用于自动发诊断邮件,是全部泄漏里"外网真实账号+口令"的孤例。出于责任本文隐去邮箱与口令——它仍是"别把外网凭据写死在源码里"的最佳反面教材。

7. 工程师诚实自曝:"其实我也不知道这文件格式"

//skip file header (actually, I don't know the file format of index.dat)

common-tools/win/netstat-checker/code/Dustman.cpp:167 · 清 IE 缓存的工具硬编码"跳过前 64 字节",并坦白"其实我也不知道 index.dat 的格式"。逆向靠猜 + 自曝家丑的诚实瞬间。

8. 服务器一崩,群发短信给 4 个真实手机号

`/home/kal/send_short_message/sendsms 150****1951,159****4486,137****1357,136****6625 "$core_file_cnt mole online core! @msg_arr"`;

common-tools/linux/tools/core_detect/findcore_mole.pl:125 · 运维 kal 的脚本:摩尔在线服一崩,core 文件检测脚本就群发短信报警。脚本里有 4 个真实手机号,其中两个在多游戏脚本里反复出现(八成是当班 leader)。出于隐私本文把手机号打码——源码里是完整号码,这正说明当年报警直连个人手机的"人肉 on-call"。

9. 身份谜团:署名 jim,括号里却是 (xcwen)

 *         Author:  jim (xcwen), jim@taomee.com

mole2/mole2_db/src/Citem_handbook.h:13 · 出现 300 次。配合同一功能 .h 署 xcwen、.cpp 署 jim 的证据,强烈暗示 jim 与 xcwen 是同一人——xcwen 是全仓最高频作者(322 次),还用私人 Gmail xcwenn@gmail.com,公司栏直接写 NULL。

10. fortune 语录:Torvalds 把它搞砸了 :-)

 * Wirzenius wrote this portably, Torvalds fucked it up :-)

c/library/newbench/trunk/src/test/demo/res/linux.txt:7931 · 网络库 demo 资源里塞了个 fortune 语录文件,收录了 Linux 内核那句著名自嘲,被当 demo 数据顺手打包进源码树,多个 tag 版本都有同一份。


😤 吐槽情绪 / 脏话

这套服务端代码整体相当"职业",硬核脏话稀少;真正有人味的命中高度集中。

原文 出处 点评
int gf_fuck_version_check(DEAL_FUN_ARG); Croute_func.h:773 脏话名做成正式成员函数声明,白纸黑字进头文件
FILL_CMD_WITHOUT_PRI_IN (gf_fuck_version_check), Croute_func.cpp:55 注册进命令分发表,生产环境真在跑这个名字
struct gf_bitch_sell_items_in_header{ proto.h:1440 连配套请求结构体都叫 gf_bitch_...,脏话渗透到数据结构层
// //莫名其妙的设定 angel_fight/matcher.cpp:147 把"等级超 25 压到 25"整段注释掉并标"莫名其妙的设定",对策划需求的无声抗议
//del empty box whatever other_active.cpp:190 删空盒子甩一个"whatever",一副"管它呢删了完事"的摆烂
* @brief 由于历史原因 ... 一些动物是不能养殖的 Cuser_farm_animal.cpp:284 经典甩锅句式"由于历史原因",这锅是祖传的
/*! god guard */ battle_svr/player.hpp:1599 一串 "god" 字段/关卡,GM 无敌测试模式的痕迹,自嘲式命名成"上帝"
* 后面更改协议时要慎重 dbsvr/include/proto.h:3141 给后人的告诫:别乱动协议。能写下"慎重",通常意味着前面有人乱动过

随源码一起 shipped 的程序员情绪资源文件,还有《大话设计模式》戏说文——用"曹操反复改诗"比喻"客户反复改需求"——被当测试数据存进了 design_pattern.txt:32,是 2007 年中国程序员对甲方改需求的血泪共鸣。


🔧 TODO / HACK / 警告后人

原文 出处 点评
if (p_in ->attireid == 1351056) {//因为配表错误...商城积分放到了装扮表中 Croute_func.cpp:2366 配错懒得改表,代码里写死魔数 ID 绕过去
/*QA(singku) 这个地方可能导致BUG 先注释掉 pea/online/dbproxy.cpp:200 署名+"可能导致BUG"+"先注释掉",三连典型遗留
/* TODO(zog): 为方便用 1,2 这些小号测试, 暂时注释掉 */ seat.cpp:103 zog 为拿小号测试把 NPC 校验 #if 0 掉,署名+动机俱全,最有人味
//15%概率掉落3色琥珀,活动结束后该代码注释掉 battle_svr/player.cpp:3649 活动期写死的爆率,留了句"活动后注释掉"——但代码还在
// 千万要记得加x权限 itl-node/src/node.cpp:472 部署陷阱:生成脚本忘了 chmod +x 就跑不起来,"千万"提醒后人
//今天不能删除 mole2_db/src/db_error.h:212 只写了"今天不能删除",没说明天能不能,半句话留无限遐想
/* 注意: == 对于浮点数不可使用, 这里无论如何也不能用 >= */ anticheat.c:534 反作弊里浮点比较的血泪经验,"无论如何也不能用 >=",显然踩过坑
/* BUG! TODO: send warning */ comm/channel.c:209 标了"BUG!"却只留 TODO 没发告警,连续三处同款
// 你可能注意到...不过我们只要1个,这没有问题 bt_beastai.cpp:1107 难得的对话体注释,预判读者疑惑并安抚"这没有问题",像在跟未来的你聊天

👣 开发者足迹(姓名 / 邮箱 / 开发机路径)

全仓署名头注极密集(Author: 去重 50+ 种)。下面挑最能拼出团队画像的精华。

原文 出处 点评
Author: xcwen (xcwen), xcwenn@gmail.com / Company: NULL boke/db/src/proto.h:13 全仓最高频作者(322 次),用私人 Gmail,公司栏写 NULL,草台味十足
Author: henry (韩林), henry@taomee.com mmtree-1.0.0/mmtree.cpp:13 henry=韩林,基础库红黑树作者,基础设施层主力
Author: Jerryshao (邵赛赛), jerryshao@taomee.com mempool/mempool.cpp:13 小怪兽内存池作者,此人后来是知名大数据/Spark 工程师,含金量高
Author: spark (spark), zhezhide@163.com mole/register/inc/global.h:13 163 邮箱 zhezhide(疑似"这是谁的"谐音梗)写了摩尔注册服
CMAKE_HOME_DIRECTORY:INTERNAL=/home/ian/advert_fliter/src CMakeCache.txt:321 整个 CMake 构建缓存被打包泄漏,工程师 ian 的主目录暴露无遗
* Modify $Author: smyang $ pea/dbserver/proto.hpp:8 SVN $Author$ 关键字把没写头注的文件真实提交者也供了出来
** Copyright 2004 Coon Xu. mole/dbsvr/logser/sql/a.c:20 摩尔(2008 立项)日志服里塞了份 2004 年的 MySQL demo,比公司还老的考古地层

🔑 明文凭据(历史 · 已死)

⚠️ 重要免责声明 ⚠️ 以下全部是上海淘米 2007–2013 年的历史内网凭据 / 写死密钥,对应的服务器、数据库、邮箱系统 早已于 2013 年前后停服、不复存在;且这些内容 本就存在于公开泄漏的源码中。此处收录 仅作技术考古与安全教育,请勿用于任何实际系统的登录、解密或任何用途。它们对今天的任何在用系统都不是有效凭据。

原文 出处 点评
EXEC_MYSQL="mysql -uroot -pta0mee ..." show_records_range:17 万能口令 ta0mee,仓库出现 460+ 次,跨游戏复用
db_pass monster@24 monster/.../db_server.conf:34 小怪兽自成一派:口令=游戏名+机器尾号,暴露命名套路
$pwd ="xcwen142857\n"; findcore_db_user_jim.pl:35 "姓名+走马灯数 142857"的个人 SSH 口令,人味十足
#define DES_KEY ">ta:mee<" mole/online/proto.h:15 摩尔在线服 DES 主密钥,复活项目硬依赖
LOGIN_DES_KEY "!tA:mEv," Libtaomee-0.7.5.tar.gz → libtaomee/project/constants.h:38 框架级登录票据主 key,影响所有游戏登录(在打包的 tar.gz 内,行号实证)
const char VigWorker::sc_key[] = "<!Tv?3^/"; id_counter.cpp:39 图形验证码 ID 的 DES 密钥,一把 key 守整套验证码
mail.SetPassword("[已隐去]"); SendMailDlg.cpp:87 唯一一条外网真实邮箱口令(键盘对角线乱打)——出于责任已隐去口令与完整邮箱
sshpass -p "[已隐去]" ... gongfupai@27.131.221.xxx cptokaixin.sh:4 明文密码+关掉 host key 校验+公网 IP,一行集齐运维红线(口令/IP 已部分打码)
#password=...md5(md5("11111"))... pea/tools/client/test.py:59 不止凭据,还泄漏登录口令加密契约:双重 MD5

无意泄漏的"案发现场快照":一个误提交的 coredump mole/dbsvr/ser/sql/core 里,strings 可读出当时运维者整份 SSH 会话环境变量(跳板机 IP、DB 主机、家目录、正在敲的 mysql 命令行)。


😄 搞笑命名与测试数据

原文 出处 点评
buff_id="520" ... name="增加暴击99%" buff.xml:386 520(我爱你)给"暴击+99%";另有 1314(一生一世)给"眩晕",策划的浪漫私货
//囧蘑菇种子 Cuser_jy.cpp:147 道具直接叫"囧蘑菇",2010 年前后"囧"字梗的活化石
assert(!"impossible error! player not in map"); gongfu_online/cli_proto.cpp:424 · pea/online/cli_proto.cpp:109 用 assert(!"字符串") 当文案,"不可能的错误"——直到它真的发生,两游戏抄了同一句
//母猪仔怀孕 dbsvr/include/proto.h:1867 "猪倌系统"协议号一本正经写"公母配对/怀孕/逗乐乐",养猪模拟的严肃感本身就好笑
void boot_log(int ok, int dummy, ...) 4moledoudou/log.cpp:286 重点在 SVN 分支名 4moledoudou(for 摩尔豆豆),底层库按业务线开分支
#define TEST_NAME_51MOLE "test_51mole" netstat-checker/config.h:35 测试账号 test_ 前缀拼游戏代号,对应官网 51mole.com / 51seer.com
sprintf(p_msg,"亲爱的主人,我已从你的餐厅中打工回来..."); street.c:886 宠物拉姆打工归来的撒娇文案,硬编码进 C 源码,简繁两版成对出现

敏感词库 tm_dirty.dat(作者 Ian)连"蛋疼[噗]"这种带颜文字尾巴的网络梗都收录,还专门屏蔽"客服""官方认证""GM""私服",暴露运营最怕的是"冒充官方行骗"而非单纯骂人。


🏢 业务与公司文化梗

原文 出处 点评
//策划安给的分数计算方式过于简单...都是一样的算法:w tetris.cpp:508 吐槽策划公式太弱智,几个分支全写成同一算法糊弄,末尾还带 vim 手滑误存的 :w
/* TODO(zog): 匹配值到处都是, 但策划说不存在匹配值 ??? */ room_proto.cpp:472 代码到处是匹配值,策划口头说"不存在",程序员一脸问号写进 TODO
/// ------- (乐翻翻) vip充值活动下架需要注释 ------- vip_impl.cpp:218 运营活动下架要靠程序员手动注释代码,运营节奏直接焊死在源码里
<Task id="1007" name="寻找偷懒的徒弟" ...> tasks.xml:909 任务名直接叫"寻找偷懒的徒弟",策划的自嘲式幽默(也可能是工位写照)
/* 分为三个等级:【绝世美味】、【休闲食品】、【危险品!】*/ chris_cake.c:110 做蛋糕活动三档评价,最低档直接叫"危险品!",策划文案的黑色幽默
垃圾游戏 8 1 dirtyFilter/dat/c.t:426 把"垃圾游戏"这句玩家差评列入过滤词,自家产品被骂要被系统屏蔽,意外自黑

🕹️ GM · 作弊 · 调试开关

本仓的"GM 后门"主要不是单点彩蛋,而是一整套独立的 SU(Super User / 超级管理员 / 客服平台)协议族——客服后台可凭这套协议给任意玩家加装扮、改昵称、改任务、发邮件、加管理员。这是合法的运营/客服系统,但从今天看就是教科书级的"上帝接口"。

原文 出处 点评
//超级管理员 + SU_LOGIN_CMD (0xA001) dbsvr/include/proto.h:2303 SU=Super User,摩尔有一整套 0xA00x 段"超级管理员"协议
#define SU_USER_ADD_ATTIRE_CMD (0x3294 ...) dbsvr/include/proto.h:3166 客服可给任意玩家发任意时装,等于一个刷物品接口
下面是2011年08月15日独立出来的客服协议...一个函数绑定到了两个协议号 dbsvr/include/proto.h:3138 罕见的"时间戳级"开发日志:把客服平台从游戏业务拆出来
if ((p->session->remote_ip & 0x0000FFFF) != 0xA8C0 ... main_login/proto.cpp:120 外网客户端被强制改 user_ip,内网(公司内部)放行可自带任意 IP——内网调试机可伪造来源 IP
/*0-正常...4-使用外挂*/ gf_db.h:685 封号原因枚举,暴露当年客服处理的几大投诉类型(含"索要个人隐私")
if (ip =="10.1.1.46") then ... elseif (ip =="10.1.1.134") batrserv/conf/config.lua:9 战斗服按机器内网 IP 写死分支选不同配置,开发机 IP 硬编码在 lua 里

🎨 ASCII 艺术 · 版本号 · 传说注释

原文 出处 点评
static const char version[] __initdata = "3g.1.1.0"; serverbench/.../main.c:15 版本前缀写死 "3g"(第三代框架),__initdata 段标记从 Linux 内核抄来,装得很像内核模块
const char *version_str="\033[1m\033[41mVERSION:2010-03-03\033[0m"; deluser_svr/version.h:25 用 ANSI 转义码让版本号在终端"加粗红底"高亮,纯粹的终端审美彩蛋
pagesize_init (); // ??? / tsc_init (); // ??? serverbench/.../main.c:62 连框架作者自己都不确定这两步在干嘛,诚实到可爱
// 此处乃声明,实际实现在data.cpp中 reload/reload.cpp:8 给一个 extern 配上文言味的"此处乃声明",工程师的小恶趣味
... // because php 5.2.2 to 5.2.5 is totally fucked up again sphinxapi.php:240 随 Sphinx 带进来的原作者怨念,带脏话带"again"双重暴击,全仓最直白
"http://www.51seer.com/dll/TaomeeLibraryDLL.swf" 51Seer.cpp:37 "51seer"=赛尔号早期域名(今 seer.61.com),网页 Flash 时代的活化石 URL
早期口口相传的 baseline 有两处错 ../README.md:23 仓库自己的考古札记:承认早期"口口相传"的目录对照表有错,本身就是一段民间考据传说

考古小结

从这些彩蛋拼出的,是一支 2007–2013 年高速狂奔的页游团队:技术上颇有追求(自研网络框架学 Linux 内核写法、自建反作弊/红黑树/内存池基础库),却被无休止的运营活动和反复横跳的策划需求拖着边写边骂——脏话焊进协议号、活动爆率写死等"以后删"、客服"上帝接口"越长越大。安全意识则停留在那个年代:ta0mee 一把口令打天下、SSH 密码用"姓名+幸运数字"、coredump 误提交泄漏内网拓扑。但字里行间也满是人味:对后人"千万要记得"的血泪叮嘱、对自己代码"看起来很奇怪"的诚实自嘲、给宠物撒娇文案和"危险品!"蛋糕评价里的童趣。技术债与赤诚并存,正是那一代中国互联网工程师的真实底片。