万本电子书0元读

万本电子书0元读

顶部广告

Linux二进制分析电子书

售       价:¥

纸质售价:¥56.10购买纸书

578人正在读 | 2人评论 6.5

作       者:【美】Ryan O'Neill(瑞安 奥尼尔)

出  版  社:人民邮电出版社

出版时间:2016-09-01

字       数:21.1万

所属分类: 科技 > 计算机/网络 > 软件系统

温馨提示:数字商品不支持退换货,不提供源文件,不支持导出打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(3条)
  • 读书简介
  • 目录
  • 累计评论(3条)
二制分析属于信息安全业界逆向工程中的一种技术,通过利用可执行的机器代码(二制)来分析应用程序的控制结构和运行方式,有助于信息安全从业人员更好地分析各种漏洞、病毒以及恶意软件,从而找到相应的解决方案。 《Linux二制分析》是一本剖析Linux ELF工作机制的图书,共分为9章,其内容涵盖了Linux环境和相关工具、ELF二制格式、Linux程追踪、ELF病毒技术、Linux二制保护、Linux中的ELF二制取证分析、程内存取证分析、扩展核心文件快照技术、Linux proc kcore分析等。 《Linux二制分析》适合具有一定的Linux操作知识,且了解C语言编程技巧的信息安全从业人员阅读。<br/>【推荐语】<br/>本书首先讲解了UNIX Linux中分析目标文件的实用工具和ELF二制格式的相关内容,随后介绍了程追踪、各种不同类型的Linux和UNIX病毒,以及如何使用ELF病毒技术行处理。 本书的后半部分介绍了如何使用Kprobe工具行内核破解、代码修补和调试,如何检测并处理内核模式的rootkit,以及如何分析静态代码;对复杂的用户级内存感染分析行了相关讲解。 本书将带领读者探索甚至连一些专家都未曾触的领域,正式计算机黑客世界。 本书读者对象 如果你是一名软件工程师或者逆向工程师,想要学习Linux二制分析相关的内容,本书实为明智之选。本书提供了在安全、取证和杀毒领域中实施二制分析的解决方案。本书也适合安全爱好者和系统工程师阅读。为了更好地理解本书内容,读者需要具备一定的C语言编程基础和Linux命令行知识。 本书内容 ELF二制格式的内部工作原理; UNIX病毒感染和分析的相关技术; 二制加固和软件防篡改技术; 修补可执行文件和程内存; 绕过恶意软件中的反调试; 二制取证分析技术; 用C语言设计ELF相关的工具; 如何使用ptrace操作内存。 本书源码可通过www.epubit.com.cn book details 4696下载。<br/>【作者】<br/>Ryan O'Neill(ELF大师)是一名计算机安全研究员兼软件工程师,具有逆向工程、软件发、安全防御和取证分析技术方面的背景。他是在计算机黑客亚文化的世界中成长起来的——那个由EFnet、BBS系统以及系统可执行栈上的远程缓冲区溢出组成的世界。他在年轻时就触了系统安全、发和病毒编写等领域。他对计算机黑客的极大热情如今已经演变成了对软件发和专业安全研究的热爱。Ryan在DEFCON和RuxCon等很多计算机安全会议上发表过演讲,还举办了一个为期两天的ELF二制黑客研讨会。 他的职业生涯非常成功,曾就职于Pikewerks、Leviathan安全集团这样的大公司,近在Backtrace担任软件工程师。 Ryan还未出版过其他图书,不过他在Phrack和VXHeaven这样的在线期刊上发表的论文让他声名远扬。还有许多其他的作品可以从他的网站(http: www.bitlackeys.org)上找到。<br/>
目录展开

内容提要

译者序

关于作者

致谢

关于审稿人

前言

本书涵盖的内容

阅读本书的先决条件

本书读者对象

第1章 Linux环境和相关工具

1.1 Linux工具

1.1.1 GDB

1.1.2 GNU binutils中的objdump

1.1.3 GNU binutils中的objcopy

1.1.4 strace

1.1.5 ltrace

1.1.6 基本的ltrace命令

1.1.7 ftrace

1.1.8 readelf

1.1.9 ERESI——ELF反编译系统接口

1.2 有用的设备和文件

1.2.1 /proc/<pid>/maps

1.2.2 /proc/kcore

1.2.3 /boot/System.map

1.2.4 /proc/kallsyms

1.2.5 /proc/iomem

1.2.6 ECFS

1.3 链接器相关环境指针

1.3.1 LD_PRELOAD环境变量

1.3.2 LD_SHOW_AUXV环境变量

1.3.3 链接器脚本

1.4 总结

第2章 ELF二进制格式

2.1 ELF文件类型

2.2 ELF程序头

2.2.1 PT_LOAD

2.2.2 PT_DYNAMIC——动态段的Phdr

2.2.3 PT_NOTE

2.2.4 PT_INTERP

2.2.5 PT_PHDR

2.3 ELF节头

2.3.1 .text节

