前言
在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
iOS安全之敏感逻辑的保护方案【把函数名隐藏在结构体里,以函数指针成员的形式存储】案例:js从app本地方法获取设备/签名信息https://blog.csdn.net/z929118967/article/details/78034596
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 进行开发 ,获取数据
更多内容请查看原文