该方法只能针对有.m.h的类进行混淆,静态库等只有.h文件的没法进行混淆

代码混淆,刚刚看到是不是有点懵逼,反正我是最近才接触到这么个东西,因为之前对于代码和APP,只需要实现功能就好了,根本没有考虑什么安全问题。

而这一次应用交付时,客户进行安全评估提出一个问题:

使用classdump对原程序进行dump,可以dump出所有源程序的函数所有信息:源程序所有函数类型,变量全部泄露。这样的话,让攻击者,也就是黑客们了解了程序结构方便逆向。

因为在工程中,我们这些变量或函数命名都是有一定可读性的,例如跟用户名相关的,那一般里面会有 userName,跟密码相关的一般会有 passWord,这样定义也是为了我们自己代码可读性更强,我们修改的时候才更加的方便。但是我们相信,这么个定义法,我们只是希望方便我们自己,我们可不希望方便黑客们去破解我们的APP。

那我们先来看看用这个所谓的 classdump 对原程序进行 dump,究竟用 dump 出些什么东西来:

 
 

所有的 .h 文件

.h 文件全暴露了,那点开的话,你里面的函数名,属性名也一样清清楚楚:

 
 

属性、函数

惊了个呆,那为了防止这样全裸,这时候我们就需要用到代码混淆了。

大概什么个意思呢?简单点讲,就是把你的这些个用户名和函数名弄得没有可读性,比如你的用户名的变量名定义为 userName,那你自己用肯定是正常的,如果黑客们 dump 出来的这个变量名会变成 abcd 或 1234 ,这样他也就不清楚你这是用来干吗的了。

第一、在工程项目路径中建立一个confuse.sh、一个func.list文件

先打开终端,然后 cd 到你的项目工程路径下:

 
 

cd 到项目工程路径下

然后创建两个文件,一个 confuse.sh,一个 func.list:

 
 

创建两个文件

这时候我们打开这个工程文件夹,可以看到,这两个文件已经创建好了:

 
 

我们创建的两个文件

打开工程,把刚才创建的两个文件加进去,右键你的项目蓝色标志,然后选择 Add Files to...:

 
 

添加到工程中

添加进去了:

 
 

成功添加

点击 confuse.sh ,发现还是空白的,什么都没有,现在要在这上面加上代码了:

 
 

需要添加的代码

原脚本代码出自:http://blog.csdn.net/yiyaaixuexi/article/details/29201699

第二、在 .pch 文件中添加代码

不要跟我说你的工程没有 .pch 文件,如果真没有,自行百度,这应该算是标配,常识来的。

#ifdef __OBJC__#import#import//添加混淆作用的头文件(这个文件名是脚本confuse.sh中定义的)#import"codeObfuscation.h"#endif

写到这里,编译的时候是不是发现报错啦?刚才的 .pch 文件里面的添加的代码居然报错了:

 
 

报错了!

不要慌,先把那句报错的先给注释掉:

 
 

先注释掉报错的这一行代码

然后我们继续往下走!

第三、配置 Build Phase

1:添加 Run Script

 
 

添加 Run Script

2:配置好 Run Script

 
 

配置好 Run Script

然后再回到终端,同样先 cd 到工程目录下,接着我们要打开刚才 .sh 这个脚本文件的运行权限,因为默认是没有这个权限的,在终端输入以下指令:

 
 

打开运行权限

回车,搞定,回到我们的工程,先 command + b 编译一下工程,然后再把我们刚刚注释掉的那句代码解开:

 
 

打开刚刚被我们注释掉的代码

再次 command + b 编译,现在是不是编译通过啦?刚刚报错的,现在解决了!

基本上就搞定了,剩下的就是添加上我们想要混淆的变量名或函数名

第四、在  func.list 文件里,写入待混淆的函数名

如果像下面这几个属性跟函数:

 
 

需要混淆的属性跟函数名

那么就这在 fun.list 就这么列出来就好了:

 
 

列出需要混淆的

