首页 >> 网络安全 >>病毒分析 >> Android Rootnik恶意软件:深入研究 第二部分
详细内容

Android Rootnik恶意软件:深入研究 第二部分

时间:2020-07-23     【转载】   阅读

在该博客的第一部分中,我完成了对新发现的Rootnik恶意软件变体的本机层的分析,并获得了解密后的真实DEX文件。在第二部分中,我们将继续进行分析。


看解密的真实DEX文件

解密的DEX文件的条目是demo.outerappshell.OuterShellApp类。类OuterShellApp的定义如下所示。

1.png

图1.类demo.outerappshell.OuterShellApp

我们将首先分析函数attachBaseContext()。以下是LinkInnerShell类中的函数aBC()。

2.png

图2.类LinkInnerShell中的函数aBC()

该程序使用DexClassLoader动态加载DEX文件并在demo.innerappshell.LoadTargetApp类中执行load()函数。函数moveSourceApk()用于解密文件夹资产中的文件hello.apk,然后将解密后的数据写入文件夹/data/data/net.gotsun.android.wifi_configuration/files/中的hello.apk中。

3.png

图3.函数moveSourceApk

接下来,我们分析了onCreate()函数。

1.ba((((Context)this))):启动服务com.dhy.kqib.cc

4.png

图4.函数ba((Context)this)

2.this.mLinkInnerShell.oC():在类demo.innerappshell.LoadTargetApp中调用函数initCreate。

5.png

图5.函数oC()

hello.apk分析

以下是解密的hello.apk的反编译结构。

6.png

图6.解密的hello.apk的反编译结构

我们将继续在类demo.innerappshell.LoadTargetApp中分析函数load和initCreate。


在函数load()中,它解密文件夹资产中的文件source.apk并将解密的数据写入文件夹/data/data/net.gotsun.android.wifi_configuration/files/中的source.apk中,然后替换系统DexClassLoader。


以下是函数initCreate。

7.png

图7.函数initCreate

函数replaceSystemApplication()用于在com.demo.MyApplication类中执行onCreate()函数。该类应位于source.apk中。

8.png

图8.函数replaceSystemApplication

Source.apk分析

接下来让我们看一下解密的source.apk。以下是解密的source.apk的反编译结构。

9.png

图9.解密后的source.apk的反编译结构。

现在,我们可以看到原始法律应用程序的实现位于source.apk的反编译结构中。显然,恶意软件开发人员将恶意代码添加到了原始法律应用中,并对其进行了重新打包。


接下来,我们将研究com.demo.MyApplication类中的onCreate()函数。

10.png

图10. com.demo.MyApplication类中的onCreate()函数

最后,它通过跟踪调用以下函数。

11.png

图11.函数开始

此函数首先检查文件夹文件中是否存在文件libhjdSsDMxuUQaCVMDbootstrap.so。如果没有,则程序可以将文件夹资产/ awsrabf /中的所有文件复制到文件夹文件/ awsrabf /中。文件夹资产/ awsrabf /中的文件列表如下所示。

12.png

图12.文件夹assets / awsrabf /中的文件列表

接下来,它读取文件/data/app-lib/net.gotsun.android.wifi_configuration-1/libhjdSsDMxuUQaCVMDbootstrap.so并将其解密,并将解密后的数据写入文件/data/data/net.gotsun.android .wifi_configuration / files / libhjdSsDMxuUQaCVMDbootstrap.so。最后,它将.so库libhjdSsDMxuUQaCVMDbootstrap.so加载到文件夹/data/data/net.gotsun.android.wifi_configuration/files/中。加载.so文件时,可以调用JNI_Onload函数。


接下来,我们继续分析libhjdSsDMxuUQaCVMDbootstrap.so中的函数JNI_Onload。


在函数JNI_Onload中,它可以解密文件夹/data/data/net.gotsun.android.wifi_configuration/files/awsrabf/中的libLDyARNDidKiYcqzxdynamicloader.so的数据,并将解密后的数据写入文件/data/data/net.gotsun .android.wifi_configuration / files / LDyARNDidKiYcqzxdynamicloader.jar。然后,它使用DexClassLoader动态加载此.jar文件。接下来,它在com.nativedroid.module.dynamicloader.Dynamic类中调用start函数。

13.png

图13.在类com.nativedroid.module.dynamicloader.Dynamic中调用函数start

以下是在com.nativedroid.module.dynamicloader.Dynamic类中启动的函数的定义。

14.png

图14.函数从动态类开始

15.png

图15.函数在类SDK中启动

此函数首先解密文件夹lib / armeabi中的libQSRDZTuWgdcfLbEXdaemon.so,然后将解密后的数据写入文件夹/data/data/net.gotsun.android.wifi_configuration/files/中的文件QSRDZTuWgdcfLbEXdaemon.so中。它还会解密同一文件夹中的三个JAR(bcVPHHDpaVhsxLGUlala.jar,qBikvXzxORCegosEzxc.jar,UniUxqsTCxkMnvngbt.jar)。然后,它将三个JAR注入到DEX路径列表中。最后,它调用com.nativeroid.sa.sdk.SDK类中的start函数。通过调查,其主要目的是广告的推广和推动。


