搜索此博客

2017年1月23日星期一

【技术分享】Android程序反混淆利器——Simplify工具

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
【技术分享】Android程序反混淆利器――Simplify工具  阅读原文»

2017-01-23 17:21:23 来源:安全客 作者:desword
阅读:2000次 点赞(0) 收藏


http://p4.qhimg.com/t018b6e8fa6459b2f2a.jpg

问题背景


Android程序代码混淆是Android开发者经常用来防止app被反编译之后迅速被分析的常见手法。在没有混淆的代码中,被反编译的Android程序极其容易被分析与逆向,分析利器JEB就是一个很好的工具。但是加了混淆之后,函数、变量的名称将被毫无意义的字母替代,这将大大提高分析的难度。有的甚至会增加一些冗余代码,比如下面的例子:

public void doBadStuff() {
    int x;
    int y;
    x = Integer.valueOf("5")
    y = Integer.valueOf("10")
    x = x * y;
    x += 5;
    x /= 3;
    hackYourPhoneLOL("backdoor");
    x = y;
    y = x + 10;
    y /= 2;
}

该函数的实际意图其实就是执行hackYourPhoneLOL("backdoor");,但是通过代码混淆,增加很多冗余的代码, 使得实际分析的时候工作量增加。对于代码混淆,其实一直并没有一个比较好的思路,也没有万能的工具来解混淆,最常见的方式就是用Android gradle proguard 去尝试那些用Android gradle proguard混淆过的代码,但是成功率极其低(比如对于用DexGuard混淆过的代码)。

public void doBadStuff() {
    hackYourPhoneLOL("backdoor");
}

今天要介绍的工具,就是一个通用的Android程序反混淆工具,虽然在执行效率上不是很高,但是思路清晰,代码风格好,值得深入学习与优化。下图是在使用该工具前后,反编译代码的对比图。

 

http://p9.qhimg.com/t01fe6eef0ff5b8d689.png

图1:代码解混淆之前

t0178a65a8b438eca4d.png

图2:代码解混淆之后

可以发现,在代码解混淆之后,关键函数名称、正则表达式等等字符串都能够解析出来了,这样的反编译结果将非常适合分析人员进一步分析恶意代码的功能。

这是github地址:https://github.com/CalebFenton/simplify

该工具的核心思路,就是自己模拟的Dalvik虚拟机执行的方式,将待反编译的代码执行一遍,获知其功能后,将反编译之后的代码简化成分析人员便于理解的形式。


安装方式


 由于该项目包含Android框架的子模块,因此用以下两种方式获取代码:

git clone --recursive https://github.com/CalebFenton/simplify.git
or
git submodule update --init --recursive

接着,使用gradlew编译jar文件,当然前提是系统里面安装过了gradlew

./gradlew fatjar

在成功执行之后,Simplify.jar 应该出现在simplify/build/libs/simplify.jar这里,接着你可以使用以下命令行测试Simplify.jar是否安装成功

java -jar simplify/build/libs/simplify.jar -it 'org/cf' simplify/obfuscated-example

注:安装可能出现的问题

由于该工具还在前期开发阶段,因此作者也提出该工具不是很稳定,因此可以尝试使用下面的方式反复尝试是否成功。

1. 首先,确定分析的smali文件包含不多的method或者classes的时候,可以使用-it命令。

国内某知名应用市场遭仿冒,EvilPea病毒也玩起O2O  阅读原文»

   近期, 某社交应用正式推出了LBS+AR天降红包,用户需要在指定地理位置开启摄像头,就能抢到对应的红包,这种线上结合线下抢红包的模式称为O2O(online to offline)抢红包。

   近两年O2O火爆整个互联网圈,各类O2O产品服务层出不穷,比如O2O美甲、O2O剃须、O2O理发,甚至你想洗脚,都有人上门给你服务!

   不料,病毒开发者也来蹭O2O的热点,将线上攻击与线下攻击结合,为感染用户提供"上门服务"……

   近期,安天AVL移动安全团队和小米MIUI捕获了一类恶意程序EvilPea,该恶意程序图标和名称与某知名应用市场完全一致,运行后弹出"程序不完整,需要重新安装"的提示框。用户点击重新安装后,该恶意程序会在用户手机上安装一个真正的应用,以迷惑用户,自身则隐藏图标潜伏在手机中,后续进行如下恶意行为:

  • 诱导用户开启辅助功能,窃取指定APP的用户键盘操作记录
  • 窃取用户短信内容和联系人信息
  • 频繁监控用户地理位置
  • 主动连接指定WiFi
  • 后台私自进行屏幕截图并上传
  • 私自发送、拦截短信

   结合其频繁窃取用户地理位置和主动连接指定WiFi两个行为,我们推测该病毒除了潜伏在手机中进行线上的恶意行为之外,极有可能线下通过WiFi攻击目标手机,窃取用户隐私,侵犯用户财产安全。

病毒运行流程图

00

病毒行为详细分析

step1 潜伏到用户手机

   EvilPea恶意程序安装启动后会解析assets目录下tips中的数据,根据用户手机系统语言分别使用英文或者中文向用户提示"验矫程序时发现程序不完整,需要重新安装,是否进行重新安装?"(如下图所示),当用户点击"确定"后将assets目录下的qu.apk复制到手机储存卡并进行安装,若用户选择"取消",该病毒则直接隐藏图标继续在后台运行,从而达到潜伏的目的。 1_副本

   tips中的提示数据: 2

   资源文件中的qu.apk: 3

   根据是否有root权限进行提示安装或静默安装: 4 5

step2 窃取键盘记录

   EvilPea恶意程序通过伪装成内存清理服务,诱导用户开启辅助服务,以便监听特定应用的键盘操作记录。同时对于弹出的"是否授予root权限"、"是否允许读取短信"等确认框,自动点击确认框中的"授权"、"允许"等关键字的按钮,并勾选关键字"不再提醒"的复选框。 6 7

   自动点击按钮和勾选复选框的关键字: 8

   监听指定app的键盘记录并保存: 9

step3 基于Droid Plugin插件机制,利用插件实施恶意行为

一、Droid Plugin简述

   DroidPlugin是Android的一种开源插件机制,它可以在无需安装、修改的情况下运行APK文件。插件APK可以独立安装运行,也可以作为插件运行。该恶意程序使用这种插件机制启动各个恶意子包,子包间通过协同的方式完成远控及窃取用户隐私的行为,这样可以避免在插件安装过程中被杀软检测的情况,保证自身长期潜伏在感染终端中。

二、加载插件

   EvilPea恶意程序将资源文件夹Assets/init/目录下的插件复制到SD卡/ .plugin/目录下,然后加载启动这些插件;其还会通过DES解密资源文件夹Resources/raw/config.txt中的数据得到联网地址hxxp://1519j010g4.iok.la:8088/dmrcandroid/,该网址是恶意程序所有数据传输的通道。

   复制插件到指定目录下: 10

三、远程控制

1、获取远程控制指令   

   EvilPea恶意程序通过插件p_1477636923078.apk从服务器上获取远程控制指令并保存在数据库中: 11

   将指令数据通过ContentProvider保存在指定数据库内: 12

   解密后的指令数据: 13

   指令字段说明: 01 (2)

2、远程控制行为:窃取用户地理位置信息   

   当接收到远控指令"locat"、"conlocat"时,EvilPea病毒程序开始窃取用户位置信息。指令为"locat"时窃取用户当前位置信息一次,指令为"conlocat"时持?p>阅读更多内容

没有评论: