一、前言

5月12日,一场全球性互联网灾难悄然而至,一款名为WannaCRY的PC端恶意勒索软件利用NSA泄漏的危险漏洞“永恒之蓝”,给100多个国家和地区10万台电脑造成了巨大的损失。到2017年为止,全球手机用户总量已经突破50亿,而作为占比超过50%的android系统中,同样有许许多多类似WannaCRY的勒索软件正在危害我们的财产安全。

接下来,以一款主流的Android端恶意锁屏勒索应用为例,结合人工分析的方式,深入剖析勒索应用的恶意行为。知己知彼,才能更好的防患于未来。

 

二、运行特征

这是一款伪装成”秒赞大师”的锁屏勒索恶意应用

第一次点击启动之后,主界面会弹出诱骗激活设备管理员权限的对话框

当你点击激活后,恭喜你,你的屏幕将被锁定,无法进入手机的主界面,除非联系勒索者获得解密密码

那么,接下来我们一起来分析下这款勒索软件的实现原理,并且破解出它的解锁密码

 

三、准备工作

1. 分析工具:JEB/Android killer

JEB是一款收费的Android应用程序反编译工具,解析能力强,兼容性高。

Android Killer是一款免费的android应用程序反编译工具,集Apk反编译、Apk打包、Apk签名,编码互转,ADB通信等特色功能于一身。

可根据个人的习惯选择工具,这里将使用jeb进行分析

 

2. 分析环境:android模拟器

主要用于恶意应用的运行时分析,可使用android原生的模拟器,也可使用第三方如genymotion、天天模拟器等

四、流程分析

应用整体运行流程图如下

接下来,我们对整个流程进行详细的分析

 

1. 入口点

首先,我们使用jeb打开要分析的apk

其中左边为该应用反编译出来的类列表,右边为AndroidManifest.xml清单文件的内容

我们可以发现,应用的入口类为com.bugzapk.b,接下来我们分析下b类的执行逻辑,b类对应的界面如下,该界面只有一个按钮

我们找到这个按钮的点击事件

发现点击之后跳转到com.bugzapk.z类中

 

2. root权限

我们继续分析com.bugzapk.z类,首先分析入口函数onCreate

在入口处做了一些界面相关的初始化工作,重点在于这个100000000线程

我们可以看到,该应用首先会尝试将system分区mount为可写状态,再将应用挪入固件中,并且重启手机。如果你的手机有root过,并且给予了root权限,你将无法再通过普通的方式来卸载这个应用,就连刷机都无法清除。

当获取root权限失败后,将会诱导你激活设备管理员权限。

当你点击确定后,会跳转到com.bugzapk.c界面

 

3. 访问网络获取PIN码

分析com.bugzapk.c类的入口函数oncreate

启动后,首先会运行100000000这个线程

这个线程会先解密字符串得到一个链接,并调用get方法访问网络获得一个字符串,接下来我们分析下加密的算法,这里进行了三层解密:decrypt->解密->decoder

这个decrypt函数首先将16进制字符串转换成字节,再将字节进行AES解密

解密函数中有一个简单的字典,进行字符串替换。

decoder函数会对字节进行异或,得到最终的url。

根据这三个函数,我们可编写对应的解密算法解出url的值。

接下来我们打开浏览器访问这个url

我们发现返回了一大段的字符串,

最终,程序会调用正则表达式函数,并进行解密,我们调用对应的解密算法,可计算出pin值为7531

 

4. 激活设备管理员并且设置PIN码

com.bugzapk.c界面只有一个激活按钮

点击后会调用系统的api申请设备管理员权限,并且调用resetPassword函数将PIN码修改为上一步获取的值7531

Android中的设备管理员权限可以对手机进行锁屏,防止应用被卸载等

获取权限后,会调用锁屏函数,将屏幕锁定

并且跳转到com.bugzapk.g页面

 

5. 上传手机型号/钓鱼页面

com.bugzapk.g界面启动后会自动上传手机型号

并且弹出钓鱼页面诱导你输入QQ账号密码

当你输入完点击登陆后,跳转到com.bugzapk.h页面

 

6. 锁屏主页面

终于进入我们最重要的密码输入界面com.bugzapk.h了,首先分析密钥获取逻辑

其中c为要访问的域名,get函数访问域名。通过解密算法可得到url为

