欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

洞若观火:全方位剖析Android信息窃取恶意软件(上篇)

来源:本站整理 作者:佚名 时间:2018-12-27 TAG: 我要投稿


 
一、概述
在本文中,我们将分析一款Android恶意应用程序。该样本可以在Virusbay中找到,或者可以访问这个本地镜像。这一恶意软件可以窃取短信息,攻击者能够获取到关于特定目标的大量消息,或者可以从受害者的手机上获取双因素认证(2FA)令牌,从而攻破安全性良好的账户。
请注意,在本文中的代码,变量名称都将使用易读的名称。如果变量的名称可以直接从其类型或上下文中派生,那么我们将直接对其进行重命名,不会再特意提到。如果无法明确判断,我们将会进行相应解释。
关于该样本,详细信息如下。
MD5:a1b5c184d447eaac1ed47bc5a0db4725
SHA-1:98bb4315a5ee3f92a3275f08e45f7e35d9995cd2
SHA-256:c385020ef9e6e04ad08757324f78963378675a1bdb57a4de0fd525cffe7f2139
文件类型:应用程序/Java压缩包
检测率:32/61
 
二、工具
要将APK转换为Android Studio项目,所使用的工具是AndroidProjectCreator。请注意,反编译器并不是总能够将SMALI字节码转换为Java。因此,使用不同的反编译器多次对APK进行转换是一个不错的习惯。
在开始分析前,首先检查所有类,因为变量的名称仍然没有改变。如果已经重构了一般的样本,那么新添加的代码可能在之前的阶段就已经被修改过,因为这部分内容没有嵌入到项目中。这方面的一个例子是,如果某个类中的一个函数没有正确反编译,其余函数将被重构。以下是一个例子:
private Context context;
/**
* This is the renamed function, which was previously named "q".
*/
public Context getContext() {
    return context;
}
/**
* This is the newly added function, which relies on the original instead of the refactored name.
*/
public String x() {
    return q.LAUNCHER_APPS_SERVICE;
}
另外,在此之前,我们已经使用了APKTool获取单个类的SMALI字节码。使用Android Studio,主要是分析并重构Java代码。
 
三、代码分析的方法论
在分析之前,关于样本内部的信息非常少。为了避免把时间浪费在与研究目标无关的代码上,我们必须事先做出最好的预测和判断。
AndroidManifest.xml提供有关所请求的权限、服务、intent接收器(Intent Receiver)、广播接收器(Broadcast Receiver)的信息。针对代码来说,Main Activity中的onCreate函数是应用程序的起点。因此,我们可以从这里开始调查。
随后,可以深入研究被调用的方法,这些方法可能存在于多个类中。如果只看混淆后的代码,可能无法揭示出代码的作用,因此我们也需要掘地三尺。这样,就可以向上重构代码,因为我们已经清楚了每个函数的内容是什么。
请注意,采用这种方法后,分析速度是呈指数级的。如果我们对样本所知甚少,那么分析每个函数都需要一段时间。由于类会在很多不同的地方重复使用,所以第一次的分析速度最慢。重构的每个部分,会随着对越来越多类的分析而逐渐清晰,从而加快对后续其他类的分析进度。
根据我自己的经验,用两个整天的时间通常足以重构整个样本。在第一天后,感觉只完成了很少的工作。但在第二天,就会补上所有缺失的拼图。
 
四、反编译APK
首先,将会对manifest进行分析。之后,将会分析并重构Java代码。在本文的分析过程中,我们没有提及错误的操作,从而避免对大家造成混淆。请注意,名为android的包中包含应用程序所使用的默认Android类。因此,这个包也超出了涉及的范围。
 
五、Manifest
在manifest中,揭示了许多关于应用程序的信息,因此我们要首先分析这个文件。下面展示了完整的manifest。
xml version="1.0" encoding="utf-8"?>
manifest package="org.starsizew" platformBuildVersionCode="19" platformBuildVersionName="4.4.2-1456859"
  xmlns:android="http://schemas.android.com/apk/res/android">
    uses-sdk android:minSdkVersion="9" />
    uses-permission android:name="android.permission.CALL_PHONE" />
    uses-permission android:name="android.permission.SEND_SMS" />
    uses-permission android:name="android.permission.WRITE_SMS" />
    uses-permission android:name="android.permission.READ_SMS" />
    uses-permission android:name="android.permission.GET_TASKS" />
    uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    uses-permission android:name="android.permission.READ_PHONE_STATE" />
    uses-permission android:name="android.permission.RECEIVE_SMS" />
    uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    uses-permission android:name="android.permission.INTERNET" />
    uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
    uses-permission android:name="android.permission.READ_LOGS" />
    uses-permission android:name="android.permission.READ_CONTACTS" />
    application android:theme="@style/AppTheme" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:allowBackup="true">

[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载