c语言代码混淆器,代码混淆

本文介绍了代码混淆的概念及其在C语言中的应用,特别提到了STCObfuscator这一Objective-C代码混淆工具的使用步骤。同时,文章还讨论了iOS逆向工程中的class-dump工具的安装和使用,以及遇到的问题和限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。目前已经存在许多种功能各异的代码混淆器。

将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字。比如改写成单个字母,或是简短的无意义字母组合,甚至改写成“__”这样的符号,使得阅读的人无法根据名字猜测其用途。重写代码中的部分逻辑,将其变成功能上等价,但是更难理解的形式。比如将for循环改写成while循环,将循环改写成递归,精简中间变量,等等。打乱代码的格式。比如删除空格,将多行代码挤到一行中,或者将一行代码断成多行等等。

STCObfuscator 是用来进行object-c代码混淆的工具,在模拟器DEBUG环境下运行生成混淆宏,混淆的宏可以在其他环境下进行编译,支持Cocoapod代码混淆。

一、使用:

pod 'STCObfuscator'

把下面的代码加入到Appdelegate didFinishLaunchingWithOptions方法里,

#import "STCObfuscator.h"

#if (DEBUG == 1)

[[STCObfuscator obfuscatorManager] confuseWithRootPath:[NSString stringWithFormat:@"%s", STRING(ROOT_PATH)] resultFilePath:[NSString stringWithFormat:@"%@/STCDefination.h", [NSString stringWithFormat:@"%s", STRING(ROOT_PATH)]] linkmapPath:[NSString stringWithFormat:@"%s", STRING(LINKMAP_FILE)]];

#endif

b2abb49283ff

完成下面配置:

1.在 Build Settings->Preprocessor Macros->DEBUG 中添加环境变量。

LINKMAP_FILE=$(TARGET_TEMP_DIR)/$(PRODUCT_NAME)-LinkMap-$(CURRENT_VARIANT)-$(CURRENT_ARCH).txt  和ROOT_PATH="${SRCROOT}"

b2abb49283ff

2.在 Build Settings 开启Write Link Map File, 设置成 YES。

b2abb49283ff

3.将下面的脚本添加到 Build Phases。

dir=${SRCROOT}

file_count=0

file_list=`ls -R $dir 2> /dev/null | grep -v '^$'`

for file_name in $file_list

do

temp=`echo $file_name | sed 's/:.*$//g'`

if [ "$file_name" != "$temp" ]; then

cur_dir=$temp

else

if [ ${file_name##*.} = a ]; then

find -P $dir -name $file_name > tmp.txt

var=$(cat tmp.txt)

nm $var > ${file_name}.txt

rm tmp.txt

fi

if [ ${file_name##*.} = framework ]; then

find -P $dir -name ${file_name%%.*} > tmp.txt

var=$(cat tmp.txt)

nm $var > ${file_name}.txt

rm tmp.txt

fi

fi

done

b2abb49283ff

4.在pch文件中添加以下代码:

#if (DEBUG != 1)

#import "STCDefination.h"

#endif

5.在DEBUG环境下用模拟器运行工程,在STCDefination.h头文件中生成混淆的宏。所有的混淆符号会保留在工程目录下的confuse.json。

b2abb49283ff

6.把工程目录下STCDefination.h头文件加入工程。

混淆后,如果工程增加代码,需要再次混淆,先清空STCDefination.h里面的内容,不能留任何空格和换行,然后pod update,再次在模拟器DEBUG环境下运行。

7.在 RELEASE 环境下运行工程,实现代码混淆。

混淆前逆向。

b2abb49283ff

混淆后逆向。

b2abb49283ff

二、iOS逆向工程之class-dump

1.安装:

将dmg文件中的class-dump文件复制到 /usr/local/bin , 终端输入 sudo chmod 777 /usr/local/bin/class-dump 更改权限

显示class-dump的用法和版本:class-dump --help

2.使用方法:

用终端输入命令 class-dump -H [.app文件的路径] -o [输出文件夹路径]

3.问题:Error: Cannot find offset for address 0x200000000100d256 in stringAtAddress:

原因:class-dump是利用Object-C语言的runtime特性,提取头文件,class-dump目前没法作用于Swift,如果项目中用到了OC和Swift混编,class-dump会失败。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值