打开浏览器,访问页面返回如下字符串

获得数值后,使用正则表达式提取出37598这个密码

并且赋给pass这个成员变量,如果网络无法访问的情况下,将会使用本地的密钥

通过执行对应的解密算法,可解得本地密码值为8810

接下来我们来分析解锁函数js的逻辑

如果输入的密码值为654321,则将PIN码更改为654312

如果输入的密码值为4321,则将PIN码修改为4312

如果输入的密码值为上面分析出来的密码值,将会跳转到com.bugzapk.i界面

 

7. 锁屏主页面2

锁屏主页面1的密码正确后,将会进入第二个页面com.bugzapk.i

我们直接查看点击确定按钮后的解锁逻辑

输入4951密码后,页面会跳转会上一个界面

输入997998后,界面的文字会做一些改变

正确的密码值为l.x(v17,v9)这个解密函数,我们执行对应的解密函数得到正确的密码为2415

密码输入正确后,跳转到最后的PIN码界面

 

8. PIN码界面

com.bugzapk.d界面直接显示系统的PIN码输入页面,输入之前计算得到的PIN码即可解锁成功,进入手机,至此整体流程结束

五、修复方法参考

如果你的手机也被这种勒索病毒锁屏了该怎么办呢,你可以尝试以下几种方法:

1. 如果你有基本的android开发经验和逆向知识,你可以尝试直接分析勒索软件的解密算法得到正确的密码,一般这种软件的逻辑和算法都不会太复杂

2. 如果你的手机开启了USB调试模式,可以进入adb shell环境,并且拥有root权限,你可以尝试使用命令直接删除密码文件,删除后重启即可直接进入手机界面

1 adb shell rm /data/system/access_control.key
2 adb shell rm /data/system/password.key
3 adb shell rm /data/system/gesture.key

3. 如果手机有刷过第三方的recovery,你可以重启进入recovery模式,直接将该软件删除,或者执行第2步的命令删除密码。如果手机上的数据不重要的话,可以直接执行双wipe清除手机上的所有数据(勒索软件在固件将无效)。

4. 刷机,刷入新的系统。

5. 联系勒索者得到密码

注意:以上方法仅供参考,其中2/3/4方法有可能造成手机重要数据丢失、系统无法正常使用,请慎重操作。

tips 现在市面上流传的移动设备勒索病毒种类繁多,其中许多病毒制作较为简单,解锁密码都是直接明文写在字符串中。

六、建议

最后,在给大家以下几点建议:

1. 不要从非官方的渠道下载应用,防止应用被人为修改,加入了恶意代码

2. 对于别人发过来的apk下载链接,要慎重点击下载

3. 不要贪小便宜,去安装那些抢红包/游戏辅助之类的插件,大部分都是木马病毒

4. 对于新安装的应用,如果有弹出申请设备管理员权限或者root权限的对话框,请一律点击拒绝,除非你确定这个应用没有问题

5. 没有必要的情况下,请不要root你的手机

文章转载自安全客  原文地址:http://bobao.360.cn/learning/detail/4053.html

更多安全类热点资讯及知识分享,请持续关注阿里聚安全博客

