iOS 代码安全之代码混淆实践:

  前言:

  在8月份的时候写了个关于 class-dump 反编译的文章(使用 Class-dump 反编译),利用 class-dump 工具可以反编译出工程的头文件,这样很方便“坏人”了解工程代码结构,参数传输,严重危及了应用安全。为了应对反编译,需要对工程进行“代码混淆”。
  正文:
  首先在工程目录下新建个存放反编译文件的文件夹,然后拖进工程。
  
  
  在 Config 文件目录下新建 .sh 和 .list 文件。
  
  拖进工程。
  
  添加 编译脚本代码。
#!/usr/bin/env bash

TABLENAME=symbols

SYMBOL_DB_FILE="$PROJECT_DIR/$PROJECT_NAME/Config/symbols"

STRING_SYMBOL_FILE="$PROJECT_DIR/$PROJECT_NAME/Config/func.list"

HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/Config/TestCodeConfuscation.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 TestCodeConfuseUse_TestCodeConfuscation_h

#define TestCodeConfuseUse_TestCodeConfuscation_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

  添加脚本编译选项。

  
command + B ,发现运行报错(Permission denied)。
  
  解决方案:
  终端输入进入Config目录,输入 chmod 755 confuse.sh , 回车。
  

然后再编译一下即可。打开 Config 目录,会发现多了两个文件。symbols 和 TestCodeConfuscation.h

  
  新建个 prefix header 文件,引入  TestCodeConfuscation.h
    
  重新 build 
  
  接下来就可以在 func.list 文件中 添加你所需要混淆的代码了。
  
  
  编译之后,会发现在 TestCodeConfuscation.h 中生成了混淆后的方法或变量名
  

  此时再用 class-dump 一下,会发现已经完成混淆了。

  
     大功告成。

  文章部分参见念茜的博客

iOS安全攻防之代码混淆的更多相关文章

  1. iOS安全攻防(二十三):Objective-C代码混淆

    iOS安全攻防(二十三):Objective-C代码混淆 class-dump能够非常方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完好的程序给同行留下笑柄. 所以 ...

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

    iOS 初探代码混淆(OC) 前言 自己做iOS开发也有几年的时间了,平时做完项目基本就直接打包上传到Appstore上,然后做上架操作了.但是最近,客户方面提出了代码安全的要求.说是要做代码混淆,这 ...

  3. iOS 代码混淆

    一般做了防调试的话,被调试进程会退出的,是防动态分析措施. 代码混淆加花这些是防静态分析措施. 反调试是防动态分析措施. 混淆的方法方法名混淆其实就是字符串替换,有2个方法可以,一个是#define, ...

  4. ios -逆向-代码混淆

    该方法只能针对有.m.h的类进行混淆,静态库等只有.h文件的没法进行混淆 代码混淆,刚刚看到是不是有点懵逼,反正我是最近才接触到这么个东西,因为之前对于代码和APP,只需要实现功能就好了,根本没有考虑 ...

  5. iOS 代码安全加固--反编译和代码混淆

    一.class-dump反编译 1.将打包的ipa反编译下,.ipa改成.zip,并解压 6.右击—显示包内容,找到如下有个白框黑底的  7.将其复制到桌面xx文件夹中,在终端中输入相关命令 cd 进 ...

  6. 代码混淆 iOS

    该方法只能针对有.m.h的类进行混淆,静态库等只有.h文件的没法进行混淆 代码混淆,刚刚看到是不是有点懵逼,反正我是最近才接触到这么个东西,因为之前对于代码和APP,只需要实现功能就好了,根本没有考虑 ...

  7. 《九阴真经:iOS黑客攻防秘籍》新书发布

    本书内容易于理解,可以让读者循序渐进.系统性地学习iOS安全技术.书中首先细致地介绍了越狱环境的开发与逆向相关工具,然后依次讲解了汇编基础.动态调试.静态分析.注入与hook.文件格式,最后为大家呈现 ...

  8. iOS使用shell脚本注入混淆内容

    背景 公司需要做一系列的壳版本,壳版本如果内容雷同提交到App Store会有被拒绝的风险,其中有一种解决方案是在壳版本中注入混淆的代码,防止被苹果检测到内容太过雷同而导致审核被拒绝,本文是针对这个场 ...

  9. 大公司怎么做Android代码混淆的?

    3月17日,网易资深安全工程师钟亚平在安卓巴士全球开发者论坛上做了<安卓APP逆向与保护>的演讲.其中就谈到了关于代码混淆的问题.现摘取部分重点介绍如下:   Java代码是非常容易反编译 ...

随机推荐

  1. css form表单样式清除

    开发项目中表单常用的清楚样式: 1.改变placeholder默认字体颜色 ::-webkit-input-placeholder{color: #333;} :-moz-placeholder{co ...

  2. EasyMvc--让MVC区域开发更Easy(提供源码下载)

    核心: 主要利用MVC的区域功能,实现项目模块独立开发和调试. 目标: 各个模块以独立MVC应用程序存在,即模块可独立开发和调试. 动态注册各个模块路由. 一:新建解决方案目录结构 如图: 二:Eas ...

  3. 用SourceTree轻松Git项目图解

    这篇文档的目的是:让使用Git更轻松. 看完这篇文档你能做到的是: 1.简单的用Git管理项目. 2.怎样既要开发又要处理发布出去的版本bug情况. SourceTree是一个免费的Git图形化管理工 ...

  4. C字符串处理函数

    部分参考百科. C常用字符串函数:字符串输入函数,字符串输出函数,字符串处理函数,标准输入输出流 字符串处理函数: 1.字符串长度:strlen(str),返回字符串实际长度,不包括'\0',返回值类 ...

  5. node.js系列:(调试工具)node-inspector调试Node.js应用

    如果你在编写Node.js代码,node-inspector是必备之选,比Node.js的内置调试器好出许多.使用起来跟Chrome的javascript调试器很相似. 使用npm安装: $ npm ...

  6. Oracle的登陆问题和初级学习增删改查(省略安装和卸载)

    1:学习Oracle首先需要安装Oracle,网上已经有很多很多教程了,这里不做叙述,自己百度即可,这里安装的标准版,个人根据需求安装学习或者企业开发即可.如果安装出错,自己百度Oracle的卸载即可 ...

  7. .NET枚举类型转为List类型

    如图所示这个竞卖状态,原先是在前端界面通过html代码写死的几个状态,现在需要改为动态加载.这个几个状态是定义的枚举类型. 1:定义一个枚举类型 /// <summary>    /// ...

  8. 如何使用HTML5自定义数据属性

    在本文中,我将向你介绍如何使用HTML5自定义数据属性.我还将向你介绍一些开发人员在工作中经常使用的优秀实例. 为什么需要自定义数据属性? 很多时候我们需要存储一些与不同DOM元素相关联的信息.这些信 ...

  9. 【响应式】foundation栅格布局的“尝鲜”与“填坑”

      提到响应式,就不得不提两个响应式框架--bootstrap和foundation.在标题上我已经说明白啦,今天给大家介绍的是foundation框架. 何为"尝鲜"?就是带大伙 ...

  10. python3.x元组打印错误 TypeError: unsupported operand type(s) for %: 'NoneType' and 'tuple'

    原创by南山南北秋悲 欢迎引用!请注明原地址:http://www.cnblogs.com/hwd9654/p/5676746.html  谢谢! TypeError: unsupported ope ...