一、概述
我们将简单了解与 Android 安全相关的知识。我们将探讨静态分析和动态分析。静态分析是一种在应用程序未运行的情况下,分析源代码并查找漏洞的技术。动态分析是一种在应用程序运行时,通过 Hooking 或分析 ELF 可执行文件的结构来查找漏洞的技术。主要的移动应用程序检查项目包括:第一,是否应用了检测操作系统修改的功能;第二,程序完整性验证;第三,是否会暴露内存中的重要信息;第四,是否在设备中存储了重要信息;第五,是否通过强制执行屏幕来绕过身份验证步骤。
Ⅱ. 安卓安全相关知识
主要内容是: 动态分析, 静态分析, MultiDex预计会这样发展。在此之前,我想就之前的帖子发表一些看法,因此,第一段可能会显得有些杂乱,请谅解。首先,与iOS类似,在Android系统中,为了保护设备免受恶意软件的侵害,应用程序需要… 开发者签名这是必要的。如果没有签名,应用程序无法安装和运行,而且签名可以有效地防止篡改。 短信诈骗(利用短信窃取个人信息和勒索钱财)在进行攻击时,通常基于网站地址进行。为了确认攻击方是否实际尝试获取个人信息,以及使用的设备,应该如何进行验证?这在网站开发时也需要考虑。 用户代理由于存在用户标识,攻击者可以通过此信息获取目标设备的信息,然后发起攻击。因此,在Web服务中,通过用户代理信息,可以区分移动设备和PC,并针对不同的操作系统,分发相应的恶意代码。
※ 提示: 在识别 Nox 或 LD Player 等虚拟安卓应用时,还需要确认其是否包含蓝牙、运营商、电话号码等额外信息。
* 从网络环境建设的角度来看,有时会采用划分内部网络和访客网络的方式,以保持网络安全。
虽然之前的帖子提到 iPhone 的安全性较高,但实际上,无论是 iPhone 还是 Android,都可能因为使用了 C 语言代码而存在安全漏洞。尤其是在开发游戏等应用程序时,如果开发公司同时开发 iPhone 和 Android 版本,可能会出现使用相同的 C 语言代码的情况,因此需要特别注意。在 Android 平台上,可以使用 Native Libraries 来执行 C 语言代码。
本次实践内容包括:对 Android APK 文件进行反编译、重新打包和编译,并分析或修改其中的代码。同时,还附上与反编译和编译相关的 Google 文档,以及与 Android 汇编语言 (Smali) 相关的参考资料。
java -jar apktool_2.5.0.jar(java의 디컴파일, 컴파일 도구) d(디컴파일 옵션) apk(디컴파일 할 apk명) path(저장경로 및 디렉토리명)
java -jar apktool_2.5.0.jar b(컴파일 옵션) directory(컴파일 할 소스 코드 담긴 디렉토리) -o(이 옵션 다음에 apk 저장할 디렉토리) apk(새로 만들 apk명)达尔文字节码 | Android 开源项目 | 安卓开放源代码项目
达尔文可执行文件格式 | Android 开源项目 | 安卓开放源代码项目
Ⅲ. 静态分析与动态分析
静态分析在应用程序未运行的情况下 在源代码中这是一种用于检测缺陷的分析方法。 解构 通过查看源代码(汇编语言或原始代码),尝试进行分析。这时可以使用一些工具,例如前面提到的 apktool 和 jadx。在 Android 系统中,可以通过查看 AndroidManifest.xml 文件和签名信息,大致了解应用程序使用的权限以及是否存在恶意代码。在 DEX 结构中,可以查看每个功能的具体信息。 classes.dex因为被束缚,