WifiConfigurationActivity主要活动分析

在AndroidManifest.xml中,我们了解到恶意软件应用程序的主要活动是net.gotsun.android.wifi_configuration.WifiConfigurationActivity。接下来,我们将检查功能onCreate()。


以下是恶意应用程序的onCreate()与原始应用程序的onCreate()之间的比较。通过比较,我们可以看到恶意应用已添加了一些代码。

16.png

图16.函数onCreate()的比较

恶意软件的开发人员重新打包了原始应用程序,并添加了一些恶意代码。

让我们检查一下这些新添加的代码。

1.fa():启动服务com.android.j1collection.GoogSer。

17.png

图17.函数fa()

接下来,我们看一下GoogSer服务的作用。

18.png

图18.服务GoogSer的执行流程

以下是com.android.jar1ah.ab(Context arg6)函数的定义。

19.png

图19.函数com.android.jar1ah.ab(Context arg6)

以下是一些关键功能的解释。

1.ac(arg6):

它首先请求URL hxxp://gp.miaoxia123.com/cr/sv/getGoFile?name = onlyV17041401Aj1arso32,并获取json格式响应。

20.png

其次,它继续请求URL hxxp://sh.pencilli.com/cr/sdk/dynV17041701D/des_onlydyV17041701Dj1so32.zip,并将响应数据写入文件/data/data/net.gotsun.android.wifi_configuration/files /23hammerhead32/net.gotsun.android.wifi_configuration12hammerhead2。


然后,它解密文件net.gotsun.android.wifi_configuration12hammerhead2并解压缩包含文件onlydyV17041701Dj1so32的解密zip文件。然后将其复制到文件/data/data/net.gotsun.android.wifi_configuration/files/1497912689813_onlydyV17041701Dj1so32.so。字符串“ 1497912689813”是时间戳。


2、ka(arg6,ka(f.class)):f.class具有3个本机方法:ka(f.class)获取包含三个方法描述的字符串数组。ka(arg6,ka(f.class))将内容存储到文件/data/data/net.gotsun.android.wifi_configuration/files/na1l2t/ntmp1101411060中。最后,通过连接pid和tid计算字符串“ 1101411060”。

3、System.load(v3_1):加载/data/data/net.gotsun.android.wifi_configuration/files/1497912689813_onlydyV17041701Dj1so32.so。

在函数fa(this.a.getApplicationContext())中,它可以调用com.android.jar1ah.f类的本机方法void a(Context arg0)。

函数this.aa()启动线程com.android.j1collection.b。以下是其定义。

21.png

图20.线程类com.android.j1collection.b

我们发现它可以启动以下过程。

22.png

2、i.init(this.getApplicationContext()):该函数可以启动服务StaService。它还可以将SMS消息发送到订阅号。

3、bi.In(this.getApplicationContext()):在此函数中,它请求URL hxxp://down.smykttum.com/thinking/group/rtt_0511_669.apk并动态加载dex文件。然后,它调用类cn.engine.RootPermApi的方法initRoot。initRoot方法用于执行设备的生根。

4、XCZihjgerghuCSer.class:进行app Ads促销并在设备上安装app。

5、ASjoifewnffffhuwefBSer:将SMS消息发送到特定号码,然后在SMS框中将其删除。

接下来,我们将对函数bi.In(Context arg5)进行深入分析。函数bi.In(Context arg5)的定义如下所示。

23.png



































图21.函数bi.In(Context arg5)                 

该功能执行以下主要工作。

1、从包中文件夹资产中的web.ini读取数据,并对其进行解析以设置变量bi.appChannel和bi.md5Channel。

2、将http发布请求发送到URL hxxp://t.eqqsl.com/ggview/rsddateindex。然后,它将响应数据解码并解密,以获取json格式的数据。以下是捕获的流量。

24.png

图22.请求URL hxxp://t.eqqsl.com/ggview/rsddateindex的捕获流量

我们获得的JSON格式数据如下所示。

25.png

接下来,解析JSON格式数据以获取下载根漏洞有效负载的URL。该网址为hxxp://down.smykttum.com/thinking/group/rtt_0511_669.apk。下载根漏洞有效负载的备份URL为hxxp://down.zigyfdeb.com/backokr/rtt_0310_577.apk,该URL硬编码在程序中。此外,我们还发现了更新的根漏洞APK文件,如下所示。

26.png

左边的分析基于rtt_0511_669.apk。

3、然后,它将HTTP请求发送到URL hxxp://down.smykttum.com/thinking/group/rtt_0511_669.apk,以下载根漏洞有效负载,并将其另存为文件/data/data/net.gotsun.android。 wifi_configuration / files / .default / .p.apk。

4、它使用DexClassLoader动态加载DEX文件,并执行cn.engine.RootPermApi类的函数initRoot(Context arg0,String arg1,String arg2)。此功能用于对Android设备进行根攻击。生根成功后,该恶意软件可以在/ system / pri-app /文件夹中安装一些恶意应用,并执行其他恶意活动。

