編者按:iOS / Android 訓練營將於7月27日、7月28日在北京新雲南皇冠假日酒店舉行。為了做到不坑爹,無水貨,本次大會主要針對iOS和Android的一線技術和開發人員。在大會開幕之前的這段時間,我們將採訪一些重頭的講師和神秘的開發者們,提前劇透一些精彩內容。本期我們專訪的嘉賓是友盟iOS Team Leader 張超。
講師簡介:張超,iOS創業者,2009年在深圳第一次創業,主要從事iPhone應用的開發,完成了從技術到產品設計以及團隊運營管理等全流程角色的轉換,積累了豐富的iOS創業經驗,熟稔App Store的規則及流程,了解開發者的需求,並掌握了創業項目的全程運作能力。目前在國內移動網際網路統計分析平臺——友盟,擔任iOS Team Leader。是創新工場和友盟的早期團隊成員。
議題簡介:在App Store中經常會出現各種令人耳目一新的App,他們是如何實現那些效果的?他們又是使用哪些公共組件來完成自己的功能的呢?在本次演講中將對如何探索那些封藏在IPA文件內部的實現進行簡單的分析,將會針對其中的一些工具進行具體的演示和介紹。
圖:友盟iOS Team Leader 張超
編輯:為什麼會想到為大家講這樣一個比較灰色的話題?
張超:就想讓大家有一個方法,告訴大家怎麼去看去探尋那些他們不知道的東西是怎麼實現。有些其實不是秘密的秘密,只是很多人不知道而已,所以借這麼一個機會,與大家交流一下這些方法。其實大部分的軟體和應用的技術含量並不高,很多開發者的整體思想都差不多。而說到一個APP的成功,並不是說技術非得有多牛,而是說整體的運營,整體的設計,整體的產品,開發者如何去掌控這些。
編輯:這次你講的,通過靜態分析工具了解IPA實現,它大概是逆向到一個什麼樣的級別了,這個逆向合法嗎?
張超:逆向本身是看你什麼目的,就說這個工具本身的出現,或者說它的使用,比如說經常說的一句話,雙刃劍,那你拿這個劍去殺人還是去救人,都是一念之間的事,所以這個東西看你怎麼去用。
業界做逆向最有名軟體,就是IDA Pro,這軟體相信大家之前其實已經有所耳聞了。為什麼呢?因為我記得有一次360出事了,就是有些人把360的App逆向了。那些在網上流傳的截圖就是用IDA做的。所以其實這個東西很多人都知道,只是說看他怎麼去用。我這次演講不會介紹你用IDA Pro。而是會介紹另外一些東西。可能這些小工具的發展就沒有那麼久遠,他們是近一兩年之內的新軟體,因此也沒有逆向的那麼徹底。彙編的內容肯定有,但彙編對一般人來說,不是那麼可讀。這些工具做的一件比較好的事情就是它可以把那些彙編的符號表給連起來,這樣就可以去反編譯出來C級的原碼。雖然這源碼不能直接用,但是你可以去了解,去窺探。它類似編解碼,可讀性也更強一點。對比IDA Pro來說,可以讓大家比較簡單的去了解這個過程。這個講座並不會深入到彙編級別,弄成彙編基礎知識培訓班。
編輯:通過靜態分析工具了解IPA實現,還有其他的意義嗎?
張超:還有另外一個目的,因為對於很多的IOS程式設計師來說,他做到一定的程度時就做到一個瓶頸,一個門檻。這個瓶頸是怎麼造成的?答案就是程式設計師的視野。一個App做完了,很少會作大規模的重構。
Twitter的iOS客戶端後來有過一兩版的重構,我們覺得還是能夠看出來效率的提高。我們做SDK,我們這個東西要跑到別人的程式裡邊,它的穩定性、安全性方面都要考慮,這需要我們反覆打磨。因為實際上,這個SDK沒有什麼難度,但是很多設計實現上的一些細節需要深入考量。
另外一方面,在接口設計上,一般人也不去考慮,他因為不需要給別人用。我們內部會做很多逆向的一個原因,就是去學習別人的接口是怎麼設計的。這個東西是不會有特別多的資料的,除了逆向這條路以外,也沒有更多的東西去走。所以我們看一些SDK,看一下是怎麼樣的過程,它怎麼設計的,這對我們的內部設計也是非常有好處。
編輯:通過做SDK、做逆向編譯,你或許窺探過許多程序的內部。你覺得現在的iOS移動開發者應該在哪方面加強呢?
張超:如果說你是特別好的程式設計師,那你該去做單元測試,去考慮接口的設計。有一句話,我覺得印象比較深刻:如果你這個程序沒法寫好單元測試,那意味著你這個東西需要重構了。因為你的接口設計可能只是實現一個功能,全都返回值可能都是空,這樣的你根本沒有去做單元測試。這是同樣的道理,你要去考慮一下對外的良好性,或者你自己的一個模塊化的設計。如果說你真的想好好搞好程序,自己打磨是可以的。如果自己的功力還不夠,那你只能說通過一些這種灰色通道去看一下別人的代碼。
編輯:那回到逆向工程的話題,你們為哪些App做了逆向工程?
張超:每天幾乎都在做逆向工程。有些人去集成了我們的SDK,他說有問題,他這個問題可能說新舊版之間API的變化,或者他使用上有些問題。那我們這個怎麼去判定呢?肯定是需要通過逆向的方法來檢查,因為我們拿不到他更多的信息。我不能說:你把原碼發來,我給你看一下。當然以前曾經很早期的合作夥伴是有過這樣的情況。我幫他改原碼,這樣的情況也是有的。但現在都是很多大公司開發的應用,不可能把那些應用的原始碼發過來。那我們只能通過這種方式來排查問題。看他是在哪集成、在哪調用,我可以看他的工程師是否符合我們的文檔描述,大部分的錯誤其實都是由於產品的新舊版更替,或一些API的變化導致的問題。所以在講這個主題的時候,我會去從幾個角度去分析這個事情,不會講一個特別具體的Case,我是會講一般的過程。想聽更多的內容,請到我們的iOS / Android 訓練營大會上來吧。我將為你帶來更多實現的細節和開發經驗。
立即報名>>
本文為CSDN原創文章,未經允許不得轉載。如需轉載請聯繫market@csdn.net。
責任編輯:張寧