山寨APP频出?安全工程师和黑灰产在较量

news2024/9/28 9:25:20

在山寨这个领域,没有人比黑灰产更懂模仿。

据安全从业者介绍,一般而言,对于成熟的山寨开发者来说,几天时间内就可以做出一套前端框架。服务器、源代码、域名、服务商这些内容的创建,通过网上租赁的方式就可以解决。


比如,一款苹果应用商城里上线的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检测、代码段检验、完整性校验等等多种技术手段。

只有这样,才能防患于未然。

                                                                  

拓展学习:

小白如何从靶场过渡到实战——「业务安全大讲堂第第二季第2期」icon-default.png?t=N176https://live.csdn.net/room/dingxiangtech/xldogSXD

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/381755.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【面试题】2023前端vue面试题及答案

Vue3.0 为什么要用 proxy?在 Vue2 中, 0bject.defineProperty 会改变原始数据,而 Proxy 是创建对象的虚拟表示,并提供 set 、get 和 deleteProperty 等处理器,这些处理器可在访问或修改原始对象上的属性时进行拦截&…

Window问题详解(下)

建议先看一下 Window问题详解(上) 思路② 既然会超时,那该怎么办呢? 显然需要一个更快速的方法来解决这个问题! 我们先来观察一下图片: 我们发现,每一次选中的数都会增加下一个。 !!!!! 因此,我们可以根据此特性优化时间!! 第一次先求出前 k − 1 k-1 k−

hdfs file system shell的简单使用

文章目录1、背景2、hdfs file system shell命令有哪些3、确定shell操作的是哪个文件系统4、本地准备如下文件5、hdfs file system shell5.1 mkdir创建目录5.2 put上传文件5.3 ls查看目录或文件5.4 cat 查看文件内容5.5 head 查看文件前1000字节内容5.6 tail 查看文件后1000字节…

Kubernetes12:k8s集群安全机制 ***与证书生成***

Kubernetes12:k8s集群安全机制 1、概述 1)访问一个k8s集群的时候,需要经过以下三个步骤才能完成具体操作 第一步:认证操作第二部:鉴权操作(授权)第三部:准入控制操作 2&#xff…

小白晋升大牛的13个项目

入门到放弃 “C/C真的太难学了,我准备放弃了!” 很多初学者在学完C和C的基本语法后,就停滞不前了,最终走向“从入门到放弃”。其实,我们初学者最需要的不是HelloWorld,也不是语法知识的堆砌,需要的只是实战项目的磨砺…

「TCG 规范解读」基础设施架构和协议 (1)

可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…

9、STM32 SDIO FATFS(SD卡)

本篇文章使用STM32对SD卡通过SDIO配置,读写文件 在使用FATFS时值得注意得是若通信SDIO不启动DMA方式读写,容易导致其他任务中断打断读写时序,导致FATFS的执行出现异常,常见返回为FR_DISK_ERR, / (1) A hard error occurred in the…

【论文阅读】Robust Invertible Image Steganography (CVPR 2022)

作者来自北大深研院 网上已有介绍:https://news.pkusz.edu.cn/info/1002/6538.htm 针对传统图像隐写方法对高斯噪声、泊松噪声和有损压缩鲁棒性差的问题,提出了一种基于流的鲁棒可逆图像隐写框架RIIS。框架如下图 一、方法概述: 基于流的可…

计算机组成原理4小时速成6:输入输出系统,io设备与cpu的链接方式,控制方式,io设备,io接口,并行串行总线

计算机组成原理4小时速成6:输入输出系统,io设备与cpu的链接方式,控制方式,io设备,io接口,并行串行总线 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人&#xff0c…

计算机网络--网络层 IPv4地址概述(day05)

网络层 网络层提供的两种服务 IPv4地址概述 IPv4地址就是给因特网(Internet)上的每一台主机(或路由器)的每一个接口分配一个在全世界范围内是唯一的32比特的标识符 IPv4地址的编址方法经历了如下三个历史阶段: 分类编址 1981划分子网 1985无分类编址…

JavaScript Array 数组对象

文章目录JavaScript Array 数组对象什么是数组?创建一个数组访问数组JavaScript Array 数组对象 数组对象的作用是:使用单独的变量名来存储一系列的值。 创建数组, 为其赋值: 实例 var mycars new Array(); mycars[0] "Saab"; mycars[1]…

【虚幻引擎】UE4源码解析FWorldContent、UWorld、ULevel、UGameInstance、UEngine

一、UEngine Engine,因为也是很基础的类,再加上开发过程中会经常访问到该类型,因此UE4引擎也在代码全局范围内定义了一个该类型的全局变量:UEngine* GEngine供开发者直接调用。该最基础的类型分化成了两个子类:UGameE…

【面试题】 JavaScript 字符串截取方法有哪些?

大厂面试题分享 面试题库后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库在 JavaScript 中,可以使用 substr()、slice() 和 substring() 方法截取字符串。substring()substring() 方法返回一个字符串在开始…

Lock锁心得

lock接口最常见的实现类ReentrantLock,通常情况下,lock只允许一个线程访问共享资源,也有特殊情况,比如读写锁里的读锁。lock和synchronizrd是常见的锁,都可以让代码变得安全。但是功能上有差别,二者不是能替…

笃行不怠勾勒人才图,望城区人才工作为高质量发展增添强劲动力

功以才成,业以才广。人才是经济高质量发展的重要资源。党的二十大报告明确“深入实施人才强国战略”,指出“实施更加积极、更加开放、更加有效的人才政策”。作为湖南“一核两副三带四区”区域经济发展格局的战略支点,望城区积极发挥着政策主…

TCP协议详解—TCP各个报头属性的作用

文章目录一.TCP是什么二.TCP协议格式1.报头属性解释TCP首部长度/如何解包分用三.确认应答机制-tcp如何保证可靠性1.确认应答机制2.序号/确认序号-如何保证报文按序到达3.为什么要两个序号四.16位窗口大小-调整发送策略五.6个标志位一.TCP是什么 首先我们需要知道TCP是什么,TCP全…

你知道Object类和Objects的常用方法吗

文章目录Object的常用方法Objects的常用方法hashCodehashisNullequalsrequireNonNullcomparenonNull大家好,Leo又来了!!!最近在网上看到别人分析Objects中isNullfanfan方法来判断,我就想到之前写的一坨坨null,突然很惭愧,特地去研…

IIC总线式驱动开发(mpu6050)

目录 一、I2C总线背景知识 二、Exynos4412 I2C收发实现之裸机版 2.1 发送 2.2 接收 三、Linux内核对I2C总线的支持 四、MPU6050 五、应用层直接使用I2C通道 5.1 预备工作: 5.1.1 5.1.2 5.2 应用层直接使用i2c总线的代码实现 5.2.1 调用read、write实现接…

解决“vue“不是内部或外部命令问题

通过vue指令使用脚手架初始化项目时,在cmd中输入vue init webpack vue_project,终端报错: vue 不是内部或外部命令,也不是可运行的程序或批处理文件。解决方案: 1、确定npm是否已正确安装,在cmd中输入如下…

AcWing算法提高课-3.1.3香甜的黄油

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 题目传送门点这里 题目描述 农夫John发现了做出全威斯康辛州最甜的黄油的方法&#xff1a;糖。 把糖放在一片牧场上&#xff0c;他知道 N 只奶牛会过来舔它&#xff0c;这样就能做出能卖好价…