iOS加固方式分析:

符号混淆:符号混淆的中心思想是将类名、方法名、变量名替换为无意义符号,提高应用安全性;防止敏感符号被class-dump工具提取,防止IDA Pro等工具反编译后分析业务代码。

代码逻辑混淆:对方法体进行混淆,保证源码被逆向后该部分的代码有很大的迷惑性,因为有一些垃圾代码的存在;对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低,这很容易把破解者带到沟里去;它拥有和原始的代码一样的功能,这是最最关键的。

URL编码加密:对程序中出现的URL进行编码加密,防止URL被静态分析。

网络传输数据加密:对客户端传输数据提供加密方案,防止通过网络接口的拦截获取数据。

主动保护策略:增加反调试机制等。

为文件启动数据保护:

应用必须使用NSManager类为NSFileProtectionKey设置一个值,默认值为NSFileProtectionNone,表示任何时候都可以读写这些文件。

模糊测试(fuzzing)也称动态分析:

通过反复向待测应用发送畸形的数据,对应用进行动态测试的过程。

模糊测试步骤:

一、确定待测试应用

二、生成用于模糊测试的输入

三、将这些输入送入应用

四、(持续)监控待测应用,找出发生错误的地方

模糊输入(测试用例)的构造方法:

一、基于变异构造方法:在原有效的输入上,做随机修改

二、基于生成的构造方法:x先了解输入规范,再次基础上构造有效确畸形的输入

ARM基础知识:

ARM是一种使用RISC(Reduced Instruction Set Code , 精简指令集代码)的架构,意味着它有很少的指令和许多通用寄存器,事实上,总共有16个被标记为R0-R15的寄存器。最后三个寄存器具有特殊的名称和值,R13又称为SP(栈指针寄存器),R14又称为LR(链接寄存器),R15又称为PC(程序计数器)。这些寄存器都是通用的,可以任意读写。

ARM具有两种执行模式:ARM和Thumb,ARMv7引入第三种模式Thumb-2。两种模式的主要区别在于:ARM下所有指令都是32位,Thumb指令是16位,Thimb-2指令两者兼有。

处理器通过约定:处理器在在当前程序状态寄存器(CPSR)的T位为1,J位为0时会执行Thumb模式。

iOS调用约定:

使用ARM标准约定,前四个参数使用R0-R3寄存器传递,更多的参数会被压到栈中,返回值存储在R0寄存器中。

ARM指令集中有若干种调用函数个改变执行流的方法:

B(分支)指令:该指令会将程序计数器改变成第一个操作数指定的地址。

BL(带链接的分支)指令:该指令会将程序计数器改变成第一个操作数指定的地址,同时把返回的地址存储在LR寄存器中。(返回紧随调用之后的指令)

BX指令:在不存储返回地址的情况下改变执行流。

BLX:与BL类似。

xcode ghost 病毒传播过程:判断iOS应用是否检查越狱环境:

一、检测应用是否进行常规的越狱工具检测,具体包含

/Applications/Cydia.app

/Library/mobileSubstrate/MobileSubstarte.dylib

/bin/bash

/usr/sbin/sshd

/etc/apt
判断应用中是否包含上面的符号

二、检测应用是否进行URL Scheme判断:检测Cydia注册的URL Scheme

判断应用中是否包含“cydia://package/com.example.package”

三、检测应用是否尝试读取应用列表:非越狱环境下不会成功

判断应用中是否包含“/usr/Applications/”

四、检测应用对否使用stat系列函数检测越狱工具

判断应用中是否包含 "/Applications/Cydia.app"

五、检测应用是否进行环境变量检测

判断应用中是否包含 “DYLD_INSERT_LIBRARIES”

六、查看应用加载的动态库及其内存位置:使用_dyld\_image_count()和_dyld_get_image_name()\

iOS应用内网测试信息残留检测:检测程序是否包含残留内网网址,测试数据等;

在程序中匹配‘http://10.[0-9]+’

results matching ""

    No results matching ""