大功告成!现在 command + b 运行一下,然后在哪里看结果呢,请看这里:

 
 

运行结果

可能这么看有点麻烦,那来个简单一点的:

 
 

查看

哈哈,你会发现,多了好多宏定义,其实就是我们刚才的字段来的:

 
 

结果

当然,这也只是最简单的代码混淆而已,APP安全还是有很多需要注意的。一步一步来吧!

dome 链接:https://github.com/QQ396368888/The-iOS-code-confusion#ios%E4%BB%A3%E7%A0%81%E6%B7%B7%E6%B7%86%E5%8A%A0%E5%AF%86-%E5%9F%BA%E7%A1%80%E7%AF%87

ios -逆向-代码混淆的更多相关文章

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

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

  2. 关于Unity发布iOS平台代码混淆问题

    之前在越狱手机里找到<永恒战士3>的程序发现是用Unity做的,拷出资源出来看的时候发现里面有游戏程序集,立马抽出来反编译了一下,发现里面的代码只有方法签名,没有方法体,还以为用什么高端混 ...

  3. iOS安全——代码混淆&反编译

    本文是初步了解和集成网上的相关反编译博客, 并做公司内部技术人员分享研讨PPT.

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

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

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

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

  6. iOS 代码混淆

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

  7. 代码混淆 iOS

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

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

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

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

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

随机推荐

  1. [转载]centos 6.4中git如何正常显示中文

    FROM: http://ju.outofmemory.cn/entry/63250 系统版本:centos 6.4 git版本:1.7.1,使用yum直接安装的. 当使用git status查看时, ...

  2. ubuntu下wine操作usb串口

    呃,换成ubuntu后想玩下文曲星,貌似没有linux下的下载工具,只好用wine. 用的是ch340的usb转串口,不得不说ubuntu果然集大成,这些驱动都有了,用minicom设置设备为/dev ...

  3. Mac上安装使用Nginx

    1.brew search nginx 2.brew install nginx 启动nginx ,sudo nginx ;访问localhost:8080 发现已出现nginx的欢迎页面了. 备注: ...

  4. wordpress 插件 之 微信自动回复机器人

    微信目前越来越火,wordpress 也拥有众多用户 那我们来写个插件,把两者连起来吧! 目前已经测试完成,下面把相关的信息分享一下. 查看演示 请加我微信公众号 创新实验室,或直接扫描最底下的二维码 ...

  5. Rabbitmq消息队列(二) Hello World! 模拟简单发送接收

    1.简介 RabbitMQ是消息代理:它接受和转发消息.你可以把它当作一个邮局:当你把你要邮寄的邮件放在信箱里时,你可以肯定Postman先生最终会把邮件送到你的收件人那里.在这个比喻中,Rabbit ...

  6. JDBC的常用API

    一.Connection接口: 1.createStatement():创建数据库连接 2.prepareStatement(Stringsql):创建预处理语句 3.prepareCall(Stri ...

  7. Atitit  hre框架v5 新特性  HREv5

    Atitit  hre框架v5 新特性  HREv5 1. V5新特性 apiurl2="/wrmiServlet";1 2. V1 新特性1 3. V2 新特性 添加php版1 ...

  8. Atitit. atiOrder   Order 订单管理框架的设计

    Atitit. atiOrder   Order 订单管理框架的设计 1. Order 订单处理流程1 2. code2 3. Ref7 1. Order 订单处理流程 if(userSvr.isNo ...

  9. less css下载及编绎工具

    http://www.lesscss.net less.js下载 LESS 1.5已经放出Beta 1版本,支持source map等新特性,欢迎尝鲜.详细变更请见更新日志. 生产环境使用建议下载1. ...

  10. android学习十三(android的通知使用)

    通知(Notification)是android系统中比較有特色的一个功能,当某个应用程序希望向用户发出一些提示信息.而该应用程序又不在前台执行时,就能够借助通知来实现.发出一条通知后,手机最上方的状 ...