iOS逆向工程之KeyChain与Snoop-it

转载 2016年08月29日 09:20:29


本文的主题是Keychain, 主要是通过一个登陆的Demo将用户名密码存入到KeyChain中,并且查看一下KeyChain中存的是什么东西,把这些内容给导出来。


我们不会过多讨论如何使用Keychain来存储你的用户名和密码,不过会用到这些知识。Apple的开发着文档上有Keychain的完整使用实例(请参见iOS Keychain Services Tasks)。


keychain在同一个组中是可以共享的,也就是说同一个开发者账号下的App可以进行keychain的共享的。我们先不将用户名密码进行加密,直接存在keychain中,然后看一下效果。使用一些加密策略对用户名密码进行处理。下方会给出具体的实现细节。


一、KeyChain的使用


KeyChain的使用在此呢不做多说,本文关于KeyChain操作的代码主要来自于苹果的开发文档。下方截图中的内容,是对keyChain的操作进行了一个简单的封装,keychainData用于暂存将要存储到keychain中的数据。genericPasswordQuery则用于从KeyChain中查询数据,kKeychainItemIdentifier就是我们存储在keyChain中的数据的唯一标示了。



封装完KeyChainManager后,我们就可以调用这个类的单例来进行KeyChain的操作了。下方就是KeyChainManager的使用方式,从下方截图中,可以看出,将AES加密的代码给注释掉了,也就是传给KeyChainManager什么内容,就会存储什么内容的。



二、查看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中是没有加密的数据,在表中也是进行加密处理的。这一点还是相对安全的。



三、使用Snoop-it来抓取相应app中Keychain中的数据


我们可以使用Snoop-it来查看一些App中的数据,在此我们就以我自己写的Demo为例。之前我们存在Keychain中的数据,在代码中没有做任何的处理,就以字符串的形式直接存储的,那么接下来我们就要使用Snoop-it来查看这些数据。


简述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文件中没有留调用接口,也是可以查看的。


逆向工具安装使用测试

传统的对iOS逆向的工具要使用到下面很多: otool keychain-dumper sqlite dumpdecrypted class-dump-z Theos 但国外有很多 ...
  • joosonmao
  • joosonmao
  • 2014年10月15日 17:46
  • 4121

Keychain介绍、使用Snoop-it分析Keychain读写、使用Keychain Dumper导出Keychain中的数据 - iOS开发

根据苹果的介绍,iOS设备中的Keychain是一个安全的存储容器,可以用来为不同应用保存敏感信息比如用户名,密码,网络密码,认证令牌。苹果自己用keychain来保存Wi-Fi网络密码,VPN凭证等...
  • qinguo2000
  • qinguo2000
  • 2014年04月11日 10:58
  • 1119

Github上关于iOS的各种开源项目集合(强烈建议大家收藏,查看,总有一款你需要)

下拉刷新 EGOTableViewPullRefresh - 最早的下拉刷新控件。SVPullToRefresh - 下拉刷新控件。MJRefresh - 仅需一行代码就可以为UIT...
  • jiashaoying
  • jiashaoying
  • 2018年01月16日 21:36
  • 93

SSL配置

gencert 下载 $ ./gencert.sh Enter your domain [www.example.com]: www.test.com Create se...
  • u011661836
  • u011661836
  • 2018年01月17日 15:07
  • 1

逆向工具安装使用测试

传统的对iOS逆向的工具要使用到下面很多: otool keychain-dumper sqlite dumpdecrypted class-dump-z Theos 但国外有很多 ...
  • joosonmao
  • joosonmao
  • 2014年10月15日 17:46
  • 4121

iOS逆向工程之class-dump

最近研究一些iOS逆向工程的知识,发现自己对iOS的了解还有很大的局限。逆向工程会用到很多工具,class-dump便是其中之一。 class-dump,顾名思义就是用来dump目标对象的class信...
  • yangliu16
  • yangliu16
  • 2017年04月23日 18:43
  • 160

iOS应用程序安全(11)-分析使用HTTP/HTTPS的网络流量

作者:Prateek Gianchandani 译者:吴发伟 原文网址:http://resources.infosecinstitute.com/ios-application-security...
  • O_surface_O
  • O_surface_O
  • 2014年02月11日 15:41
  • 1851

.NET Open Source Developer Projects

原文:https://github.com/Microsoft/dotnet/blob/master/dotnet-developer-projects.md This community ...
  • hefeng_aspnet
  • hefeng_aspnet
  • 2015年05月05日 13:21
  • 1094

iOS逆向工程之Theos

如果你对iOS逆向工程有所了解,那么你对Tweak并不陌生。那么由Tweak我们又会引出Theos, 那么什么是Theos呢,简单一句话,Theos是一个越狱开发工具包,Theos是越狱开发工具的首先...
  • fishmai
  • fishmai
  • 2017年05月18日 21:51
  • 516

iOS开发Keychain简单的使用

苹果增加更安全的存储方式:Keychain(相对于NSUserDefaults数据以明文的形式保存在)提供了一种安全的保存私密信息(密码,序列号,证书等)的方式,每个ios程序都有一个独立的keych...
  • zzrs123
  • zzrs123
  • 2016年06月14日 11:11
  • 1793
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS逆向工程之KeyChain与Snoop-it
举报原因:
原因补充:

(最多只允许输入30个字)