第十六章 代码写不出来就尝试白嫖吧(1/2)
夜晚八点的芝加哥正是街头混混和醉汉们最活跃的时候,远处时不时地传来几句破嗓子的叫骂声和忽远忽近的刺耳警笛。
但这些南区特有的喧囂,似乎都被阻挡在了这间狭窄破旧的出租屋之外。只剩下深秋刺骨的寒风裹挟著枯叶,时不时地拍打著那扇漏风的破木窗户,发出令人牙酸的“嘎吱”声。
屋里没有开主灯。唯一的光源,就是书桌上那台散发著幽蓝光芒的廉价显示器。
杨坚整个人几乎都陷进了那张掉皮的二手办公椅里。屏幕的冷光打在他有些疲惫却异常专注的脸上,映出那双布著几根血丝的黑白分明的眼睛。他手里端著一杯早就凉透的速溶咖啡,机械地抿了一口苦涩的残渣,隨后烦躁地放下马克杯,伸手用力抓了抓有些凌乱的头髮。
在电脑桌的最边缘,鲍里斯给的那二十台成色不错的二手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)。
本章未完,点击下一页继续阅读。