基于这个结构,尝试进行代码分析。
动态分析这是一种在应用程序运行环境中检测漏洞的分析技术。它通过修改用户的输入和输出,或者修改应用程序的执行流程,来验证漏洞是如何产生的。该技术用于在应用程序运行时,修改数据或执行流程。 吸引我们需要使用像 Frida 这样的工具,它以 hooking 机制而闻名。通过 Frida,我们可以查看应用程序中哪些类和方法存在,了解这些方法的功能,并进行操作。 弗里达虽然它基于 JavaScript,有一定的框架,但需要自己编写代码逻辑。此外,还需要使用 Java。 JEB此外,还有一些商业软件。据了解,在安卓系统中,许多最初是基于Unix系统的可执行文件(ELF,Executable and Linkable Format)的“so”扩展名文件,会被动态加载。这些文件通常是用C/C++语言编写的,并通过原生库来运行,因为它们与安卓的基础系统Linux系统相关联。
检查项目 | 说明 |
是否应用信号调制检测功能 | 由于在修改操作系统(例如:Rooting、脱机)的设备上使用,安全风险增加,因此,在使用修改过操作系统的设备时,需要检查是否可以正常使用服务。 |
程序完整性验证 | 由于修改后的程序可能正常运行,存在被恶意代码感染并重新分发的安全风险,因此需要检查修改后的程序是否能够正常运行。 |
是否泄露了存储在内存中的重要信息 | 检查用户终端设备内存区域是否暴露了用户的敏感信息。 |
终端设备上是否存储了重要信息 | 检查应用程序使用的文件夹和外部存储设备上是否存在重要信息 |
绕过因强制执行而产生的身份验证步骤 | 检查是否存在通过强制运行应用程序、篡改身份验证相关文件等方式,绕过身份验证步骤的可能性。 |
根据这张表格,在移动应用程序中需要检查的五个主要方面如下:第一, 检测信号调制这是一个检查,用于确定是否获得了操作系统的管理员权限,从而能够完全控制设备。在 Android 系统中 根植例如,在苹果手机方面 越狱这会导致设备上的安全系统“沙箱”失去功能,从而使普通用户面临极高的安全风险。此外,如果设备因恶意软件而导致管理员权限被攻破,可能会导致设备上存储的所有数据被泄露,从而造成严重后果。
※ 某些程序,即使在PC上使用,也可能利用操作系统的较高权限。由于这些程序可能被破解,从而获取您的PC信息,因此需要格外注意。例如,VMware、Nox Player等虚拟化软件,可以直接访问内核,因此存在安全风险。
因此,为了检测这种操作系统修改,可以使用特定的应用程序。 系统设置文件(ro.debuggable, service.adb.root) 您可以检查设备信息,或者进入 Android 系统的根目录,并检查是否执行了 `su` 命令。 在设备安装后,会安装以下文件:(/sbin/su, /system/su, /system/bin/su, /system/xbin/su, /system/app/Superuser.apk 等)您可以尝试查找是否有这些生物。
getprop | grep debug尝试输入此命令,

