首页 > 其他分享 >iOS代码安全加固利器:深入探讨字符串和代码混淆器的作用

iOS代码安全加固利器:深入探讨字符串和代码混淆器的作用

时间:2023-12-04 14:23:57浏览次数:36  
标签:混淆 工程 iOS 代码 深入探讨 proguard android txt

 

在网上搜“代码混淆”关键词,可以看到n多教程。包括本篇博客,大部分重要内容也是从网上各位大神的博客里面看到然后摘取和总结出来的。虽然网上都有,但是对于我个人来说,很难找到一篇博客概括完全的,所以还是总结一下,也算是学习的纪录。

首先看看代码混淆是什么。

总的来说,代码混淆有两种重要功能。其一,混淆代码。其二,优化代码。

进行代码混淆的程序被称为代码混淆器(混淆工具)。进行代码混淆的意义主要在于对代码进行一定程度的加密。那么,混淆器是如何进行代码加密的呢,或者说,混淆过的代码为什么会有加密的效果呢?

首先说一点我比较坚持的观点“我们写的代码是给人看的,不是给机器看的”。通常,我们写代码的时候,代码都需要有一定的规范,而且变量名、函数名一般要能让人看到就知道是什么功能。所以,当我们不进行混淆的情况下发布了一个包,别人就可以通过反编译工具对包进行反编译,基本还原我们的源码。这样肯定是对我们不利的。此时就需要用到代码混淆。

代码混淆的基本方法就是将我们写的易于读懂的代码,等价的替换为难以读懂而逻辑正确的代码,就是说,机器能够运行这段代码,但是一般人读不懂这段代码。这样,别人反编译了我们的apk包,得到的混淆后的代码看起来基本就是一堆杂乱无章、无法阅读的代码。

代码混淆的时候还会进行一些优化,例如删除某些没用被使用到的代码,以及简单的重组代码,减少中间过程。

比较重要的一点是,代码混淆并不能完全的加密代码,只是提高了程序包被反编译的难度,对代码起到一定的保护作用。

关于如何代码混淆的定义,详情可以看这里:怎么保护苹果手机移动应用程序ios ipa中的代码 | ipaguard使用教程

现在了解了代码混淆,就看看如何使用代码混淆吧。

我自己用来测试的是使用cocos2d-x 3.10创建的工程,其中包括了多平台的工程。测试代码混淆,主要用到了其中的eclipse工程,android-studio工程。(通过这种方式创建的工程在文件结构方面可能和直接使用eclipse或android-studio创建的工程有略微差别,但是影响不大)

在android 2.3之后,sdk中就已经集成了混淆器proguard(目录在sdk\tools\proguard),所以我们可以很方便的直接在工程中开启代码混淆。

eclipse  android工程开启混淆功能,我们需要手动在项目文件.properties(我的是project.properties文件)中添加下面的代码

To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

 

 

某些方式创建的项目中可能已经有如上两行了,只是默认被注释掉了,只要把proguard.config这一行解注释就好了。这样代码混淆功能就开启了,在打签名包时,项目会自动进行代码混淆。

对于eclipse工程来说,代码混淆的规则,在 proguard-project.txt 文件中,我们需要根据规则去选择哪些代码需要混淆,哪些代码(一般我们引用的第三发jar包,如果已经被混淆过,就不能再混淆,否则会报错。一般我们对外开放的借口不需要混淆哦)不需要混淆。编写proguard-project.txt文件的规则,后面介绍咯。

android-studio工程开启混淆功能,我们需要在 app/build.gradle文件中添加如下代码

buildTypes {
        debug {
            //启用代码混淆
            minifyEnabled false
            //混淆规则配置文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            //
            signingConfig signingConfigs.debug
        }
        release {
            //是否优化zip
            zipAlignEnabled true
            // 移除无用的resource文件
            shrinkResources true
            //启用代码混淆
            minifyEnabled true
            //混淆规则配置文件
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            //
            signingConfig signingConfigs.release
        }
    }

 

 

按照上面的配置,在debug模式和release模式下build都会进行代码混淆(一般为了方便调试,在debug模式下不需要进行代码混淆)。混淆规则配置文件与eclipse工程略有不同,android-studio工程的混淆规则文件是 app/proguard-rules.pro 。虽然文件名和eclipse中的不同,但是配置规则都是相同的。

