前幾天相信大家一定被谷歌的官方小程序「猜畫小歌」刷爆了各大平臺吧。在猜畫小歌風(fēng)靡全國的時候,不管是大V們還是吃瓜群眾也都去籌熱鬧個個都變成了靈魂畫手。
這一切也自然要歸功于 Google AI 的神經(jīng)網(wǎng)絡(luò)驅(qū)動,大家在20秒內(nèi)作畫的寥寥幾筆,其實背后已經(jīng)被該網(wǎng)絡(luò)源拿去對比自身超過5000萬個手繪素描的數(shù)據(jù)群,并迅速猜出答案。
猜畫小歌在互聯(lián)網(wǎng)上幾乎是病毒式的傳播,以至于大家也在討論谷歌是否要回歸。當(dāng)然谷歌是否近期要回歸國內(nèi),我可以用 Craig Federighi 今年蘋果發(fā)布會式的回答回答你們,"NO"!
也有人推測說猜畫小歌的推出也只是為了讓國內(nèi)用戶幫助谷歌訓(xùn)練 AI,其實我們這寥寥幾筆跟谷歌自身已有的數(shù)據(jù)來說,真的算不上什么。何況各個神手沒有誤導(dǎo) AI 已經(jīng)很不錯了。看這個小程序的官方介紹,旨在讓用戶了解和體驗人工智能的樂趣或許這才是它的真正忠旨。
猜畫小哥想說:我一不打廣告,二不拉贊助,只是想安靜地做個美男子,讓你們體驗一把人工智能的樂趣,哪來那么多的陰謀論。
欸,打住一下,你上面說的這些,好像我都聽人說過了,能不能說點我不知道的?那行吧,看來同行們對此的報道力度真的很大,你們也知道得挺多的了,那我就再隨便溜點大家沒怎么報道過的消息。
其實看小程序背后,上線后很多頁面如好友對戰(zhàn),打賞頁面等不完整,而且還存在不少bug, 甚至剛上線不久就被別人反編譯,發(fā)現(xiàn)函數(shù)命名什么的也是混亂,在正常項目里代碼審核里根本無法通過。
甚至有消息稱,被反編譯的代碼壓根就是一個后端工程師一個人寫前端代碼寫出來的,因為時間太趕,沒法在意那么多細(xì)節(jié)。或許這也可以稱為一個 side project。
一個程序發(fā)布后被反編譯的情況數(shù)不勝數(shù),更何況是谷歌官方小程序。而且負(fù)責(zé)這個項目的人知道有人會去反編譯,可能因為時間緊迫,壓根都沒采取任何措施。
那么,我今天就來說說反編譯是怎么一回事。事物都是相對的,有正必有反,我們要說反編譯,自然要先了解什么是編譯。
1.什么是編譯?
舉個栗子,各國人民之間交流有不同的語言,自然程序員跟計算機談戀愛也需要用編程語言來與計算機交流。
如有的用世界上好的語言 php 跟計算機交流的,也有閑人生苦短寫 python 跟計算機嘮嗑的,還有習(xí)慣性每次說話總是特別啰嗦庸長,用 Java blah blah 地跟計算機說個不停的。因此程序界跟現(xiàn)實生活一樣也有不同的語言。
如果各國人民突然相聚在一起,交流出現(xiàn)問題,就需要翻譯官的幫忙。而計算機也只懂得讀0和1,所以不管程序員用什么語言,總需要將自己所寫的代碼翻譯成0和1,好讓計算機明白自己再說些什么。而讓計算機明白自己寫的語言的意思的過程,就是編譯。如下圖所示:
2. 什么是反編譯?
故事繼續(xù),你給電腦寫的情書「源代碼」,你自然不愿意第三者看到。但這個世界上總有那么一群人愛窺探別人的隱私,于是乎他們發(fā)明了一種技術(shù),除非你壓根不跟電腦交流,不寫任何代碼,不然他們就有手段可以把你給電腦說的一切東西推測出來,這就叫做反編譯。
像C跟C++這種比較接近系統(tǒng)底層的語言是直接被編譯成一堆0和1,反編譯C或者C++多數(shù)情況下也多只是被反編譯成匯編語言。而匯編語言本來就晦澀難懂,不然大家都搶著寫匯編去了。C跟C++是硬茬不好惹,所以大家轉(zhuǎn)向了更容易欺負(fù)的以java為首的一些代表。
Java推出時主打的口號是: code once, run everywhere.其原理無非也是把 Java 程序跑在虛擬機里。所以Java 編譯的過程中并不是編譯成機器語言,而是編譯成.java 的文件,虛擬機能讀懂這文件的意思,再跟計算機直接交流。所以有了.java 這個文件,反編譯推出源碼也顯得相對容易。
微信的小程序無非也是個網(wǎng)頁程序(in-app web),要想反編譯小程序相對來說也更為簡單。
3. 如何避免反編譯
常用的辦法就是代碼混淆,這樣做其實只是讓反編譯后閱讀源代碼的難度增大。再舉個栗子就是就是你把你寫給電腦看到情書字寫丑一點,別人反編譯出來看到特別丑的字,就讀著特別難受。
然后還有種辦法就是加密數(shù)據(jù),用加密算法加密程序配置文件也好,或者加密程序間傳球的數(shù)據(jù),亦或者用第三方軟件加密軟件使之更難破解,其終目的就是讓破解的人無法獲得源代碼。
就算你道高一尺獲得了源代碼,除了混淆代碼,我還可以在軟件中加入無效代碼,或者混淆程序邏輯結(jié)構(gòu),讓你就算得到了源代碼,也讀得你難受。
所以說,要想完完全全地防止軟件被反編譯不可能。這就好像春運搶票一樣,就算政府管制力度再大,除非壓根沒人買票,不然總有一堆人在到處叫賣:票子要伐?
嗯,故事就說到這了,碼字不容易,趕緊去畫幾幅畫放松一下。
本站文章版權(quán)歸原作者及原出處所有 。內(nèi)容為作者個人觀點, 并不代表本站贊同其觀點和對其真實性負(fù)責(zé),本站只提供參考并不構(gòu)成任何投資及應(yīng)用建議。本站是一個個人學(xué)習(xí)交流的平臺,網(wǎng)站上部分文章為轉(zhuǎn)載,并不用于任何商業(yè)目的,我們已經(jīng)盡可能的對作者和來源進行了通告,但是能力有限或疏忽,造成漏登,請及時聯(lián)系我們,我們將根據(jù)著作權(quán)人的要求,立即更正或者刪除有關(guān)內(nèi)容。本站擁有對此聲明的最終解釋權(quán)。