自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

杏林小轩

有时需要停下来审视自己走过的路,及时纠正偏离梦想的脚步。

  • 博客(40)
  • 资源 (1)
  • 收藏
  • 关注

翻译 Android Root及提供商:一把双刃剑

摘要Android Root 是一个自愿、合法获取设备最高权限和完全用户控制设备的过程,为了满足大众需求,一个独一无二的Android Root生态系统已经形成,也促使各种各样的Root提供商提供Root服务。尽管合法,以及许多通过Android系统漏洞的一键root方法,但假如没有控制好,这些利用会被恶意软件作者使用来获取未授权的特权。为了理解这些风险,我们对许多流行且神秘的Android roo

2017-01-19 14:33:19 2211

原创 ARM处理器体系结构知识—[1]寻址方式

不同平台下的机器指令基本上都是进行数据处理的指令,这些指令大致可分为:读取、写入和运算。从CPU的视角看来重要的不是数据的值是多少,而是我该从哪里获取数据。从处理数据的机器指令把数据的位置分为:立即数。数据直接保存在机器指令中,MOV R0 , 1546寄存器。数据保存在寄存器中,在机器指令中给出相应的寄存器名称,MOV R0 , R4内存。数据保存在内存中。机器指令使用多种灵活的方式进行

2017-01-16 17:23:22 779

原创 ARM处理器体系结构知识—[0]寄存器

ARM运行模式用户模式(User):ARM处理器正常的程序执行状态。快速中断模式(FIQ):用于高速数据传输或通道处理。外部中断模式(IRQ):用于通用的中断处理。管理模式(Supervisor):操作系统使用的保护模式。数据访问终止模式(Abort):当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。系统模式(System):运行具有特权的操作系统任务。未定义指令中止模式(

2017-01-11 18:41:33 913

原创 Android系统漏洞分析概述

本文描述了自己Android系统漏洞分析的理解,同时也作为自己学习漏洞分析的大纲,逐步规范漏洞分析的方法和步骤,最终构成自己的漏洞分析体系。1 概述漏洞分析是指在代码中迅速定位漏洞产生的位置(简称溯源),理解攻击原理,并根据漏洞类型、漏洞利用技术以及目标平台的漏洞缓解技术,准确评估该漏洞的利用方式和风险等级的过程。2 步骤漏洞分析是指在代码中迅速定位漏洞产生的位置(简称溯源)

2017-01-11 12:47:26 2813

原创 Android 堆溢出攻击—[0]原理

堆栈,是一种“先进后出”的数据表,正是由于这个特点,系统使用栈辅助函数调用及返回,函数中使用的局部变量在栈中分配,并在函数返回时会被销毁,也就是说对于函外部的程序来说函数内部的局部变量是不可见的,显然这样的变量不能完全满足程序的需求,比如,函数执行后需要把数据的改变传递到程序的其他部分,这样的需求很常见。虽然可以通过全局变量的方式的解决,但全局变量只能在编写程序时预先定义好,并在编译期间为全局变量分

2017-01-09 17:26:58 2347 1

原创 Android 栈溢出攻击—[3]ROP 浅析

在缓冲区溢出攻击攻防发展过程中ROP技术作为对抗XN的利用技术,一直发挥着重要的作用,在很多漏洞中其都是关键的攻击手段。本文通过一个简单的例子来对Android的ARM平台下ROP技术做一个简单的分析。

2017-01-03 10:22:15 1406

原创 Android 栈溢出攻击—[1]ARM平台栈溢出特点

由于每个平台的ABI(应用二进制接口)不同,所以各个平台上调用子函数时对参数、局部变量、返回地址和返回值的处理也是不一样的,目前Android的大部分终端使用的ARM平台,遵循的ABI叫做ATPCS,即ARM-THUMB procedure call standard(ARM-Thumb过程调用标准)的简称。ABI主要解决了下面三个问题, 1. 被调用函数如何获取函数参数,即函数参数的传递规则。

2016-12-29 17:07:43 2065

原创 Android ROP利用技术

出发点早期的缓冲区溢出攻击,因为当时终端都未使用ALSR缓解技术,攻击者通常会把“邪恶代码”部署在栈中,劫持PC指针后指向栈中的部署好的代码进行执行。后来为了应对这种缓冲区溢出攻击,操作系统安全厂商开发了防止数据执行(XN)缓解技术,部分弥补了冯·诺依曼计算机体系结构中数据和代码在内存未进行区分的问题,使进程虚拟空间中的数据区、栈区和堆栈区不能再执行机器代码, 从而有效的缓解了早期的缓冲区溢出攻击

2016-12-28 17:48:07 1158

转载 jemalloc 3.6.0源码详解—[6]释放及实现

转载自:vector034 释放4.1 概览释放同分配过程相反, 按照一个从ptr -> run -> bin -> chunk -> arena的路径. 但因为涉及page合并和purge, 实现更为复杂. dalloc的入口从je_free -> ifree -> iqalloc -> iqalloct -> idalloct. 对dalloc的分析从idalloct开始. 代码如下,JEMAL

2016-12-28 10:21:34 2448

转载 jemalloc 3.6.0源码详解—[5]分配及实现

转载自:vector033 分配3.1 概览在2.3.2节中得知, jemalloc将size class划分成small, large, huge三种类型. 分配时这三种类型分别按照不同的算法执行. 后面的章节也将按照这个类型顺序描述.总体来说, jemalloc分配函数从je_malloc入口开始, 经过,je_malloc -> imalloc_body -> imalloc -> imall

2016-12-27 18:31:34 2995

原创 Android 防止数据执行(XN)缓解技术

出发点当缓冲区溢出发生后,成功利用还需解决两个问题:1)在内存中部署“邪恶代码”。2)定位部署好的“邪恶代码”入口点,劫持PC指向该地址。在早期由于操作系统还未引入ALSR机制,部署“邪恶代码”的问题很容易解决,比如,把“邪恶代码”直接部署到缓冲区中,溢出后劫持PC指向精确计算好的缓冲区基址开始执行: 究其根源,是计算机冯·诺依曼体系结构中没有对数据和代码进行区分,允许同一内存块中代码和数据共享存

