共计 1675 个字符,预计需要花费 5 分钟才能阅读完成。
在山寨这个畛域,没有人比黑灰产更懂模拟。
据平安从业者介绍,一般而言,对于成熟的山寨开发者来说,几天工夫内就能够做出一套前端框架。服务器、源代码、域名、服务商这些内容的创立,通过网上租赁的形式就能够解决。
比方,一款苹果利用商城里上线的 App,黑灰产能达到 1:1 级别的复制,报价高达近三万元,20 天就能竣工。
如果想要让这些仿冒 App 胜利上线苹果或者安卓的利用商店,只须要在完工后领取相应的费用即可。
而山寨开发者之所以能如此疾速复刻出 App,其实是对 App 进行了反编译或篡改工作。
防篡改重要性
防篡改顾名思义就是通过技术手段让逆向工程师们不能篡改某个 App 中的要害信息,进而起到 App 加固的作用。
如果没有 APP 加固实现防篡改,那么攻击者插入恶意代码就能够达成两方面的攻打向量:
1、对于 App 用户而言,插入恶意代码的 App 流传进来能够进行 钓鱼、电信欺骗 等操作,用户会有资产或其余损失;
2、对于 App 服务端而言,攻击者就能够利用客户端与服务端的一些接口对服务端进行攻打,对 App 造成相应的舆论和声誉损失。
App 加固中的防篡改原理
那么,App 加固中的防篡改到底是如何实现的呢?
咱们无妨从 App 的开发讲起。
一个 App 大抵由开发者、App、包名、证书、签名组成。如果把开发者比作父母,那么 App 就是孩子,包名则是孩子(App)的姓名,证书则是孩子(App)的出生证明,签名则是身份证号码。
与新生婴儿相似,当开发者实现 App 的开发时,App 只有姓名这一个能够证实其身份的货色,此时也很容易会产生“狸猫换太子”的状况。为了保障孩子的平安,父母就须要给孩子筹备出生证明,而后再应用出生证明给孩子生成一个身份证号码,证实孩子的身份。
对于攻击者而言,要想拐走这个“孩子”,有两种形式:
一是通过盗取证书进行信息篡改,即对 App 的证书进行攻打,包含证书文件自身、证书私钥、证书私钥别名,一旦攻打胜利,他就能够以开发者的身份对 App 进行篡改,但一般而言证书不会轻易泄露。
二是绕过签名与包名校验,间接对 App 自身进行批改。这就相当于人贩子拐走了小孩,怎么看待被拐走的孩子是人贩子的事件。
理解了这个原理后,咱们就比拟好了解如何防篡改了。
要想保障 App 不被篡改,咱们要做的就是保障 App 的包名、签名、证书等信息的平安。
个别做法是提前收集利用的包名、证书、签名并记录在册,当攻击者应用伪造的证书生成了伪造的签名,咱们就能够疾速辨认出你的身份信息与记录在册的信息是不符的,这样咱们的加固程序就能够回绝应用这个 App。
当 App 呈现闪退、解体等操作时,咱们就能够思考是不是咱们应用的是混充的 App 了。
App 加固中的防篡改伎俩有哪些?
总的来说,防篡改能够通过加壳、资源加密 代码混同、虚构执行等伎俩来实现。
1、加壳即通过对 DEX 文件进行加壳防护能够抉择整体 DEX 加固或者拆分 DEX 加固的形式,暗藏源码避免间接性的反编译。拆分 DEX 加固须要留神 DEX 文件的数据结构,选取 classdata 和 classcode 这两局部,即便拆分进去也不会泄露 class 数据和字节码数据,反编译进去也不残缺,安全性较高。
2、资源加密即对软件包中的图片、音频、视频等资源文件进行加密,避免被攻击者替换或篡改。
3、代码混同即对编译好的 class 文件进行混同解决,解决后的代码与解决前代码可能实现雷同的性能,但混同后的代码很难被反编译,即便反编译胜利也很难得出程序的真正语义。
4、虚构执行行将原始化代码编译为动静的 DX-VM 虚拟机指令,运行在 DX 虚拟机之上,无奈被反编译回可读的源代码。
但正如咱们在上篇代码混同的科普文章中提到的,仅靠代码混同、防篡改是无奈防住黑灰产的,在利益背后,他们总有方法找到破绽。
因而,对于 App 加固而言,最好的方法是多管齐下,对 App 加固进行多重防护。比方字符串加密、控制流平坦化、指令替换、符号混同、混同多样化、不通明谓词、防动静调试、防动静注入、HOOK 检测、代码段测验、完整性校验等等多种技术手段。
只有这样,能力防患于未然。
业务平安大讲堂:立刻报名
业务平安产品:收费试用
业务平安交换群:退出畅聊