作为乙方,或者说作为打工人,甲方以及老板经常会问,
“我们软件的安全性怎么样?”
“能做到百分比安全吗?”
“我们怎么才能让软件百分比安全?”
......
诸如此类的问题,往往让我们胸闷气短,在这里,我教大家一招:与其精神内耗自己,不如发疯外耗别人。咱就直接坦荡荡告诉他:老板,可以的,这取决于你能拿出多少钱来!微笑.jpg
话说回来,安全界最基础的一条定律:安全无绝对。也就是说,安全其实相对的(废话),实践上很多手段都是在提高破解的成本,降低破解的性价比。
那么我们如何提高软件的相对安全呢?目前业界采取的比较多的一套组合拳是加固+代码混淆+加密SDK。我们接下来一一来介绍一下。
开始之前,我们先来看一下目前黑灰产的攻击手段
技术的发展,带来的效果是双面的,一方面让我们的防御手段升级,而另一方面,也让黑灰产的手段更加先进。因此,面临各类场景的欺诈风险,我们需要建设纵深化防御体系。
ios加固保护
iOS加固保护是可以对iOS App/动态库/静态库中的代码进行深度混淆、加固,并使用独创的虚拟机技术对代码进行加密保护,使软件无法被直接进行逆向、破解。在这个方案中,可以从6个方面进行加固:(具体代码见:iOS加固保护新思路)
1.代码虚拟化: 将原始化代码编译为动态的DX-VM虚拟机指令,运行在DX虚拟机之上,无法被反编译回可读的源代码。
2.代码混淆: 将原始代码的控制流进行切分、打乱、隐藏、插入花指令、将代码逻辑复杂化而不影响原始逻辑。提高App store上架机率。
3.防调试: 为App提供运行时防调试能力,防止攻击者通过调试来动态分析App的逻辑。
4.字符串加密: 把代码中定义的静态常量字符串进行加密,运行时解密,防止攻击者通过字符串进行静态分析,猜测代码逻辑。
5.防反编: 译有效防止攻击者使用逆向分析工具将二进制代码反编译为伪代码(Pseudo-Code),如IDA的F5功能。
6.防篡改: 防止应用程序中的代码及资源文件被恶意篡改,杜绝盗版或植入广告等二次打包行为
Android加固保护
Android加固保护分别从代码安全、资源文件安全、数据安全和运行时环境安全维度提供安全保护。同时针对每个维度又进行了不同层次的划分,加固策略可依据实际场景进行定制化调配,安全和性能达到平衡。
1.DEX文件保护: 通过使用DEX壳、JAVA代码反编译、JAVA指令虚拟化、JAVA字符常量加密等技术对DEX文件进行全面性保护。
以壳保护为例:
加固前:
加固后:
2.SO文件保护: 通过对SO文件进行反编译、防篡改、防盗用、虚机保护、代码压缩等技术对SO文件进行全面性保护。
3.资源文件保护: 对应用中的资源文件以及JS文件进行加密保护和防篡改保护。
1)资源文件加密保护:
2)JS文件保护
3)资源文件防篡改保护
4.运行时保护: 对应用的运行环境进行实时检测,保护应用运行在安全的环境中。
5.数据文件保护: 对应用使用到的本地文件、数据库、配置文件进行加密保护。
端安全加固:H5代码混淆
H5代码混淆是对H5代码进⾏加密、混淆、压缩,可以⼤⼤增加H5代码的安全性,有效防⽌产品被⿊灰产复制、破解。
AST:抽象语法树(abstract syntax tree),源代码的抽象语法结构的树状表现形式
加密前:
加密后:
白盒加密SDK:通信加密
普通加密:
- 最大隐患是对密钥的保护:任何人只要得到密钥,就能解密任何密文
- 开发者在app中使用各种手段来隐藏密钥,但都无法保证安全
- 如果对密钥进行加密,又将引入一把新的密钥
白盒加密
1.Lookup table转换: 将密钥打散,转化为大量的Lookup table,融入算法之中,从原理上杜绝密钥泄露的风险
2.Lookup table随机化: 对Lookup table进行随机化、非线性化保护
3.应用虚拟机保护技术: 将算法置于顶象专利的虚机环境中进行保护,运行时与外界非可信环境隔离
4.高强度攻防对抗: 采用多种技术防止对白盒的非法调用、注入、调试、内存修改等攻击
5.加密数据与设备绑定: 实现一机一密的超高安全性,无法脱机解密
以上就是目前软件安全保护的最基础的组合拳,仅供大家参考学习~
如需要完整的解决方案,可以前往了解:顶象端安全解决方案
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。