第十六章 代码写不出来就尝试白嫖吧
夜晚八点的芝加哥正是街头混混和醉汉们最活跃的时候,远处时不时地传来几句破嗓子的叫骂声和忽远忽近的刺耳警笛。
但这些南区特有的喧囂,似乎都被阻挡在了这间狭窄破旧的出租屋之外。只剩下深秋刺骨的寒风裹挟著枯叶,时不时地拍打著那扇漏风的破木窗户,发出令人牙酸的“嘎吱”声。
屋里没有开主灯。唯一的光源,就是书桌上那台散发著幽蓝光芒的廉价显示器。
杨坚整个人几乎都陷进了那张掉皮的二手办公椅里。屏幕的冷光打在他有些疲惫却异常专注的脸上,映出那双布著几根血丝的黑白分明的眼睛。他手里端著一杯早就凉透的速溶咖啡,机械地抿了一口苦涩的残渣,隨后烦躁地放下马克杯,伸手用力抓了抓有些凌乱的头髮。
在电脑桌的最边缘,鲍里斯给的那二十台成色不错的二手iphone正静静地躺在塑胶袋里,完全被主人无视了。
他並没有急著开工。刚刚到手的六百美金现钞还安安稳稳地揣在夹克內兜里,上个月拖欠的房租已经有了著落,眼下的温饱危机暂时宣告解除。
既然兜里有了这层厚实的现金缓衝垫,那袋子待破解的手机也就从续命的氧气瓶变成了隨时可以提现的定期存款。他完全没必要像个被高利贷逼债的倒霉蛋一样,连夜赶工去换取明天的口粮。
他现在有更充裕的时间和精力,去死磕那个真正能让他在这片资本丛林里撕开一道口子的东西。
杨坚的视线重新聚焦在屏幕上,那里正密密麻麻地滚动著一段让他死活跑不通的 java代码。
他正在全神贯注地尝试復现那个在后世足以让全球网络安全界引发大地震的核弹级漏洞——log4j jndi注入漏洞。
具体的復现思路他脑子里门儿清,但问题就卡在了“构建恶意的 ldap响应服务”这最关键的一环上。
“思路绝对没问题,但特么的这底层的协议怎么就这么难搞……”杨坚盯著屏幕上疯狂报错的终端,无奈地嘆了口气。
在目前的年代,根本没有后世那些一键生成恶意服务端的神器。他必须从零开始,硬搓一个能糊弄过 java虚擬机的微型 ldap伺服器。可无论他怎么修改报文的字节序,目標机器就是死活不加载他的恶意代码,不是报序列化错误,就是直接丟弃请求。
闭门造车了两天,进展不能说是步履维艰,只能说是一动不动。他现在看著屏幕上那些死活不听指挥的底层代码,感觉这玩意儿简直比南区街头最烂的酒鬼还要不可理喻。
杨坚也尝试了上网求助。毕竟在2011年左右,无论是国內还是美国的网际网路,技术论坛的氛围都极其真诚火热。没有割韭菜的付费教程,全是乐於分享的技术大牛。
为了防止被人顺藤摸瓜,他极其谨慎地给这个问题套上了一层偽装,將其包装成了一个“关於遗留老旧系统网络兼容性测试”的纯技术求助帖,发到了诸如 stack overflow早期板块以及几个知名的黑客与开发者 bbs上。
发完帖子后,他就像个等开奖的赌徒,一边啃著隔夜的冷披萨,一边每隔五分钟就狂按一次 f5刷新页面,期待著哪位顶著二次元头像的隱世大牛能从天而降,甩出一段神级代码直接打通他的任督二脉。
然而,现实往往比 bug还要骨感。
论坛里虽然潜伏著无数大神,但並不是每一个帖子都能得到神仙下凡般的指点。杨坚问的这个问题实在太偏门、太底层了——“如何不依赖標准库,使用纯 socket通信手动构造极其非標准的 ldap asn.1响应报文,去迎合 java命名接口(jndi)的底层解析规则”。
这种不仅是在钻牛角尖、甚至看著还有点像在搞破坏的底层黑魔法,发出去犹如石沉大海。好不容易等来几个回復,点开一看,全能让人气得脑充血。
一楼的架构师警察:“楼主你这纯属是陷入经典的 xy问题了。你为什么要这么干?直接 import javax.naming.*用现成的 api调標准库不香吗?奉劝一句,別閒著没事重复造轮子。”
二楼的吃瓜群眾:“这阴间需求看著怎么这么像在写木马或者搞渗透?楼主不会是哪个大学的本科生,在上网络安全课想骗论坛老哥帮你写期末大作业吧?”
三楼和四楼的论坛水军:“纯纯的底层黑魔法,不明觉厉,帮顶。”、“沙发没了,搬个小板凳蹲个大佬解答,先 mark为敬。”
最离谱的是五楼,只留下了极其敷衍的四个字:“关机重启下。”
看著满屏这些让人吐血的回覆,杨坚一口气差点没倒上来。
这种感觉极其憋屈。就像是你手里明明捏著一张能造出歼星舰的图纸,跑去五金店问老板“怎么把这两根引信接起来不短路”,结果老板像看神经病一样看著你,语重心长地劝你“买个一块五的成品双控开关不好吗”。
偏偏他还根本没法跟这帮人解释!他总不能在帖子里大喊“老子在挖一个价值不菲、能让全网瘫痪的零日漏洞”吧?那估计第二天 fbi就会踹开他这间漏风出租屋的破门。
“靠一群水友,黄花菜都凉了。”杨坚揉了揉发胀的太阳穴,果断关掉了满屏废话的瀏览器。
倒霉透顶的杨坚只能把目光投向了线下。
两天后,芝加哥大学计算机系的阶梯教室。
推开大门的那一刻,一股混合著廉价披萨、高浓度功能饮料和电子元件的奇特味道扑面而来。这就是由芝大计算机系牵头举办的一场开放式tech meetup(线下技术沙龙)。
杨坚站在后排,看著这乱糟糟却生机勃勃的现场,心里忍不住生出几分感慨。
他对於当前这个时代的技术现状与开源精神有了一种具象化的理解。这真的是网际网路最后的黄金时代——智慧型手机刚刚普及,大厂的技术垄断和寡头互联的高墙还未筑起。在这里,人们不谈论股票期权,不谈论流量变现,只谈论如何用代码改变世界。
就在这时,一阵激烈的爭论声打断了他的思绪。
不远处的一个圆桌旁,一个留著胡茬、身材高大的丹麦裔青年正挥舞著手臂,用极具煽动性的语气大声批判著 java体系的臃肿:“你们这些学院派就是被 java那些繁文縟节洗脑了!未来属于敏捷开发!ruby on rails才是 web架构的终极形態,它能让你们少写哪怕一万行没用的狗屎代码!”
杨坚挑了挑眉。他一眼就认出了那个年轻气盛的傢伙——大卫·海涅迈尔·汉森(dhh)。
这位不仅是芝加哥本地明星软体公司 37signals(后来的 basecamp)的联合创始人,更是大名鼎鼎的 ruby on rails框架的缔造者。在2011年这个时间节点,他正处於技术声望的最巔峰,是无数开发者眼里的叛逆偶像。
不过,作为一个从后世穿越来的老码农,杨坚看著这位被眾人眾星捧月的大佬,心里只觉得有些好笑。
他在心里默默吐槽了一句:“尽情狂欢吧,dhh大佬。再过个几年,等单体架构被移动网际网路时代的恐怖流量撑爆时,这帮现在把你当神拜的极客们,就会一边疯狂掉头髮,一边连夜把你的代码全拆了,老老实实用 go语言和微服务重构。而且谁能想到,你这个现在的技术潮流引领者,十几年后会变成一个天天在推特上疯狂对线、甚至逆版本而动,扯著嗓子喊要把公司从云端全搬回物理机房的暴躁刺头呢?”
歷史的局限性总是这么奇妙且讽刺。
不过,杨坚对这场註定要被时代翻篇的框架之爭没半点兴趣。他今天可是带著极其明確的目的来的——白嫖这满屋子的高智商大脑。
找个安静的角落一个人死磕?那纯属脑子进水。在南区混了这么久,杨坚早就把脸皮练得比防弹衣还厚。
他走到餐檯前,极其自然地顺了一角免费的冷披萨和一听可乐,一边啃著,一边像个极其圆滑的交际花一样,开始在各个討论圈子边缘游走试探。
听到聊前端 ui和网页设计的,他脚都不停直接略过;听到聊资料库表结构的,他停下听两秒,发现没干货后立刻走人。
终於,在会场偏僻的一角,他锁定了一个由几个髮际线堪忧、穿著格子衬衫的老哥组成的硬核圈子。这帮人正在白板前激烈地討论著企业级 java应用底层的网络通信和分布式目录服务(ldap)。
“来活了。”
杨坚眼睛一亮,毫不客气地凑了过去,站在最外围边喝可乐边旁听。
他没有一上来就傻乎乎地拋出自己的 bug,那样只会被当成伸手党赶出去。他像个耐心的猎手一样潜伏著。当其中一个胖子工程师抱怨 java原生的 naming接口在处理复杂网络环境时太过臃肿死板时,杨坚精准地抓住了时机。
他咽下嘴里的披萨,极其自然地插了一句嘴,用几句后世云原生架构里极其精闢的接口解耦与轻量级通信思维,瞬间把那胖子的话题拔高了两个维度。
这种来自未来十年的降维打击,立刻让圈子里的几个工程师对他刮目相看。几句专业黑话一交锋,大家瞬间默认了这个年轻的亚洲面孔是自己人,原本封闭的小圈子自然而然地给他让出了一个位置。
见火候差不多了,杨坚装作不经意地嘆了口气,拋出了自己准备已久的鱼饵。
“说起底层协议,各位老哥,我最近接了个极其阴间的遗留系统测试活儿,头疼得很。”杨坚皱著眉头,拋出了那个在论坛上无人问津的问题,“你们说,如果完全拋弃標准库,只用纯 socket通信,我该怎么手动构造一段极其非標准的 ldap asn.1响应报文,去强行骗过 java jndi接口的底层校验逻辑?”
此话一出,刚才还聊得热火朝天的小圈子瞬间安静了下来。
几个资深老哥面面相覷。这个问题实在太偏门、太野路子了,简直就像是放著好好的正门不走,非要问“怎么用一根铁丝把金库底下的下水管道给撬开”。
“伙计,你这思路也太……剑走偏锋了。”那个胖子工程师挠了挠快要禿顶的脑袋,表情有些尷尬,“谁没事会去硬搓 asn.1的底层字节序啊?那玩意儿简直不是人看的。你为什么不直接……”
“你陷入思维误区了,年轻人。”
胖子的话还没说完,一个低沉、略带点傲慢的男中音突然在杨坚身后响起,直接打断了这场討论。
杨坚转过头,看到一个穿著得体的粗花呢西装、带著半框眼镜的中年白人男子不知何时站在了这个小圈子的外围。男子的目光越过眾人,直接锁定了杨坚,眼神里透著一种学术权威的从容与锐利。
“你一直在尝试构建一个完整的、符合规范的 ldap目录服务报文去迎合它,”中年男人推了推眼镜,语气里带著一丝智商优越感十足的微笑,“但你的目的如果仅仅是为了让 java客户端通过 jndi下载特定的 reference对象,那你根本不需要遵循完整的 ldap握手协议。”
杨坚愣了一下,脑子里仿佛有一道闪电劈过。
“你的意思是……”
“我的意思是,java的底层 namingmanager极其愚蠢。”男人继续说道,“它在解析 ldap响应时,只认三个核心属性:javaclassname、javafactory和 javacodebase。你只需要写一个最简单的 socket监听埠,直接把包含这三个属性的硬编码字节流强行塞给客户端,根本不用管其他的协议规范,它就会乖乖去下载你的代码。”
一语惊醒梦中人!
杨坚猛地一拍大腿。对啊!他之前一直想用正规的手段去回復请求,却忘了在黑客的逻辑里,只要结果达到了,中间的协议规范完全可以被暴力阉割和偽造!
这老小子的计算机底层知识极其扎实,眼光毒辣得可怕。
“太妙了……非常感谢!”杨坚飞快地在纸上记下思路,转过头真诚地道谢,“您是芝大的教授吗?”
“你可以这么叫我。”中年男人极其享受杨坚这种恍然大悟的崇拜眼神,他伸出手,“我叫赫斯特(professor hearst)。我是专门负责评估……『特殊人才』的。我看你逻辑敏锐又长得年轻帅气,根本不像是那些死读书的本科生。我手里正好有几个非常核心的校外项目,不知道你有没有兴趣跟我去办公室详细聊聊?”
听到“赫斯特”这个名字,杨坚原本准备握手的手在半空中极其细微地停顿了半秒,隨后极其自然地握了上去。
赫斯特教授?
杨坚的脑子里迅速过了一遍《无耻之徒》的原著剧情。那个在第一季里代表教育考试服务中心(ets),把替人代考 sat疯狂作弊的利普当场抓获,不仅没有报警,反而利用利普的把柄,威逼利普这个天才少年成为他私人项目免费劳动力的那个衣冠禽兽老狐狸?!
难怪这老傢伙的计算机和逻辑学知识这么丰富,他在原著里就是个打著惜才的名义,专门在各大高校里发掘並压榨天才的不良导师。
看著赫斯特教授那副看似伯乐、实则要把他生吞活剥的偽善笑容,杨坚心里冷笑了一声。作为一个深諳职场潜规则的老鸟,他太懂这种“上赶著的买卖”背后藏著怎样的陷阱了。
赫斯特现在看中他,只是因为他展现出了一点小聪明。如果他现在两手空空、毫无背景地跟著去了办公室,在绝对的身份和资源压制下,他顶多只能沦为赫斯特手里一个廉价甚至免费的底层牛马。
未来或许可以利用这个老狐狸的资源进行合作,但绝对不是现在。绝对不能是在他还没有任何实质性筹码、没有真正证明自己不可替代性的时候。
“久仰大名,赫斯特教授。您刚才的点拨简直是一针见血。”
杨坚抽出手,脸上掛著极其得体、甚至透著几分职场精英般圆滑的微笑。他並没有急著答应,而是用一种不卑不亢的语气婉拒道:
“您的项目听起来非常诱人。不过实在不巧,我最近手里正接了几个商业客户的底层架构重构项目,正处於赶工交付的阶段。我这人有个原则,既然接了活儿,就不想因为精力分散而砸了自己的招牌,更不想因为状態不好而敷衍了您这么重要的项目。”
赫斯特那双藏在半框眼镜后的眼睛微微眯了起来。他原本以为这个衣著寒酸、在角落里死磕底层逻辑的亚裔年轻人,会像那些渴望得到学术大佬赏识的穷学生一样,对他拋出的橄欖枝感恩戴德。
但他没想到,这小子拒绝得如此丝滑,而且话术老练,话里话外都在暗示“自己是个有客源、有商业价值的工程师”。
“原来如此,那真是太遗憾了。”赫斯特眼里的那种高高在上收敛了几分,多了一丝真正的审视与兴趣。
“不过,我希望能留下您的联繫方式。”杨坚恰到好处地拋出了一个未来的鱼饵,“等我把手头的活儿彻底结清,並且把我刚才构思的这套『非標准底层协议』做成一个完美的成品时,我会亲自去您的办公室拜访。到那时候,我想我们能聊的合作,一定会比现在有趣得多。”
听到这番滴水不漏且充满野心的话,赫斯特终於收起了那副偽善的笑容,嘴角勾起一抹满意的弧度。
“很好。我喜欢清楚自己价值的年轻人。”赫斯特从西装內兜里掏出一张名片,递了过去,“这是我的私人办公室电话。我期待看到你的成品。”
“一定不会让您失望。”
杨坚双手接过名片,看都没看一眼就塞进了口袋里。他冲赫斯特和那几个工程师挥了挥手,隨后在一眾开发者的爭论声中,步伐从容地走出了阶梯教室。
走出大楼,迎面吹来的芝加哥冷风让杨坚的头脑彻底清醒,心情却是一片大好。
这波芝大线下沙龙,来得简直太值了。
不仅白嫖到了最关键的底层技术拼图,打通了卡壳两天的逻辑死结,竟然还顺手搭上了赫斯特这只老狐狸的线。这老登虽然人品不咋样,但作为芝大的资深教授和项目负责人,他手里掌握的学术资源和行业人脉绝对是货真价实的。
杨坚隔著夹克布料,摸了摸口袋里那张名片,眼神变得深邃而冷峻。
现在不合作,是因为自己是个还没上牌桌的无名小卒,只能被当成廉价劳动力。但等他回去把 log4j这个重磅炸弹搓出来,在整个软体安全圈里扬名立万时,合作蛋糕怎么分,可就不能光这老狐狸说了算了。
但这些南区特有的喧囂,似乎都被阻挡在了这间狭窄破旧的出租屋之外。只剩下深秋刺骨的寒风裹挟著枯叶,时不时地拍打著那扇漏风的破木窗户,发出令人牙酸的“嘎吱”声。
屋里没有开主灯。唯一的光源,就是书桌上那台散发著幽蓝光芒的廉价显示器。
杨坚整个人几乎都陷进了那张掉皮的二手办公椅里。屏幕的冷光打在他有些疲惫却异常专注的脸上,映出那双布著几根血丝的黑白分明的眼睛。他手里端著一杯早就凉透的速溶咖啡,机械地抿了一口苦涩的残渣,隨后烦躁地放下马克杯,伸手用力抓了抓有些凌乱的头髮。
在电脑桌的最边缘,鲍里斯给的那二十台成色不错的二手iphone正静静地躺在塑胶袋里,完全被主人无视了。
他並没有急著开工。刚刚到手的六百美金现钞还安安稳稳地揣在夹克內兜里,上个月拖欠的房租已经有了著落,眼下的温饱危机暂时宣告解除。
既然兜里有了这层厚实的现金缓衝垫,那袋子待破解的手机也就从续命的氧气瓶变成了隨时可以提现的定期存款。他完全没必要像个被高利贷逼债的倒霉蛋一样,连夜赶工去换取明天的口粮。
他现在有更充裕的时间和精力,去死磕那个真正能让他在这片资本丛林里撕开一道口子的东西。
杨坚的视线重新聚焦在屏幕上,那里正密密麻麻地滚动著一段让他死活跑不通的 java代码。
他正在全神贯注地尝试復现那个在后世足以让全球网络安全界引发大地震的核弹级漏洞——log4j jndi注入漏洞。
具体的復现思路他脑子里门儿清,但问题就卡在了“构建恶意的 ldap响应服务”这最关键的一环上。
“思路绝对没问题,但特么的这底层的协议怎么就这么难搞……”杨坚盯著屏幕上疯狂报错的终端,无奈地嘆了口气。
在目前的年代,根本没有后世那些一键生成恶意服务端的神器。他必须从零开始,硬搓一个能糊弄过 java虚擬机的微型 ldap伺服器。可无论他怎么修改报文的字节序,目標机器就是死活不加载他的恶意代码,不是报序列化错误,就是直接丟弃请求。
闭门造车了两天,进展不能说是步履维艰,只能说是一动不动。他现在看著屏幕上那些死活不听指挥的底层代码,感觉这玩意儿简直比南区街头最烂的酒鬼还要不可理喻。
杨坚也尝试了上网求助。毕竟在2011年左右,无论是国內还是美国的网际网路,技术论坛的氛围都极其真诚火热。没有割韭菜的付费教程,全是乐於分享的技术大牛。
为了防止被人顺藤摸瓜,他极其谨慎地给这个问题套上了一层偽装,將其包装成了一个“关於遗留老旧系统网络兼容性测试”的纯技术求助帖,发到了诸如 stack overflow早期板块以及几个知名的黑客与开发者 bbs上。
发完帖子后,他就像个等开奖的赌徒,一边啃著隔夜的冷披萨,一边每隔五分钟就狂按一次 f5刷新页面,期待著哪位顶著二次元头像的隱世大牛能从天而降,甩出一段神级代码直接打通他的任督二脉。
然而,现实往往比 bug还要骨感。
论坛里虽然潜伏著无数大神,但並不是每一个帖子都能得到神仙下凡般的指点。杨坚问的这个问题实在太偏门、太底层了——“如何不依赖標准库,使用纯 socket通信手动构造极其非標准的 ldap asn.1响应报文,去迎合 java命名接口(jndi)的底层解析规则”。
这种不仅是在钻牛角尖、甚至看著还有点像在搞破坏的底层黑魔法,发出去犹如石沉大海。好不容易等来几个回復,点开一看,全能让人气得脑充血。
一楼的架构师警察:“楼主你这纯属是陷入经典的 xy问题了。你为什么要这么干?直接 import javax.naming.*用现成的 api调標准库不香吗?奉劝一句,別閒著没事重复造轮子。”
二楼的吃瓜群眾:“这阴间需求看著怎么这么像在写木马或者搞渗透?楼主不会是哪个大学的本科生,在上网络安全课想骗论坛老哥帮你写期末大作业吧?”
三楼和四楼的论坛水军:“纯纯的底层黑魔法,不明觉厉,帮顶。”、“沙发没了,搬个小板凳蹲个大佬解答,先 mark为敬。”
最离谱的是五楼,只留下了极其敷衍的四个字:“关机重启下。”
看著满屏这些让人吐血的回覆,杨坚一口气差点没倒上来。
这种感觉极其憋屈。就像是你手里明明捏著一张能造出歼星舰的图纸,跑去五金店问老板“怎么把这两根引信接起来不短路”,结果老板像看神经病一样看著你,语重心长地劝你“买个一块五的成品双控开关不好吗”。
偏偏他还根本没法跟这帮人解释!他总不能在帖子里大喊“老子在挖一个价值不菲、能让全网瘫痪的零日漏洞”吧?那估计第二天 fbi就会踹开他这间漏风出租屋的破门。
“靠一群水友,黄花菜都凉了。”杨坚揉了揉发胀的太阳穴,果断关掉了满屏废话的瀏览器。
倒霉透顶的杨坚只能把目光投向了线下。
两天后,芝加哥大学计算机系的阶梯教室。
推开大门的那一刻,一股混合著廉价披萨、高浓度功能饮料和电子元件的奇特味道扑面而来。这就是由芝大计算机系牵头举办的一场开放式tech meetup(线下技术沙龙)。
杨坚站在后排,看著这乱糟糟却生机勃勃的现场,心里忍不住生出几分感慨。
他对於当前这个时代的技术现状与开源精神有了一种具象化的理解。这真的是网际网路最后的黄金时代——智慧型手机刚刚普及,大厂的技术垄断和寡头互联的高墙还未筑起。在这里,人们不谈论股票期权,不谈论流量变现,只谈论如何用代码改变世界。
就在这时,一阵激烈的爭论声打断了他的思绪。
不远处的一个圆桌旁,一个留著胡茬、身材高大的丹麦裔青年正挥舞著手臂,用极具煽动性的语气大声批判著 java体系的臃肿:“你们这些学院派就是被 java那些繁文縟节洗脑了!未来属于敏捷开发!ruby on rails才是 web架构的终极形態,它能让你们少写哪怕一万行没用的狗屎代码!”
杨坚挑了挑眉。他一眼就认出了那个年轻气盛的傢伙——大卫·海涅迈尔·汉森(dhh)。
这位不仅是芝加哥本地明星软体公司 37signals(后来的 basecamp)的联合创始人,更是大名鼎鼎的 ruby on rails框架的缔造者。在2011年这个时间节点,他正处於技术声望的最巔峰,是无数开发者眼里的叛逆偶像。
不过,作为一个从后世穿越来的老码农,杨坚看著这位被眾人眾星捧月的大佬,心里只觉得有些好笑。
他在心里默默吐槽了一句:“尽情狂欢吧,dhh大佬。再过个几年,等单体架构被移动网际网路时代的恐怖流量撑爆时,这帮现在把你当神拜的极客们,就会一边疯狂掉头髮,一边连夜把你的代码全拆了,老老实实用 go语言和微服务重构。而且谁能想到,你这个现在的技术潮流引领者,十几年后会变成一个天天在推特上疯狂对线、甚至逆版本而动,扯著嗓子喊要把公司从云端全搬回物理机房的暴躁刺头呢?”
歷史的局限性总是这么奇妙且讽刺。
不过,杨坚对这场註定要被时代翻篇的框架之爭没半点兴趣。他今天可是带著极其明確的目的来的——白嫖这满屋子的高智商大脑。
找个安静的角落一个人死磕?那纯属脑子进水。在南区混了这么久,杨坚早就把脸皮练得比防弹衣还厚。
他走到餐檯前,极其自然地顺了一角免费的冷披萨和一听可乐,一边啃著,一边像个极其圆滑的交际花一样,开始在各个討论圈子边缘游走试探。
听到聊前端 ui和网页设计的,他脚都不停直接略过;听到聊资料库表结构的,他停下听两秒,发现没干货后立刻走人。
终於,在会场偏僻的一角,他锁定了一个由几个髮际线堪忧、穿著格子衬衫的老哥组成的硬核圈子。这帮人正在白板前激烈地討论著企业级 java应用底层的网络通信和分布式目录服务(ldap)。
“来活了。”
杨坚眼睛一亮,毫不客气地凑了过去,站在最外围边喝可乐边旁听。
他没有一上来就傻乎乎地拋出自己的 bug,那样只会被当成伸手党赶出去。他像个耐心的猎手一样潜伏著。当其中一个胖子工程师抱怨 java原生的 naming接口在处理复杂网络环境时太过臃肿死板时,杨坚精准地抓住了时机。
他咽下嘴里的披萨,极其自然地插了一句嘴,用几句后世云原生架构里极其精闢的接口解耦与轻量级通信思维,瞬间把那胖子的话题拔高了两个维度。
这种来自未来十年的降维打击,立刻让圈子里的几个工程师对他刮目相看。几句专业黑话一交锋,大家瞬间默认了这个年轻的亚洲面孔是自己人,原本封闭的小圈子自然而然地给他让出了一个位置。
见火候差不多了,杨坚装作不经意地嘆了口气,拋出了自己准备已久的鱼饵。
“说起底层协议,各位老哥,我最近接了个极其阴间的遗留系统测试活儿,头疼得很。”杨坚皱著眉头,拋出了那个在论坛上无人问津的问题,“你们说,如果完全拋弃標准库,只用纯 socket通信,我该怎么手动构造一段极其非標准的 ldap asn.1响应报文,去强行骗过 java jndi接口的底层校验逻辑?”
此话一出,刚才还聊得热火朝天的小圈子瞬间安静了下来。
几个资深老哥面面相覷。这个问题实在太偏门、太野路子了,简直就像是放著好好的正门不走,非要问“怎么用一根铁丝把金库底下的下水管道给撬开”。
“伙计,你这思路也太……剑走偏锋了。”那个胖子工程师挠了挠快要禿顶的脑袋,表情有些尷尬,“谁没事会去硬搓 asn.1的底层字节序啊?那玩意儿简直不是人看的。你为什么不直接……”
“你陷入思维误区了,年轻人。”
胖子的话还没说完,一个低沉、略带点傲慢的男中音突然在杨坚身后响起,直接打断了这场討论。
杨坚转过头,看到一个穿著得体的粗花呢西装、带著半框眼镜的中年白人男子不知何时站在了这个小圈子的外围。男子的目光越过眾人,直接锁定了杨坚,眼神里透著一种学术权威的从容与锐利。
“你一直在尝试构建一个完整的、符合规范的 ldap目录服务报文去迎合它,”中年男人推了推眼镜,语气里带著一丝智商优越感十足的微笑,“但你的目的如果仅仅是为了让 java客户端通过 jndi下载特定的 reference对象,那你根本不需要遵循完整的 ldap握手协议。”
杨坚愣了一下,脑子里仿佛有一道闪电劈过。
“你的意思是……”
“我的意思是,java的底层 namingmanager极其愚蠢。”男人继续说道,“它在解析 ldap响应时,只认三个核心属性:javaclassname、javafactory和 javacodebase。你只需要写一个最简单的 socket监听埠,直接把包含这三个属性的硬编码字节流强行塞给客户端,根本不用管其他的协议规范,它就会乖乖去下载你的代码。”
一语惊醒梦中人!
杨坚猛地一拍大腿。对啊!他之前一直想用正规的手段去回復请求,却忘了在黑客的逻辑里,只要结果达到了,中间的协议规范完全可以被暴力阉割和偽造!
这老小子的计算机底层知识极其扎实,眼光毒辣得可怕。
“太妙了……非常感谢!”杨坚飞快地在纸上记下思路,转过头真诚地道谢,“您是芝大的教授吗?”
“你可以这么叫我。”中年男人极其享受杨坚这种恍然大悟的崇拜眼神,他伸出手,“我叫赫斯特(professor hearst)。我是专门负责评估……『特殊人才』的。我看你逻辑敏锐又长得年轻帅气,根本不像是那些死读书的本科生。我手里正好有几个非常核心的校外项目,不知道你有没有兴趣跟我去办公室详细聊聊?”
听到“赫斯特”这个名字,杨坚原本准备握手的手在半空中极其细微地停顿了半秒,隨后极其自然地握了上去。
赫斯特教授?
杨坚的脑子里迅速过了一遍《无耻之徒》的原著剧情。那个在第一季里代表教育考试服务中心(ets),把替人代考 sat疯狂作弊的利普当场抓获,不仅没有报警,反而利用利普的把柄,威逼利普这个天才少年成为他私人项目免费劳动力的那个衣冠禽兽老狐狸?!
难怪这老傢伙的计算机和逻辑学知识这么丰富,他在原著里就是个打著惜才的名义,专门在各大高校里发掘並压榨天才的不良导师。
看著赫斯特教授那副看似伯乐、实则要把他生吞活剥的偽善笑容,杨坚心里冷笑了一声。作为一个深諳职场潜规则的老鸟,他太懂这种“上赶著的买卖”背后藏著怎样的陷阱了。
赫斯特现在看中他,只是因为他展现出了一点小聪明。如果他现在两手空空、毫无背景地跟著去了办公室,在绝对的身份和资源压制下,他顶多只能沦为赫斯特手里一个廉价甚至免费的底层牛马。
未来或许可以利用这个老狐狸的资源进行合作,但绝对不是现在。绝对不能是在他还没有任何实质性筹码、没有真正证明自己不可替代性的时候。
“久仰大名,赫斯特教授。您刚才的点拨简直是一针见血。”
杨坚抽出手,脸上掛著极其得体、甚至透著几分职场精英般圆滑的微笑。他並没有急著答应,而是用一种不卑不亢的语气婉拒道:
“您的项目听起来非常诱人。不过实在不巧,我最近手里正接了几个商业客户的底层架构重构项目,正处於赶工交付的阶段。我这人有个原则,既然接了活儿,就不想因为精力分散而砸了自己的招牌,更不想因为状態不好而敷衍了您这么重要的项目。”
赫斯特那双藏在半框眼镜后的眼睛微微眯了起来。他原本以为这个衣著寒酸、在角落里死磕底层逻辑的亚裔年轻人,会像那些渴望得到学术大佬赏识的穷学生一样,对他拋出的橄欖枝感恩戴德。
但他没想到,这小子拒绝得如此丝滑,而且话术老练,话里话外都在暗示“自己是个有客源、有商业价值的工程师”。
“原来如此,那真是太遗憾了。”赫斯特眼里的那种高高在上收敛了几分,多了一丝真正的审视与兴趣。
“不过,我希望能留下您的联繫方式。”杨坚恰到好处地拋出了一个未来的鱼饵,“等我把手头的活儿彻底结清,並且把我刚才构思的这套『非標准底层协议』做成一个完美的成品时,我会亲自去您的办公室拜访。到那时候,我想我们能聊的合作,一定会比现在有趣得多。”
听到这番滴水不漏且充满野心的话,赫斯特终於收起了那副偽善的笑容,嘴角勾起一抹满意的弧度。
“很好。我喜欢清楚自己价值的年轻人。”赫斯特从西装內兜里掏出一张名片,递了过去,“这是我的私人办公室电话。我期待看到你的成品。”
“一定不会让您失望。”
杨坚双手接过名片,看都没看一眼就塞进了口袋里。他冲赫斯特和那几个工程师挥了挥手,隨后在一眾开发者的爭论声中,步伐从容地走出了阶梯教室。
走出大楼,迎面吹来的芝加哥冷风让杨坚的头脑彻底清醒,心情却是一片大好。
这波芝大线下沙龙,来得简直太值了。
不仅白嫖到了最关键的底层技术拼图,打通了卡壳两天的逻辑死结,竟然还顺手搭上了赫斯特这只老狐狸的线。这老登虽然人品不咋样,但作为芝大的资深教授和项目负责人,他手里掌握的学术资源和行业人脉绝对是货真价实的。
杨坚隔著夹克布料,摸了摸口袋里那张名片,眼神变得深邃而冷峻。
现在不合作,是因为自己是个还没上牌桌的无名小卒,只能被当成廉价劳动力。但等他回去把 log4j这个重磅炸弹搓出来,在整个软体安全圈里扬名立万时,合作蛋糕怎么分,可就不能光这老狐狸说了算了。