2.3.2 .rodata节

2.3.3 .plt节

2.3.4 .data节

2.3.5 .bss节

2.3.6 .got.plt节

2.3.7 .dynsym节

2.3.8 .dynstr节

2.3.9 .rel.*节

2.3.10 .hash节

2.3.11 .symtab节

2.3.12 .strtab节

2.3.13 .shstrtab节

2.3.14 .ctors和.dtors节

2.4 ELF符号

2.4.1 st_name

2.4.2 st_value

2.4.3 st_size

2.4.4 st_other

2.4.5 st_shndx

2.4.6 st_info

1.符号类型

2.符号绑定

2.5 ELF重定位

基于二进制修补的重定位代码注入

2.6 ELF动态链接

2.6.1 辅助向量

2.6.2 了解PLT/GOT

2.6.3 重温动态段

1.DT_NEEDED

2.DT_SYMTAB

3.DT_HASH

4.DT_STRTAB

5.DT_PLTGOT

2.7 编码一个ELF解析器

2.8 总结

第3章 Linux进程追踪

3.1 ptrace的重要性

3.2 ptrace请求

ptrace请求类型

3.3 进程寄存器状态和标记

3.4 基于ptrace的调试器示例

使用追踪程序

3.5 ptrace调试器

3.6 高级函数追踪软件

3.7 ptrace和取证分析

内存感染类型

3.8 进程镜像重建

3.8.1 重建进程到可执行文件的挑战

3.8.2 重建可执行文件的挑战

PLT/GOT完整性

3.8.3 添加节头表

3.8.4 重建过程算法

3.8.5 在32位测试环境中使用Quenya重建进程

3.9 使用ptrace进行代码注入

3.10 简单的例子演示复杂的过程

3.11 code_inject工具演示

3.12 ptrace反调试技巧

你的程序是否正在被追踪

3.13 总结

第4章 ELF病毒技术——Linux/UNIX病毒

4.1 ELF病毒技术

4.2 设计ELF病毒面临的挑战

4.2.1 寄生代码必须是独立的

解决方案

4.2.2 字符串存储的复杂度

解决方案

4.2.3 寻找存放寄生代码的合理空间

解决方案

4.2.4 将执行控制流传给寄生代码

解决方案

4.3 ELF病毒寄生代码感染方法

4.3.1 Silvio填充感染

1.Silvio .text感染算法

2.text段填充感染示例

3.函数应用示例

4.LPV病毒

5.Silvio填充感染用例

4.3.2 逆向text感染

逆向text感染算法

4.3.3 data段感染

data段感染算法

4.4 PT_NOTE到PT_LOAD转换感染

PT_NOTE到PT_LOAD转换感染算法

4.5 感染控制流

4.5.1 直接PLT感染

4.5.2 函数蹦床(function trampoline)

4.5.3 重写.ctors/.dtors函数指针

4.5.4 GOT感染或PLT/GOT重定向

4.5.5 感染数据结构

4.5.6 函数指针重写

4.6 进程内存病毒和rootkits——远程代码注入技术

4.6.1 共享库注入

1..so感染/ET_DYN感染

2..so感染——使用LD_PRELOAD

3.使用LD_PRELOAD注入wicked.so.1

4..so感染——利用open()/mmap() shellcode

5..so感染——使用dlopen() shellcode

6.C语言调用__libc_dlopen_mode()示例

7..so感染——使用VDSO控制技术

4.6.2 text段代码注入

4.6.3 可执行文件注入

4.6.4 重定位代码注入——ET_REL注入

4.7 ELF反调试和封装技术

4.7.1 PTRACE_TRACEME技术

使用PTRACE_TRACEME反调试示例

4.7.2 SIGTRAP处理技术

4.7.3 /proc/self/status技术

4.7.4 代码混淆技术

4.7.5 字符串表转换技术

4.8 ELF病毒检测和杀毒

4.9 总结

第5章 Linux二进制保护

5.1 ELF二进制加壳器

5.2 存根机制和用户层执行

保护器示例

5.3 保护器存根的其他用途

5.4 现存的ELF二进制保护器

5.4.1 DacryFile——Grugq于2001年发布

5.4.2 Burneye——Scut于2002年发布

5.4.3 Shiva——Neil Mehta和Shawn Clowes于2003年发布

5.4.4 Maya's Veil——Ryan O'Neill于2014年发布

1.Maya的保护分层

2.Maya的nanomites特性

3.Maya的漏洞防御特性

5.5 下载Maya保护的二进制文件

5.6 二进制保护中的反调试

5.7 防模拟技术

5.7.1 通过系统调用检测模拟

5.7.2 检测模拟的CPU不一致

5.7.3 检测特定指令之间的时延

5.8 混淆方法

5.9 保护控制流完整性

5.9.1 基于ptrace的攻击

5.9.2 基于安全漏洞的攻击

5.10 其他资源

5.11 总结

第6章 Linux下的ELF二进制取证分析

6.1 检测入口点修改技术

