OC 字符匹配小技巧 (模板构造)

遇到一个小需求: 给一个从 App Store 下载的 ipa 文件重签名。 这个需求有点荒谬,但是今天为了做一个实验,于是就下载了一个线上的 ipa 文件,然后使用自己的证书重新签名。

接下来就简单的介绍一下,在什么也不操作的情况下如何使用自己的证书重新签名。具体分成一下4个步骤:

    1. 砸壳。
    1. 给除可执行文件之外的 MachO文件的签名。
    1. 给.app 文件夹签名。
    1. 重新压成 zip 文件。

关于以上的4个步骤,都不是当前简书所要介绍的重点,具体的如何操作,请看我的另一篇简书:【重组 IPA (打包再签名) - 窥打包签名流程】。当前简书的重点是第二步:如何快速的找到 除可执行文件之外的 MachO文件?先直观的看一下这些文件在什么地方:

image.png

如果是正向开发的话,打包的时候回自动的将使用到的这个动态库放到这个 Frameworks 文件夹中。

这里可以手动的一个一个的将某个动态库的 MachO 文件路径拖到终端,然后执行签名命令, 这当然是最笨的方法。用一个高大上的方式就是代码实现。具体的规律是:所有的文件都在 Frameworks 中,某个动态库对应的 MachO 文件名等于动态库名称。核心代码如下:

/**
 查找所有动态库的 MachO 文件路径

 @param frameworksPath Frameworks的路径
 @return 返回结果
 */
- (NSArray*)signPathsWithFrameworksPath:(NSString*)frameworksPath {
    // 所有的子文件路径
    NSArray* subPaths = [[NSFileManager defaultManager] subpathsAtPath:frameworksPath];
    // 定义一个模板
    NSString* const templateString = @"#content#.framework/#content#";
    // 所有的匹配的路径
    NSMutableArray* signPaths = [NSMutableArray array];
    for (NSString* subPath in subPaths) {
        // 子路径的后段
        NSString* lastPathComponent = subPath.lastPathComponent;
        // 按照模本匹配出的字符串
        NSString* matchString = [templateString stringByReplacingOccurrencesOfString:@"#content#" withString:lastPathComponent];
        // 如果匹配出来的与当前的 subPath 相等, 那就是我们所要的
        if ([matchString isEqualToString:subPath]) {
            // 加上签名前缀
            NSString* signStrig = [NSString stringWithFormat:@"codesign -fs 283(证书的唯一编号)3C15E ./%@", matchString];
            [signPaths addObject:signStrig];
        }
    }
    // 这里的结果就可以直接放到一个 sh 文件中,直接执行就可以了
    return signPaths.copy;
}

以上的代码,看起来还是很直观的。比较关键的一句是:

// 定义一个模板
NSString* const templateString = @"#content#.framework/#content#";

这只是一个简单的例子,如果使用其它的方法,代码量也相差不大,但是在有的场合使用这样的模板还是挺方便的。比如前不久做了一个代码混淆的功能,其中有一个添加垃圾代码的功能。添加垃圾代码有两个核心的功能是:方法实现体与调用方法体。
可以先思考一下,如果不使用模板的话,那代码会很复杂,各种的字符串拼接。如果使用了模板,我们可以直接在模板中做替换即可。比如我的其中的一个方法调用模板是这样定义的:

// 调用模板
#define CodeODictionaryStringArrayCall @"[self #paramString#:#paramStringValue# #paramArray#:#paramArrayValue#];";

这是一个字符串的宏定义,当然也可以写成字符串常量。我简单的介绍一下这个方法调用模板结构:都是 self 调用,第一个参数是一个字符串,但是 SEL 段是随机生成的,传的参数也是随机生成的数组,第二个参数不用解释应该就懂。
如果不用模板,那就会使用各种的拼接,代码看起来还特别的凌乱,尤其的随机生成方法实现体。在这里也说明一个问题,所谓的垃圾代码的随机生成,也并非完全的随机,再怎么随机,都应该是有一定的套路的,至少要保证随机生成的代码运行不报错吧。

到这里,当前简书想要介绍的核心内容就结束了。上面的内容有点乱了,copy 一下标题吧:OC 字符匹配小技巧 (模板构造)

推荐两篇文章:

1、我的简书 重组 IPA (打包再签名) - 窥打包签名流程
2、 You should blog even if you have no readers

添加于 2018-11-07

今天在看 喵神VVDocumenter 发现,他在文档字符处理的时候,使用了另一种思路,感觉挺棒的,所以想借助这篇简书,直接分享一下。
这个工具的功能是自动生成注释模板:或枚举、或结构体、或方法。默认由 /// 触发,核心代码在 -[VVDocumenterManager textStorageDidChange:] 中:

image.png

在喵神的这段代码中,借助 NSPasteboard 做文本的替换,可谓 绝配

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,002评论 6 509
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,777评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,341评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,085评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,110评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,868评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,528评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,422评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,938评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,067评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,199评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,877评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,540评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,079评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,192评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,514评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,190评论 2 357