首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Objective-C混淆代码

Objective-C混淆代码

作者头像
Helloted
发布于 2022-06-07 13:11:51
发布于 2022-06-07 13:11:51
1.2K0
举报
文章被收录于专栏:HellotedHelloted

一、利用class-dump来查看源文件

class-dump是一个逆向工具,可以用来查看未加固的APP的方法名和属性名

安装class-dump

从class-dump下载地址将dmg文件下载下来,将class-dump复制到/usr/bin目录,并在终端执行下面命令赋予权限

代码语言:javascript
复制
sudo chmod 777 /usr/bin/class-dump

如果没有办法复制到根目录,则先要开启系统权限

重启 Mac,按住 Command+R 键直到 Apple logo 出现,进入 Recovery Mode 点击 Utilities > Terminal 在 Terminal 中输入 csrutil disable,之后回车 重启 Mac

在终端中输入class-dump看到如下就说明安装成功了

查看头文件

将ipa改名为zip并解压能看到一个.app结尾的文件,执行

代码语言:javascript
复制
class-dump -H /Users/imac/Desktop/Payload/test.app -o /Users/imac/Desktop/heads

其中/Users/imac/Desktop/Payload/test.app是源文件路径, /Users/imac/Desktop/heads是要导出的头文件的路径

可以在head文件夹里看到包含第三方库的头文件,里面可以看到属性名和方法名

二、混淆代码

在项目里添加两个文件confuse.sh、func.list

在funlist里写上你要混淆的字符串;

在confuse.sh添加以下代码

代码语言:javascript
复制
#!/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

用终端给confuse.sh添加权限

代码语言:javascript
复制
chmod 755 confuse.sh

并且在Build Phase里添加运行脚本

并且在pch文件中加入

代码语言:javascript
复制
#ifdef __OBJC__  
    #import <UIKit/UIKit.h>  
    #import <Foundation/Foundation.h>  
    //添加混淆作用的头文件(这个文件名是脚本confuse.sh中定义的)  
    #import "codeObfuscation.h"  
#endif  

再次打包用class-dump测试一下,会发现代码乱了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除
目录
  • 一、利用class-dump来查看源文件
    • 安装class-dump
    • 查看头文件
  • 二、混淆代码
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档