iOS字符串安全

一个编译成功的可执行程序,其中已初始化的字符串都是完整可见的。 针对于iOS的Mach-O二进制通常可获得以下几种字符串信息:

  • 资源文件名
  • 可见的函数符号名
  • SQL语句
  • format
  • 通知名
  • 对称加密算法的key

攻击者如何利用字符串

资源文件名通常用来快速定位逆向分析的入口点。 想要知道判断购买金币成功与否的代码位置?只要确定购买成功时播放的音频文件名字或者背景图名字就可以顺藤摸瓜了。

kLoginSuccessNotification类似这种通知名称格外炸眼,利用Cycript发个此通知试试,也许会有什么意外收获。 拿到对称加密算法的key是件很幸福的事情。

字符串异或加解密

是的,字符串需要加密处理,但只需要对高度敏感字符数据做加密,比如对称加密算法的key。 其他的,需要提高编程安全意识来弥补。

常规办法是通过异或来加解密,来写个sample code:

static unsigned char XOR_KEY = 0xBB;

void xorString(unsigned char *str, unsigned char key)
{
unsigned char *p = str;
while( ((*p) ^= key) != '\0') p++;
} - (void)testFunction
{
unsigned char str[] = {(XOR_KEY ^ 'h'),
(XOR_KEY ^ 'e'),
(XOR_KEY ^ 'l'),
(XOR_KEY ^ 'l'),
(XOR_KEY ^ 'o'),
(XOR_KEY ^ '\0')};
xorString(str, XOR_KEY);
static unsigned char result[6];
memcpy(result, str, 6);
NSLog(@"%s",result); //output: hello
}

这样就无法从二进制中直接分析得到字符串“hello”了 扔进IDA里分析一下,发现效果不好,连续存储的’h’、’e’等字符还是暴露了可读的”hello”

改进一下,取消XOR_KEY独立变量的身份,改为宏,作为数据直接插入

#define XOR_KEY 0xBB

void xorString(unsigned char *str, unsigned char key)
{
unsigned char *p = str;
while( ((*p) ^= key) != '\0') p++;
} - (void)testFunction
{
unsigned char str[] = {(XOR_KEY ^ 'h'),
(XOR_KEY ^ 'e'),
(XOR_KEY ^ 'l'),
(XOR_KEY ^ 'l'),
(XOR_KEY ^ 'o'),
(XOR_KEY ^ '\0')};
xorString(str, XOR_KEY);
static unsigned char result[6];
memcpy(result, str, 6);
NSLog(@"%s",result); //output: hello
}

嗯这下好多了

iOS字符串安全的更多相关文章

  1. iOS字符串加密至MD5&及获取文件MD5

    iOS 字符串加密至MD5 #import <CommonCrypto/CommonDigest.h> + (NSString *) md5:(NSString *)str { const ...

  2. iOS 字符串 MD5

    iOS 字符串 MD5 Objective-C 实现 需要引入头文件 #import <CommonCrypto/CommonCrypto.h> 这里用方法实现 + (nullable N ...

  3. iOS 字符串处理笔记

    iOS字符串处理笔记,包括如何使用正则表达式解析,NSScanner扫描,设置和使用CoreParse解析器来解析处理自定义符号等内容 搜索 在一个字符串中搜索子字符串 最灵活的方法 - (NSRan ...

  4. ios字符串截取

    最近刚从 . net 转到ios平台  又开始了新的学习,所以开始写博客,这样可以让我每天都能进步一点点 对字符串的操作很多情况下和c#中的不一样 1.字符串的声明 //声明字符串 NSString  ...

  5. iOS 字符串的宽度和高度自适应

    //获取字符串的宽度 -(float)widthForString:(NSString *)value fontSize:(float)fontSize andHeight:(float)height ...

  6. iOS 字符串删除 DOM

    iOS  string 删除 包含的 DOM NSMutableString *mutableString = [NSMutableString stringWithString:responseSt ...

  7. iOS字符串为空的判断

    //判断字符串 -(BOOL) isValidString:(id)input { if (!input) { return NO; } if ((NSNull *)input == [NSNull ...

  8. ios字符串操作

    string的操作应用 NSRange range = [self.general rangeOfString:@"."]; NSString *str = [self.gener ...

  9. ios字符串计算高度总结

    1.用xib的话,设置约束的时候 不设置lable的高度即可,高度返回的就是最优高度. 2.用lable代码计算高度 CGFloat getHeightForLableString(NSString ...

随机推荐

  1. tyvj 2075 借教室 题解

    P2075 [NOIP2012T5]借教室 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 noip2012-tg 描述 在大学期间,经常需要租借教室.大到院 ...

  2. webapp开发基础

    1.首先我们来看看webkit内核中的一些私有的meta标签,这些meta标签在开发webapp时起到非常重要的作用   <meta content="width=device-wid ...

  3. JSP学习笔记(五):日期处理、页面重定向、点击量统计、自动刷新和发送邮件

    一.JSP 日期处理: 使用JSP最重要的优势之一,就是可以使用所有Java  API.本节讲述Java中的Date类,它在java.util包下,封装了当前日期和时间. Date类有两个构造函数.第 ...

  4. 后缀树(Suffix Trie)子串匹配结构

    Suffix Trie 又称后缀Trie或后缀树.它与Trie树的最大不同在于,后缀Trie的字符串集合是由指定字符串的后缀子串构成的.比如.完整字符串"minimize"的后缀子 ...

  5. 关于substring的char[]共享

    我们知道,对于一个较大的String对象假设从中获取一个子串.jdk默认子串的char[]是共享原串的char[].即子串的char[]是原串的char[]中的一部分, 这样对于一个原串多个子串的情况 ...

  6. 无法加载Dll”ArcGISVersion.dll”:0x8007007E

    在Win7x64位环境下,无法加载Dll"ArcGISVersion.dll":找不到指定的模块 解决方案: 打开项目的属性-生成-常规-目标平台,选择X86. 参考:http:/ ...

  7. android java 设计模式详解 Demo

    android java 设计模式详解 最近看了一篇设计模式的文章,深得体会,在此基础我将每种设计模式的案例都写成Demo的形式,方便读者研究学习, 首先先将文章分享给大家: 设计模式(Design ...

  8. Android应用更新自动检测下载

    由于Android项目开源所致,市面上出现了N多安卓软件市场.为了让我们开发的软件有更多的用户使用,我们需要向N多市场发布,软件升级后,我们也必须到安卓市场上进行更新,给我们增加了工作量.因此我们有必 ...

  9. SQL SERVER: 合并相关操作(Union,Except,Intersect)

    SQL SERVER: 合并相关操作(Union,Except,Intersect) use tempdb create table tempTable1 (id int primary key id ...

  10. 【转】MVC4验证用户登录特性实现方法

    在开发过程中,需要用户登陆才能访问指定的页面这种功能,微软已经提供了这个特性. // 摘要: // 表示一个特性,该特性用于限制调用方对操作方法的访问. [AttributeUsage(Attribu ...