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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...