一般做了防调试的话,被调试进程会退出的,是防动态分析措施。

代码混淆加花这些是防静态分析措施.

反调试是防动态分析措施.

混淆的方法
方法名混淆其实就是字符串替换,有2个方法可以,一个是#define,一个是利用tops。
利用#define的方法有一个好处,就是可以把混淆结果合并在一个.h中,在工程Prefix.pch的最前面#import这个.h。不导入也可以编译、导入则实现混淆。

单段的selector,如func: ,可以通过#define func 来实现字符串替换。
多段的selector,如a:b:c: ,可以通过分别#define a 、b、c 来实现字符串替换。

注意!!!

  • 1.不可以混淆iOS中的系统方法;

  • 2.不可以混淆iOS中init等初始化方法;

  • 3.不可以混淆xib的文件,会导致找不到对应文件;

  • 4.不可以混淆storyboard中用到的类名;

  • 5.混淆有风险,有可能会被App Store 拒掉。

代码易读字符串混淆

混淆分许多思路,比如:

1)花代码花指令,即随意往程序中加入迷惑人的代码指令

2)易读字符替换

防止class-dump出可读信息的有效办法是易读字符替换

1. cd到你自己的项目目录级

2. 创建两个文件:

命令 :touch  confuse.sh

 touch  func.list

confuse.sh: 存放混淆的脚本

func.list:      需要混淆的方法、变量名

3..配置Build Phase
在工程Build Phase中添加执行脚本操作,执行confuse.sh脚本

这里需要注意的是 $PROJECT_DIR/confuse.sh 这个的路径和创建pch文件时的路径是一样的,$PROJECT_DIR代表整个工程,/confuse.sh是这个文件的路径。

 
 
4. 然后command + B编译一下,如果报错了就cd到项目的目录级下,然后输入命令行 chmod 755 confuse.shchmod 777 confuse.sh 给我们的脚本本间授权
 
5. 成功之后会自动生成一个codeObfuscation.h文件,(在代码的本地目录里有,show in Finder 看下,能找到)
 
6.然后在pch文件中导入codeObfuscation.h文件。
打开项目,修改XXX-Prefix.ch ,添加混淆头文件:

#import "codeObfuscation.h"

---------------------------------------------------------

 
func.list 里写要混淆的方法
confuse.sh 写混淆的脚本
codeObfuscation.h 里会自动生成替代func.list里的方法
 
 

#ifndef Demo_codeObfuscation_h

#define Demo_codeObfuscation_h

---------confuse.h---------

  1. #!/usr/bin/env bash
  2.  
  3. TABLENAME=symbols
  4. SYMBOL_DB_FILE="symbols"
  5. STRING_SYMBOL_FILE="func.list"
  6. HEAD_FILE="$PROJECT_DIR/$PROJECT_NAME/codeObfuscation.h"
  7. export LC_CTYPE=C
  8.  
  9. #维护数据库方便日后作排重
  10. createTable()
  11. {
  12. echo "create table $TABLENAME(src text, des text);" | sqlite3 $SYMBOL_DB_FILE
  13. }
  14.  
  15. insertValue()
  16. {
  17. echo "insert into $TABLENAME values('$1' ,'$2');" | sqlite3 $SYMBOL_DB_FILE
  18. }
  19.  
  20. query()
  21. {
  22. echo "select * from $TABLENAME where src='$1';" | sqlite3 $SYMBOL_DB_FILE
  23. }
  24.  
  25. ramdomString()
  26. {
  27. openssl rand -base64 64 | tr -cd 'a-zA-Z' |head -c 16
  28. }
  29.  
  30. rm -f $SYMBOL_DB_FILE
  31. rm -f $HEAD_FILE
  32. createTable
  33.  
  34. touch $HEAD_FILE
  35. echo '#ifndef Demo_codeObfuscation_h
  36. #define Demo_codeObfuscation_h' >> $HEAD_FILE
  37. echo "//confuse string at `date`" >> $HEAD_FILE
  38. cat "$STRING_SYMBOL_FILE" | while read -ra line; do
  39. if [[ ! -z "$line" ]]; then
  40. ramdom=`ramdomString`
  41. echo $line $ramdom
  42. insertValue $line $ramdom
  43. echo "#define $line $ramdom" >> $HEAD_FILE
  44. fi
  45. done
  46. echo "#endif" >> $HEAD_FILE
  47.  
  48. sqlite3 $SYMBOL_DB_FILE .dump
 