27.png

图23.函数initDexFunction

接下来,我们将研究文件rtt_0511_669.apk。它是jar文件格式,包含classes.dex。以下是rtt_0511_669.apk的反编译结构。

28.png

图24. rtt_0511_669.apk的反编译结构

以下是cn.engine类中函数initRoot(Context arg9,String arg10,String arg11)的定义。RootPermApi。

29.png

图25.类cn.engine中的函数initRoot。根PermApi

以下是一些关键功能的说明。

1、检查是否已安装软件包“ com.fly.me.ssp.be”。

2、生成文件/data/data/net.gotsun.android.wifi_configuration/files/.snow/busybox。以下是有关如何生成文件busybox工具的代码。它使用两种方法来生成它。一种是通过从硬编码URL下载它。另一种是通过解密硬编码数据来生成它。文件夹/data/data/net.gotsun.android.wifi_configuration/files/.snow/中的其他文件以相同的方式生成。

30.png

图26.产生busybox的两种方法

3、如果SDK版本大于15,则会生成文件/data/data/net.gotsun.android.wifi_configuration/files/.snow/supolicy。

4、生成文件/data/data/net.gotsun.android.wifi_configuration/files/.snow/.uok。

5、生成文件夹/data/data/net.gotsun.android.wifi_configuration/files/.snow/.zip/,并使用命令“ chmod 777 .zip”设置其模式。

6、启动线程以执行生根设备的核心工作。

接下来,我们查看创建的线程。以下是新创建的线程的函数run()。

31.png

图27.新创建的线程的函数run()

以下是在类cn.engine的函数b(c arg5,Context arg6,String arg7,String arg8)中找到的关键代码片段。RootPermApi。

32.png

图28.函数b的关键代码段

1、在文件夹/data/data/net.gotsun.android.wifi_configuration/files/.snow/中生成文件.client和.service。

2、在文件夹/data/data/net.gotsun.android.wifi_configuration/files/.snow/中生成文件.uks。

3、生成一些要安装的APK文件,一些ELF文件以及成功生根后要执行的Shell脚本。

33.png

图29.成功root之后要执行的shell脚本

4、com.wksnkys7.rtmst.b.ai.a(上下文arg9):执行root漏洞利用。

接下来,我们继续分析com.wksnkys7.rtmst.b.ai.a类中的函数a(Context arg9)。

34.png

图30. com.wksnkys7.rtmst.b.ai.a类中的函数a(上下文arg9)

在此功能中,它将完成以下工作。

1、检查文件b.png在/data/data/net.gotsun.android.wifi_configuration/files/.snow/中是否存在。如果没有,它可以生成它。文件b.png是zip文件格式。

2、解压缩文件b.png并将文件r1,r2,r3,r4写入文件夹/data/data/net.gotsun.android.wifi_configuration/files/.snow/.zip/。然后,使用命令“ chmod 777”设置其文件模式。

3、this.c(arg9):通过启动新线程来执行root漏洞利用。如果成功,则可以执行/data/data/net.gotsun.android.wifi_configuration/files/.snow./.zip/文件夹中的shell脚本rsh,返回值为true。有四个根漏洞:r1,r2,r3,r4。在研究了这些可执行文件之后,我发现r3是来自dashi根工具的MTK根方案。r4中的漏洞利用方法来自开源项目android-rooting-tools的一个漏洞利用(CVE-2013-6282),而r2中的漏洞利用方法是CVE-2012-6422,这是Samsung Exynos上的根漏洞利用。此外,将这些结果与博客进行比较在2017年1月,我了解到他们两个都使用相同的root漏洞。Shell脚本rsh如图29所示。

35.png

图31.函数this.c(上下文arg7)

4、this.a(v0):删除文件夹files / .snow / .zip /中的某些文件。

36.png

图32.删除文件夹files / .snow / .zip /中的文件

5、this.ba(v0,this.c.ordinal()):调用类cn.engine中的函数a(boolean arg11,int arg12)。以下是其定义。

37.png

图33. cn.engine.f类中的函数a(布尔arg11,int arg12)

在此功能中,它执行命令“ /system/xbin/.cp add md5(packagename +'fuck')\ n”,然后在已安装的某些应用程序中启动以下活动。

image.png

表1.在某些已安装的应用程序中要启动的活动(1)

接下来,它检查文件夹/ system / xbin /中是否存在两个文件.ci.pm和.cp。如果是,它可以在已安装的某些应用程序中启动以下活动。

image.png

表2.在某些已安装的应用程序中要启动的活动(2)

至此,我们已经完成了对根漏洞有效负载rtt_0511_669.apk的分析。在博客的最后一部分,第三部分,我们将深入研究脚本外壳rsh


.
更多

1589982338979126.png


ots网络社区

www.ots-sec.cn

猜你喜欢
更多
联系方式
更多

投稿邮箱:1481840992@qq.com

交流群2群:622534175

ots网络社区3群:1078548359

关注我们
更多
技术支持: 建站ABC | 管理登录