内核级病毒与木马攻防战
文章平均质量分 83
在windows系统上我们将研究病毒,木马或恶意软件的分析方法,学会使用IDA Pro, WinDbg, OllyDbg配合反汇编技术揭秘各种病毒和木马的设计原理。在Linux系统上进行二进制分析,解构可执行文件ELF,以实现代码注入和进程劫持,掌握Linux的病毒,后门等恶意软件或病毒的设
优惠券已抵扣
余额抵扣
还需支付
¥9.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
tyler_download
这个作者很懒,什么都没留下…
展开
-
使用LD_PRELOAD拦截共享函数库的函数调用
在linux系统上,程序运行时有一个特征。在程序加载前,系统会预先加载一系列库函数。如果程序运行后,它再使用动态链接库时,如果它调用链接库里面的函数名与预先加载的函数库中的某个函数名相同,那么系统会自动调用预先加载函数库中的函数。这种机制给与我们一个劫持程序运行的入口。例如函数从某个动态加载的so链接库里调用名为function_name的函数,那么我们可以先设置一个链接库,在里面也导出一个同名函数function_name,然后使用修改系统的环境变量LD_PRELOAD,让程序在运行前先加载我们的链接库原创 2021-05-29 14:36:26 · 429 阅读 · 0 评论 -
一个elf程序实现代码注入的实例
本节我们看看如何针对ELF可执行文件实现代码注入,这是一个简单的实例,但却可以有效的揭开冰山的一角。我想很多人都用过破解软件,破解的一种机制就是通过修改程序的二进制代码,越过软件的授权认证机制,例如下面这个例子: auth = autoVerifyCode(code); //认证输入验证码是否正确 if (auth == False) { exit(1); //验证错误直接退出 } //下面代码是软件功能的正常运行面对上面验证码的验证模式,一种破解办法就是将原创 2021-04-22 17:25:19 · 1188 阅读 · 0 评论 -
反汇编与二进制分析的一些基本知识
在程序届有一句名言:如果你能读懂汇编,一切程序对你来说就是开源。所以要抵达黑客层次,不熟练的掌握反汇编分析技巧那是不可能的。本节我们看看一些反汇编的工具和相关技巧,后续我们再看看一些高级方法该怎么用。常用的反汇编工具一般需要执行三个步骤,1,加载要反汇编的二进制文件;2,从二进制文件中找到所有机器指令;3,将指令转换为汇编语句;通常第2步是一个难点,由于机器指令与通常的二进制数值无异,因此很容易把不是指令的数值认为是机器指令。为了尽可能降低步骤2的错误,反汇编算法常采用两种模式,分别是线性反汇编和递归反汇原创 2021-03-25 17:03:53 · 990 阅读 · 1 评论 -
Linux上一个恶意程序分析实例:一步一步揭开病毒程序的面纱2
上一节我们从一个莫名其妙的文件67b8601里面分离出了efl文件头数据,这意味着该文件其实隐藏着一个可执行的elf文件,现在问题是我们如何把整个elf文件抽取出来。既然我们已经获得了头部信息,那么就可以根据elf文件格式的结构,结合头部数据将整个文件提取出来。从上一节提取的头部信息中,我们需要关注几个关键信息,它们是start of section headers:8568(bytes into file), Size of section headers: 64(bytes), Number of s原创 2021-02-20 11:38:28 · 395 阅读 · 0 评论 -
Linux上一个恶意程序分析实例:一步一步揭开病毒程序的面纱1
本节我们结合前面的知识点,通过动手实践来分析一个”恶意“程序。这次我们使用的例子具有极强的动手实践性,它也非常能代表恶意程序入侵系统的很多流程步骤,跟着做下来你一定收获颇多。首先我们需要获得要分析的程序对象,其下载地址为:链接: https://pan.baidu.com/s/1ygGvONkmdeD7d9YJ9plajw 密码: w855通过上面链接下载相应文件后上传到Linux系统上,我们就可以开始分析流程。首先你会发现它是一个没有后缀的二进制文件,所以我们无法通过后缀来判断文件类型或内容,其实原创 2021-01-09 11:10:07 · 371 阅读 · 0 评论 -
ELF文件程序表头和代码实现ELF文件加载
前面章节我们了解了ELF文件的头部结构,这次我们深入了解另一个非常重要的数据结构,那就是程序表头。操作系统严重依赖该结构来加载ELF文件或是实现动态链接。程序表头反映的是当ELF加载到内存后所形成的“视图”或结构,也就是说ELF文件存在硬盘上或者被加载到内存,它展现出来的形态不一致。我们先看程序表头的数据结构:typedef struct { unit32_t p_type; #数据类型 uint332_t p_flags; #标志位 uint64_t p_offs原创 2020-12-12 17:09:15 · 4585 阅读 · 5 评论 -
探索ELF可执行文件的“干货”:段头表和段的基本介绍
可执行文件的数据结构通常都很复杂和繁琐。原因在于程序在加载到内存中执行时需要经过一系列非常复杂的步骤。例如要计算数据或代码被加载到虚拟内存时的位置,计算重定向数值,实现不同代码的链接等。本节我们一点一滴的了解段的数据格式和作用,这对我们后面了解Linux系统如何加载运行程序,并掌握相关的高级hack技术有非常重要的作用,首先我们看段头对应的数据结构,它用于描述ELF文件中某个段的基本特征:typedef struct {uint32_t sh_name; #段名uint32_t sh_type;原创 2020-11-08 18:46:10 · 539 阅读 · 0 评论 -
高级静态分析技能基础:X86架构的堆栈结构描述
在代码运行时需要临时存放各种信息,例如函数调用时的输入参数,局部变量等,这些信息存储在一种叫做”栈“的数据结构上。它的特点是后进先出,也就是最后存储到栈里面的数据将会最先被取出来。X86体系自带栈结构,寄存器ESP,EBP专门用于对栈进行操作。EBP指向栈所在的内存地址,ES[图片上传中…(截屏2020-09-30 下午3.56.59.png-a3f002-1601452956326-0)]P指向数据进入或弹出堆栈所在的位置,同时对于栈操作的指令有push,pop,call,leave,enter,ret原创 2020-10-09 18:06:32 · 435 阅读 · 1 评论 -
高级静态分析技能基础:X86汇编语言运算指令说明
本节我们看看X86指令集以及X86的硬件体系架构。在汇编语言中最常见的指令就是mov,他将数据从一个地方转移到指定位置,该指令能将数据转移到特定位置的内存或是给定寄存器。mov指令的格式为(mov 目的,源头),源头指的是要被挪到的数据,目的是数据被挪动的目的地, 我们看几个具体例子:mov eax, ebx (把寄存器ebx中的数据拷贝到eax寄存器)mov eax, 0x42 (把数值0x42赋值给eax寄存器)mov eax, [0x4037c4](把地址为0x4037c4的4字节数据拷贝到e原创 2020-09-27 16:36:37 · 610 阅读 · 0 评论 -
高级静态分析技能基础:掌握80x86汇编语言1
掌握黑客技术一大难点就在于你要非常深入计算机技术的底层。绝大多数程序员只愿意在上层应用上花点时间,毕竟他们只想”混饭吃“,任何有志于不断提升技术能力的工程师都必须跨过几个高门槛,一个是算法,一个是系统设计,还有就是掌握计算机体系结构,与底层,与硬件打交道,这些知识点难度大,有些甚至很枯燥,因此愿意专研的人不多,我们本节所要描述的汇编语言就属于计算机体系结构的一部分。一名真正的黑客,不是那些只会使用工具搞些歪门邪道的门外汉,掌握汇编语言在关键时刻使用反汇编技术进行分析不可避免。在这里我们对汇编语言做初步掌握原创 2020-09-15 10:06:05 · 325 阅读 · 0 评论 -
详解ELF可执行文件格式:读取头部信息和程序表头
要想实现ELF文件的入口劫持,不深入掌握其运行原理与组成结构那是不可能的。ELF的内部结构复杂,加载逻辑难以理解,因此我们需要通过切香肠的方式,将这个困难的技术点一点一滴的去攻克。这一节我们先掌握如何读取头部信息和程序表头,我们先看ELF文件的大致结构:ELF文件格式最重要的就是所谓的段,特别是其中的代码段和数据段。对应上图就是.text,.data两个段。每个段都对应一个段表来描述,而若干隔断会组成一个整体,它对应一个program,而后者则由program header table来指向,讲解EL原创 2020-09-05 10:51:04 · 926 阅读 · 0 评论 -
详解ELF重定向原理
重定向是计算机技术中非常底层的概念和操作。它指的是将程序中涉及到的变量名与变量在计算机内存中的位置关联起来。当在代码中执行类似x=1;的语句时,编译器需要通过重定向信息找到变量x对应的内存位置,然后将数值1写入该内存,因此重定向既跟程序的加载链接有关,又于编译原理有关,因此对计算机体系结构不了解,或只关注上层应用开发,对底层技术理解不多的同学对它进行掌握就会有些困难。为了准确将变量对应到具体的内存位置,就必须要有相关信息来描述变量名与内存之间的关系,这些信息就叫重定向记录(relocation recor原创 2020-08-25 18:52:21 · 1014 阅读 · 0 评论 -
内核级病毒与木马攻防:windows上四个恶意代码和病毒程序分析实战
本节看看如何将前面讲述的各种工具和理论应用到实践中来。我们将拿几个专门针对windows系统开发的恶意程序作为实例,用前面讲到的工具和理论具体分析其设计原理并了解它所要实现的目的。所要分析的二进制可执行文件以及所有用到的工具可从如下链接下载链接: https://pan.baidu.com/s/1QBwGxCGjA7kYd4HchSTlWg 密码: 09g7首先我们分析第一个恶意程序,也就是malicious-01.exe。面对exe程序时,首先要做的就是将它丢到PEView里先看看它的大概信息,打开原创 2020-08-06 11:49:49 · 1328 阅读 · 0 评论 -
内核级病毒与木马攻防:ELF文件的符号表和函数调用追踪
熟悉编译原理的同学一定了解何为符号,所谓符号其实是一种数据结构,用来描述编程语言中定义的特定对象。例如编程语言中定义的变量,函数都有特定的符号用于描述他们的性质。例如变量对应的符号中包含了变量对应的字符串名称,变量的类型,以及变量对应的内存。函数对应的符号包含了函数名称字符串,函数的返回值类型,函数入口内存地址等,在代码调试时,你把鼠标挪动到变量所在位置,IDE就给你显示出变量当前的取值等信息,这些信息就来自变量对应的符号,我在有关编译原理的两门课程里对符号有非常深入的讲解。在elf文件中存在两种符号表,原创 2020-07-28 10:51:38 · 551 阅读 · 0 评论 -
内核级病毒与木马攻防:windows可执行文件结构解析及常用工具
大多数人使用windows系统,相必对其.exe结尾的文件印象深刻,执行任何程序时,你双击该文件即可,这个文件就是系统的可执行文件,我们需要了解其组成结构才能对其进行侵入,劫持或注入恶意代码。.exe文件也叫PE文件,它由一系列段头和段来组成。它一开始是一系列段头数据结构,用于描述各个段的相关性质,接下来就是包含代码和数据的各种段。有几个段特别值得注意,.text段包含CPU可以执行的指令,其他所有段包含数据或者是辅助CPU执行该段里面指令的相关信息,这个段是唯一包含可执行代码的段。.rdata包含引入和原创 2020-07-27 11:17:40 · 857 阅读 · 0 评论 -
内核级木马与病毒攻防:Linux可执行文件的ELF格式描述
要想在Linux系统上实现逆向工程,分析,设计或查杀病毒和恶意代码,你不得不深入掌握其可执行文件的ELF格式,这样你才能了解进程在内存空间的布局和运行的基本规律,这样你才能有针对性的设计有效的病毒或恶意代码入侵系统。ELF文件主要有以下几种类型,ET_NONE表示该文件的作用未知;ET_REL表示重定向文件或叫目标文件,它们将会被链接并加装到某个指定的虚拟内存位置,常见的以.o结尾的二进制文件就属于这种类型。ET_EXEC表示可执行文件,它是由多个.o文件链接起来,可以被加载到内存进行执行的进程数据文件;原创 2020-07-20 10:57:38 · 834 阅读 · 0 评论 -
内核级木马与病毒攻防:windows恶意代码分析入门
本节帮助读者入门windows上如何对恶意软件或病毒做初步分析。分析分两种,一种叫静态分析,也就是通过直接读取病毒或恶意程序的可执行文件来分析它的运行原理,一种是动态分析,也就是在病毒或恶意程序正在运行的情况下,监视其一举一动,通过观察它在系统中的运行情况来分析它的目的和原理。本节介绍基本的静态分析方法,该方法简单易行,但作用有限,要想跟病毒或恶意程序斗智斗勇最终还得依赖于动态分析。静态分析的第一种方法就是直线读取病毒或恶意程序的可执行文件,从中抽取关键信息。很多病毒或恶意程序的作者为了快速实现其非法目的原创 2020-07-10 16:58:35 · 2138 阅读 · 1 评论 -
Linux内核级木马与病毒攻防:基础工具介绍
欲成其事先利其器。要想完成一项复杂的任务,工具的作用至关重要。要想在Linux系统上开发或研究木马病毒等特殊程序,我们需要使用一系列强大的开发和调试攻击。本节先介绍几种在Linux系统上极为强大的工具。第一个当然是gdb了,在Linux上,它是唯一能用于程序调试的利器。我们后面开发代码或调试分析其他病毒或木马的设计模式和原理时,必须使用gdb作为手术刀,对要研究的病毒和木马进行”剖尸检验“,通过gdb调查木马或病毒的代码设计方法,同时也使用gdb加载恶意代码,研究其运转流程。第二个是objdump,它的原创 2020-07-04 17:05:07 · 1381 阅读 · 0 评论