背景
在网络上搜索到了一款号称可以无视市面上,任何手游反外挂检测的手游数据修改器。
于是就进行下载分析(使用或分析这种未知风险的APP,建议都在模拟器上进行操作,因为你不知道这APP是否有危害,在模拟器上运行,如果出问题了,顶多就是删除模拟器然后重新再来,如果再手机上运行,那么这个就可能需要你进行刷机才可解决。),在模拟器上安装完APP,点击启动APP然后就出现了下面的一幕。屏幕被锁了,界面还带有极具讽刺的文字。
我这个小曝脾气怎么能忍呢,随手就把模拟器给删除了(让你锁不了),然后重新创建个模拟器就开始进行下面分析了。
基础信息
一个APP的基本信息分析,一般可以从APP的界面信息、控件信息、文件组成信息、是否加固信息等基础情况进行着手分析。
通过SDK的自带的uiautomatorviewer控件查看工具,它可以查询分析APP运行时的控件组成信息,它的所在目录Sdktoolsbinuiautomatorviewer。
通过控件工具看到这个手游修改器的界面控件主要是有三部分组成的,就是TextView控件也就是文字显示框(界面显示那些文字的哪些框框); EditText控件就是可编辑的输入编辑框(就是哪个输入锁机密码的哪个框架);Buttion控件就是按钮控件,它可以响应指定事件功能的,不过在这个APP中没有找到具体按钮响应功能。
通过查壳工具(通过识别app中是否有包含第三方加固产品的特定的SO文件)可以看到这个手游修改器是没有采取第三方加固产品进行加固的。
通过APP的AndroidManifest.xml配置文件中,可以识别出这个APP中的包名、SDK版本、四大组件、申请的权限信息。因此在静态分析过程中这个配置文件一般可以作为对APP功能熟悉的第一步,通过这个配置文件可以快速了解这个APP的基本信息。
通过借助jadx工具,可以识别出这个APP中代码和资源组成部分,这个APP中就是由java代码实现的,它由8个java类构成的完整功能,并没有使用到native层的代码,它还有一些自定义的资源,在drawable目录下。
权限信息
在android系统的安全机制下,特别在java代码实现部分,要想进行一些系统交互的功能都需要申请对应的权限。只有申请的权限才能进行对应的操作。
在APP中的所有申请的权限都存储在AndroidManifest.xml配置文件中。
android:name="android.permission.SEND_SMS" 接发短信的权限
android:name="android.permission.SYSTEM_ALERT_WINDOW" 弹出全局对话框权限
android:name="android.permission.RECEIVE_BOOT_COMPLETED" 开机自启动权限
android:name="android.permission.INTERNET" 访问网络的权限
android:name="android.permission.ACCESS_NETWORK_STATE" 访问网络状态的权限
android:name="android.permission.WRITE_EXTERNAL_STORAGE" SDK存储卡写入权限
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" SDK创建删除权限
android:name="android.permission.VIBRATE" 允许访问振动设备
通过对配置文件中的所有申请的权限信息,它有几个敏感权限申请的操作,弹出全局对话框权限、开机自启动权限。
针对这种高敏权限,建议在启动过程中不要授权(但是很多申请权限都不符合对应的安全合规要求,因为它们都是属于有危害的APP。
锁机功能
锁屏功能是一种很好的保护个人手机的数据隐私非常重要的策略,但是锁屏这个功能被一些攻击者或从事黑灰产者利用后就变成一种非法勒索用户的手段。
这个APP中的锁机功能主要由以下步骤实现:
- 先判断当前安装环境是否有设置锁屏密码,如果有那么激活设备管理器账户功能进行请求更改擦除掉原手机环境的锁屏密码;
- 进行调用设定APP启动后的强制弹出全局对话框界面信息,这个对话框主要有按钮控件、编辑框控件、文字展示控件,在设定按钮控件侦听事件功能。
通过通过onCreate方法去调用activiteDevice接口,
这个activiteDevice接口是通过广播形式去实现达到,最后调用android.app.action.ADD_DEVICE_ADMIN进行激活设备管理器账户功能。
通过调用DevicePolicyManager类的 lockNow()函数进行判断是否有锁屏和修改锁屏的功能。
通过结合权限申请,然后进行弹出全屏对话框,对话框在通过绘制和读取自定义资源的方式进行界面锁定展示。
自启动功能
APP自动重启功能是锁机功能构成功能必不可少的一部分功能,自启动功能保证了锁机功能不会因为重启手机环境而导致功能的失效。
下面看下这个APP中的自动启动功能。
从上图中可以看出,当手机设备启动成功后,
APP会自动发送一条android.intent.action.BOOT_COMPLETED的广播,
接着通过Intent类去查找APP的启动类com.h.s就是这个APP中的Activity组件(这个s类继承Service类)。
最后在通过ComponentName这个接口进行启动com.h.s这个Activity(就是这个锁机的界面),从而实现APP的自动启动功能。
通过上图中,可以看出这个S类通过onCreate接口进行启动APP,然后跳转到锁机的这个界面。
加密功能
这个APP中对输入锁屏密码验证,它是通过采用对称的DES加密方式计算出来并进行验证的。
DES对称加密,它是一种比较传统的加密方式,其加密运算、解密运算使用的是同样的密钥,信息的发送者和信息的接收者在进行信息的传输与处理时,必须共同持有该密码(称为对称密码),是一种对称加密算法。
DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产生最大 64 位的分组大小。
通过对APP中java代码的分析,它的加密方式是DES对称加密,知道了加密算法后,那么进行解密就有了头绪有了目标。
对于这个APP中的锁屏密码获取,可以用smali插桩的方式或者对DES进行解密而获取到这个加密密码。
小结
这个锁机的APP就是通过伪装成为手游修改器,这种在游戏中喜欢作弊的玩家就非常容易中枪,因为普通用户一般拿到APP就会马上进行在手机上安装,那么你只要安装并启动下你就中枪了,你的手机就被锁机了。
通过基于以上的一些分析和查阅相关资料,这种非常典型的锁机,其实功能实现上并没有什么复杂的地方,只是它这种锁屏模式传播性非常强,其实这种锁屏有个典型的特征S.java这个文件其实通用的一个模板,这个模板开发者的最早可以追溯到“薄荷”的开发者,很多的锁机APP都是基于头的模板进行修改定制的。
最后来点建议,在网络上千万不要被哪些关键敏感字眼和带有诱惑性的图片给吸引,要冷静冷静再冷静,对待网络上的东西要保持怀疑的态度来看待。下载资源和浏览对应的网页,最好在官网或者安全的商店上进行操作,因为你不知道这些对应资源和浏览的网页,背后隐藏着多少你无法看到的黑灰产、网络攻击、网络勒索等,它会给你带来的损失和伤害很多都是致命性的。