Android端恶意锁屏勒索应用分析的更多相关文章

  1. 【Android】Android 手机忘记锁屏密码的解决办法

    对于忘记Android锁屏密码的筒子们,除重新刷包或者wipe data外,还可用adb来删除密码: 方法很简单 1.手机连接电脑,不要打开数据连接,在充电模式下进行. 2.在电脑上,解压adb.zi ...

  2. android黑科技系列——修改锁屏密码和恶意锁机样本原理分析

    一.Android中加密算法 上一篇文章已经介绍了Android中系统锁屏密码算法原理,这里在来总结说一下: 第一种:输入密码算法 将输入的明文密码+设备的salt值,然后操作MD5和SHA1之后在转 ...

  3. 自选项目--手机锁屏软件--NABC分析

    N(Need 需求) 关键字:利用碎片时间加强对想记的事物的记忆.备忘.一般来说,锁屏目的大致有三点: 1.保护手机隐私 2.防止误操作手机 3.在不关闭系统软件的情况下节省电量 对于市面上已有的锁屏 ...

  4. Android 监听锁屏、解锁、开屏 操作

    1.首先定义 ScreenListener  package com.app.lib; import android.content.BroadcastReceiver; import android ...

  5. 【Android代码片段之八】监听Android屏幕是否锁屏

    实现方法:1)通过BroadcastReceiver接收广播Intent.ACTION_SCREEN_ON和Intent.ACTION_SCREEN_OFF可以判断屏幕状态是否锁屏,但是只有屏幕状态发 ...

  6. Android 开发之锁屏弹窗

    尝试利用 WindowManager 添加浮窗的方式实现 想在锁屏上面实现弹窗,第一个想法就是利用 WindowManager 设置 Window 的 Flag,通过设置 Flag 的显示优先级来让窗 ...

  7. Android判断屏幕锁屏的方法总结

    由于做一个项目,需要判断屏幕是否锁屏,发现网上方法很多,但是比较杂,现在进行总结一下: 总共有两类方法: 一.代码直接判定 二.接收广播 现在先说第一类方法(代码直接判定): 1.通过PowerMan ...

  8. Android推断屏幕锁屏的方法总结

    转载请注明:http://blog.csdn.net/heroxuetao/article/details/24639203 因为做一个项目,须要推断屏幕是否锁屏,发现网上方法非常多.可是比較杂.如今 ...

  9. Android -- 仿小米锁屏画报

    1,首先看一下我们今天实现的效果,效果图如下: 2,首先说一下大体的实现思路,首先这个视图一共分为三层,最外层是一个RecyclerView,第二层是一个被虚化的ImageView,第三层是一个正常的 ...

随机推荐

  1. MyBatis源码解读(4)——SqlSession(上)

    在上一篇博客中提到MyBatis是如何实现代理类MapperProxy,并抛出了一个问题--是怎么执行一个具体的sql语句的,在文末中提到了MapperMethod的execute采用命令模式来判断是 ...

  2. Vuejs实例-01使用vue-cli脚手架搭建Vue.js项目

    [TOC] 1. 前言 vue-cli 一个简单的构建Vue.js项目的命令行界面 整体过程: $ npm install -g vue-cli $ vue init webpack vue-admi ...

  3. JSP Cookie的使用

    Cookie 通常用于网站记录客户的某些信息,比如客户的用户名及客户的喜好等.一旦用户下次登录,网站可以获取到客户的相关信息,根据这些客户信息,网站可以对客户提供更友好的服务. Cookie sess ...

  4. 数组去重,call、apply、bind之间的区别,this用法总结

    一.数组去重,直接写到Array原型链上. //该方法只能去除相同的数字 不会去判断24和'24'是不同的 所有数字和字符串数字是相同是重复的 Array.prototype.redup=functi ...

  5. 2.Java 加解密技术系列之 MD5

    Java 加解密技术系列之 MD5 序 背景 正文 结束语 序 上一篇文章中,介绍了最基础的编码方式 — — BASE64,也简单的提了一下编码的原理.这篇文章继续加解密的系列,当然也是介绍比较基础的 ...

  6. 007---Hibernate基本映射标签和属性介绍

    一.映射文件的基本结构举例: <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-// ...

  7. 开涛spring3(3.1) - DI的配置使用

    3.1.1  依赖和依赖注入 传统应用程序设计中所说的依赖一般指“类之间的关系”,那先让我们复习一下类之间的关系: 泛化:表示类与类之间的继承关系.接口与接口之间的继承关系: 实现:表示类对接口的实现 ...

  8. Apache许可翻译

    https://www.apache.org/licenses/LICENSE-2.0 Apache许可 2.0 2004.1 使用.复制和发行的术语和条件. 1 定义 "License&q ...

  9. python爬虫从入门到放弃(六)之 BeautifulSoup库的使用

    上一篇文章的正则,其实对很多人来说用起来是不方便的,加上需要记很多规则,所以用起来不是特别熟练,而这节我们提到的beautifulsoup就是一个非常强大的工具,爬虫利器. beautifulSoup ...

  10. VR问题无关方向,VR全景为您领航,全景智慧城市已势不可当

    2016年,VR绝对是互联网科技圈的一个高频词. 在这一年里,Magic Leap获得阿里领投的近8亿美元的融资,VR公司的商业价值得到认可.Oculus Rift和HTC Vive的VR产品正式发货 ...