第九章 我叫蟬思動
從鼎龍大廈20層的落地玻璃牆看出去,中官村的繁華一覽無遺。
五年前,張至誠隔窗眺望時,心裡是一覽眾山小的成就感,現在他感覺到的卻是懸崖邊的陣陣寒風。
已經到開發尾聲的app是他這輩子最大的賭博,這個叫「夢真魔鏡」的app可以用手機體驗虛擬試衣。虛擬試衣並不是新鮮玩意,市面上也有了手機虛擬試衣的app,「夢真魔鏡」不一樣。它不僅可以讓人自拍後跟服裝、鞋帽和皮包之類的裝飾品實時合成,還可以把手機當成3d掃描儀現場掃東西。
沒錯,把手機變成手持3d掃描儀才是「夢真魔鏡」的本質,只是軟硬體技術都還不夠成熟,只能用來玩,所以才把用途定位在虛擬試衣上。
即便如此,「夢真魔鏡」的商業價值也足以震動整個行業,之前幾次小規模的技術演示,已經讓十幾家投資公司追上門來開盤口,都是幾千萬的規模。
張至誠都拒絕了,他缺錢,為了這個app,他已經把公司所有的利潤,連帶他的老本全壓了上去。可他對「夢真魔鏡」有百分之二百的信心,投資公司丟下幾千萬就想拿走公司的大把股份,他真答應了,以後會後悔得要死。
現在他真有些後悔了,自己不該拒絕得那麼乾脆。
在app進入測試階段時,張至誠發現自己忽略了一個巨大的威脅:反編譯,也就是破解。
「夢真魔鏡」的核心價值是代碼,而現在的安卓app,反編譯不要太簡單,畢竟是開源體系。蘋果的難一些,但對高手來說,只要肯下工夫,也沒有破解不了的。
張至誠一直在國外留學,五年前帶著技術回國創業,業務跟手機沒關係,對國內的版權問題沒什麼深刻認識。現在他才明白,「夢真魔鏡」的代碼如果得不到有效保護,一旦上市,不到一個月,同樣的app就能遍地開花,而他對這些強盜毫無辦法。上法院?拖你個兩三年,就算討回了公道,強盜已經吃飽洗白,統治了市場。
這段時間張至誠所有精力都放在反破解上,不指望別人永遠破解不了,只要把難度提升到高手也要花相當長時間就夠了。他估算過,只要三個月內不被破解,「夢真魔鏡」就能圈完市場。
張至誠是編程高手,他把自己當作未來的潛在破解者,尋求各種反破解手段。然而不管是公司里的技術骨幹,還是他相熟的其他高手,交出來的東西,在他手上都熬不了兩天。
收拾心神,張至誠一條條刪著郵箱里的垃圾郵件,暗嘆自己真是病急亂投醫,居然跑到同城網站去發招聘信息,結果收了一堆廣告。
正刪得手酸,一條主題明顯不同的郵件進入他的視線。
「重點是so庫保護嗎?我可以試試。」
點開郵件,正文只有一個qq號。
應該是個科班出身的碼農吧,寫郵件就跟寫代碼似的。
張至誠想了想,上qq把這個「蟬思動」加了好友。
他已經不抱什麼希望,就像他在微軟、蘋果和ibm的朋友說的那樣,要讓別人三個月內破解不了,至少得下半年工夫,現在他已經沒有半年時間了。能做的只有在市場推廣上動作快點,搶在破解前圈到儘可能多的地盤。
不過跟人聊聊,說不定會有新思路。
【說下你的大概方向吧,是加殼、二次打包還是指紋校驗?】
張至誠發去信息,一般的安卓app都是java寫的,雖然有混淆、加殼、數字簽名、二次打包等保護方法,但java本身就很容易逆向,所以反編譯沒什麼難度。
「夢真魔鏡」和大多數手游一樣,java只是寫界面,底層是c/c++寫的,核心代碼放到so庫里,可以提升運行效率,也方便保護。so庫文件就相當於windows的dll文件,保護住它就保護住了核心代碼。
目前so庫保護也就加殼、二次打包這些方法,大家都已經熟悉了,高手破解起來也不是太難。
【都不是,可以給個程序先試試,具體報酬是多少?試過後能先付一半嗎?】
「蟬思動」的回復讓張至誠想右上角,so庫保護就這些路子了,你還能憑空變一個出來?還問多少錢,五毛你要不要?
【一周內我反編譯不了,就給你十萬!】
他咬著牙回復,再找了個app的源代碼發過去。
「剛學編程的吧,不知道天高地厚……」
張至誠搖頭苦笑,他想起當初自己剛留學那會,也是自負得不行,結果在一幫巨巨面前落得灰頭土臉。面對這種後輩,他還是有耐心教教對方什麼叫現實。
【好,三天後回你。】
這次張至誠利索地右上角了,三天就能搞定?以為是寫「helloworld」啊?
這只是一個小插曲,忙起來就忘了。到第三天打開qq,「蟬思動」發來一個文件,張至誠才記起有這麼回事,可他正忙,沒理會。中午約了一個高人,是國內一家互聯網巨頭的技術總監,安全方面造詣很深,他得準備資料。
到了中午,張至誠正要關電腦,記起這事,把文件收了下來。是之前他給那個「蟬思動」的app,已經重新打了包。算算還有半個小時,抱著「告訴那傢伙現實有多殘酷」的心思,他開始反編譯這個app。
先上dex2jar和jd-gui這樣的反編譯工具,這是小白都會用的,如果連這一關都過不了,中午自己就有了新的談資。
嗯,果然有點門道,一般工具對付不了,不過看起來像是加了外殼,難道是殼中套殼?
張至誠的興趣上來了,這一步搞不定,就從內存入手。就算是so庫加殼,都是在內存中調用,分析內存就能脫殼。
把內存工具把數據抓出來,看著一串串的字元,他愣住了,內存的狀態不太對啊,數據為什麼會是這個樣子的?這完全不認識啊!
這一刻,張至誠彷彿回到了大學時代,第一次上linux課的時候,老師在念:「這是bss段、data段、rodata段、text段」,而他對著計算機滿屏的八位數乾瞪眼。
半小時后,張至誠在內存數據上依舊找不到符合linux的特徵,他不知道該怎麼形容自己的內心感受,大概離崩潰不遠了吧。
我了個草!難道你是做了個新的虛擬機,把app丟虛擬機里了!?
打個比方,他原本想要的是一個保險箱,收到的卻是一個次元袋……
安卓的核心是linux,可如果有人用一種誰都不認識的語言,寫了一個可以在安卓運行的虛擬機,再在虛擬機里運行app,這讓人怎麼破解?
虛擬機把數據在硬體上運行的特徵都改了,要破解app,還得先破解虛擬機。虛擬機是一般人能寫得出來的?就算是在軟硬體底層有相當造詣的高手,也得湊一群,花大把時間才搞得定。而破解一種語言和方法完全陌生的虛擬機,難度比破解ps4還要大。要知道全球所有的頂尖黑客都在破解ps4,花了兩年時間才有進展。
「張總,黃總來了,張總?張……」
秘書推門進來的時候,看到張至誠就一直保持著兩眼發直,盯著電腦屏幕的姿勢。秘書又敲門又叫人的,就是沒反應。
跟在後面的人制止了秘書下一步更激烈的喚醒行動,走到張至誠背後,看到底是什麼東西。
然後,就沒有然後了,黃總很快就跟張總一樣兩眼發直地盯著屏幕,簡直比看絕世美女還要專註。秘書無語,悄悄退了出去。
「像是用虛擬機的核心層,堆棧模式都是新的,甚至內存映射也不認識。」
「是啊,內存頁的管理也看不出脈絡,比jvm細緻得多。喲,黃總!你來了啊!哎呀,看得太入迷了不好意思!」
「一樣一樣,不是腰痛我還不想動呢。」
「您看……如果這個是層殼,能破解嗎?」
「沒有破解不了的軟體,關鍵是看時間。這個嘛,差不多是要原始人化驗牛奶里有沒有蛋白精吧。」
對高級碼農來說,屏幕上的內存數據形態,就像是一塊新大陸,生機盎然,不管是風景,還是植物和動物,都是從未見過的,新鮮而奇妙。
許久之後,兩人才戀戀不捨地將視線拔了出來,黃總問:「這是張總哪位朋友,不,哪位前輩的大作?這水平,只有矽谷那幫巨巨才玩得來吧。」
張至誠轉了轉眼珠子,含糊地道:「呃……是啊,我不是正頭痛加密的事嗎?找導師幫忙聯繫人,拿到了這東西。具體是哪位還不清,說不定是指導弟子輩寫來玩的。」
黃總眼裡放光,腆著臉說:「發給我,我好好研究下。」
張至誠合上筆記本,連連擺手:「先吃飯!先吃飯!」
飯桌上張至誠再沒談過這個程序,匆匆送走人。黃總走的時候臉臭如翔,他也不在乎了,這東西豈能泄露出去?
回到辦公室,他給「蟬思動」發信息。
【我們得當面談談,您在哪?我現在就過去。】
【現在?破解了嗎?沒的話,不是定了一周的期限?】
「蟬思動」的回話讓張至誠一張老臉頓時紅了,不管是撬什麼保險箱,總能估出大概的時間,而這個次元袋,完全是念不對咒語就打不開啊!
【您就別寒磣我了,真的需要見您一面,順便帶錢給您。】
張至誠一邊敲字一邊感慨,人外有人,自己才真的是被現實教育了。還好對方該是急著用錢,直接談錢就能見到人。雖然太俗,他也顧不得自己的形象了。
【也好,這會不忙,我在燕大……】
張至誠暗道果然,真是名校里的高人。
【燕大人工智慧研究所,校區最裡面,沒路標,得問保安。】
「計算機系嗎?說不定咱們認識呢,劉教授……」張至誠正敲到這,看到「人工智慧研究所」,抽了口涼氣,嗦嗦嗦地用space鍵消掉,重新用力地敲下三個字。
【馬上到!】
「小王,準備好……二十萬,不!三十萬!等我給你發賬戶信息。」
他交代了秘書,匆匆下樓,「人工智慧研究所」這個名字就一直在腦子裡轉悠。
「這是路遇神仙啊……」
張至誠覺得自己真的是個幸運兒,在最關鍵的時候,居然會有搞前沿研究的學術神仙出面幫忙。
鼎龍大廈在中官村中心,燕大在西北,就兩三公里地。
「我是夏鳴,蟬思動就是我。」
半個小時后,聽這個看起來大學還沒畢業的小夥子這麼說,張至誠下意識地再看看掛在小樓大門邊的牌子,上面的確寫著「燕山大學人工智慧研究所」幾個字。
他有種強烈的不現實感,小心地再問:「真的是你?」