自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

來,教你如何破解一個 iOS APP

安全 移動安全 移動開發(fā)
開發(fā)者的日常是用一段段代碼寫出一個個軟件,實現(xiàn)各種功能。他們的日常則是把一個個完整的軟件逆推,還原成一段段代碼。他們,就是傳說中的“逆向工程師”。

今天給大家來一個硬知識科普。

黑客中有一類人,注定跟程序開發(fā)者是“死對頭”,是宿敵。

來,教你如何破解一個 iOS APP

他們總跟開發(fā)者對著干:

開發(fā)者的日常是用一段段代碼寫出一個個軟件,實現(xiàn)各種功能。

他們的日常則是把一個個完整的軟件逆推,還原成一段段代碼。

他們,就是傳說中的“逆向工程師”。

假如讓你鑰匙撬開一把鎖,你或許感到無從下手,但如果這把鎖的外殼完全透明的,內(nèi)部結(jié)構(gòu)清晰可見,你便會覺得容易了許多。

在賽博世界里,逆向工程就有這種看穿一個物體的本領(lǐng)。

來,教你如何破解一個 iOS APP

給他們一個手機(jī)APP、電腦程序,用不了多久,就能逆推出程序的運(yùn)行邏輯,找到里頭的關(guān)鍵代碼,篡改、破解、發(fā)現(xiàn)漏洞。

人們把這種技術(shù)叫做“逆向工程”。我們在網(wǎng)上看到的各種破解軟件,多半都跟逆向工程有關(guān)。

然鵝,

逆向的江湖有正亦有邪。

正義的逆向者只是做安全研究,而那些邪惡的逆向者卻拿著這項技能四處干壞事牟利。

比如盜版軟件。開發(fā)者們累死累活才寫好的程序,分分鐘就被人逆向破解,植入廣告和木馬,重新打包成盜版。拼多多變成拼夕夕,一款軟件多出好幾十個遠(yuǎn)方表親。 

來,教你如何破解一個 iOS APP

(網(wǎng)曝各種山寨的彩票軟件)

再比如有朋友總搶不到群紅包,懷疑有人用了外掛,其實所謂的“搶紅包外掛”就是有人逆向破解了微信APP,在里頭添加了自動領(lǐng)紅包的代碼。 

來,教你如何破解一個 iOS APP

(網(wǎng)上流傳的破解軟件)

對于那些跟錢打交道的金融類APP,逆向破解更是噩夢,一旦APP被逆向,就很容易面臨巨額損失。

最近我撩到一位逆向技術(shù)大牛,聊了聊手機(jī)APP的破解與反破解,今天與諸位淺友分享一下。

話說,這位大牛有點奇特,雖然他是個逆向技術(shù)高手,卻不去破解別人的手機(jī)應(yīng)用。相反,他的日常是帶著團(tuán)隊專門幫 iOS 應(yīng)用開發(fā)者做反破解。

來,大家認(rèn)識一下這位新朋友,他就是通付盾的研發(fā)副總裁、 iOS 加固項目的總負(fù)責(zé)人,華保健。

[[245842]]

此人灰常厲害,他是中科大的計算機(jī)學(xué)博士,做了幾十年信息安全、系統(tǒng)滲透等方面的工作,2015年前后還在微軟主導(dǎo)過 Office 365 和 必應(yīng)搜索(Bing)的研發(fā)項目,前兩年加入通付盾,負(fù)責(zé)技術(shù)研發(fā)。

話說華博士一心做技術(shù),人比較靦腆,所以我沒能拿到他的1080P高清無碼近照,只能從他的微信頭像里扣下一張AV畫質(zhì)的照片。關(guān)于他的技術(shù)故事,我相信非常精彩,不過來日方長,回頭再寫。

今天繼續(xù)聊破解和反破解。

1、破解一個APP的標(biāo)準(zhǔn)大路

華保健告訴我,要破解一個蘋果手機(jī)的APP,其實有一些標(biāo)準(zhǔn)套路。

第一步是脫殼。

所謂“殼”,就是原有的軟件代碼上再外包一層“殼代碼”。機(jī)器運(yùn)行程序時,先運(yùn)行殼代碼,這樣可以保護(hù)應(yīng)用的代碼邏輯不容易暴露。

蘋果商店會給每個上架的 iOS APP 都加一層殼。

“不過,這層自帶的殼并沒什么實質(zhì)性作用。”

華保健說,由于蘋果商店給全世界幾百萬個 APP 都用的同一種加殼方法,因此全世界的逆向工程師、黑客們都盯著它,老早就做出了針對這種殼的脫殼工具,開源在網(wǎng)上供免費(fèi)下載,總之,蘋果自帶的殼分分鐘就能脫掉。

