Android恶意软件混合与匹敌技术专题

颁布功夫 2024-11-25

第一章 概 述


近年来 ,Android恶意软件数量不休攀升 ,其选取的攻击和匹敌技术也变得越来越复杂。为了匹敌安全分析 ,绕过安全检测 ,窃取敏感数据或粉碎系统安全 ,恶意软件利用各类匹敌技术来假装和暗藏其恶意行为和代码逻辑。这些匹敌技术中 ,针对资源、文件、字节码指令及机械码指令的混合技术被宽泛地引入到恶意软件中 ,成为高级黑客与逆向工程师匹敌的沉要战场。


混合技术的主题指标是增长分析复杂性来匹敌逆向工程 ,同时也能提高免杀能力 ,重要匹敌指标蕴含逆向工程师、静态分析工具、动态调试工具以及自动化检测系统�;旌霞际跬ü柚梅治鱿葳濉⑴ぷ募峁埂⒃龀ぶ噶罡丛佣取⑿楣够噶睢挡卮牒妥试吹雀骼喾蔽叩募际趵锤哺瞧湫形氐愫凸セ饕馔� ,同时给分析人员尽可能大的造作分析阻碍 ,延后其恶意行为露出的功夫。同时 ,恶意软件通过组合使用各类各样的混合与分析匹敌技术 ,对现有安全检测工具和防护机造形成了严格挑战。这必要不休跟进各类技术的发展 ,对新的伎俩进行深刻钻研 ,造订有效且急剧的应对步骤 ,强化分析工具和检测工具 ,同时也有助于急剧应对高级且复杂的恶意软件攻击。


本文将对我们分析Android恶意软件过程中所遇到的常见混合技术进行总结和分析 ,从恶意软件混合与匹敌的视角来论述另一面的安全攻防技术 ,以援手安全工程师和用户们越发深刻理解这一领域的技术情况 ,同时也有助于分析人员更高效地分析恶意代码。

第二章 Android恶意软件混合技术的演进

随着移动安全领域匹敌的不休升级 ,Android 恶意软件的混合技术也经历了显著的发展 ,从单一的标识符混合逐步演进到复杂的虚构化�;ぃ╒MP)技术 ,出现出由浅入深、逐步升级的趋向。为更清澈地理解这一变动 ,我们将混合技术的发展大体划分为早期、中期和当前阶段 ,并从分歧层面进行具体解析。


2.1 早期阶段:基础假装与单一加密 


在早期 ,恶意软件的混合技术重要以覆盖代码和资源内容为指标 ,伎俩较为单一向接 ,其混合技术重要集中于Java层 ,利用Android利用以Java说话开发的个性 ,通过单一的混合伎俩躲避安全分析和检测。在这一时期 ,恶意软件起头索求文件体式有关的混合战术。例如 ,通过批改ZIP体式的APK伪加密 ,以及2012年黑帽大会上初次提出的利用DEX头暗藏代码的技术 ,这一战术随后被Syrup恶意软件所选取。同时 ,木马Obad利用贸易混合工具DexGuard(ProGuard的加强版)实现了Manifest字段的复杂混合以及基于clinit步骤的动态代码解密 ,被誉为“史上最强Android木马”。


这一阶段 ,短信拦截类和锁机勒索类恶意软件宽泛选取多种混合伎俩 ,蕴含代码混合、字符串加密、代码宰割、垃圾代码注入 ,以及贸易加固工具的使用。这些技术只管相对基础 ,但在其时的安全环境中 ,已经显著提高了恶意软件的荫蔽性和抗检测能力。下图展示了一款短信拦截木马的混合成效。


图片1.png

图1 一个短信拦截木马的混合示例


2.2 中期阶段:逻辑复杂化与动态匹敌 


随着安全检测技术的不休提升 ,恶意软件逐步引入越发复杂的混合伎俩 ,以提高荫蔽性并有效躲避分析。为躲避静态分析 ,它们利用动态加载和反射机造 ,通过反射动态挪用暗藏的关键代码。同时 ,恶意软件选取多沉加密与解压战术 ,对关键代码进行多档次加密 ,并在运行时通过复杂的解密过程逐步开释真实的恶意逻辑。例如:在我们颁布的分析汇报《新型Android银行木马“MoqHao”利用社交网络暗藏C&C服务器》中 ,恶意软件将真正的恶意dex文件加密后 ,以Base64编码的大局保留在原始APK的assets目录下。在这种情况下 ,原始APK仅作为一个表壳存在 ,其在运行时会动态解密并加载真正的恶意dex文件 ,以实显熹攻击主张 ,其过程如下图所示:


图片2.png

图2 Java层混合dex文件的示例


为了侵扰分析蹊径 ,恶意软件引入节造流混合技术。通过插入无关的分支、循环和跳转语句 ,恶意软件使代码执行蹊径越发复杂 ,故障分析人员还原其逻辑。而在结合贸易加固解决规划后 ,通过内存加载、指令抽取和指令转换等技术 ,进一步提升了匹敌分析的能力 ,使得分析人员难以正确还原其现实的执行逻辑。


