发新帖

ios应用逆向工程

[复制链接]
13206 0

一、什么是逆向工程?

软件的逆向工程指的是通过分析一个程序或系统的功能、结构或行为,将它的技术实现或设计细节推导出来的过程。

二、iOS逆向工程的作用

1.与安全相关的iOS逆向工程

(1)评定安全等级 (2)逆向恶意软件(查毒和杀毒) (3)检查软件后门 (4)去除软件的使用限制(破解和盗版) (1)逆向系统调用(如调用系统的锁屏,关机等功能) (2)借鉴别的软件(向优秀的软件学习)

三、iOS软件逆向工程的一般过程

软件逆向工程可以看做是系统分析和代码分析两个阶段的有机结合。

在系统分析阶段,要从整体上观察目标程序的行为特征、文件的组织结构,从而找到我们想要逆向的点。然后从该入口进入代码分析阶段,利用各种工具对程序本身的二进制文件进行分析,从而达到我们的目的。

四、iOS软件逆向工程用到的工具

分为四大类:

1.监测工具:用于嗅探、监测、记录目标程序行为的工具。常用的有Reveal, tcpdump, libNotifyWatch和PonyDebugger等。

2.开发工具:用于开发越狱代码的工具。最著名的就是Theos,能够编译生成Tweak插件。

3.反编译器:主要是IDA,该工具横跨Windows/Linux/Mac平台,它将目标程序的可执行文件作为输入,然后输出改程序的汇编代码,甚至是伪代码。

4.调试器:主要是基于命令行的GDB。事实上,Xcode中的调试器只是GDB(GNU Debgger)或LLDB的图形化包装而已。

五、iOS系统目录结构

首先下载个iFile,可以用来直观地查看iOS系统的目录结构。

下面记录一些关键的iOS目录结构:

/var:“variable”的简写,存放一些经常更改的文件,例如日志、用户数据、临时文件等。其中/var/mobile/Applications下存放了所有App Store App。

/Applications:存放所有的系统App和来自Cydia的App,不包括App Store App。越狱的过程把/Applications变成了一个符号链接,实际指向/var/stash/Applications。

/Library:用来存放系统App的数据。其中/Library/MobileSubstrate中存放了所有基于MobileSubstrate的插件。

注:MobileSubstrate(手机基础平台)是一个提供hook(注入)功能的基础平台,运行在该平台上的插件通常称为tweak(扭曲,改动)。

在/Library/MobileSubstrate下通常有3类文件:

(1)dylib:即Dynamic Library,也就是tweak插件。

(2)plist:用于配合dylib使用的filter文件,指定注入目标。其格式为:

Filter = {

Bundles = (com.apple.springboard);

};

(3)disabled:被SBSettings禁用的tweak文件,事实上就是将dylib文件改了个后缀,不让MobileSubstrate加载而已。

/System:包含了大量的系统组件。 其中/System/Library/Frameworks/System/Library/PrivateFrameworks存放iOS中的各种framework,包括公开的和私有的等等。

/System/Library/CoreServices里的SpringBoard.app就是桌面管理器。

/System/LIbrary/PreferenceBundles:其中的各种bundle提供了“设置”中的绝大多数功能。

/User:实际指向/var/mobile。该目录存放了大量的用户数据,例如:

/var/mobile/Media/DCIM:照片目录。

/var/mobile/Library/SMS:短信目录。

/var/mobile/Library/Mail:邮件目录。

/var/wireless/Library/CallHistory:通话记录。貌似在iPod上没有这个目录。

六、iOS文件权限

一个组可以包含多个用户,一个用户可以属于多个组。

iOS中的每个文件都有一个属主用户和属主组。每个文件都具有一系列的权限。 在iOS中用3bit表示文件的使用权,从高位到低位分别是r(read), w(write), x(execute)权限。

文件和用户的关系存在三种可能性:

(1)此用户是属主用户;

(2)此用户不是属主用户,但在属主组里;

(3)此用户既不是属主用户,也不在属主组里。

例如:

111101101代表rwxr-xr-x,其8进制为755,它表示该文件的属主用户拥有r, w, x权限;而属主组只有r, x权限;其他任何人只有r, x权限。

七、iOS程序类型

越狱iOS中最常见的程序有Application, Dynamic Library和Daemon三类。

1.Application

除了传统意义上的App外,越狱iOS平台上还有两种App形式的存在:WeeApp(依附于NotificationCenter的App)和PreferenceBundle(依附于Settings的App),常见于Cydia平台。

普通App的bundle中存放的是可执行程序和所需资源,而framework的bundle中存放的是动态链接库。

主要关注App中的三个部分:

1.Info.plist:该文件记录了App的基本信息,如bundle identifier,可执行文件名,图标文件名等。

2.可执行程序:主要攻击目标之一。

3.Resouces(资源文件):其中各种本地化字符串(strings)是定位逆向目标的重要线索。

两者目录结构差别不大,但前者的属主用户和属主组一般是root和admin,而后者的属主用户和属主组一般是mobile,二者的权限不同。

另外,/Applications目录中App安装包的格式为deb,/var/mobile/Applications目录中App安装包的格式为ipa。

其中:

deb格式是Debian系统专属安装包格式,而这种格式的安装包经常会涉及系统底层的操作,可以获取较高的权限。从Cydia下载的App都是deb格式。

ipa格式是苹果公司在iOS中唯一的官方安装包格式。

2.Dynamic Library

动态库文件和静态库文件的区别在于,静态库文件是一次性加载的,且常驻内存。而动态库文件只有App要用到这个Library时,系统才会把这个Library加载到内存中。其中内核会启动Dynamic Loader(/usr/lib/dyld)把App需要的Dynamic Library加载进App的内存空间中。注意动态库的权限和可用的内存空间由加载它的那个App来决定。

iOS系统的daemon(后台守护进程)主要由一个可执行文件和一个plist文件构成。其中plist文件记录了daemon的基本信息。

iOS的根进程是/sbin/launchd,它会在开机或接到命令时检查/System/Library/LaunchDaemons和/Library/Daemons中所有符合格式规定的plist文件,然后按需启动对应的daemon。

八、初尝越狱插件OpenSSH

首先在越狱机子上装上OpenSSH插件,然后查看设备的IP地址,这里假设为192.168.xxx.xxx。

然后用Mac上的Terminal通过Open SSH连接到设备上(初次登录密码是alpine,必须立即修改,否则任何人都可以连接到你的机子上搞破坏)。

连接命令为:ssh root@设备IP地址

修改密码命令为:passwd

例如:

$ ssh root@192.168.xxx.xxx 
The authenticity of host '192.168.xxx.xxx (192.168.xxx.xxx)' can't be established. 
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx. 
Are you sure you want to continue connecting (yes/no)? y 
Please type 'yes' or 'no': yes 
Warning: Permanently added '192.168.xxx.xxx' (RSA) to the list of known hosts. 
root@192.168.xxx.xxx's password: 
root#

修改密码:

root# passwd
Changing password for root.
New password:
Retype new password:
root#

以后就可以用Mac通过SSH连到iOS设备上去了,然后用终端使劲折腾吧。哈哈。

举报 使用道具

回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表