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;
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运行
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

发展全球电商业务,为什么首选Facebook Messenger电子商务?

Facebook Messenger电子商务就是使用Facebook的消息传递渠道Messenger来购买和销售产品或服务。通过将 Messenger与客户服务平台,例如SaleSmartly(SS客服)集成,企业可以利用渠道强大的消息传递功能为客户提供更加个性化和对话式的…

ComPDFKit PDF SDK for Windows Crack

ComPDFKit PDF SDK for Windows Crack 添加了在创建文本框时调整默认属性的支持。 增加了对调整PDF大小时调整宽度的支持。 添加了对编辑文本时更多快捷方式的支持。 优化了文本输入,并将字体样式与原始文本相匹配。 在内容编辑器模式下复制和粘贴时优化了UI交互。 …

提升研发效能的开发工具

一、前言 随着企业对创新和效率的追求不断升级,研发效能成为了炙手可热的概念。各大公司纷纷成立专门的团队,以提升研发效能为重要目标。本文将从研发人员的视角出发,结合自身的深度思考,探讨研发效能的相关概念,共同寻…

Django的模型

定义模型 from django.db import models class User(models.Model):# 类属性是表示表的字段username models.CharField(max_length50,uniqueTrue)password models.CharField(max_length200)create_time models.DateTimeField(auto_now_addTrue) # auto_now_add新增数据时间…

Const的区别 学习笔记

C程序设计之const八大用法_哔哩哔哩_bilibili const优先修饰const左边,若左边没有东西,则修饰右边的东西 前两个a,b不是指针由于修饰的是int,是类型,所以a和b的值不能改变 c的类型的指针,const修饰的是int&#xff0…

DSO 系列文章(3)——DSO后端正规方程构造与Schur消元

文章目录 DSO代码注释:https://github.com/Cc19245/DSO-CC_Comments

Unittest+Selenium模块驱动自动化测试实战

UnittestSelenium自动化测试框架使用模块驱动测试模型将冗余的代码封装成类,且基于PageObject的自动化设计模式,通过分层的方式将页面对象、操作、业务分开处理。 1、首先创建自动化测试框架的文件模块架构,创建common、base、testcase、rep…

PHP服饰文化网站系统Dreamweaver开发mysql数据库web结构php编程计算机网页项目

一、源码特点 PHP 服饰文化网站系统是一套完善的web设计系统,对理解php编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 源码下载 https://download.csdn.net/download/qq_41221322/88236778 PHP服饰文化网站…

天锐绿盾加密软件——「文件数据防泄密系统」

文件加密功能 采用透明加解密技术, 企业内部文件自动加密,内部正常使用,不改变使用习惯。加密后的文件未经许可,私自外发拷贝到公司以外,都将显示为乱码无法使用,从源头上保障核心数据安全。 产品跨平台支持…

Apinto 网关进阶教程,插件开发入门指南

Apinto 是基于Go语言,由 Eolink 自主研发的一款高性能、可扩展、易维护的云原生 API 网关。Apinto 能够帮助用户简单、快速、低成本、低风险地实现:系统微服务化、系统集成、向合作伙伴、开发者开放功能和数据。 通过 Apinto,企业能够专注于…

《HeadFirst设计模式(第二版)》第十一章代码——代理模式

代码文件目录: RMI: MyRemote package Chapter11_ProxyPattern.RMI;import java.rmi.Remote; import java.rmi.RemoteException;public interface MyRemote extends Remote {public String sayHello() throws RemoteException; }MyRemoteClient packa…

Aurora 8B/10B

目录 1. Overview2. Feature List2. Block Diagram3. PDU Transmission Procedure3.1. User InterfaceFraming InterfaceStreaming Interface 3.2. Clock Compensation3.3. Aurora 8B/10B Frame Gen3.4. 8B/10B Transmission Code 4. PDU Reception Procedure5. Flow Control5.…

构建 NodeJS 影院微服务并使用 docker 部署【01/4】

图片来自谷歌 — 封面由我制作 一、说明 构建一个微服务的电影网站,需要Docker、NodeJS、MongoDB,这样的案例您见过吗?如果对此有兴趣,您就继续往下看吧。 在本系列中,我们将构建一个 NodeJS 微服务,并使用…

React2023电商项目实战 - 1.项目搭建

古人学问无遗力,少壮工夫老始成。 纸上得来终觉浅,绝知此事要躬行。 —— 陆游《《冬夜读书示子聿》》 系列文章目录 项目搭建App登录及网关App文章自媒体平台(博主后台)内容审核(自动) 文章目录 系列文章目录一、项目介绍1.页面…

使用@antv/x6-vue-shape 遇到的问题

最近用antv/x6开发一个功能,遇到的坑太多了,心累啊。。。 想用官方提供的antv/x6-vue-shape ,目的是使用vue组件创建画布元素。 官方文档: 链接:使用 HTML/React/Vue/Angular 渲染 | X6 使用npm install 安装 报错…

linux部署kafka3.5.1(单机)

一、下载jdk17 kafka3.x版本需要jdk11以上版本才能更好的兼容,jdk11、jdk17都是LTS长期维护版本,而且jdk17支持springboot3.x,所以我选择了openjdk17。 下载地址: Archived OpenJDK GA Releaseshttps://jdk.java.net/archive/ 二、上传jdk安装包解压 …

接口自动化yaml文件读取与写入

前言 在走进yaml文件之前大家应该都很想知道他是用来干嘛的? 是的是的,他是用来做接口自动化测试的。 我们一起来学习他吧!——(一定要收藏带走哦❤) 1、yaml文件有什么作用呢? ①可作为配置文件使用—…

linux tomcat server.xml 项目访问路径变更不生效

如果想改成默认的127.0.0.1:8080 访问项目 先确定更改的作用文件 server.xml 的 host:appBase 标签 默认找到appBase webapps 下的war包,并解压,解压后的appname为访问路径 也就变成了 127.0.0.1:8080/appname host:Context:path 标签 appBase的 优先…

HTTP 握手过程

HTTP 握手过程 TCP 建立连接 3 次握手 客户端请求连接服务器服务器响应成功客户端回应服务器准备开始连接 TCP 结束连接 4 次挥手 客户端向服务器发送,断开请求服务器向客户端发送,还有数据没有传输完毕,请稍等服务器向客户端发送&#x…

STM32L151C8T6 芯片数据手册

1. 芯片型号含义 2. Flash: 64KB 3. keil 配置ST-Link 烧录程序 4. keil 选择Flash 烧录算法 5. 系统主频 32Mhz 6. 时钟树 clock tree