代码混淆

iOS应用加固--代码混淆

喜夏-厌秋 提交于 2019-12-05 05:48:14
前两天公司给了一份应用安全的测评报告,报告显示iOS这边安全测评得分是60(满分100),报告出的蛮详细,列出了危险等级,危害及 建议解决的方法。经评估我暂做了代码混淆和动态调式攻击风险。 代码混淆 一、危害 针对 iOS 应用开发使用的 Object-c 及 C,C++代码目前较缺乏有效的防护手段, 苹果的 app 自身并没有比 android 更安全的防范措施,也无法通过常规的二 次加固保护应用不被反编译和篡改,应用代码编写过程中出现的安全漏洞、 编码隐患、甚至业务逻辑上的缺陷很容易被分析暴露,造成程序业务逻辑泄 露、加解密算法失效、通信加密失效,攻击者可以利用这些信息窃取客户端 的敏感数据,包括账号、密码;绕过业务安全认证流程,直接篡改用户账号 信息;对服务器接口发起攻击等。iOS 的代码混淆,是通过将 Object- C、C/C++代码中的方法名、变量名、类名、包名等这些元素名称改成毫无关 联且无意义的名字,对源代码实现逻辑分支混淆和控制流平坦化,隐藏关键逻 辑,提高黑客破解难度,增加破解时间成本。 二、建议解决方案 开发者使用头文件映射的方式定义 pch 文件,并在定义的 pch 文件中引入头 文件,在头文件中定义方法混淆的隐射,防止代码语义化的定义暴露程序意 图,同时编译生成新的发布包 三、实际解决方案 1、cd 项目路径 2.touch confuse.sh

iOS-代码混淆加固策略

送分小仙女□ 提交于 2019-12-05 05:47:32
对于IOS来说,由于系统是封闭的,APP上架需要通过App Store,安全性来说相当高。但是对于大厂和知名APP而言,别人给的安全保障永远没有自己做的来得踏实。所以对于大厂、少部分企业级和金融支付类应用来说加固是相当重要的。 下面是目前几个专业加固大厂提供的加固策略 网易 网易安全三板斧: 第一板斧是防静态分析,这里包括字符串加密、符号混淆、代码逻辑混淆和游戏存档加密; 第二板斧是防动态调试、反调试和通信安全(数据加密); 第三板斧是外挂检测、加速挂、内存修改挂和自动任务挂等 爱加密 safengine 几维安全 梆梆安全 本文将针对以上几点进行实现,对于一些不太容易实现的将会做方向性讨论 字符串加密 代码混淆(方法命,类命,变量名,符号表) 代码逻辑混淆 反调试 字符串加密 对字符串加密的方式目前我所了解到掌握到的最可靠方式就是用脚本将代码中的所有标记需要加密的字符串进行异或转换,这样代码中就不存在明文字符串了。当然第三方的字符串加密不可能这么简单,具体怎么做的我也不太清楚。不过为了增加字符串加密的难度复杂性,我们可以先将字符串用加密工具转换(例如AES、base64等)后的把加字符串放在工程中,并且把解密的钥匙放在工程中,用异或转换,把解密钥匙和加密后的字符串转换,这样就有2层保障,增加了复杂度。 首先 我们创建任意一个工程,在工程中写入下面的代码,并在每句打上断点

ios代码混淆小工具

倾然丶 夕夏残阳落幕 提交于 2019-12-05 05:47:16
一 绪言 写在前面的话:之前做了五年ios开发,现在转了开发方向(数据科学/大数据),今天帮以前ios开发小组的同学,写了一个ios代码混淆小工具,下面介绍下。 这种方式不是最佳方案,更好的方案是confuse.h里写入一段脚本就可以了,给下链接好了, 传送门1 、 传送门2 这里提供一个获取工程中所有属性名、方法名、文件名的工具,有排重功能。 二 ios代码混淆的一点看法 很多时候因为赶项目,或者因为工程的历史原因,我们的代码没有着手做代码混淆,或者代码混淆处理大量的文件名字、属性名字、方法名字浪费大量时间,又觉得没意义。 我们希望得到的结果:1 最好写代码的时候按照自己的喜好与习惯写,没有固定前缀限制 2 代码混淆后让别人越看不懂越好 3 方法名字最好不要一个一个手动复制粘贴到混淆配置文件里 三 提供给你的一个小工具 提供的小工具是python3.6版本的,用于批量获取Xcode工程中的所有属性、方法、文件名字 小工具使用方法:1 需要混淆的.h、.m都存放到一个独立的文件夹里,这里文件夹不能有子文件夹 2 在代码里修改存放代码文件夹的路径与存储结果的路径 import os import numpy as np # 工具类说明:用于ios代码混淆提取文件名、方法名、属性名,提取的内容已经去掉重复的名字 # 工具适用说明:适用时需要传入存储代码的最后一层文件夹路径

