iOS代码混淆

news2024/11/15 11:27:18

文章目录

  • 一、混淆的原理
  • 二、实现混淆
    • 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;
do
    if [[ ! -z "$line" ]];
    then
            ramdom=`ramdomString`
            echo $line $ramdom

            # 将生成的随机字符串插入到表格中
            insertValue $line $ramdom

            # 將生成的宇符串写入到宏定义文件中,变量是$HEAD_FILE
            echo "#define $line $ramdom" >> $HEAD_FILE
    fi
done

echo "#endif" >> $HEAD_FILE

sqlite3 $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.coloradmin.cn/o/907413.html

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

相关文章

百华劳保|听厂家聊聊如何检测防水劳保鞋?

说起防水劳保鞋大家可能并不陌生,在有积水或水利工程这些工作场景中使用,是防止水渗透鞋子的安全防护鞋。许多企业会为员工发放防水劳保鞋,在采购时一般都需要进行防水测试,提供相对应的检测报告。今天百华小编与大家聊聊都是如何…

毛利率下滑至负数,但小鹏汽车仍有信心

KlipC报道:8月18日周五,港股盘后美股盘前,小鹏汽车公布截至2023年6月30日的二季度业绩,据数据显示本季度小鹏营收50.6亿人民币,略超预期。但受G3i的存货减值及存货购买合约损失拖累,毛利率下滑至-3.9&#…

vellum (Discovering Houdini VellumⅡ柔体系统)学习笔记

视频地址: https://www.bilibili.com/video/BV1ve411u7nE?p3&spm_id_frompageDriver&vd_source044ee2998086c02fedb124921a28c963(搬运) 个人笔记如有错误欢迎指正;希望可以节省你的学习时间 ~享受艺术 干杯&#x1f37b…

一“码”当先,PR大征集!2023 和RT-Thread一起赋能开源!

活动地址:https://club.rt-thread.org/ask/article/3c7cf7345ca47a18.html 活动介绍 「一“码”当先,PR大征集!」是一项为了鼓励开发者积极参与开源软件开发维护的活动。 你可在Github RT-Thread( https://github.com/RT-Thread …

学习ts(五)类

定义 是面向对象程序设计(OOP)实现信息封装的基础 类是一种用户定义的引用数据类型,也称类类型 JavaScript的class,虽然本质是构造函数,但是使用起来已经方便了许多,js中没有加入修饰符和抽象类等特性 ts的class支持面…

飞机打方块(五)游戏音乐

一、新建节点 1.在Start场景中新建Music节点,绑定canvas 2.在Game场景中新建Music节点 3.新建节点 4.新建Music脚本,绑定Canvas Music.ts const { ccclass, property } cc._decorator;ccclass export default class NewClass extends cc.Component {p…

【静态时序分析STA(邸志雄)/2023年8月20日】

内容:TCL语言(PT),静态时序分析基础(工艺库、STA环境、时序检查方法、多时钟等特殊时序分析),SDC(tcl设计约束) CTS:clock tree systhesis Tsu建立时间/Th保…

实验四 SD 卡启动盘制作

【实验目的】 掌握 SD 卡启动盘的制作方法 【实验环境】 FS4412 实验平台 【实验步骤】 烧写工具默认从 0 扇区开始烧写,这里我们自己在 uboot 之前放一个512 字节的空镜像 将资料中“u-boot 镜像”中的 u-boot-fs4412.bin 拷贝到 ubuntu 的家目录下 在终端输…

升级家庭网络!Wi-Fi 7让你流畅体验网速飞快的3大原因

与我们的智能手机和笔记本电脑不同,即使是最好的Wi-Fi路由器也是我们家中最有可能被视为理所当然的技术——也就是说,直到出现问题。然而,一旦Wi-Fi 7成为主流,这种情况可能很快就会改变。 虽然从Wi-Fi 6到Wi-Fi 6E的飞跃引入了更快的6 GHz频段,但这还不足以让大多数人升…

善于打仗的人,没有特别大的名气和勇功

善于打仗的人,没有特别大的勇功 【安志强趣讲《孙子兵法》第15讲】 【原文】 见胜不过众人之所知,非善之善者也;战胜而天下曰善,非善之善者也。 【趣讲白话】 预判胜负没有超出常人的见识,算不上高明中最高明的&#x…

抓住WhatsApp 营销风口,做全球电商领跑者

您的电子邮件营销活动效果是否一直不理想?不妨考虑 WhatsApp营销,一种实时通讯营销,可帮助企业接触更广泛的受众,与客户建立个人联系并最终增加销售额。还可以再借助具有强大功能的全渠道客户服务工具,例如SaleSmartly…

初出茅庐的小李博客之STM32CubeMx配置USART1增加打印功能

1.创建基于STM32F03C8T6工程 1.1配置时钟 选择外部高速时钟源HSE 1.2配置系统时钟树使其达到最大时钟72MHz(最大系统时钟) 配置串口1 生成代码 具体工程配置可参考上几篇博客,地址 初出茅庐的小李博客之STM32CubeMx驱动WS2812B实现幻彩&a…

小红书直播浪潮下,怎样找到正确的入局方向?

在今年举办的“电商直播时尚合伙人大会”上,小红书公布了一组数据:2022年小红书电商直播主播数量同比增长337%,平台直播场次同比增长了214%。 相较于其他平台,小红书直播起步较晚,今年凭借董洁、章小蕙等IP“顶流”&am…

【附源码】六个Python表白小代码,送给心爱的她,让她高兴一整天~

话说明天就是七夕了,买礼物了吗? 什么?居然还没买礼物,那这个代码正好送给你,六个Python爱心表白代码,让她高兴一整天! 话不多说,咱直接上代码! 1、紫色爱心 先看效果…

K8s学习笔记4

场景: 项目研发部门最近要进行应用运行基础环境迁移,需要由原先的虚拟机环境迁移到K8s集群环境中,以便应对开发快速部署和快速测试的需要,因此,需要准备一套可以用于开发需求的K8s集群,但是对于仅有容器基…

YOLO目标检测——MNIST手写数字数据集下载分享

MNIST手写数字图像数据集是一个经典的用于图像分类任务的数据集,其中包含了大量的手写数字图像样本 数据集点击下载: MNIST手写数字数据集7000张图片.rar

使用Xshell7控制多台服务同时安装ZK最新版集群服务

一: 环境准备: 主机名称 主机IP 节点 (集群内通讯端口|选举leader|cline端提供服务)端口 docker0 192.168.1.100 node-0 2888 | 3888 | 2181 docker1 192.168.1.101 node-1 2888 | 388…

元核云私募双录助力私募基金业务高效合规

近年来,私募基金监管政策不断收紧,今年7月发布的《私募投资基金监督管理条例》更是把私募投资基金业务活动纳入法治化、规范化轨道进行监管。 作为保障私募基金业务透明合规的重要手段,“双录”一直是私募流程中非常重要的一环,多…

图像降采样的计算原理:F.interpolate INTER_AREA

一、F.interpolate——数组采样操作 torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode=nearest, align_corners=None, recompute_scale_factor=None) 功能:利用插值方法,对输入的张量数组进行上\下采样操作,换句话说就是科学合理地改变数组的尺…