2016-12-26 18:10:44 1000

原创 Android 栈溢出攻击—[2]调试分析

上一篇讲解了栈栈溢出攻击的基础原理,该篇作为基础原理的一个延展,通过调试分析一个简单的栈溢出漏洞,加深对栈溢出原理的理解。漏洞代码#include <stdio.h>#include <stdlib.h>#include <unistd.h>void callsystem(){ system("/system/bin/sh");}void mPrint(char* str , in

2016-12-22 17:26:41 1539

原创 Android内核源码级调试环境搭建

本文描述了搭建Android内核调试的过程,最终达到源码级调试的目的。由于真机调试内核的步骤比较复杂,这里先用模拟器为例。1 环境&工具 硬件环境 软件环境 工具 模拟器 Android 4.4.2,内核:goldfish3.4 AOSP Prebuilt2 步骤可调试的内核需要增加特殊的内核配置选项,所以关键是编译可调试内核,下载编译内核的步骤可以参考《构建内核》,这里只

2016-12-08 15:20:07 860 1

原创 Android系统源代码编译—[5]构建内核

本文描述了仅构建内核的细节。接下来的说明假设你已经下载了完整的AOSP,并分别以真机和模拟器为例描述构建过程。

2016-12-07 23:03:08 2186

原创 Android 栈溢出攻击—[0]原理

栈栈,是一种数据结构,是一个先进后出的数据表,所以会为其抽象出栈底和栈顶两个属性。简单的理解,可以用生活中的装书的箱子类比,我们取书的顺序和放书的顺序相反,即第一本放入的书最后才能取出。对栈的操作也非常简单:压栈和弹栈。如图,通常,在谈论栈溢出时,所指的栈是操作系统虚拟地址空间中的栈区stack:系统栈由系统自动维护(我们可以在编译器编译时指定大小),用于实现函数调用,下面来看下协同栈是如何协助实现

2016-12-06 17:44:22 2117

原创 Android 地址空间随机化(ALSR)缓解技术

出发点常规的缓冲区溢出利用技术以及其衍生的Ret2libs和ROP利用技术在利用栈缓冲区溢出漏洞进行攻击时,需要事先熟悉被攻击进程的虚拟地址空间布局以便采用硬编码方式布局栈内存。由于操作系统每次加载进程和动态链接库时,基地址都加载到固定虚拟内存地址处,使缓冲区溢出漏洞易于劫持程序流程跳转到布局在栈内存的shellcode,即使开启XN缓解技术,采用ROP也很容易定位到系统库中的gadget,并劫持程

2016-12-06 15:30:01 4047

转载 jemalloc 3.6.0源码详解—[4]Thread caches

转载自:vector032.7 Thread caches (tcache_t)TLS/TSD是另一种针对多线程优化使用的分配技术, jemalloc中称为tcache. tcache解决的是同一cpu core下不同线程对heap的竞争. 通过为每个线程指定专属分配区域,来减小线程间的干扰. 但显然这种方法会增大整体内存消耗量. 为了减小副作用,jemalloc将tcache设计成一个bookke

2016-12-05 21:02:03 1991

转载 jemalloc 3.6.0源码详解—[3]Run and bins

