一、負責安卓程序的加解密和數據傳輸分析、拆解、逆向等工做;
2 、逆向APK,瞭解運行過程;
3 、Andorid本地提權得到root權限;
4 、熟練掌握軟件逆向靜態分析、動態調試、代碼跟蹤等;
5 、熟悉Android開發,瞭解打包、反編譯、破解流程;
6 、so破解。
我目前瞭解的以下:
1,加解密:這就不少了,通常都是遇到後再折騰解密,並且解密代碼和祕鑰通常都在代碼裏面。
2,Andorid本地提權得到root權限,通常真機是用recovery刷機包,可是病毒提權是怎麼樣的css
--目前掌握的一種提權的是像輸入命令行同樣輸入su而且用pm提權 還有一種是修改init.rc文件。
3,ida動態調式和代碼跟蹤
4,打包,編譯和破解的流程是什麼樣的?
5,so破解:通常就是破殼。各類殼(360,娜迦等等)
加殼的另外一種經常使用的方式是在二進制的程序中植入一段代碼,在運行的時候優先取得程序的控制權,作一些額外的工做。大多數病毒就是基於此原理。加殼的程序常常想盡辦法阻止外部程序或軟件對加殼程序的反彙編分析或者動態分析,以達到它不可告人的目的。這種技術也經常使用來保護軟件版權,防止被軟件破解。
6,瞭解反破解的技術
我目前掌握的技術有:
1,反模擬器
2,反靜態代碼分析器如:反jeb
應該也是有不少反ida的,也就是加殼。java
一、具備豐富的Android開發分析經驗,熟悉Android系統架構,熟悉android安全機制;
二、精通匯編語言、Java、C/C++語言,熟悉Smali語言,對逆向工程有濃厚興趣;
三、熟練掌握ida、gdb逆向分析工具;
四、熟練掌握軟件逆向靜態分析、動態調試、代碼跟蹤等;
五、熟悉so和java層hook;
六、熟悉Android開發,瞭解打包、反編譯、破解流程;
七、深刻理解arm linux和Android底層運行機制;
八、熟練掌握各類調試工具:Smali、Dedexer、Dexdump、Apktool、Dex2jar、jd-gui。linux
1,Android系統架構和android安全機制以下:
android採用自下而上的分層架構,linux內核層,硬件抽象層,運行時和c語言庫,程序框架層和應用層。
Android以linux內核爲基礎實現硬件設備驅動,進程和內存管理,網絡協議棧、電源管理等核心系統功能。android基於移動設備在linux的基礎上補充了內存管理,匿名共享內存和進程間通訊binder。
HAL(Hardware Abstraction Layer)規定了一套應用層對硬件層的讀寫和配置的統一接口,本質上是將硬件的驅動分爲用戶空間和內核空間,其中內核驅動程序運行在內核空間,HAL運行在用戶空間。上圖中的Stub,以so庫的形式存在,能夠理解爲proxy。上層經過調用標識得到HAL的相關Stub,進而取得相應操做。android
固然,還有Android NDK(Native Development Kit),使得應用程序能夠不依賴Dalvik虛擬機進行開發。Android運行時核心庫提供android.os, android.net, android.media等核心API,而Dalvik虛擬機依賴Linux內核,實現進程隔離與線程調度管理、安全與異常管理、垃圾回收等功能,並被改進以適應低內存、低處理器速度的移動設備環境。數據庫
再往上就是應用程序框架層了。一系列的Android應用程序所需的類庫,使得開發人員能夠快速地進行程序開發,也能夠經過繼承實現個性化的擴展。如Activity Manager負責主線程ActivityThread的建立、Activity生命週期的維護,併爲窗口提供交互的接口。瀏覽器
應用層就是與用戶直接交互的應用程序,如SMS短信、圖片瀏覽器、地圖以及開發人員所開發的應用程序。
也可參考 http://blog.csdn.net/mad1989/article/details/16886189安全
android安全機制覆蓋到各個層面,求開放的同時也保護用戶的數據,應用程序和設備的安全。主要安全模型以下:
進程沙箱隔離機制
應用程序簽名機制
權限聲明機制
訪問控制機制
進程通訊機制
內存管理機制
進程沙箱隔離機制,使得Android應用程序在安裝時被賦予獨特的用戶標識(UID),並永久保持。應用程序及其運行的Dalvik虛擬機運行在獨立的Linux進程空間,與其它應用程序徹底隔離。
有特例程序共享uid;
應用簽名機制:規定APK文件必須被開發者進行數字簽名,以便標識應用程序做者和在應用程序之間的信任關係。在安裝應用程序APK時,系統安裝程序首先檢查APK是否被簽名,有簽名才能安裝。當應用程序升級時,須要檢查新版應用的數字簽名與已安裝的應用程序的簽名是否相同,不然,會被當作一個新的應用程序。Android開發者有可能把安裝包命名爲相同的名字,經過不一樣的簽名能夠把他們區分開來,也保證簽名不一樣的包不被替換,同時防止惡意軟件替換安裝的應用。
權限聲明機制:要想得到在對象上進行操做,就須要把權限和此對象的操做進行綁定。不一樣級別要求應用程序行使權限的認證方式也不同,Normal級申請就可使用,Dangerous級須要安裝時由用戶確認,Signature和Signatureorsystem級則必須是系統用戶纔可用。
訪問控制機制:確保文件系統和永和數據不受非法訪問。
進程間通訊機制binder,基於共享內存的Binder實現,提供輕量級的遠程進程調用(RPC)。經過接口描述語言(AIDL)定義接口與交換數據的類型,確保進程間通訊的數據不會溢出越界。
內存管理機制,基於Linux的低內存管理機制,設計實現了獨特的LMK,將進程重要性分級、分組,當內存不足時,自動清理級別進程所佔用的內存空間。同時,引入的Ashmem內存機制,使得Android具有清理再也不使用共享內存區域的能力。ruby
正是由於Android採用多層架構,在保護信息安全的同時,也保證開放平臺的靈活性。markdown
看源碼見http://blog.csdn.net/luoshengyang/article/details/37613135
Android是一個基於Linux內核的系統,像傳統的Linux系統同樣,Android也有用戶的概念。只不過這些用戶不須要登陸,也可使用Android系統。Android系統將每個安裝在系統的APK都映射爲一個不一樣的Linux用戶。也就是每個APK都有一個對應的UID和GID,這些UID和GID在APK安裝的時候由系統安裝服務PackageManagerService分配。Android沙箱隔離機制就是創建在Linux的UID和GID基礎上。網絡
這種基於Linux UID/GID的安全機制存在什麼樣的問題呢?
Linux將文件的權限劃分爲讀、寫和執行三種,分別用字母r、w和x表示。每個文件有三組讀、寫和執行權限,分別針對文件的全部者、文件全部者所屬的組以及除了全部者以及在全部者所屬組的用戶以外全部其它用戶。這樣,若是一個用戶想要將一個本身建立的文件交給另一個用戶訪問,那麼只須要相應地設置一下這個文件的其它用戶權限位就能夠了。因此,在Linux系統中,文件的權限控制在全部者的手中。所以,這種權限控制方式就稱爲自主式的,正式的英文名稱爲Discretionary Access Control,簡稱爲DAC。
在理想狀況下,DAC機制是沒有問題的。然而,一個用戶可能會不當心將本身建立的文件的權限位錯誤地修改成容許其它用戶訪問。若是這個用戶是一個特權用戶,而且它錯誤操做的文件是一個敏感的文件,那麼就會產生嚴重的安全問題。這種誤操做的產生方式有三種:
用戶執行了錯誤的命令
負責執行用戶命令的程序有Bug
負責執行用戶命令的程序受到攻擊
後來,Linux內核採用了必要的訪問控制機制:SE Linux(Security-Enhanced Linux),它採用了一種強制存取控制MAC(Mandatory Access Control)策略的實現方式,目的在於經過限制系統中的任何進程以及用戶對資源的訪問,保護內核安全。而SE Android(Security-Enhanced Android)是Android與SE Linux的結合,由美國NSA在2012年推出的Android操做系統安全強化套件,以支持在Android平臺上使用SE Linux。
目前SE Android系統中的策略機制主要有三種:
安裝時MAC(install-time MAC)
權限取消(permission revocation)
權限標籤傳播(tag propagation)
安裝時MAC經過查找MAC策略配置來檢查應用程序的權限。權限取消能夠爲已安裝的應用取消權限,該機制在應用程序運行的權限檢查時經過查找權限取消列表來取消應用的某些權限。權限標籤傳播是一種污點跟蹤方式的應用,Android系統的權限做爲抽象的標籤映射到MAC策略配置文件中。
SE Android安全機制所要保護的對象是系統中的資源,這些資源分佈在各個子系統中。實際上,系統中須要保護的資源很是多,除了文件以外,還有進程、socket和IPC等。SE Android是一個複雜的安全模型,本文就不進一步分析了。
Android應用會遇到各類各樣的安全性問題,如何從宏觀上了解各類安全隱患,積極採起適當的防護措施便變得尤其重要。那麼,Android應用面臨哪些安全問題呢?
病毒
關鍵信息泄露
APP重打包
進程被劫持
數據在傳輸過程遭劫持
Webview漏洞
病毒不用多說了,都是一些惡意軟件。關鍵信息泄露,可能有些開發者並不十分留意。雖然Java代碼能夠作混淆,可是Android的幾大組件的建立方式是依賴注入的方式,所以不能被混淆。並且目前經常使用的一些反編譯工具好比apktool等可以絕不費勁地還原Java裏的明文信息,native裏的庫信息也能夠經過objdump或IDA獲取。所以一旦Java或native代碼裏存在明文敏感信息,基本上就是毫無安全而言的。重打包即經過反編譯後從新加入惡意的代碼邏輯,從新打包一個APK文件。進程被劫持通常經過進程注入或者調試進程的方式來hook進程,改變程序運行的邏輯和順序,從而獲取程序運行的內存信息。hook須要獲取root權限或者跟被hook進程相同的權限。若是手機沒被root,被劫持的可能性仍是較小。數據在傳輸過程遭劫持,通常來講是因爲數據明文傳輸或沒使用HTTPS。Webview漏洞通常因爲JS注入。
現實中,出現的問題可能比上面說起的還要多。總的來講,應該從如下幾個方面來應對Android開發的常見安全問題:
應用權限控制。經過控制應用程序的權限防止惡意應用對系統形成破壞,採起的措施包括合理使用系統內置權限和應用程序自定義權限。 應用程序簽名。採用數字簽名爲應用程序簽名。 應用加固。應用加固包括病毒掃描、防注入、防調試、防篡改四個模塊,目前行業內已經出現了不少的應用加固解決方案,如360應用加固、騰訊雲應用加固、百度應用加固等等。 靜態代碼分析。經過靜態代碼分析工具lint監測安全隱患,對代碼進行優化。 防火牆。必要時爲Android設備安裝防火牆,以防止遠程網絡攻擊。 數據存儲加密。採用加密的方式保護應用程序敏感數據,如利用SQLCipher加密SQLite數據庫。 應用程序組件開發的安全要點。Activity, Service, Content Provider, Broadcast Receiver等組件在代碼層面應採起的安全措施。它們每個均可以經過隱式的Intent方式打開,因此這些組件只要不是對外公開的必須在AndroidManifest裏面註明exported爲false,禁止其它程序訪問咱們的組件。對於要和外部交互的組件,應當添加訪問權限的控制,還須要要對傳遞的數據進行安全的校驗。