1、iOS 软件逆向工程常用的工具

class-dump软件获取app的.h文件目录 逆向常用的监测工具:Reveal、tcpdump、libNotifyWatch、PonyDebugger Reveal:一款类似Xcode查看器的UI页面查看工具 开发越狱代码的工具:Theos(从低维的APP看向高维的APP) 反编译器工具:IDA、IDA pro(可以查看到伪代码) 调试器:Xcode有源码的情况下打断点一步步调试(集成了GDB或LLDB)

无源码的情况下在iOS设备上运行基于命令行的GDB

2、iOS程序类型

越狱最常见的程序有Application(简称APP)、Dynamic Library、Daemon三大类 在App Store 中只能发布App这一类型的程序,在越狱平台(Cydia)上还有另外两种类型的存在:WeeApp(依附于Notification Center的APP)、PreferenceBundle(依附于Settings的APP) 在逆向工程中,FrameWork的地位比APP的地位高很多,因为APP的大部分功能都是通过调用FrameWork提供的接口来实现的。 逆向工程主要关注APP的三大部分 1)Info.plist (利用MobileSubstrate对APP进行hook) 获取正确的Bundle Identifier是成功逆向的第一前提 2)Executable (可执行程序) 3)Resource(资源文件) 目录权限问题 /Application :存放的是从Cydia下载的程序和苹果自带的那些程序,有root权限和admin权限,安装包格式deb /var/mobile/Application:存放从App store下载的程序,只有个mobile权限,安装包格式spa

静态库与动态库的区别:

Static Library:在一个APP启动时,系统会把代码和它所链接的Static Library一股脑的放进分配好的内存空间里,不过会因为一次性加载的内容过多,会造成APP启动慢。 Dynamic Library:相对“智能”,只有当APP要用到Library时,系统才把这个Library加载进内存。值得一提的是,虽然Dynamic Library的功能非常的强大,但其本身不是可执行的程序,而是以类似插件的形式存活在一个APP中的,是APP的一部分。所以,Dynamic Library的权限及内存空间是由加载它的那个APP决定的,比如你写了一个Instagram的tweak插件,用来将你喜欢的图片保存在本地,如果你保存的目录是/var/mobile/Applications/InstagramGUID/Documents,那么这样操作没有问题,你的tweak 插件能够非常好的工作;如果你想保存在/Developer下,而你又没注意或忘记了这个tweak插件是存活在一个App Store APP里,那么可能在兴高采烈地保存了一大推美图,准备回头细细品味时,却发现/Developer里啥也没有—你的写操作都被sandbox给禁掉了。

3、Daemon(后台程序)

BackGrounder是一款帮助APP实现真正后台运行的强大插件。 imagent保障iMessage的正确收发; mediaserverd处理几乎所有的音频、视频; syslogd记录系统日志。

iOS系统中的daemon主要由一个可执行文件和一个plist文件构成。iOS的根进程是/sbin/launchd,会在开机或接到命令时检查/System/Library/LaunchDaemons和/Library/Daemons下所有符合格式规定的plist文件,然后按需启动对应的daemon。这里的plist文件与APP中Info.plist文件作用类似,记录了daemon的基本信息。