2.4 Run (arena_run_t)如同在2.1节所述, 在jemalloc中run才是真正负责分配的主体(前提是对small region来说). run的大小对齐到page size上, 并且在内部划分成大小相同的region. 当有外部分配请求时, run就会从内部挑选一个free region返回. 可以认为run就是small region仓库. **注:**run的大小就是其内

2016-12-05 20:48:07 3562 1

转载 jemalloc 3.6.0源码详解—[2]Chunk

转载自:vector032.3 Chunk (arena_chunk_t)chunk是仅次于arena的次级内存结构. 如果有了解过dlmalloc, 就会知道在dlmalloc中同样定义了名为’chunk’的基础结构. 但这个概念在两个分配器中含义完全不同, dlmalloc中的chunk指代最低级分配单元, 而jemalloc中则是一个较大的内存区域.2.3.1 overview从前面arena

2016-12-05 20:12:08 2857

转载 jemalloc 3.6.0源码详解—[1]Arena

转载自:vector032.2 Arena (arena_t)如前所述, Arena是jemalloc中最大或者说最顶层的基础结构. 这个概念其实上是针对”对称多处理机(SMP)”产生的. 在SMP中, 导致性能劣化的一个重要原因在于”false sharing”导致cache-line失效. 为了解决cache-line共享问题, 同时保证更少的内部碎片(internal fragmentatio

2016-12-05 19:50:30 4710 3

转载 jemalloc 3.6.0源码详解—[0]基础知识

转载自:vector031 介绍jemalloc最初是Jason Evans为FreeBSD开发的新一代内存分配器, 用来替代原来的phkmalloc, 最早投入使用是在2005年. 到目前为止, 除了原版jemalloc, 还有很多变种被用在各种项目里. Google在android5.0里将bionic中的默认分配器从dlmalloc替换为jemalloc, 也是看中了其强大的多核多线程分配能力

2016-12-05 18:32:53 6077

原创 dlmalloc 2.8.6 源码详解—[6]调试分析

分析堆溢出漏洞分析不能仅仅停留在了解dlmalloc堆分配器运行原理,还需要通过调试器观察其运行过程并在堆内存中识别堆的数据结构,这就像实习医生学习做手术一样,最终检验还是要在手术台上。1 调试代码#include<stdio.h>#include<stdlib.h>#include<string.h>#include<malloc.h>#include<unistd.h>void func

2016-12-05 00:04:07 1059

转载 dlmalloc 2.8.6 源码详解—[5]释放及实现

转载自:vector034 释放与实现释放过程相对分配就简单多了, 基本着重在chunk合并, top裁剪, segment释放上. dlmalloc中合并是减少外部碎片最有效的方法了.4.1 dlfree释放的主要过程就是根据用户传入的payload, 找到chunk指针, 然后分别检查前一个和后一个chunk是否可以合并. 这里唯一需要注意的就是与dv和top这些特殊chunk的交互.基本流程如

2016-12-04 23:21:37 551

转载 dlmalloc 2.8.6 源码详解—[4]分配及实现

转载自:vector033 分配及实现本章节介绍dlmalloc的分配算法和实现.由于存在多mspace的情况, dlmalloc使用了两套API.一套对应默认的mspace,以dl前缀开头,如dlmalloc, dlrealloc等.如果创建了自定义的mspace,则使用mspace开头的API,如mspace_malloc, mspace_realloc等.但两套API在基础算法上是一致的.我们

2016-12-04 23:09:54 1224

转载 dlmalloc 2.8.6 源码详解—[3]核心数据结构malloc_state

转载自:vector032.3 区段(segment)在dlmalloc的内部结构中,除了基础的chunk外,还存在一种粒度更粗的结构,称为区段(segment).之所以需要额外引入这种数据结构是为了提升对非连续内存的管理能力. dlmalloc将连续内存划分到一个segment中管理,而段与段之间则是不连续的,所有的段都由一个mspace统一去管理.如果用户程序创建了多个mspace,这些mspa

2016-12-04 22:12:01 2459

转载 dlmalloc 2.8.6 源码详解—[2]分箱(bins)

转载自:vector032.2 分箱(bins)内存分配器设计中需要解决的两个重要问题就是空间和时间的矛盾.所谓空间矛盾是指要减少两方面的内存浪费,一是来自分配器本身overhead信息的占用,另外则来自分配的chunk由于对齐或碎片化造成的利用率降低.而时间矛盾是指在最短时间内,以最小的时间复杂度,计算出应该返回给用户的内存量以及内存地址. dlmalloc应对这两个矛盾使用的核心算法就是分箱机制

2016-12-04 21:28:58 1983 1

转载 dlmalloc 2.8.6 源码详解—[1]chunk

转载自:vector032 标记结构本章节将介绍基本的内存标记结构,包括chunk, tree chunk, sbin, tbin, segment, mstate等.这些重要的机构组成了dlmalloc分配算法的基础.2.1 chunkchunk是dlmalloc中最基本的一种结构,它代表了一块经过划分后被管理的内存单元. dlmalloc所有对内存的操作几乎都聚焦在chunk上.需要注意的是,

2016-12-04 20:49:55 1571

转载 dlmalloc 2.8.6 源码详解—[0]基础知识

前述Dlmalloc是一个著名的内存分配器,最早由Doug Lea在1980s年代编写.由于早期C库的内置分配器在某种程度上的缺陷,因此dlmalloc出现后立即获得了广泛应用,足见其出色的表现.尽管时至今日, dlmalloc中的技术在一些地方已然落后于时代,很多优秀的allocator如google的tcmalloc, freeBSD的jemalloc等在某些情况下性能可以达到dlmalloc的

2016-12-04 20:19:54 2969

原创 ELF64文件逆向分析知识—[2]制作静态库SIG

背景在搭建IDA调试远程Linux的环境过程中,我在Linux上使用file工具查看ELF文件得到了一下信息: 这个可执行文件是使用的是静态编译,同时在最终生成可执行文件时,删除了符号表和重定位信息。所以在IDA中看到的汇编代码如下:函数调用都显示的是IDA生成的“哑”名(eg,sub_414410),这对分析函数功能时造成了很大障碍,因为花了很大精力分析了某一个函数调用的功能后,发现这是一个静态

2016-12-04 15:18:42 2785 2

原创 ELF64文件逆向分析知识—[1]64位逆向基础知识

第一次用IDA打开ELF64可执行文件进行分析,有种刚学逆向的错觉,各种之前不认识的寄存器,函数调用完全找不到函数参数是怎么传递的。看来有必要恶补一下x64位CPU的和逆向分析相关的知识。

2016-12-04 14:57:33 7306

原创 ELF64文件逆向分析知识—[0]搭建动态调试环境

之前一直学习Windows下的32位PE文件的逆向,已经可以通过Ollydbg和IDA结合分析可执行文件的逻辑。最近需要逆向分析一个Linux下的64位ELF可执行文件,发现了很多问题,下面是我分析和解决过程。搭建动态调试环境第一个问题摆在了我的面前,Ollydbg不能调试Linux的ELF可执行文件。Ollydbg提供了方便的调试界面,让我们很容易通过查看寄存器、栈和内存来分析程序的运行细节,这极

2016-12-04 14:19:58 9363 5

原创 搭建Android系统C程序调试环境

在学习Android安全知识的过程需要在Android系统上验证一些C程序来验证安全漏洞或者学习操作系统知识,在这个过程有一个好的调试环境可以帮助我们更好的理解程序和Android系统的运行原理。本文描述了在Android系统上搭建调试环境的过程。

2016-12-04 13:18:39 798

原创 GDB汇编调试指令合集

设置断点命令:break/b 功能:在程序特定“位置”设置断点,当执行到断点处调试器会暂停程序的执行。 格式:break function 函数入口处(第一行可执行代码)设置断点。break line_number 当前活动源代码文件的line_number处设置断点。break filename:line_number 在源代码文件filename的line_number处设置断点。b

2016-12-04 11:52:49 8763

原创 IDA Pro 远程调试Android进程环境配置

本文描述了如何使用IDA Pro远程调试Android设备中的进程,及过程中可能遇到的问题,以作备忘。

2016-12-03 23:40:57 4567

原创 Android源代码级调试环境配置

本文描述使用AOSP进行调试的环境配置,最终达到源码级调试目标。

2016-12-03 22:46:38 1089

翻译 Android系统源代码编译—[4]运行构建

本系列文章翻译自source.android.com中关于Android系统源代码编译的内容。

2016-12-03 18:27:34 433

翻译 Android系统源代码编译—[3]准备构建

本系列文章翻译自source.android.com中关于Android系统源代码编译的内容。

2016-12-03 18:01:08 617 1

翻译 Android系统源代码编译—[2]下载源代码

本系列文章翻译自source.android.com中关于Android系统源代码编译的内容。

2016-12-03 16:52:15 398

翻译 Android系统源代码编译—[1]搭建一个构建环境

本系列文章翻译自source.android.com中关于Android系统源代码编译的内容。

2016-12-03 15:52:16 394

翻译 Android系统源代码编译—[0]要求

本系列文章翻译自source.android.com中关于Android系统源代码编译的内容。

2016-12-03 14:41:56 442

如何编写技术解决方案

介绍如何编写技术解决方案。开发者在进阶过程中,总会遇到对一个完整技术和项目的设计和开发,此时需要从一个高的视角,审视对项目和技术的理解,该文档提供了一个思路或者方法

2019-02-25

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除