Swift实现代码混淆详解

目录
  • 1. 新建相关文件
  • 2. 导入文件至项目
  • 3. 修改项目配置
    • 3.1 修改TARGETS配置
    • 3.2 修改指令文件
      • 3.2.1 打开confuse.sh文件,复制并粘贴一下文本
      • 3.2.2 修改指令文件权限
    • 3.3 修改需要混淆的方法名文件
    • 3.4 修改pch文件配置
  • 4. 运行效果

1. 新建相关文件

新建文件confuse.shfunc.list

创建文件方式如下:

$ cd ~/Desktop/ceshi
$ touch confuse.sh
$ touch func.list

最终结果如下:

2. 导入文件至项目

将创建的confuse.sh文件以及func.list文件导入项目
最终结果如下

3. 修改项目配置

3.1 修改TARGETS配置

如果没有RunScript。请点击红框内+进行新增

RunScript内输入的文本

$PROJECT_DIR/confuse.sh

3.2 修改指令文件

3.2.1 打开confuse.sh文件,复制并粘贴一下文本

#!/usr/bin/env bash

TABLENAME=symbols
SYMBOL_DB_FILE="symbols"
STRING_SYMBOL_FILE="func.list"
HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"
export LC_CTYPE=C

#维护数据库方便日后作排重
createTable()
{
    echo "create table $TABLENAME(src text, des text);" | sqlite3 $SYMBOL_DB_FILE
}

insertValue()
{
    echo "insert into $TABLENAME values('$1' ,'$2');" | sqlite3 $SYMBOL_DB_FILE
}

query()
{
    echo "select * from $TABLENAME where src='$1';" | sqlite3 $SYMBOL_DB_FILE
}

ramdomString()
{
    openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 16
}

rm -f $SYMBOL_DB_FILE
rm -f $HEAD_FILE
createTable

touch $HEAD_FILE
echo '#ifndef Demo_codeObfuscation_h
#define Demo_codeObfuscation_h' >> $HEAD_FILE
echo "//confuse string at `date`" >> $HEAD_FILE
cat "$STRING_SYMBOL_FILE" | while read -ra line; do
    if [[ ! -z "$line" ]]; then
        ramdom=`ramdomString`
        echo $line $ramdom
        insertValue $line $ramdom
        echo "#define $line $ramdom" >> $HEAD_FILE
    fi
done
echo "#endif" >> $HEAD_FILE

sqlite3 $SYMBOL_DB_FILE .dump

3.2.2 修改指令文件权限

$ cd ~/Desktop/ceshi
$ chmod 755 confuse.sh

3.3 修改需要混淆的方法名文件

打开func.list文件,在文件内输入需要进行方法名混淆的方法名

示例如下:

imageCompress
blurImage
viewDidLoad

3.4 修改pch文件配置

1、如果没有PrefixHeader.pch这种文件,则需要新建一个
2、打开PrefixHeader.pch文件

#ifndef PrefixHeader_pch
#define PrefixHeader_pch

// Include any system framework and library headers here that should be included in all compilation units.
#import "CodeObfuscation.h"

#endif /* PrefixHeader_pch */

4. 运行效果

运行com+B

希望本文所述对大家的Swift开发和学习有所帮助。

(0)