脫殼之后,第二步是反編譯。

到這一步,幺哥必須給大家先普及一個有趣的計算機(jī)知識。

各位同學(xué)請看,下圖中的兩個人是早期的程序員,他們正在檢查代碼:

[[245843]]

也不知道是誰出的主意,早期的計算機(jī)代碼就這么直接用打孔的方式記錄在長長的紙帶上。打孔代表0,沒打孔代表1,對應(yīng)著電子元件的開閉狀態(tài),以此控制機(jī)器運(yùn)行。

這種原始的代碼記錄方式叫“機(jī)器碼”,是一種二進(jìn)制編碼。

[[245844]]

相信你已經(jīng)發(fā)現(xiàn),這種代碼記錄方式用起來非常麻煩。

據(jù)說,當(dāng)時要編寫一個程序,光是打孔就得幾天幾夜,還容易出錯,程序員們不僅每天都在打孔、改錯,還得記住一堆 0101010 這樣長長的代碼。

后來有人發(fā)明了一種匯編語言,這才開始用英文字符來替代一串串的二進(jìn)制字符。

從此,像1000100111011000 這樣的代碼就可以用“mov ax,bx”這樣的一串字母來替代,它的意思是“把b寄存器(一種機(jī)器元件)里的數(shù)據(jù)挪到a寄存器”。

來,教你如何破解一個 iOS APP

再后來,程序越來越復(fù)雜,匯編語言也不夠用,更高級的語言就誕生了。比如 C、C++、Java、Python、PHP、Rust、Nodejs 等等……

從此,程序員圈子里便有了“誰才是世界上最好的編程語言之爭”……

來,教你如何破解一個 iOS APP

所以,當(dāng)今程序世界里的規(guī)則是這樣的:

程序員們先用高級語言寫好程序代碼,編譯器把它們編譯成機(jī)器能讀懂的機(jī)器碼用來執(zhí)行。

逆向工程師的工作恰恰相反,他們直接從機(jī)器里抓取機(jī)器碼,然后反匯編成匯編語言,再反編譯成高級語言。

來,教你如何破解一個 iOS APP

到這里,恭喜你已經(jīng)學(xué)會了反編譯的原理,現(xiàn)在我們繼續(xù)破解iOS應(yīng)用。

“反編譯工具網(wǎng)上有很多,但大體上方法分為兩類:靜態(tài)分析和動態(tài)調(diào)試。”

華保健說,所謂“靜態(tài)分析”就是在程序不運(yùn)行的狀態(tài)直接反編譯,把它從二進(jìn)制的機(jī)器碼轉(zhuǎn)化成十六進(jìn)制的編碼、再到匯編代碼,再到人類能直接理解的語言,一路轉(zhuǎn)化。

在這個過程中,如果對方?jīng)]有做任何防護(hù)措施,你就能直接找到并改掉里頭的關(guān)鍵信息,比如版權(quán)信息、游戲數(shù)值等等,單挑 BOSS 怒刷裝備。 

來,教你如何破解一個 iOS APP

(十六進(jìn)制查看程序是這樣子,圖源自網(wǎng)絡(luò))

華保健告訴我,由于反編譯涉及很多不同的語言,所以沒法把機(jī)器碼直接還原成源代碼,但是能用偽代碼的形式把源代碼的邏輯還原個七七八八。

所謂動態(tài)調(diào)試,顧名思義就是讓程序先運(yùn)行起來,在里頭輸入不同的值來觀察各種組件、函數(shù)的反應(yīng),從而梳理出它們之間的關(guān)系。

如果把靜態(tài)分析比作翻譯一本外國漫畫,動態(tài)調(diào)試就是翻譯一部藍(lán)光高清有碼外國大片。

在整個過程中,逆向工程師需要反復(fù)調(diào)試,并且需要給程序打上“斷點”,隨時暫停下來慢慢欣賞,反復(fù)把玩。

來,教你如何破解一個 iOS APP

經(jīng)過這兩步,一個程序的運(yùn)行邏輯就被完全還原。接下來,只需要找到登錄驗證、加密、授權(quán)等關(guān)鍵部位找出漏洞,篡改掉關(guān)鍵數(shù)據(jù),完成破解,為所欲為。

最后,再從網(wǎng)上買個iOS簽名,就能把代碼重新打包成一個APP,安裝在自己或別人的手機(jī)里。

來,教你如何破解一個 iOS APP

