iOS越狱开机运行程序

来源:互联网 发布:2016融资租赁行业数据 编辑:程序博客网 时间:2024/05/17 06:12

常用的命令和工具


ps          ——显示进程状态,CPU使用率,内存使用情况等

sysctl       ——检查设定Kernel配置

netstat     ——显示网络连接,路由表,接口状态等

route        ——路由修改

renice       ——调整程序运行的优先级

ifconfig    ——查看网络配置

tcpdump   ——截获分析网络数据包

lsof           ——列出当前系统打开的文件列表,别忘记一切皆文件,包括网络连接、硬件等

otool      ——查看程序依赖哪些动态库信息,反编代码段……等等等等

nm         ——显示符号表

ldid       ——签名工具

gdb          ——调试工具

patch       ——补丁工具

SSH         ——远程控制


备注:

 otool,可查看可执行程序都链接了那些库:

 otool  -L WQAlbum 

可以得到:


WQAlbum:
/System/Library/Frameworks/StoreKit.framework/StoreKit (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/AdSupport.framework/AdSupport (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libz.1.dylib (compatibility version 1.0.0, current version 1.2.5)
/System/Library/Frameworks//MediaPlayer.framework/MediaPlayer (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/MobileCoreServices.framework/MobileCoreServices (compatibility version 1.0.0, current version 40.0.0)
/System/Library/Frameworks/CoreMedia.framework/CoreMedia (compatibility version 1.0.0, current version 1.0.0)
……


可以反编译WQAlbum的__TEXT__段内容, 截前10行:

otool -tV WQAlbum |head -n 10 

可以得到:


WQAlbum:
(__TEXT,__text) section
start:
00002de0 pushl$0x00
00002de2 movl  %esp,%ebp
00002de4 andl  $0xf0,%esp
00002de7 subl  $0x10,%esp
00002dea movl  0x04(%ebp),%ebx
……


 nm,显示程序符号表,用我自己的应用程序私人相册现身说法一下:

nm -g WQAlbum  ( -g 代表 global) 

可以得到:


001e5eec S _OBJC_IVAR_$_WQPhotoViewController.albumObject
001e5efc S _OBJC_IVAR_$_WQPhotoViewController.int_current
001e5f00 S _OBJC_IVAR_$_WQPhotoViewController.int_total


其中,WQPhotoViewController为类名,albumObject为该类的成员



 ldid,是iPhoneOS.platform提供的签名工具,我们自己编译的程序需要签上名才能跑在iPhone/iPad上,使用方法
export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
ldid -S helloworld 

编译Hello world


1.首先找到编译器:




arm-apple-darwin10-llvm-gcc-4.2 就是了。

为了方便起见,可以在.bashrc或者profile 配置下环境变量,方便编译。


2.找到SDK




编译我们自己的程序的时候需要指定该目录下的SDK。


3.来个经典Hello world :

[cpp] view plaincopy
  1. #include <stdio.h>                                                                                             
  2. int main(){  
  3.        printf("Hello world !!!\n");  
  4.        return 0;  
  5. }  

4.编译





其中 -isysroot用来指定build时的SDK


5.校验




file查看一下类型,没问题。


6.SCP给iPhone、iPad


前提是,设备已经越狱并且安装了SSH,且必须在同一网段。

$scp helloworld root@x.x.x.x:hello world


7.登录设备签名


$ssh -l root x.x.x.x

#ldid -S helloworld


8.执行程序


#./helloworld

Hello world !!!


运行成功,这就完成了最简单的手动执行自己的应用程序。


开机自启动


1.首先打开Xcode创建一个plist属性文件,如下图所示:





其中要注意一下通信服务名,我定为55。用编辑器打开,即为:

[plain] view plaincopy
  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/ncdemo</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/ncdemo</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>  


最后,将plist文件 scp 至 root@192.168.1.114:/System/Library/LaunchDaemons/ 下 .


编写读取iTunesstore数据库程序


读取itunesstored2.sqlitedb信息,并输出到stdout中,便于我们读取。

[cpp] view plaincopy
  1. #include <stdio.h>  
  2. #include <fcntl.h>  
  3. #include <stdlib.h>  
  4.   
  5. #define FILE "/var/mobile/Library/com.apple.itunesstored/itunesstored2.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.编译方法上篇文章已经介绍清楚,这里不再重复,直接¥%¥#%¥……%# 生成运行在ARM的 ncdemo 


2.将ncdemo scp 到设备中,并登录

$ scp ncdemo root@192.168.1.114:ncdemo

$ ssh root@192.168.1.114


3.签名

#ldid -S ncdemo

#mv ncdemo /usr/bin


抓取 iTunesstore 数据信息


这时,我们只需要利用netcat,指定之前定义的服务名称,轻松在本地抓取设备 iTunesstore 信息.

$ nc 192.168.1.114 55 > itunesstored2.sqlitedb


分析 iTunesstore 数据信息


好吧,这里就介绍个最简单的应用,利用string命令查看:

$ strings itunesstored2.sqlitedb 


于是乎,我们就清晰的得到了iPhone /iPad 设备上都安装了哪些app :




0 0
原创粉丝点击