随着反混合技术的进取和现代化反编译工具的遍及 ,恶意软件逐步将混合战术向Native层转移 ,以进一步提升逆向分析的难度。其常用技术蕴含对会话数据加密以预防敏感信息泄露、加密关键函数体以暗藏恶意行为、插入花指令滋扰反汇编工具分析、利用LLVM框架执行复杂的代码混合 ,以及通过反调试技术检测和阻止调试器染指。这些战术相辅相成 ,不仅显著增长了逆向工程的复杂性 ,也进一步提高了安全钻研人员分析的技术门槛。例如:在我们颁布的《一款通过SO进行自�;さ囊蠥PP劫持木马深度分析汇报》中 ,具体分析了该木马的运行行为。具体而言 ,libload.so� ?檎乒芙饷懿⒓釉叵质档亩褚獯�。该� ?槔肑ava反射机造挪用javax.crypto包中的加解密函数 ,对存储在assets目录下的mycode.so文件进行AES解密。解密后的文件通过自界说的DexClassLoader加载并执行 ,执行结束后 ,解密的文件会被删除。这些精心设计的混合伎俩有效暗藏了恶意行为 ,显著增长了安全分析的复杂性 ,使得恶意软件的检测和分析变得越发难题。加载Native解密库的部门代码如下图所示:


图片3.png

图3 Natvie层混合示例


此表 ,针对文件体式的混合战术也变得越发多样和复杂。它们奇妙利用 Android系统对某些文件体式字段宽松校验的个性 ,同时借助反编译工具对文件体式的严格解析逻辑 ,设计了多种滋扰和暗藏机造。通过对这些文件体式的矫捷利用 ,恶意软件得以实现更高水平的荫蔽性 ,进一步提高了逆向分析和检测的难度 ,同时也为混合技术的持续发展奠定了基础。


2.3 当前阶段:复杂混合与多层匹敌 


在当前阶段 ,恶意软件的混合技术已经高度复杂化 ,宽泛结合动态和静态匹敌伎俩 ,以加强荫蔽性并匹敌多种检测步骤。通过将Java层代码混合、动态加载与Native层加壳技术融合使用 ,恶意软件将主题逻辑散布于分歧档次中 ,大幅提高了检测和分析的复杂性。以下是目前常见的混合战术:


  • Java层与Native层相结合:恶意软件通过将Java层的代码混合、动态加载、VMP等技术与Native层的代码混合伎俩相结合 ,将恶意逻辑分散在分歧档次中。这种跨层混合战术显著增长了检测和分析的复杂度 ,要求分析人员同使仄握多种技术 ,能力全面理解其运行机造。
  • 使用其他开发说话:恶意软件常利用Lua、GoLang、Flutter、易说话等非传统的 C/C++ 说话进行开发 ,从而显著增长逆向分析的难度。这些说话怪异的个性进一步提高了分析的复杂性 ,同时减弱了传统逆向分析工具的效能和成效。
  • 运行环境检测及反调试:恶意软件通过查抄设备的系统属性、文件系统结构、系统权限状态等 ,判断指标设备是否为模拟器或已获取Root权限 ,并在检测到这些特点时阻止恶意逻辑的运行。同时 ,它们挪用系统API查抄调试状态 ,监测调试工具特有的行为 ,甚至自动引发异常以捕获调试工具的反映 ,有效阻止动态分析工具的滋扰。
  • 贸易加固�;ぜ际酰阂恍┒褚馊砑褂妹骋准庸瘫;ぜ际� ,进一步加强了代码的抗逆向能力 ,使得传统的安全工具和分析步骤难以见效。
  • 代码虚构化技术:通过将代码翻译为自界说的虚构指令集 ,并在运行时通过嵌入的虚构机诠释执行 ,这种技术极大地提高了逆向分析的难度。

例如 ,某恶意软件通过使用Native代码实现对Frida和IDA的检测 ,其代码如下:


图片4.png

图4 Natvie层检测调试器的代码示例


Android恶意软件的混合技术已经从单一的代码混合逐步发展到如今复杂的跨层结合大局 ,其荫蔽性持续加强 ,技术伎俩也愈发多样化。这种发展趋向对传统安全检测工具而言是严格的挑战 ,同时也促使钻研人员必须不休创新应对战术 ,以此来应对恶意软件日益复杂的混合伎俩。在此布景下 ,深刻相识并解析常见的混合技术 ,是提升恶意软件分析和检测能力的关键。接下来 ,我们将通过现实工作中常遇到的恶意软件混合技术进行具体分析 ,探求这些技术的利用方式及相应的防备对策。


第三章 常见混合伎俩与技术解析


在分析Android恶意软件时 ,安全钻研人员通常必要从静态分析和动态分析两方面动手。静态分析往往是最先进行的步骤 ,而混合技术通过批改代码的结构和表白方式(如字符串加密、代码拆分、动态加载等) ,使恶意软件的分析难度显著增长。本文将以安全钻研人员分析APK文件的过程为切入点 ,逐步介绍各类反混合战术 ,援手钻研人员有效应对分歧档次的混合技术挑战。


3.1 APK反编译工具的匹敌


在分析Android利用时 ,首先必要使用APK反编译工具(如Apktool、Jadx)提取APK文件中的源代码和资源。然而 ,恶意软件往往会通过多种混合伎俩对APK进行�;� ,以滋扰反编译过程。例如 ,恶意软件可能利用Android在解析APK文件时未严格校验ZIP体式的某些字段 ,从而通过篡改APK文件的ZIP体式字段来绕过基于ZIP体式解析的反编译工具。这种伎俩尤其常见于一些基于Android的银行木马(如BianLian、Cerberus和TeaBot)中 ,主张是阻止安全钻研人员和自动化分析平台有效提取APK文件内容 ,进而匹敌静态分析和反病毒检测。


