代码混淆

APP加固新方向——混淆和瘦身

落爺英雄遲暮 提交于 2019-12-05 05:56:52
在阿里云云栖社区举办的在线培训中,来自阿里移动安全部的陵轩带来了题为《 APP加固新方向——混淆和瘦身》的精彩分享。本次分享的主要内容包括 APP 加固的发展历程以及阿里内部对移动安全加固最新的研究——混淆和 APK 优化瘦身。 直播回顾视频: https://yq.aliyun.com/edu/lesson/play/393 以下内容是根据直播和PPT整理。 加固的意义 从安卓2.x版本起,加固技术就逐渐火了起来。最初,只有一些创业型公司涉及加固领域;随着安卓应用的逐渐升温,诸如阿里、腾讯、百度等大型互联网公司逐渐涉及该领域。 那么为什么要对APP进行加固呢?主要原因有三点:首先安卓的APP应用通常采用Java语言编写的,开发门槛低,容易被反编译(解释性语言的弊端);其次安卓市场比较混乱且可自签名,进而导致大量应用被二次打包,植入广告、木马;同时,手机Root后,黑客可利用Hook等技术手段可对应用进行动态攻击,获取应用的核心逻辑。综合这三点来看,安卓应用的安全系数是非常低的,因此APP加固就有了意义:应用加固之后可以有效减少反编译、二次打包、植入广告木马等操作。 传统加固 第一代加固技术采用的是Dex加密存储,解密时落地;落地之后通过自定义的DexClassLoader将解密出的Dex加载到内存中,然后程序运行该文件(Dex是APK的Java代码经过编译后生成的文件

iOS代码混淆安全加固

…衆ロ難τιáo~ 提交于 2019-12-05 05:56:38
文章目录 自己创建脚本文件进行代码混淆 iOS代码自动混淆 最近公司扫描App漏洞,提出要给App做代码混淆加固,以提高反编译逆向难度。对于Android应用直接用360安全加固即可;但对于iOS应用,虽然360也提供了免费的加固方法,但前提是项目的 enable bitcode 必须设置为YES。但我们项目中引入的很多框架包括百度地图等并不支持 enable bitcode 设置为YES。如果 enable bitcode 设置为NO,并且是本地部署的话(企业证书),360安全加固iOS是收费的,收费标准是30万/年。其他的一些平台也是收费的。所以只能考虑自己去做了。 360 iOS加固指南 自己创建脚本文件进行代码混淆 混淆原理 : 代码编译阶段将符号(方法名、属性名等)替换成随机生成的字符串 我们需要创建四个文件如下: 其中 PrefixHeader.pch 宏文件中导入 CodeObfuscation.h ,这样项目在编译的时候就会将 CodeObfuscation.h 中定义的宏及方法名替换为对应随机生成的字符串。 #ifndef PrefixHeader_pch #define PrefixHeader_pch #import "CodeObfuscation.h" #endif /* PrefixHeader_pch */ 其中 confuse.sh

iOS开发-代码混淆

我怕爱的太早我们不能终老 提交于 2019-12-05 05:56:25
点击上方“ iOS开发 ”,选择“置顶公众号” 关键时刻,第一时间送达! 作者:张囧瑞 來源:简书 文:https://www.jianshu.com/p/864ce7dc9c25 iOS开发整理发布,转载请联系作者获得授权 iOS表面上看来是比android安全的多的,在网络上针对android的加密保护也比iOS多得多,但是这并不意味着iOS就是很安全的,如果在正常的设备上还好,但是在越狱的设备上,我们的代码信息就会暴露的一干二净,不仅可以被别人看到我们的方法是如何调用的,就连我们那些写的很垃圾的代码也会被人看的一清二楚,想想就是很丢人的事情,我这个菜鸡对iOS安全了解的也并不是很多,这篇文章也就仅根据念茜女神的博客对iOS中的代码混淆做一些初步的处理,如果你是稍微知道一点点iOS安全的东西,这时候就可以cmd+w拜拜了。 好了,开始正文。 class-dump This is a command-line utility for examining the Objective-C runtime information stored in Mach-O files.It generates declarations for the classes,categories and protocols.This is the same information provided by

iOS应用安全之代码混淆实现篇

