- 博客(13)
- 资源 (13)
- 收藏
- 关注
原创 Android SO 加载分析与导入表Hook、导出表Hook
0x00 参考文章 关于so加载分析,就是从System.loadlibrary开始的,层层玻璃代码真相,在Android SO 加壳(加密)与脱壳思路,我们说ELF Header中的一些字段是无用的,Section Header也是无用的,这是为什么呢? 答案是在so加载的过程中,没有使用的,有关Android so加载深入分析,请参考这篇pdf,http://download.cs
2016-08-16 08:55:40 4108
原创 Android NDK中C++ STL库动态和静态链接
0x00 本文参考 本文参考Android NDK中C++运行时库介绍。 我们在开发NDK的时候,经常需要使用C++ STL库开发,那么这些库是如何和我们的程序链接的呢? 0x01 C++ STL分类 这些静态链接库和动态链接库都位于哪呢? 答案是位于ndkpat/sources/cxx-stl。我们截图看下这个目录: 我们可以清晰的对照两张图。libstlpo
2016-08-15 22:33:28 15438
原创 Anti-Debugging Skills In APK
0x00 本文参考 本文主要是参考Anti-Debugging Skills In APK ,请读者先阅读此文,本文只是对其中的难点进行讲解和说明。 0x01 ida调试so原理 要理解反调试原理,首先要理解调试原理。有关如何使用ida调试so,请参考ida动态调试so,在init_array和JNI_ONLOAD处下断点。 几个关键的步骤,说明下原理: 1.1 在手机
2016-08-15 20:32:22 2027
原创 Android SO 加壳(加密)与脱壳思路
0x01 常见的Android SO加壳(加密)思路 1.1 破坏Elf Header 将Elf32_Ehdr 中的e_shoff, e_shnum, e_shstrndx, e_shentsize字段处理,变为无效值。由于在链接过程中,这些字段是无用的,所以可以随意修改,这会导致ida打不开这个so文件。 1.2 删除Section Header ...
2016-08-14 17:56:23 19833 2
原创 Android PLT/GOT 符号重定向过程
0x00 项目工程 项目地址:http://download.csdn.net/detail/jltxgcy/9602851。 下面列出核心代码:#include "com_example_ndkplt_PLTUtils.h"#include #include #include #include #define LOG_TAG "PLTUtils"#define ALOGD
2016-08-14 15:45:14 2834
原创 Android SO 文件结构及readelf命令
0x00 Android SO 文件结构 so文件结构详细的分析,请看Android逆向之旅---SO(ELF)文件格式详解,这里就不重复造车轮子了。 我们待分析的so已经上传到csdn,下载地址:http://download.csdn.net/detail/jltxgcy/9602803。 0x01 readelf命令 1.1 so文件整体图 1.2 reade
2016-08-14 10:51:40 7401
原创 Inject Zygote and Hook Native Method(过反调试,过防dump)
0x00 进程注入 通过ptrace机制,调用目标进程的dlopen来加载我们的so,实现进程注入。 这部分知识在Android中的so注入(inject)和挂钩(hook) - For both x86 and arm,有详细的解释,请读者先阅读这篇文章。 那么被注入的进程是如何返回到我们的进程中呢?答案在regs->ARM_lr = 0。具体的分析请参考Android注入完全
2016-08-13 21:06:22 5717 1
原创 Android Inline Hook
0x00 Android Inline Hook Inline Hook即内部跳转Hook,通过替换函数开始处的指令为跳转指令,使得原函数跳转到自己的函数,通常还会保留原函数的调用接口。与GOT表Hook相比,Inline Hook具有更广泛的适用性,几乎可以Hook任何函数,不过其实现更为复杂,考虑的情况更多,并且无法对一些太短的函数Hook。 项目代码:https://github
2016-08-13 17:58:29 4376 1
原创 Android SO ARM及Thumb2指令集
0x01 ARM寄存器 1.1 通用寄存器 1.未分组寄存器:R0~R7 2.分组寄存器:R8~812 R13:SP,常用作堆栈指针,始终指向堆栈的顶部,当一个数据(32位)推入堆栈时,SP(R13的值减4)向下浮动指向下一个地址,即新的栈顶,当数据从堆栈中弹出时,SP(R13的值加4)向上浮动指向新的栈顶。 R14:连接寄存器(LR),当执行BL子程序调用指令时,R
2016-08-13 10:06:36 3378 1
原创 C语言字符串处理及内存管理函数
0x00 这一节,我们介绍下常用的C语言字符串处理函数和内存管理函数。 0x01 字符串处理函数: strstr:返回字符串中首次出现子串的地址 详解地址:http://c.biancheng.net/cpp/html/174.html。 strchr:查找某字符在字符串中首次出现的位置 详解地址:http://c.biancheng.net/cpp/ht
2016-08-12 21:12:55 1041
原创 Linux系统编程-管道与文件
0x00 管道经常用于进程间通信,进程间通过管道的读端和写端进程通信。 我们介绍一个比较简单的例子。int main(int argc, char *argv[]){ int pipefd[2]; if (pipe(pipefd) == -1) ERR_EXIT("pipe error"); pid_t pid; pid = fork(); if (pid == -1
2016-08-06 18:14:31 973
原创 Linux系统编程-信号
0x00 信号和中断类似,中断是硬件发出,而信号由软件发出。 信号常用于进程间通信,一个信号常见的处理如下: 1、设置对应信号的信号处理函数。 2、当信号来临时,打断正常执行的程序(本质上是在系统调用前检查是否有信号的到来),去执行信号处理函数。 3、信号处理函数执行完,继续执行原程序。 0x01 我们先来看一下linux中一共支持多少种信号。使用命令ki
2016-08-06 17:17:24 698
原创 Linux系统编程-fork
0x00 我们首先来最基本的fork使用,首先列代码,然后讲解。#include #include #include #include #include #include #include #include #include #include #define ERR_EXIT(m) \ do \ { \ perror(m); \ exit(EXIT_FA
2016-08-06 15:51:15 714
压缩SDK demo
2014-08-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人