iOS逆向工程之KeyChain与Snoop-it

今天博客的主题是Keychain, 在本篇博客中会经过一个登录的Demo将用户名密码存入到KeyChain中,而且查看一下KeyChain中存的是什么东西,把这些内容给导出来。固然本篇博客的重点不是如何使用Keychain来存储你的用户名和密码了。不过今天的博客中会用到这些知识。Apple的开发着文档上有Keychain的完整使用实例(请参见iOS Keychain Services Tasks)。今天博客中用户名和密码的存储和更新就是使用的官方文档给的示例。也就是说,直接拷贝的开发文档上的代码呢,这些代码今天就不往上拷贝了,具体的看官方的开发文档便可。html

今天博客的主题是,将用户名和密码进行存储,而后在下次登陆的时候从钥匙串进行加载。固然keychain在同一个组中是能够共享的,也就是说同一个开发者帐号下的App能够进行keychain的共享的。咱们先不将用户名密码进行加密,直接存在keychain中,而后看一下效果。在而后就得使用一些加密策略对用户名密码进行处理了。下方会给出具体的实现细节。ios

 

1、KeyChain的使用git

KeyChain的使用在此呢不作多说,由于我以前也没怎么用过Keychain呢,今天博客中关于KeyChain操做的代码主要来自于苹果的开发文档。下方截图中的内容,是对keyChain的操做进行了一个简单的封装,keychainData用于暂存将要存储到keychain中的数据。genericPasswordQuery则用于从KeyChain中查询数据,kKeychainItemIdentifier就是咱们存储在keyChain中的数据的惟一标示了。github

其余关于KeyChain的操做代码均可以在上述链接的开发文档中找到,在此就不作过多赘述了。数据库

    

 

封装完KeyChainManager后,咱们就能够调用这个类的单例来进行KeyChain的操做了。下方就是KeyChainManager的使用方式,从下方截图中,能够看出,将AES加密的代码给注释掉了,也就是传给KeyChainManager什么内容,就会存储什么内容的。关于Keychain的使用就先说这么多,仍是那句话,上面的Apple官方文档讲的很清楚了,在此就不作过多赘述了。浏览器

  

 

2、查看Keychain数据库中的内容安全

越狱手机中咱们是能够查看Keychain中所存储的内容的。keychain在咱们是以数据库的形式存储在设备上的,存储目录为“/private/var/Keychains”。恰好我旁边就有越狱设备,下方就是keychain的存储位置,下方这个keychain-2.db正是钥匙串存储内容的数据库。app

  

既然咱们找到了这个文件的话,那么咱们能够将他拷贝到Mac上,能够看看其存储的是神马内容。将上述文件考到Mac上后,咱们可使用SQLiteManager打开,能够看一下里边的内容。下方是keychain-2.db这个数据库中的结构,其中有5张表,咱们能够重点关注一下genp这张表的结构和内容。工具

  

下方这个截图是对keychainData字典中的数据进行的打印,也就是说下方的数据是从Keychain中查询出来的。咱们能够看出下方字典的key与genp表中的字段是相对应的,因此喽,咱们存在keychain中的一些数据其实是存储在genp这张表中的。oop

  

下方是咱们对相关数据进行的查询,表中的数据是很是的多的,不过咱们有SQL语句不是,能够根据本身的信息对数据进行查看。固然从这直接看到的一些数据即便你存入Keychain中是没有加密的数据,在表中有些数据是以二进制的形式存储的,直接看也是看不出什么的,那么咱们就须要Keychain-dump这个工具了,下方回有介绍。

  

 

3、使用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便可。 

  

 

4、Snoop-it的其余做用

Snoop-it是很强大滴,接下来再看一下Snoop-it的另外一个强大的功能。它能够浏览你手机上App的类的层级,固然在AppStore上下载的App也是适用的。而且能够查看该App中某个文件的属性和方法。方法是该类对应的全部方法,即便在.h文件中没有留调用接口,也是能够查看的,功能仍是蛮强大滴。好了今天的博客就到这儿吧。

  

 

5、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上放了,还望你们谅解。 

相关文章
相关标签/搜索