Android軟件安全
Android APK的相關(guān)安全。
摘要: 從最近幾年開(kāi)始,做平臺(tái)的公司都流行起Open API。這是一個(gè)非常好的理念,也受到廣大開(kāi)發(fā)者的歡迎。如今,開(kāi)發(fā)一款軟件,你可以很容易地集成微博、微信、人人網(wǎng)等流行社交媒介的分享功能,做一個(gè)社交應(yīng)用變得越來(lái)越簡(jiǎn)單。
主流社交媒介要集成到第三方應(yīng)用中,最重要的入口就是安全便捷的授權(quán)認(rèn)證系統(tǒng)。讓用戶在享受一鍵分享和各種社交樂(lè)趣的同時(shí),又不用擔(dān)心帳號(hào)安全和隱私泄露等問(wèn)題。而對(duì)于一些有特殊目的的組織或個(gè)人來(lái)說(shuō),攻占這個(gè)授權(quán)認(rèn)證系統(tǒng)意味著自己獲取了信息傳播的入口和渠道,數(shù)量龐大地社交入口往往能帶來(lái)巨大的社會(huì)效應(yīng)。所以,這個(gè)入口就成了軟件安全攻防雙方的必爭(zhēng)之地。
而本文所要講的就是當(dāng)前最為流行的新浪微博Android客戶端SSO授權(quán)認(rèn)證入口的一個(gè)安全缺陷。此缺陷使得第三方APK在一定條件下可以不通過(guò)授權(quán),在不需要人為操作的情況下就可以操作Android手機(jī)用戶的微博。包括關(guān)注、評(píng)論、發(fā)微博等OpenAPI中提供的功能。
閱讀全文
摘要: 最近微信出了5.0,新增了游戲中心,并內(nèi)置了一個(gè)經(jīng)典游戲《飛機(jī)大戰(zhàn)》。游戲其實(shí)很簡(jiǎn)單,但由于可以和好友一起競(jìng)爭(zhēng)排名,一時(shí)間受到大家的追捧,小伙伴們進(jìn)入“全民打飛機(jī)”時(shí)代。
ios 版出來(lái)不久就被破解出了無(wú)敵模式。Android版出后好像一直風(fēng)平浪靜。周末無(wú)事,加之看雪zmworm版主邀請(qǐng),于是花了一天的工夫研究了下。也出了個(gè)Android版的無(wú)敵模式增強(qiáng)版。具體來(lái)說(shuō)就是無(wú)敵、雙排子彈加無(wú)限炸彈。當(dāng)然,這個(gè)不是重點(diǎn),我們的重點(diǎn)當(dāng)然是技術(shù)細(xì)節(jié)啦!
微信的游戲繼承了Android版手機(jī)QQ游戲中心的思想,也采用插件動(dòng)態(tài)加載方式。具體來(lái)說(shuō),就是插件及游戲以jar包形式存在,jar包中有classes.dex及其他資源文件,在運(yùn)行時(shí)動(dòng)態(tài)加載資源及classes.dex代碼。這樣的好處是靈活管理,易于擴(kuò)展。以后更多的游戲只要上架到微信的服務(wù)器,用戶就能在微信應(yīng)用內(nèi)部下載、安裝、運(yùn)行。具體原理可以參考我2011年的一篇文章《Android類動(dòng)態(tài)加載技術(shù)》 。
當(dāng)然,那篇文章講的只是基本原理,而微信在代碼動(dòng)態(tài)加載方面則走得更遠(yuǎn)。針對(duì)插件的管理
閱讀全文
摘要: Bluebox Security在7月3號(hào)的時(shí)候,在官網(wǎng)上發(fā)布了一個(gè)據(jù)稱99% Android機(jī)器都有的一個(gè)漏洞。國(guó)內(nèi)最早在4號(hào)開(kāi)始有媒體報(bào)道,并持續(xù)升溫。該漏洞可使攻擊者在不更改Android應(yīng)用程序的開(kāi)發(fā)者簽名的情況下,對(duì)APK代碼進(jìn)行修改。并且,這個(gè)漏洞涉及到從1.6版本至今全部的Android版本,換句話說(shuō),這4年中生產(chǎn)的9億設(shè)備,即當(dāng)今市場(chǎng)上99%的Android產(chǎn)品都面臨這一問(wèn)題。
看到這樣的報(bào)道,一開(kāi)始我和我的小伙伴們都不敢相信。因?yàn)楹灻麢C(jī)制用了這么多年,多少大腦袋厚眼鏡的天才們想要顛覆都沒(méi)搞定,Bluebox Security怎么可能搞定的呢?不過(guò),由于好奇心驅(qū)使,我開(kāi)始查看Bluebox Security官方的說(shuō)法:《UNCOVERING ANDROID MASTER KEY THAT MAKES 99% OF DEVICES VULNERABLE》,我意識(shí)到,這個(gè)問(wèn)題應(yīng)該不是簽名機(jī)制本身的問(wèn)題,而是Android安裝APK過(guò)程中的校驗(yàn)存在漏洞。
如果是APK安裝校驗(yàn)簽名的漏洞,而這個(gè)Bug又從1.6開(kāi)始就有,那
閱讀全文
摘要: Android應(yīng)用開(kāi)發(fā)在一般情況下,常規(guī)的開(kāi)發(fā)方式和代碼架構(gòu)就能滿足我們的普通需求。但是有些特殊問(wèn)題,常常引發(fā)我們進(jìn)一步的沉思。我們從沉思中產(chǎn)生頓悟,從而產(chǎn)生新的技術(shù)形式。
如何開(kāi)發(fā)一個(gè)可以自定義控件的Android應(yīng)用?就像eclipse一樣,可以動(dòng)態(tài)加載插件;如何讓Android應(yīng)用執(zhí)行服務(wù)器上的不可預(yù)知的代碼?如何對(duì)Android應(yīng)用加密,而只在執(zhí)行時(shí)自解密,從而防止被破解?……
熟悉Java技術(shù)的朋友,可能意識(shí)到,我們需要使用類加載器靈活的加載執(zhí)行的類。這在Java里已經(jīng)算是一項(xiàng)比較成熟的技術(shù)了,但是在Android中,我們大多數(shù)人都還非常陌生。
閱讀全文
摘要: 發(fā)布過(guò)Android應(yīng)用的朋友們應(yīng)該都知道,Android APK的發(fā)布是需要簽名的。簽名機(jī)制在Android應(yīng)用和框架中有著十分重要的作用。
例如,Android系統(tǒng)禁止更新安裝簽名不一致的APK;如果應(yīng)用需要使用system權(quán)限,必須保證APK簽名與Framework簽名一致,等等。在《APK Crack》一文中,我們了解到,要破解一個(gè)APK,必然需要重新對(duì)APK進(jìn)行簽名。而這個(gè)簽名,一般情況無(wú)法再與APK原先的簽名保持一致。(除非APK原作者的私鑰泄漏,那已經(jīng)是另一個(gè)層次的軟件安全問(wèn)題了。)
簡(jiǎn)單地說(shuō),簽名機(jī)制標(biāo)明了APK的發(fā)行機(jī)構(gòu)。因此,站在軟件安全的角度,我們就可以通過(guò)比對(duì)APK的簽名情況,判斷此APK是否由“官方”發(fā)行,而不是被破解篡改過(guò)重新簽名打包的“盜版軟件”。
閱讀全文
摘要: ProGuard是一個(gè)SourceForge上非常知名的開(kāi)源項(xiàng)目。官網(wǎng)網(wǎng)址是:http://proguard.sourceforge.net/。
Java的字節(jié)碼一般是非常容易反編譯的。為了很好的保護(hù)Java源代碼,我們往往會(huì)對(duì)編譯好的class文件進(jìn)行混淆處理。ProGuard的主要作用就是混淆。當(dāng)然它還能對(duì)字節(jié)碼進(jìn)行縮減體積、優(yōu)化等,但那些對(duì)于我們來(lái)說(shuō)都算是次要的功能。
引用ProGuard官方的一段話來(lái)介紹就是:
ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes unused classes, fields, methods, and attributes. It optimizes bytecode and removes unused instructions. It renames the remaining cla
閱讀全文
摘要: 所謂APK指的是Android操作系統(tǒng)的應(yīng)用程序安裝文件。所謂Crack,簡(jiǎn)單地理解為“破解”。我具體指的是反編譯APK文件進(jìn)行匯編級(jí)的代碼分析,并修改或插入自己的代碼,重新簽名打包為APK文件,以達(dá)到改變程序原有行為的目的。
由以上的說(shuō)明可知,我們要Crack一個(gè)APK文件,主要流程有三步:反編譯、代碼分析、重新打包簽名。
閱讀全文