iOS ASO 数据清理(Accounts帐号信息、Keychain数据)

前言

在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

iOS ASO 数据清理(Accounts帐号信息、Keychain数据)

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

1.2  表ZACCOUNTTYPE

iOS ASO 数据清理(Accounts帐号信息、Keychain数据)

II  Accounts3.sqlite-shm

/private/var/mobile/Library/Accounts/Accounts3.sqlite-shm

shm is an index file for wal

iOS安全之敏感逻辑的保护方案【把函数名隐藏在结构体里,以函数指针成员的形式存储】案例:js从app本地方法获取设备/签名信息https://blog.csdn.net/z929118967/article/details/78034596

III Keychain Dumper

iOS ASO 数据清理(Accounts帐号信息、Keychain数据)

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

iOS ASO 数据清理(Accounts帐号信息、Keychain数据)

当我们打开这个数据库,会发现如下图中四个表:genp、inet、cert、keys

数据库内数据,大多数是加密的,Keychain的数据库内容使用了设备唯一的硬件密钥进行加密,该硬件密钥无法从设备上导出。因此,存储在Keychain中的数据只能在该台设备上读取,而无法复制到另一台设备上解密后读取。

iOS ASO 数据清理(Accounts帐号信息、Keychain数据)

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

3.1 iOS系统的keychain 存储类型

iOS ASO 数据清理(Accounts帐号信息、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



上一篇:[译]WCF RIA Services中的集合(2)


下一篇:C# DES 加密/解密类库,支持文件和中文/UNICODE字符,返回BASE64编码字符串