美文网首页
代码混淆

代码混淆

作者: 水灵芳蕥 | 来源:发表于2019-02-15 17:18 被阅读25次

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

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

工具:https://github.com/chenxiancai/STCObfuscator

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

完成下面配置:

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

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

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

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

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

#if (DEBUG != 1)

#import "STCDefination.h"

#endif

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

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

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

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

混淆前逆向。

混淆后逆向。

二、iOS逆向工程之class-dump

1.安装:

下载地址:http://stevenygard.com/projects/class-dump/

将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会失败。

相关文章

  • Android项目的代码混淆

    代码混淆: 代码混淆有两种重要功能。其一,混淆代码。其二,优化代码。有的混淆是根据自己写得代码有关,需要根据异常错...

  • iOS 初探代码混淆(OC)

    iOS 初探代码混淆(OC) iOS 初探代码混淆(OC)

  • ProGuard详解

    Android分享:代码混淆那些事Android代码混淆之混淆规则Android-Dev-Favorites An...

  • Android代码混淆

    待整理。。。 参考: Android混淆从入门到精通 Android代码混淆之混淆规则 代码混淆规则配置文件:pr...

  • iOS-代码混淆加固策略

    iOS-代码混淆加固策略 iOS-代码混淆加固策略

  • iOS应用安全之代码混淆

    iOS应用安全之代码混淆iOS应用安全之代码混淆

  • 代码混淆

    混淆就是在你不想开源代码的时候对代码进行混淆处理,让代码即使被反编译也难以阅读,而且还可以精简编译后程序的大小 一...

  • 代码混淆

    傻瓜式模板

  • 代码混淆

    iOS代码混淆----自动 app 安全(一): 代码混淆防止反编译查看真实的头文件函数声明 iOS安全攻防(二十...

  • 代码混淆

    什么是混淆? 代码混淆:花指令,是将计算机程序的代码,转换成一种功能上等价,但是难以阅读和理解的形式的行为。 代码...

网友评论

      本文标题:代码混淆

      本文链接:https://www.haomeiwen.com/subject/izsmeqtx.html