自己动手配置代码混淆应该不是问题。不过我们使用代码混淆的时候可能还有一些坑,例如工程中引用了很多外部的库,导致代码中函数数量超过了65535,混淆的时候可能会出错。此时需要分文件混淆,也就是把所有的代码分成两个部分来进行混淆。这些内容后面补充吧。

还有一点比较重要的,不止是Java代码可以混淆,理论上来说,任何代码都可以混淆,只要有对应的混淆器。关于如何使用其他混淆器,如何对其他语言的代码进行混淆,以后了解到了再补充。。。

 

 

 

 

标签:混淆,工程,iOS,代码,深入探讨,proguard,android,txt
From: https://www.cnblogs.com/sdges/p/17874795.html

相关文章

  • 国际化-语言代码表-Language Codes
    afAfrikaans南非语af-ZAAfrikaans(SouthAfrica)南非语af Afrikaans 南非语af-ZA Afrikaans(SouthAfrica) 南非语ar Arabic 阿拉伯语ar-AE Arabic(U.A.E.) 阿拉伯语(阿联酋)ar-BH Arabic(Bahrain) 阿拉伯语(巴林)ar-DZ Arabic(Alge......
  • day5代码随想录
    哈希表理论基础;242.有效的字母异位词349.两个数组的交集202.快乐数1.两数之和来源:代码随想录(programmercarl.com)​6.2哈希冲突-Hello算法(hello-algo.com)1哈希表理论基础又称散列表一般哈希表都是用来快速判断一个元素是否出现集合里。当我们遇到了......
  • Vue3用户代码片段
    1.defineComponent语法{ "Printtoconsole":{ "prefix":"vue3", "body":[ "<template>", "<divclass=\"container\">", "", "</div>&q......
  • 【iOS源码混淆工具】iOS代码混淆工具
     主要功能IpaGuard是一款功能强大的ipa混淆工具,不需要iosapp源码,直接对ipa文件进行混淆加密。可对IOSipa文件的代码,代码库,资源文件等进行混淆保护。可以根据设置对函数名、变量名、类名等关键代码进行重命名和混淆处理,降低代码的可读性,增加ipa破解反编译难度。可以对图片,......
  • iOS代码混淆工具
    ​ iOS代码混淆工具......
  • emscripten 中c 代码引用外部js 函数
    主要是一个简单的学习,webassebly支持通过import调用环境的函数(比如调用浏览器或者nodejs中的一些方法)简单说明方法很多,包含了emscripten提供的调用js的宏,但是以下使用了一个emscripten提供的--js-library功能--js-library简单说明--js-library主要是实现emcc在编译的时......
  • 新建模块&新建用户表&修改代码生成器文件&新建菜单
    1.新建模块打开IDEA在项目结构中新建rome-hotel的一个springboot项目,什么依赖都不需要 在pom.xml文件中修改坐标,引用父坐标 在父级pom文件中将模块加入 在rome-admin中的pom文件中加入admin-hotel,这样就能带动这个模块启动 将包名修改成和rome-admin一样 再创建其......
  • 代码随想录算法训练营第5天 | lc242、lc349、lc202、lc1
    (本合集全部为Go语言实现)相关文章链接:242题解349202题解1题解相关视频链接:Leetcode242状态:秒了实现过程中的难点:对于元素固定是小写字母或类似的情况,可以使用数组,因为元素最大数量是固定的个人写法funcisAnagram(sstring,tstring)bool{iflen(s)!=len(t)......
  • C++分解质因数代码实现
    一、问题描述:什么叫做分解质因数?就是我们给定一个数字,把这个数字的是质数的因子按照从小到大的顺序排列出来,并输出每个质因子的个数。二、实现思路:就是我们从1~n/i这个范围内(i*i=n),如果找到了一个因子,使得n%i==0,那么我们就进一步除下去,直到无法满足n%i==0为止。这个时候,i一定......
  • R语言中的偏最小二乘回归PLS-DA|附代码数据
    原文链接:http://tecdat.cn/?p=8890原文出处:拓端数据部落公众号最近我们被要求撰写关于偏最小二乘回归PLS-DA的研究报告,包括一些图形和统计输出。主成分回归(PCR)的方法本质上是使用第一个方法的普通最小二乘(OLS)拟合来自预测变量的主成分(PC)。这带来许多优点:预测变量的数量实际......