python 代码混淆工具汇总

倖福魔咒の 提交于 2019-12-05 05:46:44
pyminifier Pyminifier is a Python code minifier, obfuscator, and compressor. Note For the latest, complete documentation: http://liftoff.github.io/pyminifier/ For the latest code: https://github.com/liftoff/pyminifier Overview When you install pyminifier it should automatically add a 'pyminifier' executable to your $PATH . This executable has a number of command line arguments: $ pyminifier --help Usage: pyminifier [options] "<input file> " Options: --version show program 's version number and exit -h, --help show this help message and exit -o <file path>, --outfile=<file path> Save output to

IOS马甲包混淆

☆樱花仙子☆ 提交于 2019-12-05 05:46:15
转载注明出处: https://blog.csdn.net/lyzz0612/article/details/80390362 本文只适用于机审 4.3,区分机审和人审请找你们后端或运维看看审核期间有没有IP登陆。 1. 机审原理 我们虽然无法得知苹果实际的机审原理,但从程序员的角度还是能分析出一些东西的。 1.1 首先OC和C++代码编译出的二进制文件,有点经验和反编译过的应该都知道: 删注释神马的是没用的,因为注释是不会被编译进包里 改类名是靠谱的,因为反编译出来能看到类名,改掉它显然是会造成包不一样 增改函数也是靠谱的,同样是因为反编译能看到 改文件夹或者文件名应该是不太靠谱的,编译的时候会根据路径来引用查找,编译之后应该是根据在包里的相对内存地址来查找类和函数,跟你编译时的文件名称和路径关系应该不大。不过为了方便和代码的统一,更换时可以顺便换了。 1.2 然后是一些资源文件如图片、音效 路径和文件名相当可能或者绝对是有用的,可惜修改代价有点高 文件的md5值以程序员的角度来看才是真正区分文件是否一致的标准,我们有理由相信我们的苹果同行也用了这个来判断是否重复。所以一些修改md5值的操作如添加空行、注释、额外字节,应该也被考虑加上。 1.3 最后是相似的判定,应该是相似率高于某个值才认为你跟其他的重复了,针对像改资源文件名这种代价太高的可能暂不考虑的操作

Proguard进行Android代码混淆