華保?。?/strong>到這一步,一個iOS應(yīng)用破解的流程就講完啦~ 其實破解很簡單,就三步,脫殼、反編譯、簽名打包,懂了嗎?

謝幺:懂了!~

華保?。?/strong>好的,既然懂了,現(xiàn)在隨便找個APP去練練手吧~不如就試試破解微信吧!

謝幺:呃……這……

[[245849]]

2、如何反破解

搞懂了逆向破解的基本套路,自然也就能對癥下藥。

華保健的解決方法是,給APP做加固。

如果你玩過《植物大戰(zhàn)僵尸》這款游戲,就能理解“APP加固”的意義。 

來,教你如何破解一個 iOS APP

華保健告訴我,通付盾的iOS加固第一步是“環(huán)境檢測”。

他們會在 APP 的最外層布置很多探針,探針實時監(jiān)測運(yùn)行環(huán)境,一旦發(fā)現(xiàn)手機(jī)處于越獄狀態(tài),或者發(fā)現(xiàn)環(huán)境中有逆向分析工具,就立即進(jìn)入警戒狀態(tài),告警提示,或者直接讓程序崩潰。

這讓我不禁腦補(bǔ)出一萬個土豆雷圍著代碼的樣子……

來,教你如何破解一個 iOS APP

第二步,叫威脅感知。

除了檢測運(yùn)行環(huán)境,探針還會實時監(jiān)測應(yīng)用的運(yùn)行狀態(tài),因為一旦程序中途中止,那就說明有人設(shè)置了“程序斷點”,正在做動態(tài)調(diào)試。

第三步和第四步有些類似,分別是常量加密和符號隱藏。

代碼中有一些內(nèi)容永遠(yuǎn)是破解者的重點關(guān)注對象,比如一些名叫 password 的字符串,比如一些隱秘的URL。

為了防止破解者定位到這些關(guān)鍵位置,“常量加密”會把這些關(guān)鍵的字符都加密隱藏掉。“符號隱藏”類似,也是把一些類名、方法名、屬性名加密隱藏起來。

總之,這兩步的關(guān)鍵在于“打碼”,保護(hù)關(guān)鍵部位。

第五步是“代碼邏輯混淆”。

這個其實很好理解,我給大家做個比喻:

你想去超市買岡本卷紙杜蕾斯,但又是不想讓人知道,于是你先去買了岡本和地瓜回來,又去操場跑兩圈,再去趟超市買了卷紙和可樂,最后再去買了杜蕾斯回來。

雖然最后都買回來了岡本卷紙杜蕾斯,但是你隱藏了自己的行動目的。

來,教你如何破解一個 iOS APP

“代碼邏輯混淆”就是這樣,在清晰明了的代碼里加入各種多余的垃圾指令和代碼,把原來的邏輯拆分成各種怪癖語法,改得連親媽都不認(rèn)識,從而防止破解。

“只要做完這幾步,逆向破解的難度就會大大提高,雖然從理論上來講沒有破解不了的系統(tǒng),但是只要把破解成本提高到足夠高,黑客就會放棄破解,或者轉(zhuǎn)向那些更容易的目標(biāo)。”

華保健說。

只要做完加固就能抗住大部分破解?

是的。

聽起來,反破解挺簡單,就那么回事。

然鵝,現(xiàn)實永遠(yuǎn)比你想象得殘酷。

3、“加固是不可能加固的“

“令我頭疼的,不是扛不住逆向破解,而是開發(fā)者們都不肯用加固。”

華保健說,目前市面上只有20%左右的 iOS 應(yīng)用做了加固,其中金融類的APP比例略高,但也只有50%左右,很多中小型金融機(jī)構(gòu)甚至銀行的APP都沒做加固。

謝幺:納尼?既然加固這么安全,為什么大家都喜歡裸奔呢?

華保?。?/strong>因為裸奔更涼快呀~

謝幺:???

華保健說,以往的加固方法雖然安全,但弊端也很明顯,這跟“衣服穿多了會顯得臃腫”是一個道理(果然是裸奔更涼快。。。 。。。 )

首先是拖慢程序性能。

就拿代碼邏輯混淆來說,原本一步能干完的活,現(xiàn)在非得分成好多步,為了迷惑對手還得故意磨洋工,那可不就拖慢性能了。

其次是程序體積會更大。

“一般來說,基于源碼的加固方式能讓程序增大20~30%的體積”,華保健直言,這一點很多開發(fā)者都接受不了,因為體積增大會降低用戶的下載欲望。

