“暗隐间谍”--利用NDK NativeActivity技术实现Android加固

近日,百度安全实验室发现了一款被不同病毒家族利用的新型代码加固方式,该种代码加固方式巧妙的利用了Android系统提供的NativeActivity特性完成恶意代码的解固。目前主流的加固方案代码逻辑分为java层和native层两部分。而该种加固方式实现了代码的全部native化,java层未包含任何代码逻辑。以下为传统加固方案与新型加固方案的对比:

主流加固方案                                                                                                          新型加固方案

一、简介
 
Google推出NDK(Native Development Kit)后,使用C/C++的很多开发者开始使用这种更高效的方式来进行Android程序的开发。在Android 2.3中Google开始逐渐的放宽NDK功能,新增的NativeActivity类允许Android开发者使用C/C++在NDK环境中处理 Activity的生命周期。具体NaviteActivity开发流程可查看:
http://api.apkbus.com/reference/android/app/NativeActivity.html
 
使用该开发模式的病毒,执行逻辑可分为两个部分:
1、DEX加载器libdexloader.so:实现Payload DEX文件的解密、动态加载。
2、Payload DEX:执行具体的恶意行为。Payload DEX存在于assets目录下,其中DEX中的方法指令已被加密处理。
 
其中DEX加载器利用Android NativeActivity开发模式开发。系统提供的NativeActivity作为libdexloader.so的java端入口点触发libdexloader.so的逻辑。libdexloader.so执行流程为:
1、 加载Payload DEX文件到内存。
2、 解析Payload DEX文件,解密DEX文件中的方法指令。
3、 内存加载解密后的Payload Dex数据。加载这些DEX数据,能够做到文件系统无解密DEX文件存在(注:内存加载仅适合android4.0-android4.4版本,相关技术可参考:http://blog.csdn.net/androidsecurity/article/details/9674251)。
4、 调用恶意代码。

二、恶意案例代码分析
 
使用该类开发模式加固的恶意样本家族中,我们选取其中一类窃取用户联系人的家族进行分析,反编译classes.dex可见,主要恶意行为的代码并不在classes.dex中:

classes.dex的类结构,未包含任何有意义代码

而实际运行,该病毒的逻辑如下图所示:

1、入口

该程序在AndroidManifest.xml文件中注册”android.app.NativeActivity”,并配置meta-data的name与value的值,从而加载ELF可执行文件作为入口:

ELF文件加载后,即会执行入口函数android_main,该函数会启动DexService和DexLoader类中的方法进行dex文件的解密和加载:

2、assets中的文件类型为dex,但实际上,方法结构中的ushort insns部分已被加密,因此不能直接被加载。下图为MainActivity的exec_post方法被加密的方法指令:

被加密的方法指令

3、libdexloader.so运行后,将DEX文件ushort insns部分解密,并重新合成一个正确的DEX文件,然后加载至内存运行。下图为还原后的正确的DEX的方法指令:

还原后的方法指令

4、经过解密,我们得出完整JAVA层代码:

分析可知该病毒主要行为是读取联系人信息,然后将这些信息发送到指定网址:

读取联系人和本机号码

发送至远端地址

时间: 2024-11-04 08:00:14

“暗隐间谍”--利用NDK NativeActivity技术实现Android加固的相关文章

利用扩展双屏技术及Chrome浏览器,快速剖析优秀网页Div及CSS构成,并高效实现原型创作

Cocos2d-x移植到Android平台编译的两个文件Android.mk和Application.mk 2014年6月11日 本篇博客主要讲NDK编译Android项目的两个文件Android.mk和Application.mk,笔者在使用NDK编译Cocos2d-x生成的Android项目的时候遇到配置编译环境的问题,网上虽然有些配置教程,但并未把一些原理性的东西描述清楚,虽然有时候可以把编译环境配置成功了,但并不了解为什么要这么来配,有时候出现问题也无从下手去查.笔者是带着疑问去配置ND

网络罪犯如何利用区块链技术

网络罪犯如何利用区块链技术 司法机构2017年对AlphaBay和Hansa犯罪论坛的扫荡,引发了关于暗网市场未来的大量猜测.恐惧和不信任的氛围,令网络罪犯们急于找寻替代技术来提升其从事非法在线"业务"的安全性和匿名性.其中一种替代技术就是区块链. 大多数人听到区块链的第一反应,都是加密货币之类交易和互动需以高信任度.高透明度加以高效执行的应用.但是,考虑一下在线犯罪论坛近期遇到的麻烦,我们不难想象他们会探索区块链的犯罪应用.某些网络罪犯已经在实验将区块链域名系统(DNS)作为隐藏其恶

利用JSP编程技术实现一个简单的购物车程序

实验二   JSP编程 一.实验目的1. 掌握JSP指令的使用方法:2. 掌握JSP动作的使用方法:3. 掌握JSP内置对象的使用方法:4. 掌握JavaBean的编程技术及使用方法:5. 掌握JSP中数据库编程方法: 二.实验要求 : 利用JSP编程技术实现一个简单的购物车程序,具体要求如下. (1)用JSP编写一个登录页面,登录信息中有用户名和密码,分别用两个按钮来提交和重置登录信息. (2)编写一个JSP程序来处理用户提交的登录信息,如果用户名为本小组成员的名字且密码为对应的学号时,采用J

利用Spring.Net技术打造可切换的分布式缓存读写类

利用Spring.Net技术打造可切换的Memcached分布式缓存读写类 Memcached是一个高性能的分布式内存对象缓存系统,因为工作在内存,读写速率比数据库高的不是一般的多,和Radis一样具有高效的读写和分布式的优势,上一篇博文<Memcached在Windows下的配置和使用>已经对介绍过它在windows上的配置和使用. 新建ICacheWriter类--CacheWriter的接口,以达到通过配置文件可以切换缓存读写方式,例如,缓存读写也可以通过httpruntime.cach

跟我一起学WCF(2)——利用.NET Remoting技术开发分布式应用

一.引言 上一篇博文分享了消息队列(MSMQ)技术来实现分布式应用,在这篇博文继续分享下.NET平台下另一种分布式技术——.NET Remoting. 二..NET Remoting 介绍 2.1 .NET Remoting简介 .NET REmoting与MSMQ不同,它不支持离线可得,另外只适合.NET平台的程序进行通信.它提供了一种允许对象通过应用程序域与另一个对象进行交互的框架..NET 应用程序都在一个主应用程序域中执行的,在一个应用程序域中的代码不能访问另一个应用程序域的数据,然而在

利用servlet转发技术实现统计form表单中字母次数

需求是利用servlet转发技术,实现对html网页中用户输入的内容进行统计,统计每个字母出现的次数,忽略大小写.其中统计功能在一个servlet中,转发功能在另一个servlet中. 1.新建dynamic web project,命名为CounterCharacter 2.在webContent目录中新建index.html文件,设置form表单 <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q

利用jQuery Ajax技术实现每隔5秒向某页面传值

有时候我们需要每隔一段时间向某页面传值,比如说聊天室,每隔几秒就像数据库处理页面传值并取回,然后显示在聊天窗口.又或者是每隔一段时间就查询用户最后发言时间到现在是否间隔2分钟,如果是则将用户退出.这个时候我们就要用到HTML DOM setInterval() 方法. setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式. setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭.由 setInterval() 返回

[cocos2dx]利用NDK崩溃日志查找BUG

摘要: 在android上开发c++应用, crash日志都是汇编码, 很难对应到c++代码中去. 通过此文, 你可以定位到程序崩溃时的C++代码, 精确查找问题. 博客: http://www.cnblogs.com/jhzhu 邮箱: [email protected] 作者: 知明所以 时间: 2014-06-20 背景介绍 本文主要内容: 利用android的crash log来对c++开发的android应用进行错误定位. 容易稳定复现的BUG, 一般可以通过断点调试来解决. 如果测试

利用美颜SDK技术使直播源代码更加完善

直播行业最近融资不断,让整个行业的生命力再次上升.为了行业更好更快的发展,业内技术人员对直播源代码展开新一轮的研究!通过加入美颜SDK让直播源代码作为直播行业生命力具体的展示,我们来看一下加入美颜SDK后,直播源代码作为一块基石,是怎样得到广大用户的喜爱的? 1).首先是音频采集方面的升级音频数据既能与图像结合组合成音视频数据,也能以纯音频的方式采集播放,后者在很多成熟的应用场景如在线电台和语音电台等起着非常重要的作用.音频的采集过程主要通过设备将环境中的模拟信号采集成 PCM 编码的原始数据,