6.2 检测其他形式的控制流劫持

6.2.1 修改.ctors/.init_array节

6.2.2 检测PLT/GOT钩子

截断readelf –S命令的输出

6.2.3 检测函数蹦床

6.3 识别寄生代码特征

6.4 检查动态段是否被DLL注入

6.5 识别逆向text填充感染

6.6 识别text段填充感染

6.7 识别被保护的二进制文件

分析被保护的二进制文件

6.8 IDA Pro

6.9 总结

第7章 进程内存取证分析

7.1 进程内存布局

7.1.1 可执行文件内存映射

7.1.2 程序堆

7.1.3 共享库映射

7.1.4 栈、VDSO和vsyscall

7.2 进程内存感染

7.2.1 进程感染工具

7.2.2 进程感染技术

1.注入方法

2.劫持可执行文件的相关技术

7.3 检测ET_DYN注入

7.3.1 Azazel:用户级rootkit检测

7.3.2 映射出进程的地址空间

7.3.3 查找栈中的LD_PRELOAD

7.3.4 检测PLT/GOT钩子

识别错误的GOT地址

7.3.5 ET_DYN注入内部原理

1.示例:查找__libc_dlopen_mode的符号

2.代码示例:__libc_dlopen_mode shellcode

3.代码示例:libc符号解析

4.代码示例:使用x86_32 shellcode对ET_DYN目标文件进行mmap()操作

7.3.6 操纵VDSO

7.3.7 共享目标文件加载

1.合法的共享目标文件加载

2.非法的共享目标文件加载

7.3.8 检测.so注入的启发方法

7.3.9 检测PLT/GOT钩子的工具

7.4 Linux ELF核心文件

7.4.1 核心文件分析:Azazel rootkit

1.启动被Azazel感染的进程,获取核心转储文件

2.核心文件程序头

3.PT_NOTE段

4.PT_LOAD段和用于取证分析的核心文件的失败

5.使用GDB对核心文件进行取证分析

7.5 总结

第8章 ECFS——扩展核心文件快照技术

8.1 历史

8.2 ECFS原理

8.3 ECFS入门

8.3.1 将ECFS嵌入到核心处理器中

8.3.2 在不终止进程的情况下使用ECFS快照

8.4 libecfs——解析ECFS文件的库

8.5 readecfs工具

8.6 使用ECFS检测被感染的进程

8.6.1 感染主机进程

8.6.2 捕获并分析ECFS快照

1.符号表分析

2.节头分析

8.6.3 使用readecfs提取寄生代码

8.6.4 Azazel用户级rootkit分析

1.重建host2进程的符号表

2.重建host2进程的节头表

3.使用ECFS验证PLT/GOT

4.验证PLT/GOT的readecfs输出

8.7 ECFS参考指南

8.7.1 ECFS符号表重建

8.7.2 ECFS节头

8.7.3 使用ECFS文件作为常规的核心文件

8.7.4 libecfs API的使用

8.8 使用ECFS恢复中断的进程

8.9 了解更多ECFS相关内容

8.10 总结

第9章 Linux/proc/kcore分析

9.1 Linux内核取证分析和rootkit

9.2 没有符号的备份vmlinux

使用kdress构建vmlinux

9.3 探索/proc/kcore和GDB

sys_call_table导航示例

9.4 直接修改sys_call_table

9.4.1 检测sys_call_table修改

验证系统调用完整性的示例

9.4.2 内核函数蹦床

9.4.3 函数蹦床示例

劫持32位内核下sys_write的代码实例

9.4.4 检测函数蹦床

1.使用ret指令的示例

2.使用间接跳转指令的示例

3.使用相对跳转指令的示例

4.中断处理器修复——int 0x80和syscall

9.4.5 检测中断处理器修复

9.5 Kprobe rootkit

检测Kprobe rootkit

9.6 调试寄存器rootkit——DRR

检测DRR

9.7 VFS层rootkit

检测VFS层rootkit

验证VFS函数指针的示例

9.8 其他内核感染技术

9.9 vmlinux和.altinstructions修补

9.9.1 .altinstructions和.altinstr_replace

9.9.2 arch/x86/include/asm/alternative.h代码片段

9.9.3 使用textify验证内核代码完整性

9.9.4 使用textify检查sys_call_table

9.10 使用taskverse查看隐藏进程

taskverse技术

9.11 感染的LKM——内核驱动

9.11.1 方法一:感染LKM文件——符号劫持

9.11.2 方法二:感染LKM文件——函数劫持

9.11.3 检测被感染的LKM

9.12 /dev/kmem和/dev/mem

9.12.1 /dev/mem

9.12.2 FreeBSD /dev/kmem

9.13 K-ecfs ——内核ECFS

深入了解内核ecfs文件

9.14 内核黑客工具

9.14.1 通用的逆向工程和调试

9.14.2 高级内核劫持/调试接口

9.14.3 本章提到的论文

9.15 总结

累计评论(3条) 4个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部