iOS代码混淆

文章目录

  • 一、混淆的原理
  • 二、实现混淆
    • 1. 创建文件
    • 2. 将文件拖导入目录中
    • 3. 将以下脚本拷贝到刚新建的confuse.sh文件中
    • 4. 修改文件权限
    • 5. 修改项目配置
    • 6. 添加需要混淆的方法名
    • 7. 配置PCH文件
    • 8. 运行效果

一、混淆的原理

这里使用的混淆的原理是,用一串随机生成的字符串来替换相应的函数名和变量名

二、实现混淆

1. 创建文件

在相应的项目工程下新建一个confuse.sh 和 func.list文件

$ cd /Users/xxx/Desktop/ xxx
$ touch confuse.sh
$ touch func.list

2. 将文件拖导入目录中

3. 将以下脚本拷贝到刚新建的confuse.sh文件中

脚本源头来源

#!/usr/bin/env bash
# 这是Shel脚本,如果不懂shell,自行修炼: http://www.runoob.com/linux/linux-shell.btml
# 以下使用sqlite了进行增加数据,如果不了解sqlite了命令,自行修炼: http://www.runoob.com/salite/sqlite-tutorial.html# 数据表名
TABLENAME=symbols# 数据库名
SYMBOL_DB_FILE="symbols"# 要被替换的方法列表文件
STRING_SYMBOL_FILE-"$PROJECT_DIR/func.list"# 被替换后的宏定义在此文件里
HEAD_FILE-"$PROJECT_DIR/$PROJECT_NAME/CodeObfuscation.h"export LC_CTYPE=C# 维护数据库方便日后做bug排查
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
}# 生成随机16位名称
ramdomString()
{openssl rand -base64 64 | tr -cd 'a-zA-Z' | head -c 16
}# 删除旧数据库文件
rm -f $SYMBOL_DB_FILE# 删除就宏定义文件
rm -f $HEAD_FILE# 创建数据表
createTable# touch命令创建空文件,根据指定的路径
touch $HEAD_FILE
echo '#ifndef Demo_codeObfuscation_h
#define CodeObfuscation_h' >> $HEAD_FILE
echo "//confuse string at `date`" >> $HEAD_FILE
# 使用cat将方法列表文件里的内容全部读取出来,形成数组,然后逐行读取。并进行替换
cat "$STRING_SYMBOL_FILE" | while read -ra line;
doif [[ ! -z "$line" ]];thenramdom=`ramdomString`echo $line $ramdom# 将生成的随机字符串插入到表格中insertValue $line $ramdom# 將生成的宇符串写入到宏定义文件中,变量是$HEAD_FILEecho "#define $line $ramdom" >> $HEAD_FILEfi
doneecho "#endif" >> $HEAD_FILEsqlite3 $SYMBOL_DB_FILE .dump

4. 修改文件权限

$ chmod 755 confuse.sh

5. 修改项目配置

新增Run Script 添加

$PROJECT_DIR/confuse.sh

在这里插入图片描述

6. 添加需要混淆的方法名

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

viewDidLoad

7. 配置PCH文件

  1. 新建PCH文件
  2. 在工程的TARGETS里边Building Setting中搜索Prefix Header,添加文件
$(SRCROOT)/项目名称/xxx.pch
  1. 在PCH中引入头文件
#import "CodeObfuscation.h"

8. 运行效果

command+B运行
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/48671.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPS中的表格错乱少行

用Office word编辑的文档里面包含表格是正常的,但用WPS打开里面的表格就是错乱的,比如表格位置不对,或者是表格的前几行无法显示、丢失了。 有一种可能的原因是: 表格属性里面的文字环绕选成了“环绕”而非“无”,改…

行业追踪,2023-08-22

自动复盘 2023-08-22 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

深度学习3:激活函数

一、激活函数的简介与由来 激活函数:是用来加入非线性因素的,解决线性模型所不能解决的问题。 线性函数的组合解决的问题太有限了,碰到非线性问题就束手无策了。如下图。 通过激活函数映射之后,可以输出非线性函数。 最后再通过…

html写一个向flask_socketio发送消息和接收消息并显示在页面上

以下是一个简单的HTML页面&#xff0c;它包含一个输入框、一个发送按钮和一个显示区域。用户可以在输入框中输入消息&#xff0c;点击发送按钮&#xff0c;然后这个消息会被发送到 Flask-SocketIO 服务器。当服务器回应消息时&#xff0c;它会在页面的显示区域显示出来。 <…

IDEA项目实践——Element UI概述

系列文章目录 IDEA项目实践——JavaWeb简介以及Servlet编程实战 IDEA项目实践——Spring当中的切面AOP IDEA项目实践——Spring框架简介&#xff0c;以及IOC注解 IDEA项目实践——动态SQL、关系映射、注解开发 IDEWA项目实践——mybatis的一些基本原理以及案例 文章目录 …

1U和2U的服务器怎么选择

企业建设网站的过程中&#xff0c;离不开租用服务器的环节&#xff0c;服务器在多种场景里面都可以发挥作用&#xff0c;服务器租用渠道有哪些&#xff1f;1U、2U选哪种服务器比较好&#xff1f;大家跟着壹基比小鑫一起来了解具体内容吧&#xff01; 1U、2U选哪种服务器比较好&…

优化个人博客总结