iOS 代码混淆的更多相关文章

  1. iOS 代码混淆的简单使用

    1.工具下载  http://stevenygard.com/projects/class-dump/  选择dmg安装包 2.打开终端输入:open/usr/local/bin 3. 4.修改权限在 ...

  2. iOS 代码混淆--pch实现

    之前实现代码的混淆一般是使用sh脚本,不过也是需要把一写需要混淆的方法写到一个文件中(除非是使用特定的命名规范统一混淆), 现在发现,实现代码的混淆pch 文件就可以轻松完成! 1,在新建的工程中 创 ...

  3. iOS代码混淆

    混淆原理 代码编译阶段将符号(方法名.属性名等)替换成随机生成的字符串 长话短说,直接上步骤. 混淆集成步骤 步骤一.创建shell文件(confuse.sh)并配置相应的运行环境. 在项目根目录下新 ...

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

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

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

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

  6. iOS安全攻防之代码混淆

    iOS 代码安全之代码混淆实践: 前言: 在8月份的时候写了个关于 class-dump 反编译的文章(使用 Class-dump 反编译),利用 class-dump 工具可以反编译出工程的头文件, ...

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

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

  8. ios -逆向-代码混淆

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

  9. 代码混淆 iOS

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

随机推荐

  1. JS 禁用鼠标右键

    oncontextmenu="window.event.returnValue=false" style="overflow-y: hidden; overflow-x: ...

  2. 详解HTTPS、TLS、SSL

    HTTPS.TLS.SSL HTTP也称作HTTP over TLS.TLS的前身是SSL,TLS 1.0通常被标示为SSL 3.1,TLS 1.1为SSL 3.2,TLS 1.2为SSL 3.3.下 ...

  3. Mac下mongodb connect failed 连接错误解决方法

    查看elm 后台node 代码 一直连不上mongodb,报错 MongoDB shell version v3.6.0 connecting to: mongodb://127.0.0.1:2701 ...

  4. laravel 汇总数据

    public function userInfluenceCollect(Request $request) { $types = ['logins', "checkins", & ...

  5. Sprite组件和Button组件的使用

    一.Sprint组件的使用 1.游戏中显示一张图片,通常我们称之为"精灵" sprite 2.cocos creator如果需要显示一个图片,那么需要在节点上挂一个精灵组件,为这个 ...

  6. AGC-018 C

    题意: 有$X + Y + Z$个人,第$i$个人有$Ai$个金币,$Bi$个银币,$Ci$个铜币. 选出$X$个人获得其金币,选出$Y$ 个人获得其银币,选出$Z$个人获得 其铜币,在不重复选某个人 ...

  7. python全栈开发day103-python垃圾回收机制、mro和c3算法解析、跨域jsonp\CORS、Content-Type组件

    Python垃圾回收 -- 引用计数 -- Python为每个对象维护一个引用计数 -- 当引用计数为0的 代表这个对象为垃圾 -- 标记清除 -- 解决孤立的循环引用 -- 标记根节点和可达对象 - ...

  8. SpringMVC-2-(Controller)

    一)参数类型 @RequestMapping("hello4") @ResponseBody public ModelAndView Hello4( // Servlet的三个参数 ...

  9. 141. 环形链表 [JS Undefined类型的运用]

    [解析] 1.遍历每个节点 2.遍历过的节点用新的空间来标记 JS新的空间不用在使用前声明,用法参考实现. 3.如果遇到标记过的节点则是环形 [实现] /** * Definition for sin ...

  10. CSAPP深入理解计算机系统(第二版)第三章家庭作业答案

    <深入理解计算机系统(第二版)>CSAPP 第三章 家庭作业 这一章介绍了AT&T的汇编指令 比较重要 本人完成了<深入理解计算机系统(第二版)>(以下简称CSAPP) ...