iOS逆向工程之KeyChain與Snoop-it

来源:http://www.cnblogs.com/ludashi/archive/2016/08/26/5808119.html
-Advertisement-
Play Games

今天博客的主題是Keychain, 在本篇博客中會通過一個登陸的Demo將用戶名密碼存入到KeyChain中,並且查看一下KeyChain中存的是什麼東西,把這些內容給導出來。當然本篇博客的重點不是如何使用Keychain來存儲你的用戶名和密碼了。不過今天的博客中會用到這些知識。Apple的開發著文 ...


今天博客的主題是Keychain, 在本篇博客中會通過一個登陸的Demo將用戶名密碼存入到KeyChain中,並且查看一下KeyChain中存的是什麼東西,把這些內容給導出來。當然本篇博客的重點不是如何使用Keychain來存儲你的用戶名和密碼了。不過今天的博客中會用到這些知識。Apple的開發著文檔上有Keychain的完整使用實例(請參見iOS Keychain Services Tasks)。今天博客中用戶名和密碼的存儲和更新就是使用的官方文檔給的示例。也就是說,直接拷貝的開發文檔上的代碼呢,這些代碼今天就不往上拷貝了,具體的看官方的開發文檔即可。

今天博客的主題是,將用戶名和密碼進行存儲,然後在下次登錄的時候從鑰匙串進行載入。當然keychain在同一個組中是可以共用的,也就是說同一個開發者賬號下的App可以進行keychain的共用的。我們先不將用戶名密碼進行加密,直接存在keychain中,然後看一下效果。在然後就得使用一些加密策略對用戶名密碼進行處理了。下方會給出具體的實現細節。

 

一、KeyChain的使用

KeyChain的使用在此呢不做多說,因為我之前也沒怎麼用過Keychain呢,今天博客中關於KeyChain操作的代碼主要來自於蘋果的開發文檔。下方截圖中的內容,是對keyChain的操作進行了一個簡單的封裝,keychainData用於暫存將要存儲到keychain中的數據。genericPasswordQuery則用於從KeyChain中查詢數據,kKeychainItemIdentifier就是我們存儲在keyChain中的數據的唯一標示了。

其他關於KeyChain的操作代碼都可以在上述連接的開發文檔中找到,在此就不做過多贅述了。

    

 

封裝完KeyChainManager後,我們就可以調用這個類的單例來進行KeyChain的操作了。下方就是KeyChainManager的使用方式,從下方截圖中,可以看出,將AES加密的代碼給註釋掉了,也就是傳給KeyChainManager什麼內容,就會存儲什麼內容的。關於Keychain的使用就先說這麼多,還是那句話,上面的Apple官方文檔講的很清楚了,在此就不做過多贅述了。

  

 

二、查看Keychain資料庫中的內容

越獄手機中我們是可以查看Keychain中所存儲的內容的。keychain在我們是以資料庫的形式存儲在設備上的,存儲目錄為“/private/var/Keychains”。剛好我旁邊就有越獄設備,下方就是keychain的存儲位置,下方這個keychain-2.db正是鑰匙串存儲內容的資料庫。

  

既然我們找到了這個文件的話,那麼我們可以將他拷貝到Mac上,可以看看其存儲的是神馬內容。將上述文件考到Mac上後,我們可以使用SQLiteManager打開,可以看一下裡邊的內容。下方是keychain-2.db這個資料庫中的結構,其中有5張表,我們可以重點關註一下genp這張表的結構和內容。

  

下方這個截圖是對keychainData字典中的數據進行的列印,也就是說下方的數據是從Keychain中查詢出來的。我們可以看出下方字典的key與genp表中的欄位是相對應的,所以嘍,我們存在keychain中的一些數據實際上是存儲在genp這張表中的。

  

下方是我們對相關數據進行的查詢,表中的數據是非常的多的,不過我們有SQL語句不是,可以根據自己的信息對數據進行查看。當然從這直接看到的一些數據即使你存入Keychain中是沒有加密的數據,在表中有些數據是以二進位的形式存儲的,直接看也是看不出什麼的,那麼我們就需要Keychain-dump這個工具了,下方回有介紹。

  

 

三、使用Snoop-it來抓取相應app中Keychain中的數據

我們可以使用Snoop-it來查看一些App中的數據,在此我們就以我自己寫的Demo為例。之前我們存在Keychain中的數據,在代碼中沒有做任何的處理,就以字元串的形式直接存儲的,那麼接下來我們就要使用Snoop-it來查看這些數據。

1.簡述Snoop-it的配置與使用