前面学习完怎么搭建个人博客&#xff0c;后面要做的就是排版优化自己的博客了&#xff0c;今天通过教程学习到了然后更爱美化其中的效果&#xff0c;还通过改写代码来带到基本的效果展示&#xff0c;同时也把最开始学习的计算速成课的笔记输出在上面&#xff0c;这也是一个很好…

Linux系统USB摄像头测试程序(三)_视频预览

这是在linux上usb摄像头视频预览程序&#xff0c;此程序用到了ffmpeg、sdl2、gtk3组件&#xff0c;程序编译之前应先安装他们。 #include <sys/ioctl.h> #include <sys/stat.h> #include <sys/types.h> #include <fcntl.h> #include <zconf.h> …

通过postgresql的Ltree字段类型实现目录结构的基本操作

通过postgresql的Ltree字段类型实现目录结构的基本操作 将这种具有目录结构的excel表存储到数据库中&#xff0c;可以采用树型结构存储 DROP TABLE IF EXISTS "public"."directory_tree"; CREATE TABLE "public"."directory_tree" (…

[Unity] 基础的编程思想, 组件式开发

熟悉 C# 开发的朋友, 在刚进入 Unity 开发时, 不可避免的会有一些迷惑, 例如不清楚 Unity 自己的思想, 如何设计与架构一个应用程序之类的. 本篇文章简要的介绍一下 Unity 的基础编程思想. 独立 Unity 很少使用 C# 的标准库, 例如 C# 的网络, 事件驱动, 对象模型, 这些概念在 …

产品流程图是什么?怎么做?

产品流程图是什么&#xff1f; 产品流程图是一种图形化的表达方式&#xff0c;用于描述产品开发、制造、销售、使用等各个阶段中涉及的流程、步骤和关系。它通过图形符号、箭头、文本等元素&#xff0c;展示了产品的各个环节之间的关联和顺序&#xff0c;通常被用于可视化产…

c++ Union之妙用

union的作用基本是它里面的变量都用了同一块内存&#xff0c;跟起了别名一样&#xff0c;类型不一样的别名。 基本用法&#xff1a; struct Union{union {float a;int b;};};Union u;u.a 2.0f;std::cout << u.a << "," << u.b << std::endl…

lwIP更新记10:IP 冲突检测

lwip-2.2.0-rc1 版本于 2023 年 6 月 29 日发布&#xff0c;带来了我期盼已久的 IPv4 冲突检测 功能。 lwip-2.2.0-rc1 版本重新回归了 master 分支&#xff08;主分支&#xff09;&#xff0c;不再使用单独的稳定分支。 master 分支 是一个 Git&#xff08;版本控制程序&…

[保研/考研机试] KY196 复数集合 北京邮电大学复试上机题 C++实现

题目链接&#xff1a; 复数集合_牛客题霸_牛客网 一个复数&#xff08;xiy&#xff09;集合&#xff0c;两种操作作用在该集合上&#xff1a; 1、Pop 表示读出集。题目来自【牛客题霸】https://www.nowcoder.com/share/jump/437195121692724009060 描述 一个复数&#xff08;…

基于java羽毛球馆管理系统设计与实现

摘 要 时代的变化速度实在超出人类的所料&#xff0c;21世纪&#xff0c;计算机已经发展到各行各业&#xff0c;各个地区&#xff0c;它的载体媒介-计算机&#xff0c;大众称之为的电脑&#xff0c;是一种特高速的科学仪器&#xff0c;比人类的脑袋要灵光无数倍&#xff0c;什么…

如何做好流量经营?数字化系统如何加速流量增长

​在用户转化策略上&#xff0c;从“公域流量”到“私域流量”的来源转变&#xff0c;充分说明企业已经意识到公域流量存在成本高、粘度差、稳定性差等问题&#xff0c;开始寻求拥有更低成本、更容易培养忠实度、更容易精准触达的私域流量。但由于企业缺少整体、系统化的私域经…

Springboot内嵌SQLite配置使用

版本号 MacOS Apple M1 | Jdk17 | Maven 3.8.5 | SpringBoot 2.6.9 | SQLite 3.42.0.0 pom.xml <dependencies><dependency><groupId>org.xerial</groupId><artifactId>sqlite-jdbc</artifactId><version>3.42.0.0</version&g…

深入浅出 TCP/IP 协议栈

TCP/IP 协议栈是一系列网络协议的总和&#xff0c;是构成网络通信的核心骨架&#xff0c;它定义了电子设备如何连入因特网&#xff0c;以及数据如何在它们之间进行传输。TCP/IP 协议采用4层结构&#xff0c;分别是应用层、传输层、网络层和链路层&#xff0c;每一层都呼叫它的下…

SSD基本工作原理了解

SSD与RAM的原理有些类似&#xff0c;RAM使用晶体管和电容来表示0或1&#xff0c;晶体管用于将电荷转移到电容器或从电容器中吸取电荷&#xff0c;并且电荷必须每几微秒刷新一次。 而SSD相比于RAM的非易失性来自于其使用的浮栅晶体管。其创造了一个小笼子&#xff0c;不需要外界…

如何实现快速迁移TB级别的mysql数据库?

在大数据的领域,TB级别大小的数据库,一点都不夸张,这不我这一个客户就是这样 ,原本使用的是腾讯云的云服务器,奈何配置不够用,考虑再三换成了独立物理机,但是迁移数据库就成了一大难题!经过多方尝试,目前的方法可能是最快的了! 方法一:使用ssh指令将旧服务器的数据…