为了更好地理解恶意软件的混合战术 ,尤其是若何通过篡改ZIP体式字段来滋扰反编译过程 ,有必要相识一些ZIP文件结构的根基信息。固然ZIP体式的具体结构超出了本文的会商领域 ,但我们能够单一介绍一些常见的、恶意软件时时篡改的字段。我们以 Python 的zipfile.py � ?橹械� ZipInfo 类为例 ,展示了 ZIP文件元数据中的多个关键字段。具体字段及其寓意如图所示:


图片5.png

图5 Zipinfo类的结构信息


其中 ,compress_type、extract_version、reserved和flag_bits都是恶意软件时时篡改的字段。这些批改能够导致反编译工具在解析文件时出现谬误或无法正确读取文件内容 ,从而有效地故障静态分析过程。通过篡改这些字段 ,恶意软件不仅可能躲避常见的反编译工具 ,还能增长被检测的难度 ,提高其在静态分析中的荫蔽性。


在相识了恶意软件若何通过篡改ZIP体式字段来匹敌静态分析后 ,接下来我们必要关注Android利用中另一个常见的反编译伎俩——AndroidManifest.xml文件(以下简称“清单文件”)。清单文件是反编译过程中必须解析的关键部门 ,它蕴含了利用的主题配置 ,如组件、权限等信息。因而 ,提取、读取和分析清单文件是静态分析APK样本时的首要步骤。为了躲避反编译工具的鉴别 ,恶意软件通常通过精心篡改清单文件来滋扰其正常解析。由于清单文件在静态分析中的沉要性和复杂性 ,它成为了恶意软件常用的反编译匹敌伎俩之一。若是读者对清单文件的具体结构不太相识 ,能够自行接见以下链接(https://bbs.kanxue.com/thread-194206.html)查阅有关信息。


接下来 ,我们将介绍几种常见的清单文件混合伎俩 ,探求恶意软件是若何通过这些伎俩匹敌反编译工具并暗藏其恶意行为的:


(1)批改XML文件的魔术:恶意软件通过篡改清单文件中的魔术字段 ,使得静态分析工具在解析时出现谬误。这些批改通常不会影响利用的正常运行 ,但会导致分析工具无法正确解析清单文件的结构 ,甚至可能引发反编译工具的异常谬误 ,从而阻止反编译过程 ,无法提取源代码。


图片6.png

图6 左图为正常的魔术 ,右图为混合的魔术示例


(2)篡改关键字段:恶意软件可能会篡改清单文件中的关键字段 ,例如通过批改StringPool中字符串的个数。固然Android系统在运行时并不依赖这个字段来推算字符串的个数 ,而是通过动态推算来处置字符串 ,但一些反编译工具却会依赖这个字段来解析XML文件中的内容。通过篡改这个字段 ,恶意软件能够滋扰反编译工具的正常解析 ,导致工具读取到谬误的字符串个数 ,从而无法正确解析清单文件的结构 ,进而影响静态分析的正确性和齐全性。这种伎俩有效增长了静态分析工具的分析难度 ,提升了恶意软件的荫蔽性。


图片7.png

图7 篡改StringPoolSize的混合示例


在上图中 ,我们能够看到 ,stringCount的值为2907 ,而StringOffsets起头于偏移地位36 ,大幼为 11628。StringOffsets是一个蕴含每个字符串在字符串池中的相对偏移量的数组 ,其大幼为 stringCount * 4 ,即 11628。反编译工具依照混合后的stringCount值推算StringOffsets大幼 ,并进行解析 ,因而解析了局犯错。这种不一致性是导致反编译工具解析失败的原因。然而 ,Android系统在处置清单文件时并未直接依赖stringCount字段的值。通过查看 Android 源码能够发现 ,Android系统在运行时凭据现实数据动态推算 stringPoolSize ,而非直接使用文件中提供的数值。


图片8.png

图 8  Android系统源码中推算mStringPoolSize的代码示例


(3)插入脏数据:有些恶意软件会有意在清单中插入一些脏数据。这种数据不会被现实使用 ,但会粉碎清单文件的体式 ,使得解析工具难以鉴别其中的有效信息。


图片9.png

图9 左图显示`startEle0`内容 ,右图展示`startEle0`和`startEle1`的偏移量及大幼


上图展示了一个混合后的清单文件。在左图中 ,第一个startElement的大幼字段为196 ,但header中的size字段为224 ,意味着startElement后附加了28字节的未知数据。右图中 ,第二个startElement的肇始地位为0x15A4 ,正好位于插入的这28字节垃圾数据之后(右图中绿色部门所示)。这些有余的28字节会导致反编译工具在后续解析时犯错。Android系统可能正常解析 ,是由于系统推算每个startElement的地位时 ,仅依赖上一个startElement的肇始地位和大幼字段 ,从而自动跳过垃圾数据。


(4)插入超长字符串或特殊字符:为了滋扰静态分析工具的正常解析 ,恶意软件可能会在特定字段中插入超长字符串、特殊符号、emoji表情或不私见字符。这些字符固然不会影响利用的正常职能 ,但它们显著增长了分析工具的处置难度。若是反编译工具的容错能力较差 ,这些批改可能导致工具崩�;蛭薹ㄕ方馕銮宓ノ募� ,从而使静态分析变得越发难题。


图片10.png

图10 通过不私见字符实现超长利用名称(label)的示例


上图中 ,清单文件中的label字段从string.xml中的app_name字段读取 ,而app_name字段则蕴含了不私见字符(如\u0000)和超长字符串。通过这种方式 ,恶意软件能够有效滋扰反编译工具的解析过程。若是自动化分析平台的容错机造不及 ,如数据库字段对app_name或version字段长杜仔限度 ,这些篡改可能导致异常 ,进而使恶意软件在自动化分析平台上“隐身” ,难以被检测到。


在正常的清单文件中 ,Start Namespace Chunk通常存储定名空间信息 ,其中Prefix是一个4字节的索引 ,指向字符串池中相应的字符串 ,用于标识定名空间前缀;Uri也是一个索引 ,指向字符串池中暗示定名空间URI的字符串。例如 ,在一个未经过混合的清单文件中 ,我们能够看到Prefix的值对应的字符串为android ,即它引用了尺度的Android定名空间。


图片11.png

图11 正常的prefix前缀示例


然而 ,通过对恶意软件中发Prefix字段进行恶意篡改 ,攻击者能够导致反编译工具在解析时发生谬误。这种混合方式利用了反编译工具对Prefix的依赖 ,使得其在解析时发生异常 ,滋扰分析人员对恶意软件的判断。下图是一个经过混合的清单文件。


图片12.png

图12 混合后的prefix示例


从图中能够看到 ,定名空间的Prefix显示为非尺度字符串。Prefix的索引值指向字符串池中的地位67 ,而Uri显示正常。查看字符串池中索引67的内容 ,我们发现该字符串是一段长度为20470的乱码字符。如下图所示:


图片13.png

图13 索引值67处的prefix字符串的值示例


这种超长字符串会导致Apktool在反编译时崩溃。在Apktool的谬误日志中 ,显示了“Array Size”异常信息。


图片14.png

图14 Apktool反编译时出现的异常谬误示例


经过对崩溃问题的绕过处置后 ,天生的AndroidManifest.xml文件达到了16.7MB ,且蕴含大量乱码 ,难以阅读。


图片15.png

图15 蕴含大量垃圾字符的AndroidManifest.xml文件示例


一个有效的处置步骤是将Prefix的索引值指向字符串池中较短的字符串 ,以便天生的清单文件内容正常显示 ,便于后续分析和阅读。


此表 ,一些恶意软件会在清单中插入符号或表情符号 ,若反编译工具在解析时未正确处置这些特殊字符 ,也可能导致反编译工具崩溃。插入表情符号进行混合的清单如下图所示:


图片16.png

图16 通过表情符号进行混合的示例


除了通过篡改ZIP体式字段和混合清单文件来匹敌反编译工具表 ,恶意软件还时时选取一种强有力的战术——混合resources.arsc文件。resources.arsc文件是Android利用中存储资源映射关系的主题文件 ,它守护了资源ID与现实资源文件之间的映射。恶意软件通过篡改这个文件 ,可能有效滋扰反编译工具对资源的正确解析 ,甚至可能导致反编译工具崩�;蛞斐M顺�。例如 ,BOOMSLANG(树蚺)移动诓骗家族就利用这一战术匹敌Apktool的反编译过程 ,下图是其反编译失败时Apktool提醒的谬误信息。


图片17.png

图17 混合后的BOOMSLANG样本导致Apktool反编译失败


3.2 代码混合与反混合技术


一旦钻研人员突破了APK包的初步混合 ,接下来便会进入到代码层面的分析。在这一层面 ,恶意软件通常选取各类混合技术 ,大幅地增长了静态和动态分析的难度。


3.2.1 标识符混合


标识符沉定名是代码混合中最常见且最有效的技术之一 ,旨在通过将有意思的包名、类名、步骤名和变量名代替为无意思的、随机天生的名称 ,从而滋扰逆向工程师的分析过程。此表 ,标识符混合还能有效避开一些自动化分析平台 ,这些平台通常依赖于标识符来造订检测规定。通过混合标识符 ,恶意软件可能躲避基于标识符的检测 ,削减被识此外风险。常见的标识符混合战术蕴含使用随机字符组合(如数字、字母或特殊符号)、选取非英语说话的标识符(如中文、日语、韩语、俄文等)、使用超长字符标识符 ,或通过代替状态类似但寓意分歧的字符(如字母“O”与数字“0”、字母“I”与幼写字母“l”等)来滋扰分析。这些混合战术使恶意软件可能有效暗藏其职能并增长逆向分析的难度 ,从而延缓被检测和识此外功夫。为了应对这种混合 ,安全钻研人员能够使用带有反混合职能的反编译工具 ,如Gda、Jeb、Jadx等 ,这些工拥有助于急剧复原被混合的代码并援手鉴别恶意行为。标识符混合示例如下图所示:


图片18.png
图18 标识符混合示例


3.2.2 字符串加密


恶意软件通常选取编码或加密伎俩对代码中的敏感字符串进行处置 ,以预防恶意关键字(如恶意URL、号令或其他敏感数据)在反编译过程中被直接露出。这些技术有效地阻止了分析人员从反编译了局中提取关键信息 ,尤其在匹敌自动化分析平台的静态分析时 ,拥有较强的防护成效。常见的字符串混合步骤蕴含字符拆分和编码混合。字符拆分将敏感字符串宰割成多个部门 ,法式在运行时再拼接成齐全的字符串;而编码混合则通过对字符串进行加密或使用编码技术(如Base64编码、单一加密算法等) ,在法式运行时再进行解码。这些伎俩不仅增长了静态分析的难度 ,也使得分析工具无法直接鉴别出恶意行为。这种技术使得静态分析工具无法直接看到关键数据。安全钻研人员能够使用动态分析工具 ,如Frida ,来捉拿运行时的解密过程 ,揭示恶意软件在运行时所做的操作。字符串加密示例如下图所示:


图片19.png
图19 字符串加密混合示例


3.2.3 节造流混合


节造流混合技术通过插入无意思的节造结构(如有余的前提分支、循环或冗余代码) ,有意扭转法式的执行蹊径 ,代码块沉新排序等伎俩使得分析工具在尝试解析法式时 ,陷入过于复杂的代码结构中 ,导致无法正确地还原法式的真实逻辑。由于节造流混合引入了大量不用要的执行蹊径 ,静态分析工具可能无法有效提取出法式的现尝试为。


为了应对这种混合 ,安全钻研人员通常必要通过模拟执行以及动态分析技术来辅副手动追踪法式的执行流 ,逐步还原法式的真实逻辑。下图展示了一个单一的节造流混合示例 ,展示了在混合前后的节造流结构差距。


图片20.png

图20 节造流混合前后的差距对比


3.2.4 反射机造与动态加载


动态加载机造是恶意软件常用的反静态分析技术 ,重要蕴含本地震态加载和远程动态加载两种方式。本地震态加载通过加载本地存储的动态库或dex文件 ,动态挪用步骤或类 ,使得恶意行为在静态分析阶段无法被发现。远程动态加载则通过在运行时从远程服务器下载动态库或dex文件来加载并执行恶意代码 ,这种方式进一步躲避了静态分析工具的检测 ,由于恶意代码并未呈此刻apk文件中。恶意软件往往通过反射技术结合动态加载 ,利用运行时的反射挪用机造暗藏恶意行为 ,使得初期静态分析无法鉴别这些恶意活动。为了应对这一挑战 ,安全钻研人员通常依赖动态分析伎俩 ,如通过Frida注入剧本、使用调试工具动态跟踪或通过日志分析捉拿反射挪用的过程 ,从而揭示恶意代码的真尝试为。这些动态分析步骤可能绕过静态分析的限度 ,鉴别通过反射和动态加载暗藏的恶意行为。


接下来 ,我们来看一个利用本地震态加载的恶意代码示例。下图展示了该恶意代码的目录结构。


图片21.png

图21 目录树信息


固然从表表上看 ,该目录仅蕴含几个步骤 ,但深刻分析后发现 ,恶意代码通过attachBaseContext步骤挪用了一个名为b的步骤 ,进一步实现了从assets目录加载加密的代码文件。该文件经过异或解密后 ,通过动态挪用的方式被加载并执行 ,代码如下图所示:


图片22.png
图22 动态加载后通过反射挪用代码示例


3.2.5 Native混合


Native混合技术是通过多种伎俩加大对恶意软件逆向分析的难度 ,常见的技术蕴含以下几种:


(1)JNI接口混合:恶意软件通过JNI(Java Native Interface)将关键逻辑转移到.so文件中 ,并通过混合的JNI接口挪用本地代码。通过将正本清澈的本处所法名代替为无意思的符号或随机字符 ,恶意代码的职能和结构变得越发难以理解和追踪。


图片23.png

图23 JNI接口混合示例


(2)Session加密:将关键步骤存储在自界说的.section中 ,并对这些自界说的.section内容进行加密。由于.so文件在加载时会优先执行.init_array段 ,因而将解密逻辑嵌入到.init_array中。在运行时 ,通过解密步骤获取内存中各个.section的肇始地址和大幼 ,对加密的.section进行解密还原 ,从而复原关键步骤的正常执行。


图片24.png

图24 Session加密的示例


(3)函数加密:解析.so文件 ,通过步骤名定位指标步骤后 ,对其进行加密。在加载.so文件时 ,通过指定步骤的地址挪用解密逻辑 ,将加密的步骤动态解密还原 ,以实现对关键逻辑的�;�。


图片25.png

图25 JNI加解函数经解密还原的部门代码示例


(4)字符串加密与动态解密:恶意软件通过加密关键字符串(如URL、号令、密钥等) ,并在运行时通过动态解密复原其原始内容。加密的字符通同常存储在静态数据区域 ,而解密则通过特定算法或在内存中动态实现 ,从而使得静态分析工具无法直接提取恶意信息。


图片26.png

图26 Native解密字符串示例


(5)花指令与垃圾代码插入:通过在代码中插入伪指令或无效代码 ,恶意软件可能混合法式的现尝试为。这些花指令没有现实职能 ,但增长了逆向工程的复杂性。垃圾代码不仅增长了法式的体积 ,还使得追踪和理解恶意代码变得越发难题。


图片27.png

图27 一个单一的垃圾指令示例


(6)代码加壳与自批改代码:在Native层 ,恶意软件时时使用加壳技术来暗藏主题恶意代码。加壳后 ,恶意代码以加密或压缩大局存储 ,只有在运行时才会解密或解压。自批改代码技术则允许恶意软件在运行时动态天生、批改和执行代码 ,进一步阻止静态分析工具鉴别齐全的恶意行为。


图片28.png

图28 通过Hook批改代码的示例


(7)反调试与模拟器检测:为了抵抗动态分析 ,恶意软件往往会在Native层嵌入反调试机造 ,例如通过检测调试器的存在(如gdb或Frida)来中断分析过程。此表 ,恶意软件也会进行模拟器检测 ,通过查抄设备是否运行在模拟器或沙盒环境中来预防被动态分析工具捉拿。


图片29.png

图29 检测模拟器示例


(8)节造流混合:节造流混合通过扭转法式的执行蹊径 ,使得分析人员难以理解法式的现实流程。常见的步骤蕴含插入无效的节造流(如跳转、分支语句)、无用的循环和函数挪用 ,侵扰分析工具追踪指令的挨次。


图片30.png

图30 一段节造流混合代码示例


(9)LLVM混合:LLVM是一种壮大的编译器框架 ,恶意软件通过使用LLVM技术来对Native代码进行复杂的混合处置。LLVM混合能通过优化编译过程 ,天生难以阅读和理解的二进造文件 ,同时对文件大幼影响较幼。这种技术有效增长了逆向工程的复杂度。


图片31.png

图31 LLVM混合前后对比示例


这些Native混合技术通常被组合使用 ,构建多档次的�;せ� ,从而使传统的静态分析和动态分析步骤面对巨大的挑战。借助这些技术 ,恶意软件可能有效暗藏其真尝试为 ,躲避安全钻研人员的检测以及防护系统的拦截。此表 ,贸易加固�;そ徊教嵘朔阑さ娜嫘�。恶意软件常利用贸易加固产品对自身进行�;� ,甚至黑灰产软件也频仍选取此类技术进行防护 ,如下图所示:


图片32.png
图32 使用商用加固的诳骗利用


3.2.6 代码虚构化


代码虚构化是目前最先进的混合伎俩之一 ,它通过将原始代码转换为自界说的虚构机指令 ,极大地提高了代码复杂度和分析难度。与传统的节造流混合分歧 ,虚构化技术将关键代码的执行逻辑封装在虚构机中 ,使得主题职能和节造流险些无法通过通例反编译伎俩还原。以下从DEX虚构化和SO虚构化两个维度进行分析:


DEX虚构化技术重要针对Android利用中的Dalvik字节码。这种技术通过将DEX中的字节码转换成自界说的虚构机指令 ,而后由Native层虚构机诠释执行 ,从而�;す丶牒椭魈饴呒�。这种转换使得传统的反编译工具难以还原代码的原始逻辑 ,由于它们无法鉴别转换后的指令集。例如 ,某电商平台通过缝隙提权执行恶意行为 ,并为暗藏其主题代码逻辑 ,选取了一套基于JVM构建的虚构机�;ぃ╒MP)技术对代码进行加固。下图展示了其�;ず蟮亩炷谌� ,能够显著看出 ,代码已被虚构化为高度抽象的虚构机指令 ,使得传统的反编译和静态分析步骤险些无效。