Snoop-it這個工具非常強大,查看keychain中存儲的數據是其功能之一,接下來就來認識一下這個工具。首先在你的Cydia商店中把這個(http://repo.nesolabs.de)源添加上,然後搜索snoop-it進行安裝即可。安裝後你的手機上會多一個帶著黃色帽子的小狗圖標的App, 這個就是我們要使用的Snoop-it。下方截圖就是Snoop-it打開時的界面。點擊“Select App Store Apps”可以選擇你要分析的App, 在Settings中可以進行相應的配置。

  

 

在Mac瀏覽器中輸入上述http的訪問地址,然後打開你選擇監聽的App, 刷新頁面即可。從下方截圖中我們是可以看到一些存儲的信息是以明文的形式被獲取到的。這就說明直接以明文的形式存儲信息還是有一定風險的,所以我們要對數據進行加密。

  

我們將代碼中的AES加密的相關代碼打開,將加密後的數據存儲到keychain中看一下效果。下方代碼就是調用AES加密模塊,將數據加密後在存儲到Keychain中。打開後,我們重新運行工程,然後再觀察其效果。 

  

當然,我們對數據進行AES加密,使用Snoop-it監聽到的就是加密後的數據,這樣一來就增加了逆向工程的難度。

  

 

經過上述步驟,我們可以看出,將用戶名和密碼存儲到Keychain中,為了安全起見呢還是要進行加密處理的呢。說到這兒了,今天做這個Demo的時候,把App間共用keychain數據的內容也給搞了一下,過程並不複雜,需要將Keychain Sharing開關打開,並且添加上其他App的Boundle ID即可。 

  

 

四、Snoop-it的其他作用

Snoop-it是很強大滴,接下來再看一下Snoop-it的另一個強大的功能。它可以瀏覽你手機上App的類的層級,當然在AppStore上下載的App也是適用的。並且可以查看該App中某個文件的屬性和方法。方法是該類對應的所有方法,即使在.h文件中沒有留調用介面,也是可以查看的,功能還是蠻強大滴。好了今天的博客就到這兒吧。

  

 

五、Keychain-Dump

我們還可以通過KeyChain-Dump這個工具來查看鑰匙串中的內容,也就是適用keychain-dump可以導出keychain中的數據。keychain-dump在github上的下載地址為(https://github.com/ptoomey3/Keychain-Dumper)。將keychain-dump這個二進位文件拷貝到越獄設備上進行執行即可。剛拷貝過去的二進位文件是沒有執行許可權的,下麵為了省事,直接賦值了一個最高許可權,然後就可以執行該二進位文件了。

  

執行完後,會導出keychain中存儲的內容,下方就是我們上述Demo在keychain中存儲的數據。

   

在瀏覽數據的時候無意中看到了比較敏感的數據。下麵這個截圖是家裡的WiFi賬號和密碼,可見,是明文存儲的呢。之前用這個設備存儲的所有WiFi密碼都可以看到呢,直接搜AirPort就可以了。

  

 

由於個人原因呢,今天博客中所使用的登陸Demo就不往github上放了,還望大家諒解。 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 首先是OC調用C++的代碼。 創建一個Objective-C的項目,並創建c++文件MyCppFile.hpp和MyCppFile.cpp。 把要調用Cpp代碼的文件名改成mm尾碼名,項目代碼的結構如下: 實現C++部分的代碼: MyCppFile.hpp MyCppFile.cpp 在main.m ...
  • 1 . 音視頻處理的一般流程: 數據採集→數據編碼→數據傳輸(流媒體伺服器) →解碼數據→播放顯示1、數據採集:攝像機及拾音器收集視頻及音頻數據,此時得到的為原始數據涉及技術或協議:攝像機:CCD、CMOS拾音器:聲電轉換裝置(咪頭)、音頻放大電路2、數據編碼:使用相關硬體或軟體對音視頻原始數據進行 ...
  • ListView的模板寫法 ListView模板寫法的完整代碼: "android代碼優化 ListView中自定義adapter的封裝(ListView的模板寫法)" 以後每寫一個ListView,就這麼做:直接 導入ViewHolder.java 和 ListViewAdapter ,然後寫一個 ...
  • 上手開發 iOS 一段時間後,我發現並不能只著眼於完成需求,利用閑暇之餘多研究其他的開發技巧,才能在有限時間內提升自己水平。當然,“其他開發技巧”這個命題對於任何一個開發領域都感覺不找邊際,而對於我來說,嘗試接觸 objc/runtime 不失為是開始深入探索 iOS 開發的第一步。 剛瞭解 run ...
  • Xamarin提示Build-tools版本過老 錯誤信息:G:\XamarinDemo\Xamarin.Forms-master\packages\Xamarin.Android.Support.Vector.Drawable.23.3.0\build\Xamarin.Android.Suppor ...
  • 當第一次載入Singleton類時不會初始化sInstance,只有在第一次調用Singleton的getInstance方法時才會導致sInstance被初始化。因此第一次調用getInstance方法會導致 虛擬機載入SingletonHolder類,這種方法不僅能夠確保線程安全,也能夠保證單例 ...
  • 在2016 蘋果全球開發者大會(WWDC)期間, 蘋果一如既往地給開發者們披露了新版的集成開發工具 – Xcode, 在過去的每一次大版本發佈中,蘋果都會積極地改進開發工具,添加一些極具吸引力的新功能,今年也不例外。 1. Swift 2 and 3 過去每一版的Xcode 都和固定版本的Swift ...
  • 直接上代碼:註釋都寫的很清楚了。 public class Entry implements Parcelable{ public int userID; public String username; public boolean isMale; public Book book;//序列化對象可 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...