相关推荐

  • Swift 列举内存管理与异常处理具体代码

    1. Swift 内存销毁时机 // Swift5 内存销毁时机 // 引用类型的内存销毁时机 class ClassDemo { var a = "value a" deinit { // 实例被释放 print("deinit class a") } } // 可空类型 var ins1: ClassDemo? = ClassDemo() var ins2 = ins1 var ins3 = ins2 ins1 = nil // 取消 ins1 引用 ins2

  • Swift代码自定义UIView实现示例

    目录 Swift自定义View和OC自定义View的原理都是一样的,重写init()方法或initWithFrame()方法,下面简单说说如何自定义swift UIView 主要是重写init(frame:CGRect)方法,其中required init?(coder aDecoder: NSCoder) 是必不可少的,swift语言强制要求的 // // LoginImgFieldView.swift // SmartMilk // // Created by mac on 2017/6/9

  • Swift Self详解及简单实例代码

    Swift中Self的使用 用于消除访问属性,调用方法时所产生的歧义. 当函数的参数名和自身的属性名同名时,例如: /* 使用self指明被访问的是自身属性还是参数 */ class AClass { var greeting: String init(greeting: String) { // 使用self区分属性和参数 self.greeting = greeting } } 在便利构造函数中调用自身的指定构造函数时,例如: convenience init() { /* 必须使用self

  • Swift实现代码混淆详解

    目录 1. 新建相关文件 2. 导入文件至项目 3. 修改项目配置 3.1 修改TARGETS配置 3.2 修改指令文件 3.2.1 打开confuse.sh文件,复制并粘贴一下文本 3.2.2 修改指令文件权限 3.3 修改需要混淆的方法名文件 3.4 修改pch文件配置 4. 运行效果 1. 新建相关文件 新建文件confuse.sh和func.list 创建文件方式如下: $ cd ~/Desktop/ceshi $ touch confuse.sh $ touch func.list 最

  • jQuery动态添加.active 实现导航效果代码思路详解

     代码思路: 页面4: 页面5: 代码思路: 通过jq获取你打开页面的链接  window.location.pathname: 在HTML中给自己的li加入一个ID id的命名与网址链接中的href相同 通过jq包含方法找到相对应的li给他加入active类名 然后..就没有然后了... jq代码: $(function () { var li = $(".title_ul").children("li"); for (var i = 0; i < li.l

  • IOS 开发之Swift 元组的实例详解

    IOS 开发之Swift 元组的实例详解 元组是多个值组合而成的复合值.元组中的值可以是任意类型,而且每一个元素的类型可以是不同的. 元组声明 //普通声明 var point = (5,2) var httpResponse = (404, "Not Found") //定义类型声明 var point2 : (Int,Int,Int) = (10,5,2) var httpResponse2 : (Int,String) = (200,"ok") 元组解包 va

  • JS实现简单的选择题测评系统代码思路详解(demo)

    包含内容:JS封装表单,JS校验表单 说是测评系统,感觉只能算是一个小小的Demo,很水,,没有数据库库,,仅使用JS做简单的选择题测评系统 -------------------------------------------------------------------------------- 一.设计思路 表单封装: [1]由于采用JS封装提交所以,不需要form标签 [2]放置多个input标签,作为输入项 [3]编写JS获取输入项,并通过get方式提交到另一个页面 校验表单(显示结

  • Android开心消消乐代码实例详解

    突然想要在android上写一个消消乐的代码,在此之前没有系统地学过java的面向对象,也没有任何android相关知识,不过还是会一点C++.8月初开始搭建环境,在这上面花了相当多的时间,然后看了一些视频和电子书,对android有了一个大概的了解,感觉差不多了的时候就开始写了. 疯狂地查阅各种资料,反反复复了好几天后,也算是写出了个成品.原计划有很多地方还是可以继续写下去的,比如UI设计,比如动画特效,时间设计,关卡设计,以及与数据库的连接,如果可以的话还能写个联网功能,当然因为写到后期内心

  • JAVA类变量及类方法代码实例详解

    这篇文章主要介绍了JAVA类变量及类方法代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 类变量(static) 类变量是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量. public class C { public static void main(String[] args){ Child ch1 = new Child(12,"小小"

  • JavaWeb Refresh响应头代码实例详解

    这篇文章主要介绍了JavaWeb Refresh响应头代码实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.Refresh响应头:可以理解为定时的重定向,在指定的时间后发生页面的跳转 二.代码示例: package cn.xxx.Servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.Ht

  • 微信小程序换肤功能实现代码(思路详解)

    在手机.电脑使用频率如此高的当下,应用可以更换皮肤,以提升美观性,并减轻屏幕对眼睛的刺激,无疑对用户体验有很大的帮助 实现功能 要实现如上更换皮肤的效果,有几个思路: 1.准备皮肤相关的wxss,引入到app.wxss中,方便每个页面使用: 2.设置皮肤时,动态改变wxml中元素的类名或id,使页面应用对应的皮肤: 3.将选中皮肤的值保存在小程序本地缓存中,保证其他页面及下一次打开小程序时,页面展示正确的皮肤: 下面介绍一些实现的细节 wxml <view class="page"

  • php命令行模式代码实例详解

    php全集行模式,即php-cli,官方文档中称为: CLI SAPI(Server Application Programming Interface,服务端应用编程端口).听着挺复杂.其实是因为php原本为服务器端的脚本语言,所以引申出这个叫法. 与服务端模式的不同 服务端模式主要有两种工作方式: 作为web server的模式方式或作为一个cgi可执行程序. 前者,比如作为apach中的一个模块(如:php5apache2.dll); 后者作为可执行程序,如php-cig. 现在的替代者为

  • PHP队列场景以及实现代码实例详解

    为了降低单点压力,通常会根据业务情况进行分表分库,将表分布在不同的库中(库可能分布在不同的机器上),但是一个业务场景可能会同时处理两个表的操作.在这种场景下,事务的提交会变得相对复杂,因为多个节点(库)的存在,可能存在部分节点提交失败的情况,即事务的ACID特性需要在各个不同的数据库实例中保证.比如更新db1库的A表时,必须同步更新db2库的B表,两个更新形成一个事务,要么都成功,要么都失败. 那么我们如何利用mysql实现分布式数据库的事务呢? mysql是从5.0开始支持分布式事务 这里先声

随机推荐