今天博客的主题是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上放了,还望大家谅解。

iOS逆向工程之KeyChain与Snoop-it的更多相关文章

  1. iOS逆向工程之Hopper中的ARM指令

    虽然前段时间ARM被日本软银收购了,但是科技是无国界的,所以呢ARM相关知识该学的学.现在看ARM指令集还是倍感亲切的,毕竟大学里开了ARM这门课,并且做了不少的实验,当时自我感觉ARM这门课学的还是 ...

  2. iOS逆向工程之Hopper+LLDB调试第三方App

    LLDB是Low Level Debugger的简称,在iOS开发的调试中LLDB是经常使用的,LLDB是Xcode内置的动态调试工具.使用LLDB可以动态的调试你的应用程序,如果你不做其他的额外处理 ...

  3. iOS逆向工程之App脱壳

    本篇博客以微信为例,给微信脱壳."砸壳"在iOS逆向工程中是经常做的一件事情,,因为从AppStore直接下载安装的App是加壳的,其实就是经过加密的,这个“砸壳”的过程就是一个解 ...

  4. iOS逆向工程之Reveal工具的安装、配置与使用

    今天博客内容比较简单,不过还是蛮重要的.经常有小伙伴在QQ上私下问我,说博客中是如何使用Reveal查看AppStore中下载应用的UI层级的,那么就在今天这篇博客中作为一个主题来统一的介绍一下吧.虽 ...

  5. iOS逆向工程之Theos

    如果你对iOS逆向工程有所了解,那么你对Tweak并不陌生.那么由Tweak我们又会引出Theos, 那么什么是Theos呢,简单一句话,Theos是一个越狱开发工具包,Theos是越狱开发工具的首先 ...

  6. iOS逆向工程之Cycript

    1.连接设备 打开一个终端,输入指令: iproxy 重新打开一个新的终端,输入指令: ssh -p root@127.0.0.1 这时候会提示输入密码:默认密码为“alpine”.这样就可以连接到设 ...

  7. 逆向工程之App脱壳

    http://www.cnblogs.com/ludashi/p/5725743.html iOS逆向工程之App脱壳 本篇博客以微信为例,给微信脱壳."砸壳"在iOS逆向工程中是 ...

  8. FrameWork逆向工程之MotioPI

    在BI项目建设的过程中我们一般都是有备份的,而且这个是必须有的!特别是例如ETL Model,还有Data Model这一类的元数据,这些东西如果我们没有备份,而恰好的我们的开发模型又在某一天离我们而 ...

  9. mybatis逆向工程之maven工程

    maven工程与动态web工程存在差异,不过大体是相同的 注意:运行成功后记得refresh刷新下,否则看不到 一.在pom文件中进行如下配置 <project xmlns="http ...

随机推荐

  1. 前端网络、JavaScript优化以及开发小技巧

    一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...

  2. JavaWeb——Filter

    一.基本概念 之前我们用一篇博文介绍了Servlet相关的知识,有了那篇博文的知识积淀,今天我们学习Filter将会非常轻松,因为Filter有很多地方和Servlet类似,下面在讲Filter的时候 ...

  3. 异步编程 In .NET

    概述 在之前写的一篇关于async和await的前世今生的文章之后,大家似乎在async和await提高网站处理能力方面还有一些疑问,博客园本身也做了不少的尝试.今天我们再来回答一下这个问题,同时我们 ...

  4. 获取Canvas当前坐标系矩阵

    前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...

  5. maven打包插件:appassembler

    1.打包成bat 打包命令:mvn clean package appassembler:assemble <plugin> <groupId>org.codehaus.moj ...

  6. 图解Spark API

    初识spark,需要对其API有熟悉的了解才能方便开发上层应用.本文用图形的方式直观表达相关API的工作特点,并提供了解新的API接口使用的方法.例子代码全部使用python实现. 1. 数据源准备 ...

  7. 使用HEXO快速建站

    先安好npm,请参照:http://max.cszi.com/archives/482 打开网站:https://hexo.io/   npm install hexo-cli -g hexo ini ...

  8. 理解JavaScript中的“this”

    对于javascript的初学者来说,一般对“this”关键字都感到非常迷惑.本文的目的旨在让你全面的了解“this”,理解在每一个情景下如何使用“this”,希望通过本文,可以帮助同学们不在害怕“t ...

  9. 我正在使用Xamarin的跨平台框架—Xamarin.Android回忆录

    一.缘起 在自己给别家公司做兼职外包的时候,已经明确知道外包的活不是那么好干的,一般在经历了初期热血澎湃的激情后,逐渐冷淡,愤怒,再冷淡,再愤怒…,听上去好像高潮迭起,但令人尴尬的是,这高潮迭起我们都 ...

  10. NodeJS的代码调试和性能调优

    本文转自我的个人博客. NodeJS 自 2009 年显露人间,到现在已经六个年头了,由于各种原因,中间派生出了个兄弟,叫做 iojs,最近兄弟继续合体,衍生出了 nodejs4.0 版本,这东西算是 ...