图片33.png

图33 解析经vmp�;さ膁ex文件示例


SO虚构化技术则关注于�;だ弥械腘ative代码 ,即SO文件。这种技术能够通过暗藏符号表、资源加密等方式来�;O文件中的职能不被等闲分析和篡改。例如 ,Virbox Protector提供了对SO文件的�;ぱ∠� ,蕴含暗藏符号表和对特定SO文件的加密�;�。通过这种方式 ,即便攻击者可能接见到SO文件 ,也无法等闲理解文件中的函数和逻辑 ,从而�;ち死玫陌踩�。


图片34.png

图34 某贸易加固产品对DEX和SO的虚构化�;そ樯�


3.3 其他混合伎俩


一些恶意软件通过奇妙利用Windows和Android文件系统的差距性 ,有效匹敌静态分析和逆向工程。在Windows系统中 ,文件名不分辨大幼写 ,但会保留其原始体式 ,而Android文件系统则分辨大幼写。这种差距使得某些在Windows系统上可能引发矛盾或谬误的文件名 ,可能在Android设备上正常使用。此表 ,Windows系统对文件名中的特殊字符(如 > < : " / \ | * ?)有严格限度 ,而Android系统允许这些字符的存在。恶意软件常通过在文件名中嵌入这些特殊字符 ,滋扰基于Windows的分析工具 ,导致文件无法读取或处置 ,从而增长逆向分析的难度。


不仅如此 ,恶意软件还可能利用Android文件系统允许同名文件和文件夹共存的个性 ,进一步增长分析的复杂性。例如 ,在Android中 ,一个名为AndroidManifest.xml的文件和一个名为AndroidManifest.xml的文件夹能够同时存在 ,但在Windows系统中则会因定名矛盾而无法实现。这种差距可能导致基于Windows的分析工具处置这些结构时犯错或跳过解析这些关键文件或文件夹 ,进而为恶意软件提供假装。例如 ,BOOMSLANG恶意软件的一个在野样本选取了特殊字符混合和同名文件与文件夹共存的匹敌技术 ,其APK文件在使用ZIP工具打开时如图所示:


图片35.png

图35 同名文件和文件夹混合示例


从图中能够看出 ,恶意软件会同时创建 “\AndroidManifest.xml”和“AndroidManifest.xml”目录 ,以及 “\classes.dex” 和“classes.dex”目录。这种操作会在Windows系统上导致文件夹相互覆盖 ,造成文件内容迷失 ,从而影响反编译的齐全性。此表 ,恶意软件还会使用犯法文件名 ,导致这些文件在使用apktool反编译时被忽略 ,如下图所示:


图片36.png

图36 apktool忽略犯法文件名的示例


一些恶意软件还会在文件中嵌入同名但大幼写分歧的文件 ,通过利用Windows文件名不分辨大幼写的个性滋扰分析工具 ,造成解析谬误或异常。以下图片展示了一例蕴含同名但大幼写分歧文件的恶意APK示例。


图片37.png

图37 Windows文件系统不分辨文件名大幼写的示例


在Android恶意软件中 ,资源混合是一种常见的匹敌技术 ,宽泛利用于assets和res等文件夹中的资源文件。常见的资源混合伎俩蕴含:对assets目录中的资源文件进行加密处置 ,创建深层嵌套的目录结构或使用畸形目录名称 ,插入大量无用文件或假装资源文件 ,将关键资源与无效资源混合在一路 ,从而增长分析难度;对res目录中的资源文件进行混合 ,例如篡改资源映射关系、删除资源文件名或更改文件扩大名等。这些伎俩旨在滋扰分析工具的解析过程 ,使得分析人员难以急剧定位和鉴别关键数据 ,进一步提高逆向工程的难度。下图是一个插入垃圾资源的示例:


图片38.png

图38 插入垃圾资源示例


一些恶意软件通过将原始DEX文件宰割成多个幼的DEX文件或插入垃圾代码 ,增长静态和自动化分析的难度。宰割DEX文件使分析工具必要逐个处置 ,增长了分析功夫和复杂度 ,且这些文件通常通过动态加载技术在运行时才会归并 ,难以在静态分析中鉴别。此表 ,插入的垃圾代码不执行现实操作 ,但通过虚伪的逻辑和复杂的节造流滋扰分析 ,覆盖恶意职能。此类战术使得恶意软件的行为越发荫蔽 ,迫使分析人员选取更复杂的动态分析和手动逆向工程步骤。一个apk中蕴含大量dex的例子如下图所示:


图片39.png

图39 宰割多个dex示例


除了上面提到的混合技术 ,还有一些其他常见但未具体介绍的技术 ,这些技术能进一步加强恶意软件的逆向分析难度。以下是一张混合工具的示例图片 ,其中展示了多种混合职能 ,如:增长包体积、内建独立署名证书、DEX代码混合、资源混合、APK防篡改等多个职能。


图片40.png
图40 一种混合工具示例

第四章 现实案例解析

为了更好地理解混合技术的现实利用 ,以下是几个常见的Android恶意软件的混合技术案例。


4.1 Joker恶意软件混合步骤


Joker(中文名称“幼丑” ,也被称为Bread)是一个在Google Play商店中极为活跃的恶意软件家族。自2016年12月初次被检测到以来 ,Joker家族的活动一向在持续 ,并且其恶意软件的变种数量也在不休增长。本月最新披露的Google Play商店中Joker样本信息如下:


图片41.png

图41 GooglePlay上的Joker木马信息


Joker家族的恶意软件可能反复进入Google官方利用市场 ,其关键原因在于其选取了多种高级代码混合技术 ,从而绕过了Google Play Store的安全检测和审查机造。这些混合技术蕴含但不限于:


(1)字符串加密:通过加密关键字符串 ,如API要求和配相信息 ,预防静态分析工具的直接鉴别。

(2)动态加载:将恶意代码分离到单独的Payload文件中 ,仅在运行时加载 ,以躲避静态代码扫描。 

(3)反射挪用:利用反射机造动态挪用步骤 ,暗藏关键职能挪用蹊径。 

(4)动态下发配置:通过网络要求动态获取配置或恶意指令 ,降低被静态检测的风险。 

(5)利用第三方服务:使用Github页面和存储库存储恶意配置或代码 ,进一步混合起源和流量。 


这些技术的组合使Joker恶意软件可能成功躲避静态分析检测 ,其真尝试为往往暗藏在复杂的动态流程中。为了揭示其行为 ,分析人员通常必要依赖动态调试和运行时解密技术。针对这些混合伎俩 ,安全钻研人员能够借助动态分析工具(如Frida和Xposed)追踪解密过程 ,提取关键数据并鉴别恶意 API 挪用 ,从而全面还原其恶意行为。


4.2 BadPack的混合伎俩


BadPack是恶意软件通过篡改ZIP文件结构头 ,使Apktool和Jadx等分析工具无法正常解析。其通过使用非尺度的压缩算法来滋扰反编译工具的正常运行。经010 Editor分析该APK文件体式 ,发显熹压缩步骤值为0xF753 ,如下图所示:


图片42.png

图42 篡改apk文件压缩算法标识示例


这一数值并不属于任何已知的尺度压缩步骤 ,因而导致反编译工具无法鉴别和处置该文件。凭据尺度ZIP体式规范 ,压缩步骤的取值通常如图所示。


图片43.png

图43 ZIP支持的各压缩步骤的标识值示例


凭据Android系统源代码 ,当系统遇到非COMP_DEFLATE(即 0x08)压缩步骤时 ,会默认将输入文件按 “未压缩” (COMP_STORED ,即 0x00)方式处置。具体而言 ,系统会直接读取文件的未压缩数据长度 ,并以此进行解析。因而 ,恶意软件利用了Android系统对ZIP体式的容错机造 ,通过使用犯法的压缩算法进行混合 ,从而达到躲避反编译工具的主张。这种混合技术单一却有效。在分析Android恶意软件时 ,若遇到类似情况 ,可将压缩步骤批改为0以便正确解压和分析。


APK伪加密通过批改ZIP文件的头部 ,将加密标志设置为true ,但并未现实对文件内容进行加密。这种技术利用了Android系统在处 ZIP文件时不会验证头部的加密标志 ,而通常的解压软件则会检测该标志。例如 ,当使用RAR工具解压该APK文件时 ,会提醒用户输入密码 ,如下图所示:


图片44.png

图44 伪加密的混合示例


由于Jeb和Jadx都使用尺度的ZIP库 ,因而无法正常解压并反编译该文件。它们的反编译谬误信息如下图所示:


图片45.png

图45 无法使用Jadx和Jeb打开的混合APK示例


通过选取BadPack技术 ,恶意软件将自身假装为异常体式的文件 ,利用反编译工具对文件解析的严格性触发异常 ,从而显著增长静态分析的难度。这种战术有效滋扰了安全钻研人员的分析流程 ,提升了恶意软件的荫蔽性。 


针对这一技术 ,能够通过以下步骤进行应对: 


(1)使用订正后的ZIP库:通过批改ZIP解压库的解析逻辑 ,忽略非尺度字段或异常体式 ,确保文件内容可能正确解压。 

(2)编写建复剧本:分析BadPack文件的异常字段 ,针对特定体式设计剧本 ,自动建改文件结构 ,使其复原为尺度体式以便后续分析。 

这些应对措施可能有效绕过BadPack技术的混合伎俩 ,为静态分析提供靠得住的数据支持。


4.3 SpyNote恶意软件混合战术


SpyNote是一种间谍软件 ,常通过短信和垂钓网站等方式进行传布。攻击者通常发送蕴含恶意链接的SMS新闻或创建假装成合法网站的垂钓页面 ,诱导指标用户点击链接并下载假装成合法利用法式的恶意软件。自2016年在恶意软件论坛初次曝光以来 ,SpyNote一向作为一种持续威胁的恶意工具在全球领域内活跃。公开数据显示 ,今年1月和2月期间 ,SpyNote的新增样本数量已超过3400个 ,批注其威胁活动仍在急剧扩散。最新披露的威胁谍报显示 ,SpyNote假装成安全利用法式执行攻击 ,其重要指标是加密钱币账户 ,窃取私钥和余额信息 ,尤其针对比特币、以太坊和Tether等热点数字资产。有关攻击事务如下图所示:


图片46.png

图46 SpyNote仿冒安全软件执行攻击


SpyNote 除了通过多种渠路进行传布 ,还选取了一系列高级混合与暗藏战术 ,以躲避检测和分析。以下是其重要混合技术的简要概述:


(1)篡改 APK 文件的 ZIP 体式 ,从而导致反编译APKTool在解析时失败 ,如下图所示:


图片47.png

图47 批改zip体式导致Apktool反编译失败的示例


(2)篡改清单文件魔术、插入垃圾字符串。批改的魔术示例如下图:


图片48.png

图48 批改魔术混合示例


(3)利用相近字符实现代码混合 ,如下图所示:


图片49.png

图49 相近字符代码混合示例


(4)对resources.arsc文件混合 ,使jadx反编译工具在分析时犯错 ,如下图所示:


图片50.png

图50 Jadx无法解析resources.arsc文件



第五章 结论与未来瞻望


Android恶意软件的混合技术不休进化 ,从单一的代码沉定名到复杂的动态加载与反调试技术 ,恶意软件通过这些伎俩极大地提升了恶意代码的荫蔽性和分析难度。随着混合技术的不休发展 ,安全钻研人员也必要不休更新自己的分析伎俩 ,从静态分析扩大到动态分析、行为分析等多维度的分析步骤。


未来 ,随着机械进建、人为智能等技术的引入 ,混合技术和逆向分析技术将持续出现出越发复杂和高效的态势。在这种情况下 ,开发更壮大的自动化检测和分析工具将是破解恶意软件防护的关键。同时 ,开发者和安全专家也应加强对混合技术的钻研 ,造订出更具针对性的应对战术 ,以确保Android平台的安全性。

通过持续的钻研和技术创新 ,我们有望可能更好地匹敌恶意软件的混合技术 ,�;び没У囊杂氚踩�。


J9集团官网积极防御尝试室(ADLab)


ADLab成立于1999年 ,是中国安全行业最早成立的攻防技术钻研尝试室之一 ,微软MAPP打算主题成员 ,“黑雀攻击”概想首推者。截至目前 ,ADLab已通过 CNVD/CNNVD/NVDB/CVE累计颁布安全缝隙5000余个 ,持续维持国际网络安全领域一流水准。尝试室钻研方向涵盖基础安全钻延注数据安全钻延注5G安全钻延注人为智能安全钻延注移动安全钻延注物联网安全钻延注车联网安全钻延注工控安全钻延注信创安全钻延注云安全钻延注无线安全钻延注高级威胁钻延注攻防系统建设。钻研成就利用于产品主题技术钻延注国度沉点科技项目攻关、专业安全服务等。



adlab.jpg