Android Rootkit开发

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 12:33 我要评论(0)

对于Android平台的安全问题凸显,Android123经过长期的分析研究就目前Android平台上Rootkit开发实现底层防火墙相关基础做简单的总结,Android的Rootkit和PC上的Linux Rootkit没有太大的区别,如果你有Linux内核相关知识或Win32下内核驱动开发知识阅读本文会轻松很多。

和Windows一样Android的Rootkit离不开底层的调用,在Win32上我们使用较低层的API有Native API,一般以Ring0中以Zw开头的函数居多,在Ring3中则为Nt开头的函数,比如任务管理器常用的NtQuerySystemInformation函数,它们的特点就是调用系统底层服务,我们叫做系统服务描述表SSDT,当然类似的还有系统服务中断向量表IDT。在Linux中我们获取本机API需要使用LKM加载内核模块,通过Hook技术可以轻松的替换原有API的入口点实现隐藏进程、端口,对于底层的系统服务来说,在Linux中使用系统服务调用表(Sys Call Table)中的函数来执行相关操作。Android从早期版本就是用了Linux 2.6以上的内核版本,获取sys call table偏移地址和我们早期在PC Redhat获取技术上有很大不同,挂上gdb慢慢分析吧,目前业界公认的方法就是通过swi中断来动态搜索系统调用表,这里我们直接给出代码

include <linux/kernel.h>

#include <linux/module.h>

#include <linux/mm.h>

#include <linux/init_task.h>

#include <linux/syscalls.h>

unsigned long* find_sys_call_table();

int init_module() {

printk("<1> Hello, kernel!\n");

unsigned long *sys_call_table = find_sys_call_table();

return 0;

}

void cleanup_module() {

printk("<1>I'm not offended that you"

"unloaded me.Have a pleasant day!\n");

}

unsigned long* find_sys_call_table()

{

//Address of the sofware interrupt (swi) handler in high vector ARM systems like Android

const void *swi_addr = 0xFFFF0008;

unsigned long* sys_call_table = NULL;

unsigned long* ptr = NULL;

unsigned long vector_swi_offset = 0;

unsigned long vector_swi_instruction = 0;

unsigned long *vector_swi_addr_ptr = NULL;

// Get the load pc instruction from the swi

memcpy(&vector_swi_instruction, swi_addr, sizeof(vector_swi_instruction));

printk(KERN_INFO "-> vector_swi instruction %lx\n", vector_swi_instruction);

// Read the offset from the swi adress where the handler pointer lives

vector_swi_offset = vector_swi_instruction & (unsigned long)0x00000fff;

printk (KERN_INFO "-> vector_swi offset %lx\n", vector_swi_offset);

// Get the pointer to the swi handler (offset is from the load instruction location + 2 words, due to ARM quirks)

vector_swi_addr_ptr = (unsigned long *)((unsigned long)swi_addr + vector_swi_offset + 8);

printk (KERN_INFO "-> vector_swi_addr_ptr %p, value %lx\n", vector_swi_addr_ptr, *vector_swi_addr_ptr);

/************

* Starting at the beginning of the handler, search for the sys_call_table address load

* This code is the result of the /arch/arm/kernel/entry-common.S file, starting at the line

* ENTRY(vector_swi).You'll see that there is always a zero_fp after saving register state

* before any function begins.It's a good "lighthouse" to search for to make sure

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...