不過,最令開發(fā)者受不了的是加固帶來的代碼泄露風(fēng)險,以及兼容性問題。

“傳統(tǒng)的 iOS 應(yīng)用加固技術(shù)普遍采用的是源碼編譯的方式,需要開發(fā)者把程序的源代碼提交給第三方加固平臺,光這一點就讓不少開發(fā)者打退堂鼓。”

來,教你如何破解一個 iOS APP

“并且基于源碼的加固過程需要反復(fù)改動代碼,可能影響對機(jī)型、系統(tǒng)版本的兼容適配,導(dǎo)致程序閃退,影響用戶體驗。”

華保健坦言,在很長一段時間里,他不是在琢磨如何抗住更厲害的逆向破解者,而是在解決“怎么讓開發(fā)者愿意用加固” 的問題。

一開始,他們試著“戴著鐐銬跳舞”,犧牲一小部分安全性來提高性能,卻發(fā)現(xiàn)解決不了多少問題,并且一味地降低加固強(qiáng)度顯然不是個辦法。

華保健帶著團(tuán)隊研究了大半年,這才想到一個新的思路。

于是他們開始借鑒安卓應(yīng)用“加殼”的技術(shù)思路,直接對 iOS 應(yīng)用程序的 IPA (iOS程序安裝包)進(jìn)行一層專門的加殼。在此基礎(chǔ)上,再用底層二進(jìn)制代碼從程序中抽取出關(guān)鍵部分的代碼邏輯進(jìn)行混淆。

如此一來,開發(fā)者就不再需要把程序源代碼上傳給第三方加固廠商,并且由于不用對源代碼進(jìn)行大量邏輯混淆和修改,加固的性能、安裝包體積、兼容性也都可以兼顧。

來,教你如何破解一個 iOS APP

按照華保健的說法,開發(fā)者把 IPA 安裝包上傳到他們的加固平臺,10分鐘就能直接加固完成。

通付盾的iOS加固具體的體驗和強(qiáng)度如何,幺哥其實沒來得及做詳細(xì)測試,諸位有興趣可以自己試試。

不過話說到這,我忽然發(fā)現(xiàn),其實華保健遇到的“安全與體驗如何平衡”的問題,大部分安全創(chuàng)業(yè)者都會遇到。

來,教你如何破解一個 iOS APP

之前就遇到一個做安全創(chuàng)業(yè)的朋友很納悶,他說自家產(chǎn)品明明比競爭對手的技術(shù)更好,更安全,為什么就是干不過別的競爭對手?

最后轉(zhuǎn)了一大圈才發(fā)現(xiàn),因為他的產(chǎn)品太難用了!我的這位朋友是個耿直的技術(shù)流,只想著一股腦把安全強(qiáng)度做到最高,卻忽略了一件事:安全的本質(zhì)是維護(hù)業(yè)務(wù),技術(shù)的本質(zhì)是輸出實用價值。

人也好公司也好,偶爾換個視角,興許看起來像是一種妥協(xié),但實際上也是一種以退為進(jìn)。

最后再介紹一下我自己吧,我是謝幺,科技科普作者一枚,日常是把各種高大上的技術(shù)知識、黑科技講得通俗有趣。

責(zé)任編輯:未麗燕 來源: 淺黑科技
相關(guān)推薦

2022-07-26 08:14:16

注冊中心ProviderConsumer

2021-06-07 12:08:06

iOS Python API

2020-10-13 10:49:23

APPAndiroid終端

2018-01-08 14:31:09

Electron桌面APP前端

2020-08-17 08:20:16

iOSAOP框架

2013-10-15 10:30:33

2014-07-02 10:03:42

App推廣渠道

2013-11-01 10:23:37

Web程序

2020-01-11 17:00:07

DjangoPythonWeb API

2023-05-31 08:06:45

iOSmacOS云服務(wù)器

2018-08-07 09:45:17

數(shù)據(jù)庫數(shù)據(jù)庫密碼破解密碼

2015-09-08 10:32:21

開源項目選擇方式

2015-09-11 10:29:13

開源項目閱讀

2017-08-22 11:16:06

課程開放日2000門免費(fèi)學(xué)

2022-02-22 20:35:22

公鑰私鑰數(shù)據(jù)

2023-08-09 14:43:42

應(yīng)用開發(fā)ArkTS

2019-09-30 09:26:29

Java編程語言國旗

2019-07-31 07:36:12

架構(gòu)運(yùn)維技術(shù)

2011-08-22 14:04:52

2017-02-13 08:21:36

點贊
收藏

51CTO技術(shù)棧公眾號