一、样本信息
应用名:刷赞小能手
包名:com.xcgdmmsj
SHA1:548B46CDF7D87849E3527AF87FE10A6AD29FC758
二、恶意行为分析
2.1 应用清单详情
从AndroidManifest.xml
可得知该应用申请了发送短信、弹窗和震动等权限。注册了bbb
和MyAdmin
两个广播接收器,分别用于接收开机广播和激活设备管理器。
<?xml version="1.0" encoding="utf-8" standalone="no"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.xcgdmmsj" platformBuildVersionCode="23" platformBuildVersionName="6.0.1">
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.VIBRATE"/>
<application android:debuggable="false" android:icon="@drawable/icon" android:label="刷赞小能手">
<activity android:name=".M" android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<service android:name="s"/>
<receiver android:name="bbb">
<intent-filter android:priority="2147483647">
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
<receiver android:description="@string/hello" android:name=".MyAdmin">
<meta-data android:name="android.app.device_admin" android:resource="@xml/my_admin"/>
<intent-filter>
<action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/>
</intent-filter>
</receiver>
</application>
</manifest>
用jeb反编译代码,代码结构没有涉及加固、混淆、加载so等防逆向手段。
2.2 诱导用户激活设备管理器及重置PIN密码
入口处使用ADRTLogCatReader
记录软件运行期间所产生的日志,然后调用activiteDevice()
。
@Override
public void onCreate(Bundle arg6) {
ADRTLogCatReader.onContext(this, "com.aide.ui");
super.onCreate(arg6);
this.activiteDevice();
}
activiteDevice()
中通过隐式intent弹出激活设备管理器界面,然后反射调用MyAdmin()
。
跟入MyAdmin()
,继承了DeviceAdminReceiver
并重写onEnabled()
,先从resource/raw/pin.txt
取出密文,通过M.getsss()
进行解密,再调用resetPassword()
重设PIN密码。同时反射启动s服务。
PIN密文:
解密算法:利用Base64加密自定义字符串转换的字节数组,使用subSequence()
截取字符串得到一个新的字符序列,再用Base64进行解密得到明文。此处解密出的PIN密码为3366。
2.3 置顶弹窗,勒索用户
跟入s
服务,在onCreate()
中初始化弹窗,type
设置为2010
(最高级别,用户点击Home键也没反应),再调用addView()
置顶弹窗。
在界面留下解锁联系方式,解密内容为:加q2100311719
04-27 18:31:56.700 5960-5960/me.yaorc.myapplication I/MainActivity: The plaintext is ->> 加q2100311719
查看点击事件,逻辑是判断用户输入的内容,密钥正确则调用removeView()删除置顶弹窗并结束线程。解密算法与解PIN是一致的,都是获取raw下某个文件的内容后调用getsss()进行解密。此处的解锁密码为336699
。
然后采取DES算法通过密钥bah
解密内容为c29fe56fa59ab0db
,通过DU()
类初始化得到第二个密钥,对锁机码进行加密,保存在/data/data/com.xcgdmmsj/shared_prefs/bah.xml
中。
解密锁机码,用于判断。
三、病毒清除
3.1 手机已root,已开启usb调试。
连接配置好adb环境的电脑,在终端执行命令adb shell dumpsys activity top
获取栈顶应用的包名。
执行su
命令获取root权限,再使用am force-stop com.xcgdmmsj
便可强制杀掉这个进程。
此时置顶弹窗已消失,但PIN密码也被重置了,需要删除/data/system/password.key
,然后执行命令reboot
重启手机。
最后在设置里取消激活设备管理器和卸载锁机软件即可。
3.2 手机未Root,未开启USB调试。建议备份数据后重新刷机。
四、小结
- 该恶意软件在运行后会诱导用户激活设备管理器,使用
WindowManager
和DeviceAdminReceiver
实现置顶弹窗和更改PIN密码,加上震动、播放不良BGM等手段向用户施加心理压力,迫使用户转账。 - 通过janus平台的监控发现,这一类恶意软件通常会伪装成辅助软件,如刷钻、刷赞、抢红包。