如果能看到这样的结果,如果 `ro.debuggable` 的值为 0,则表示设备未被root;如果值为 1,则表示设备已被root。
程序完整性验证这部分对于普通用户来说,尤其需要注意,因为从外观上看 即使应用程序看起来正常,但实际上可能存在恶意代码在内部运行。 需要注意。特别是从非官方的“Google Play 商店”这样的应用市场下载的应用程序,风险较高。而 iOS 实际上只能从“App Store”下载,因此相对来说比较安全。此外,由于 Windows 很容易从网上下载和使用程序,因此也需要格外注意,因为一旦安装,就可能带来不良后果。
内存中重要信息的泄露这方面需要特别关注,因为所有设备都可能受到内存攻击。实际上,所有应用程序都会占用内存,从而存储和删除各种数据。如果有人能够实时地… 导出内存信息如果发生这种情况,您的账号、密码、卡号、银行账号等所有信息都可能会被泄露。因此,我输入的这些重要信息,会被存储在内存中。 如果仅仅作为文本存在,则存在漏洞。并且, 加密即使通过某种方式,内存信息被泄露,也应该确保无法被识别。尤其是在网络环境中,安全至关重要。由于 JavaScript 存在安全漏洞,如果直接暴露,可能会带来风险。 在数据库中存储个人信息时,也应进行加密。这需要具备一定的专业知识,并且需要能够轻松地解读和分析。
在终端设备中存储重要信息这种情况并不常见。 重要的个人信息存储在公共目录或外部存储空间中。如果设备被入侵,所有个人信息都可能被窃取。在游戏方面,如果用户数据仍然存在,可能会有人利用这些数据来玩游戏(但这可能性很小)。但不仅仅是游戏,例如银行也面临类似的问题。 由于我们对服务器上的重要信息进行了管理,并且非常重视服务器的安全性, 一般来说,这可以被认为是安全的。 只要用户没有在设备内部单独存储重要的信息,那么相对来说风险较低。
绕过因强制执行而产生的身份验证步骤包括登录或输入密钥等操作。 与认证相关的文件通过操纵系统,可以绕过安全措施,从而访问用户应用程序并获取个人信息。 Androidmanifext.xml该应用程序具有权限和组件设置,如果导出的值为 true,则其他应用程序或系统可以直接访问该服务;如果值为 false,则只能在应用程序内部访问。如果通过这些设置,外部无法访问该应用程序 登录活动访问该页面,并在登录过程中 调用其他活动 这使得可以绕过身份验证步骤。也就是说,可以利用非正常登录相关的功能,执行其他恶意代码。
Ⅳ. MultiDex
MultiDex简单来说,我们可以这样理解:Dex结构实际上是双重的。

请看下图,相信您会更容易理解。这种结构产生的背景是: 方法的局限性 这是因为,对于简单的应用程序来说,这可能不适用。但是,如果应用程序提供了大量的功能,或者在开发过程中使用了大量的库,那么将其全部包含在一个 DEX 文件中可能会遇到限制。 64KB 内存限制这种类型的内存被称为“64K 寻址限制”,因为它实际上不能超过 65,536 个方法,并且其大小与 64 x 1,024 相同。因此,如图所示 主目录哇 亚德这种结构允许应用程序在不同的模块之间动态地加载和运行。然而,这种结构并非总是出于限制而采用,有时是因为这种结构的优势。 对于 Sub Dex,由于其代码可能会被隐藏, 重要的代码可以被隐藏在 Sub Dex 中,并在 Main Dex 中执行常规代码。通过对该 APK 文件的反编译,可以观察到 Main 和 Sub Dex 位于不同的区域。
ELF (可执行和链接格式)我们简单地探讨一下如何在 Android 平台上调用和使用它。

该程序使用 Android 架构的原生库,以 C/C++ 语言编写,它在 DEX 结构中,当 CLASS 的方法需要执行时,如果需要调用其中的 ELF 方法, PLT(程序链接表)可以通过此方式实现。PLT(Procedure Link Table)是一个用于连接外部程序的表,它存储了程序的地址。 全局偏移表 (GOT)可以参考 PLT 中 Procedure 的地址。GOT (Global Offset Table) 包含在 ELF 文件中,就像图中所示。具体来说,在 Android 的 DEX 结构中,CLASS 的 METHOD 拥有 PLT 中指向需要执行的 ELF 模块的方法,而 PLT 可以通过 GOT 来加载这些方法。

打开 APK 文件后,你会发现它包含各种不同的组件,其中就有一个名为“lib”的目录。这个目录中包含了 ELF 文件。进入这个目录,

这种形式通常以 lib[name].so 的方式存在。 ".so" 扩展名在 Linux 系统中表示可执行文件,而 ELF 类似于 Windows 的 PE,代表 Linux 系统的可执行文件结构。
评论
实际上,我今天先写了总结,然后再写文章。 이번 주,由于学习了与黑客相关的技术,文章数量可能会减少。 所以,我打算先自己整理一下,然后将漏洞诊断部分作为最后一部分来完成。 减少了文章数量,感觉也更轻松了。
登录