感情迁移 提交于 2019-12-05 05:55:47
1.iOS应用安全之代码混淆设计篇 2.iOS应用安全之代码混淆实现篇 针对 设计篇 描述的大致思路,现在针对各个问题点,给出实现方法 该脚本大致使用的工具如下:vi、grep、sed、find、awk、cut、sort、uniq、cat、md5等。 针对要加密的内容,分别给出关键字提取脚本命令。 脚本中 $ROOTFOLDER代表工程根目录, $EXCLUDE_DIR 代表要排除的目录,举例如下: ROOTFOLDER="demoProject" EXCLUDE_DIR="--exclude-dir=*.framework --exclude-dir=include --exclude-dir=libraries --exclude-dir=Libs --exclude-dir=lib" 关键字提取 1.文件名 第一步先将包含路径的文件名写入文件 find $ROOTFOLDER -type f | sed "/\/\./d" >f.list 第二步文件中提取文件名 cat f_rep.list | awk -F/ '{print $NF;}'| awk -F. '{print $1;}' | sed "/^$/d" | sort | uniq 但从文件名提取的功能上,上面两个步骤完全可以合并为一步,但是在实际功能实现中还是要求将上面分为两步的 2.类名 grep -h -r

iOS-代码混淆加固策略

微笑、不失礼 提交于 2019-12-05 05:55:15
点击上方“ iOS开发 ”,选择“置顶公众号” 关键时刻,第一时间送达! 作者:树下敲代码的超人 链接:https://www.jianshu.com/p/628a0c232c2a iOS开发整理发布,转载请联系作者获得授权 对于IOS来说,由于系统是封闭的,APP上架需要通过App Store,安全性来说相当高。但是对于大厂和知名APP而言,别人给的安全保障永远没有自己做的来得踏实。所以对于大厂、少部分企业级和金融支付类应用来说加固是相当重要的。 下面是目前几个专业加固大厂提供的加固策略 网易 网易 网易安全三板斧: 第一板斧是防静态分析,这里包括字符串加密、符号混淆、代码逻辑混淆和游戏存档加密; 第二板斧是防动态调试、反调试和通信安全(数据加密); 第三板斧是外挂检测、加速挂、内存修改挂和自动任务挂等 爱加密 爱加密 safengine afengine 几维安全 几维安全 梆梆安全 梆梆安全 本文将针对以上几点进行实现,对于一些不太容易实现的将会做方向性讨论 字符串加密 代码混淆(方法命,类命,变量名,符号表) 代码逻辑混淆 反调试 字符串加密 对字符串加密的方式目前我所了解到掌握到的最可靠方式就是用脚本将代码中的所有标记需要加密的字符串进行异或转换,这样代码中就不存在明文字符串了。当然第三方的字符串加密不可能这么简单,具体怎么做的我也不太清楚

iOS class-dump反编译和代码混淆

自作多情 提交于 2019-12-05 05:54:48
参考链接 一、class-dump反编译 1、由于/usr/bin/在OS X 10.11上没有权限了,将解压后的class-dump,拖入到 /usr/local/bin/class-dump中 2、打开终端,cd /usr/local/bin/class-dump 3、修改class-dump的权限:sudo chmod 777 /usr/local/bin/class-dump/class-dump 4、输入class-dump会出现它的相关命令,说明class-dump安装正确 5、将打包的ipa反编译下,.ipa改成.zip,并解压 6、右击—显示包内容,找到如下有个白框黑底的 7、将其复制到桌面tt文件夹中,在终端中输入相关命令 先进入class-dump的路径中,cd /usr/local/bin/class-dump/ class-dump -H /Users/xxx/Desktop/tt/ConfigXcodeDemo -o /Users/xxx/Desktop/tt/ 然后在tt文件中就可以看到多出的很多.h文件 -H 是要反编译的文件位置 -o 是反编译后文件存储的位置 二、ios代码混淆 1、在项目的Resource文件夹中新建 脚本文件:confuse.sh, 宏定义文件:codeObfuscation.h, 函数列表文件:func.list, 头文件

iOS 代码混淆

