ios逆向笔记

来源:互联网 发布:gec虚拟币源码 编辑:程序博客网 时间:2024/05/17 15:39
1.逆向工程概念:逆向工程是指借助工具对目标代码进行分析与修改的过程;
2.进行逆向工程的目的有:评估代码的安全性,了解目标代码某些特性的实现原理,去除使用限制,进行安全攻击等等;
3.逆向工程的一般过程:先对目标软件功能进行了解,然后借助工具对目标代码进行分析,修改目标代码,验证修改后的功能;
4.ios系统目录结构:不太需要关注,主要关注app被逆向后的安全问题为主;
5.ios app目录结构:
  <Application_Home>/AppName.app:应用程序目录;
  <Application_Home>/Documents/:存放用户文档和应用数据文件
  <Application_Home>/Library/:应用程序规范的顶级目录,包括Caches和Preference子目录;
  <Application_Home>/tmp/,保存应用数据,但不需要持久化的,在应用关闭后,该目录下的数据将删除;
  其中Documents和Library/Preference目录会被iTunes备份,其它目录不会;
6.ios代码签名原理:凡是在ios设备上运行的app都必须要对其代码进行签名,否则在内存中运行时将不能通过校验,代码无法运行,这个签名是由app store发布软件时所做的,由苹果的私钥对应用进行签名;对app进行代码签名不止影响二进制文件,而且影响所有代码,包括库文件等;当然苹果允许开发者对某些设备做特殊配置使其可运行未经苹果签名的应用;
7.ios程序类型:Application/Dynamic Library/Daemon三种,Application即我们所开发的app,其目录中主要有info.plist/可执行文件/资源文件;Dynamic Library是由app启动后进行动态加载的,本身并不是可执行程序,因此它的权限与可访问的空间均由加载它的那个app决定;Daemon一般用户感知不到,是系统层面的,逆向难度也更大,iOS启动时或接到命令时检查/System/Library/LaunchDaemons和/Library/Daemons目录下加载符合格式的plist文件,启动进程;
8.越狱后app store中的应用在目录/var/mobile/Applications中;cydia和系统app安装在/Applications目录中;
9./Library存放系统app的数据,其中最需要关注的是/Library/MobileSubtrate目录,其中存放了所有基于Mobilaesubtrate的插件;
10.iOS系统中MobileSubtrate是一个提供hook功能的基础平台,可提供动态替换内存中的代码、数据等,运行其上的插件通常被称为tweak;它非苹果官方的内容,而是越狱的人搞的;
11. MobileSubtrate有三部分功能:MobileHooker,MobileLoader和safe mode;前者提供函数替换的几个方法,MobileLoader加载第三方库在代码中运行,safe mode则是禁用所有第三方插件;
12./Library/MobileSubtrate目录下的插件有三种后缀,dylib/plist/disabled,前两者一个是动态库也即插件,一个是配合插件的描述文件,第三个扩展名是禁用插件,即由第一个扩展名改名即可;
13.tweak编写套路:
  1)确定目标;
  2)分析文件,寻找切入点,如可执行文件/plist文件,cydia和app store的app安装目录不同,preference和通知类的app所在位置不同;
  3)定位目标函数:使用class dump工具dump出.h文件,查找感兴趣的可能函数;
  4)使用tweak进行少量改写来测试函数功能,同时还可以使用Cycript来注入到目标进程中,直接在命令行敲脚本方式实时调用函数;
  5)解析函数参数;头文件中很多是id类型的,需要tweak打印出参数的类型;
14.class-dump只能查看到暴露出来的函数,而对函数的真正实现,以及动态分析,就需要借助IDA和GDB了,比如知道一个delegate的实现,但需要知道谁调用了这个delegate以及调用delegate前后的操作,则需要知道谁持有了这个delegate,此时可以在IDA中查看到对应函数setDelegate的地址,再使用GDB的方式去在这个地址上打个断点,在这个地方就可以通过IDA里看到是谁在调用这个函数,从而也可以知道与delegate相关的前置操作是在这个函数中完成的;
15.与逆向相关的主要是要关注安全问题:即函数名必须要做混淆,一些敏感信息和加密串都不能明文方式硬编码,存服务器端或者经过特定转码存储,与服务器端交互采用https,本地数据库等信息均需要通过加密存储等;

0 0
原创粉丝点击