前言
在ASO项目必不可少的步骤就是清理数据
/private/var/mobile/Library/Accounts/Accounts3.sqlite
/private/var/mobile/Library/Accounts/Accounts3.sqlite-shm
I Accounts3.sqlite
/private/var/mobile/Library/Accounts/Accounts3.sqlite
1.1 表ZACCOUNT


const char *sql = "delete from ZACCOUNT where ZUSERNAME <> \"\"";
1.2 表ZACCOUNTTYPE


II Accounts3.sqlite-shm
/private/var/mobile/Library/Accounts/Accounts3.sqlite-shm
shm is an index file for wal
III Keychain Dumper

Keychain 是一个拥有有限访问权限的SQLite数据库(AES256加密),可以为多种应用程序或网络服务存储少量的敏感数据(如用户名、密码、加密密钥等)。如保存身份和密码,以提供透明的认证,使得不必每次都提示用户登录。在iPhone上,Keychain所存储的数据在 /private/var/Keychains/keychain-2.db SQLite数据库中。如下图:

当我们打开这个数据库,会发现如下图中四个表:genp、inet、cert、keys
数据库内数据,大多数是加密的,Keychain的数据库内容使用了设备唯一的硬件密钥进行加密,该硬件密钥无法从设备上导出。因此,存储在Keychain中的数据只能在该台设备上读取,而无法复制到另一台设备上解密后读取。

一旦攻击者能够物理接触到没有设置密码的iOS设备时,他就可以通过越狱该设备,运行如keychain_dumper这样的工具,读取到设备所有的Keychain条目,获取里面存储的明文信息。具体方法是通过ssh让mac连接iPhone,使用keychain_dumper,导出Keychain
3.1 iOS系统的keychain 存储类型

3.2 使用theos进行开发 ,获取数据
3.2.1 build
-
run script,赋予访问钥匙串的权限:keychain-access-groups
/opt/MonkeyDev/bin/md --xcbp
echo "$PROJECT_DIR/KCdumper/entitlements.xml"
/opt/iOSOpenDev/bin/ldid -S"$PROJECT_DIR/KCdumper/entitlements.xml" "$TARGET_BUILD_DIR/$EXECUTABLE_NAME"
-
ldid -e
iPhone:~/MonkeyDevBuilds/KCdumper root# ldid -e /bin/keychain_dumper
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>keychain-access-groups</key>
<array>
<string>*</string>
</array>
</dict>
</plist>
3.2.2 Fix for recent iOS 11 JBs
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>keychain-access-groups</key>
<array>
<string>*</string>
</array>
<key>platform-application</key> <true/>
</dict>
</plist>
usage:
-
将手机越狱,通过Cydia(越狱手机都有,相当于App Store)安装OpenSSH -
在mac终端输入:ssh root@(手机IP) 然后会提示输入密码,默认为alpine -
使keychain数据库权限可读:cd /private/var/Keychains/ chmod +r keychain-2.db
iPhone:/bin root# ls -lrt keychain_dumper
-rwxr-xr-x 1 root wheel 211584 Dec 7 2017 keychain_dumper*
iPhone:/bin root# ls -lrt /private/var/Keychains/
total 4476
-rw------- 1 _securityd wheel 0 Jan 1 1970 caissuercache.sqlite3
-rw------- 1 _securityd wheel 16384 Dec 1 2017 TrustStore.sqlite3
-rw------- 1 _securityd wheel 512 Jul 19 11:57 caissuercache.sqlite3-journal
-rw------- 1 _securityd wheel 49152 Jul 26 10:26 ocspcache.sqlite3
-rwx--x--x 1 _securityd wheel 274432 Aug 6 15:26 keychain-2.db*
-rw------- 1 _securityd wheel 32768 Aug 6 16:34 ocspcache.sqlite3-shm
-rwx--x--x 1 _securityd wheel 32768 Aug 6 16:35 keychain-2.db-shm*
-rwx--x--x 1 _securityd wheel 1895232 Aug 10 14:30 keychain-2.db-wal*
-rw------- 1 _securityd wheel 2274272 Aug 12 10:59 ocspcache.sqlite3-wal
-
将下载的keychain_dumper可执行文件移到iPhone的/bin目录下
-
输入命令:
scp /Users/ice/Downloads/Keychain-Dumper-master/keychain_dumper root@(手机ip):/bin/keychain_dumper
-
添加执行权限: chmod +x /bin/keychain_dumper
-
解密keychain:/bin/keychain_dumper
3.3 使用monkeydev 进行开发 ,获取数据
更多内容请查看原文
see laso
公众号:iOS逆向
本文分享自微信公众号 - iOS逆向(code4ios)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。