给你一囗甜甜゛ 提交于 2019-12-05 05:54:19
混淆分许多思路,比如: 1.cd到你的工程目录下,创建两个文件 2.打开工程,把刚才创建的两个文件添加到工程中,在工程中再创建两个文件分别是pch文件和一个.h文件,并在pch中引入刚一同创建的.h 3.配置Phases 4.向脚本confuse.sh中添加代码 5.编译 注意: 附反编译: 1.1 Class-Dunp 简介 1.2 Class-Dump 下载地址 1.3 安装 1.4 使用 2.1 什么是Hopper 2.2 下载地址 2.3 使用 混淆分许多思路,比如: 1)花代码花指令,即随意往程序中加入迷惑人的代码指令 2)易读字符替换 具体步骤: 1.cd到你的工程目录下,创建两个文件 confuse.sh: 存放混淆的脚本 func.list: 需要混淆的方法、变量名 2.打开工程,把刚才创建的两个文件添加到工程中,在工程中再创建两个文件分别是pch文件和一个.h文件,并在pch中引入刚一同创建的.h pch不会配置的童鞋看过来,会的童鞋可自动忽略这一步: 然后点击4的后边输入:$(SRCROOT)然后把pch拖进来,删除前边多余路径。 如图: (初学者尽量名字用这两个,否则可能会在后边的配置中出错) 3.配置Phases 填写 $PROJECT_DIR/confuse.sh(注:这儿的confuse.sh的路径随你创建这个文件的位置而改变) 4.向脚本confuse

iOS 初探代码混淆(OC)

谁都会走 提交于 2019-12-05 05:54:03
转自: https://blog.csdn.net/ping20/article/details/80543220 前言 自己做iOS开发也有几年的时间了,平时做完项目基本就直接打包上传到Appstore上,然后做上架操作了。但是最近,客户方面提出了代码安全的要求。说是要做代码混淆,这方面的工作之前从来没有接触过。然后就上网查了一下,原来有很多应用程序都做了代码混淆。看来是我固步自封了…… 起因 使用classdump对原程序进行dump,可以dump出所有源程序的函数所有信息:源程序所有函数类型,变量全部泄露。这样的话,让攻击者,也就是黑客们了解了程序结构方便逆向。因为在工程中,我们这些变量或函数命名都是有一定可读性的,例如跟用户名相关的,那一般里面会有 userName,跟密码相关的一般会有passWord,这样定义也是为了我们自己代码可读性更强,我们修改的时候才更加的方便。但是我们相信,这么个定义法,我们只是希望方便我们自己,我们可不希望方便黑客们去破解我们的APP。总结出来就是一句话:“会把你项目中的所有方法和变量都罗列出来”。 开始混淆: 1. 在进行代码混淆之前,我们需要在我们的项目中增加两个文件:confuse.sh&func.list 我们打开我们的终端命令行 先cd到你项目的路径下,然后回车 然后在终端中分别输入 touch confuse.sh 和func

iOS代码混淆

自古美人都是妖i 提交于 2019-12-05 05:53:21
代码混淆都是一个很重要的安全技术手段,如何进行全局的自动化代码混淆,以下开源项目详细介绍了如何实现这个目标。 如果你的工程支持cocoapod,你可以直接添加! pod "STCObfuscator" ( 注:请用最新版本1.3.0,最好更新下pod repo update master ) 把下面的代码加入到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 然后完成下面步骤的设置 步骤一: 在 Build Settings->Preprocessor

iOS代码混淆(MJ)

蹲街弑〆低调 提交于 2019-12-05 05:53:00
i OS程序可以通过class-dump、Hopper、IDA等获取类名、方法名、以及分析程序的执行逻辑 如果进行代码混淆,可以加大别人的分析难度 iOS代码混淆方案 源码的混淆 类名 方法名 协议名 …… LLVM中间代码IR的混淆(容易产生bug) 自己编写Pass ollvm: https://github.com/obfuscator-llvm/obfuscator 源码的混淆-通过宏定义混淆方法名、类名 注意点 不能混淆系统方法 不能混淆init开头 的等初始化方法 混淆属性时需要额外注意set方法 如果xib、storyboard中用到了混淆的内容,需要手动修正 可以考虑把需要混淆的符号都加上前缀,跟系统自带的符号进行区分 混淆过多可能会被Appstrore拒绝上架,需要说明用途 建议 给需要混淆的符号加上了一个特定的前缀 ​​​​​​​ 小工具,李明杰的 https://github.com/CoderMJLee/MJCodeObfuscation ios-class-guard 第三方工具 https://github.com/Polidea/ios-class-guard 它是基于class-dump的扩展 用class-dump扫描出可执行文件中的类名,方法名,属性名等并做替换,会更新xib和storyboard名字 用法 brew install ios