输入9815即可成功解除锁屏密码。
2.3 获取浮窗锁机密码
使用JEB搜索锁机界面的文字“输入密码”
进入该类发现“this.wmParams.type = 2010”(浮窗级别最高)
并且定义了一个Service然后用WindowManager实现,然后把权限设置为最高,用户就无法进行任何操作。
程序通过下图代码进行判断比对密码,如果输入的密码正确,则关闭此service,然后浮窗锁机就消失了。
使用Xposed工具直接hook这个decrypt方法就能拿到这个密码:
if("com.jk.mwifi".equals(loadPackageParam.packageNmae)){ XpoesdHelpers.findAndHookMethod("com.h.Du",loadPackageParam.ClassLoader, "decrypt",String.class,new XC_MethodHook(){ @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable{ Log.i("jw","params:"+param.args[0]); super.beforeHookedMethod(param); } @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { Log.i("jw","result1:"+param.getResult()); super.afterHookedMethod(param); } });}
运行后获取对应的密码为:2375439
2.4 病毒样本算法分析
查看DES的变量定义:
通过观察看到两个变量,其中传入一个字符串的值,里面包含DES加密的key,然后对密文进行解密,解密之后的内容在作为新的DES的密钥值,相当于二次获取密钥。
查看DU代码实现:
使用DES加解密算法,对密钥字符串”flower”进行解密,然后直接解密内容为:”c29fe56fa59ab0db”
public class DES { private static final String DES = "DES"; private static final String CRYPT_KEY = "xxx";
直接解密,获取第二次要用到的密钥”xxx”,然后在初始化以下key:
public class DES { private static final String DES = "DES"; private static final String CRYPT_KEY = "xxx";
然后查找病毒样本的xml文件,将passw进行解密:
public static void main(String[] args){ String ID = "2557s3g4fv9ssd2e1324409d8a6"; String idDecrypt = decrypt(ID); System.out.println("origiinkey:"+idDecrypt); }
解密结果为:2375439
这里生成密码是采用随机值,然后在加上123456,最后在DES加密保存到xml中,同时也会把随机数保存到xml中的,从上面可以看到值为:2375439
而这个值加上123456也就是密码:2251983+123456=2375439。
2.4 病毒样本行为分析
病毒样本在运行后会将手机中的文件进行加密,并且无限制的新建文件和文件夹到SD中。
通过追踪onCreate方法进行分析:
继续追踪发现有一个循环进行写文件和创建文件夹:
在这里会创造出很多空文件和空文件夹,这样SD卡到最后几乎无法打开,手机也不能正常运行。
通过大致分析判断,文件加密在病毒程序启动时就已经开始运行。
这里会过滤他自己创建出来的空文件和空文件夹不进行加密。
这里通过方法的最后一个参数来判断是加密文件还是解密文件。这个病毒是用AES对文件进行加密的。而密钥他又用AES加密,这时候的加密内容的key和内容是:
static String pass = "F7A3B9D65C32E52"; public static String path; static String text = "B4E3F80CA7B5";
借助Xposed工具直接hook FormetFileSize方法
XpoesdHelpers.findAndHookMethod("com.jk.mwifi.MainActivity",loadPackageParam.ClassLoader, "FormetFileSize",long.class,File.class,boolean.class,new XC_MethodHook(){ @Override protected void beforeHookedMethod(MethodHookParam param) throws Throwable{ Log.i("jw","FrometFileSize params:"+param.args[0]+","+param.args[1]+","+param.args[2]); param.args[2] = false; super.beforeHookedMethod(param); } @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { super.afterHookedMethod(param); } });
拦截这个方法之后,修改这个参数状态为false表示就是解密文件了。
通过观察输出日志,发现已经成功的进行解密。
3、病毒样本分析总结
该病毒APP采用两套锁机机制,而且浮窗锁机尽然还用随机密码,并且会将文件加密让设备无法使用。最后用AES算法对文件进行加解密操作。这里解密可以用Xposed框架进行hook,令一种方法是把它的界面代码拷贝出来写一个解密程序。
从这个病毒中我们可以了解到关于锁机策略机制,对于设备管理器的锁机直接找到DeviceAdminReceiver这个类,查看源代码找到锁机密码。
对于浮窗锁机。因为采用Service和WindowManager来实现逻辑。所以可以直接使用am命令强制停止程序运行。