泄露秘密 提交于 2019-12-04 22:20:41
在实际的开发成产品apk的发布过程中,我们经常会使用到代码混淆技术。不过在讲解如何进行代码混淆之前,我先跟大家演示一下反编译的过程,这样才能让大家明白为什么需要进行代码混淆。 一、代码反编译 1.准备工作 首先我们准备好一个项目的apk文件(未进行混淆打包 )、dex2jar工具(下载地址: http://code.google.com/p/dex2jar/ )、 jd-gui工具(下载地址 : http://jd-gui.softpedia.com/ )。 2.获取CodeMixTest.apk中的classes.dex文件 将CodeMixTest.apk解压,这里我们为了方便就直接解压到当前文件夹下。在解压出的文件中,我们可以看见有一个classes.dex文件,这就是我们的源代码打包生成的文件。 3.使用dex2jar工具还原jar文件 dex2jar工具的作用就是将class.dex文件还原成.jar文件。先将dex2jar-0.0.9.15.zip解压,然后将上面获得的classes.dex文件拷贝至解压的目录中。 查看解压目录中,有dex2jar.bat文件。 启动cmd,进入到dex2jar工具解压的目录中,运行命令:dex2jar.bat classes.dex, 有如下结果 。 查看 dex2jar工具解压的目录中,生成了我们想要得到的 classes

代码混淆

余生颓废 提交于 2019-12-04 15:06:36
混淆的作用: 【优化】 他可以优化java的字节码,使程序运行更快 【压缩】 减少App大小,在混淆过程中会找出未被使用过的类和类成员并删除它们 【混淆】使我们的java代码中的类、函数、变量名随机变成无意义的代号形如:a, b ,c之类的 混淆配置文件:proguard-rules.pro 混淆规则: -keepattributes {name}  保护给定的属性不被混淆,   如: -keepattributes *Annotation* -dontwarn {name}  不要警告指定库中找不到的引用。混淆在默认情况下会检查每个库的引用是否正确,但是有些第三方库里面会有用不到的类,有些没有正确引用,所以需要对第三方库取消警告 否则会报错,而且有可能混淆时间会很长。   如: -dontwarn org.codehaus.jackson.** -keep {Modifier} {class_specification}  保留指定的类名、类成员不被混淆 -keepclassmembers {modifier} {class_specification}   保留指定的类成员不被混淆 -keepclasseswithmembers {class_specification}   保留指定的类名、类成员不被混淆 -keepnames {class_specification}  

dotfuscator 在混淆.Net Framework 4.0以上版本的时候报错的解决方法

非 Y 不嫁゛ 提交于 2019-12-04 07:55:09
dotfuscator 在混淆.Net Framework 4.0以上版本的时候报错的解决方法 编写人:左丘文 2019-11-13 根据公司的安排,出差了三个月墨西哥,没想到人水土不服就算了,电脑也水土不服,去了没多久,笔记本的硬盘就出现了故障,只是中午午餐时间关了一下机,就没办法再起来了,还好,第二块数据盘没有问题,否则这么多年的撸的代码,全部没有了。回来第一时间,就更换了一个新的m.2的硬盘,重装安装了系统和开发环境,在这出差的三个月,没有代码的日子,还是挺惬意的,多的不说,在此做个小结,分享出来,以供参考。有兴趣的同学,可以一同探讨与学习一下,否则就略过吧。 在新安装的电脑中,第一次安装dotfuscator时,肯定在使用混淆的时候会报错,错误描述大致如下: Could not find a compatible version of ildasm to run on assembly C:\xxx.dll This assembly was originally built with .NET Framework v4.0.30319 其根本原因也一些相关的DLL未加入 LASM_v4.0.30319(这个命名其实可以随便取的) C:\Windows\Microsoft.NET\Framework\v4.0.30319\ilasm.exe ILDASM_v4.0

高德地图打包后不能使用,高德导航View不显示,高德地图导航组件黑屏的问题;

前提是你 提交于 2019-12-03 11:08:55
在现在的APP中地图真的很常见,我们在去使用是一般都会选择一些三方的API,像百度、高德等等。。。 在集成的过程中,难免会遇到一些问题,大部分问题我们仔细的阅读开发文档都能解决的;但是!!!问题出现后就没心情去细细的看文档了,总想着去搜索问题看有没有类似的; 主要问题: 打包后地图出现问题,绝大部分都是因为KEY的原因,我们使用正式签名文件中的SHA1去创建一个KEY替换到代码中的那个就行了; 而我的问题: 高德地图导航功能出来一个组件导航挺有意思的,集成试了一下,感觉很棒没有任何的问题,但是我打包后,导航的View全部不显示,组件导航功能进入就是黑屏。“修改代码,打包安装”进行了无数遍,问题足足困扰了几天,都没有解决;实在没有办法在高德开放平台提交了工单; 您好,你的问题是因为您打包混淆时将我们组件的一些必要类给混淆掉了,导致在运行的过程中找不到对应的类。请您参考我们官网的开发注意事项里的混淆配置修改一下您的混淆配置文件。 网址:http://lbs.amap.com/api/android-navi-sdk/guide/create-project/note 具体的混淆配置为: 导航 -keep class com.amap.api.navi.**{*;} -keep class com.autonavi.**{*;} 内置语音 V5.6.0之后 -keep class com

iOS混淆代码

匿名 (未验证) 提交于 2019-12-03 00:30:01
混淆代码之前class-dump下代码。如图,发现方法名称完美的暴露了。 混淆之前 混淆之后,发现syn_loginWithName:password:方法名变成了毫无意义的名称。 混淆之后 好,混淆的作用已经演示清楚。那么接下来就说说如何实现混淆。 方式一 第一步:建立测试项目,同时新建一个confuse.sh、一个func.list文件。如图: 第二步:将新建的两个文件拖到项目中。如图: 第三步:将 iOS安全攻防(二十三):Objective-C代码混淆 - 博客频道 - CSDN.NET 这篇文章中的脚本代码拷贝到confuse.sh文件中。如图: 拷贝代码 第四步:建立一个.pch文件,并添加代码。(现在的项目都不会自动创建这个文件了) 一:新建一个Header File文件,如图: 新建TestConfusion-Prefix.pch文件 二:在项目中配置一下: 配置.pch文件 三:在.pch文件中添加如下代码:(这个头文件的引入要写在最上面) 第五步:配置 Build Phase,并添加 Run Script 添加Run Script 添加完成后要赋予该文件权限。打开终端,cd到项目根目录并执行该命令: chmod 755 confuse.sh 好了,回到项目command + b 编译一下,会发现报错。 报错 这时要注释.pch文件中 刚刚添加的那句话: 注释