静态恶意代码逃逸(第二课)

倾旋
倾旋
技术分享|2019-11-10|最后更新: 2023-6-22|
type
status
date
slug
summary
tags
category
icon
password
URL

0x01 关于Windows操作系统内存

代码将会上传至Github,方便读者下载研究 : https://github.com/Rvn0xsy/BadCode
这里还是稍微展开介绍一下,Windows操作系统的内存有三种属性,分别为:可读、可写、可执行,并且操作系统将每个进程的内存都隔离开来,当进程运行时,创建一个虚拟的内存空间,系统的内存管理器将虚拟内存空间映射到物理内存上,所以每个进程的内存都是等大的。
操作系统给予每个进程申请内存的权力,使用不同的API,申请的内存具有不同的涵义。
在进程申请时,需要声明这块内存的基本信息:申请内存大小、申请内存起始内存基址、申请内存属性、申请内存对外的权限等。
申请方式:
  • HeapAlloc
  • malloc
  • VirtualAlloc
  • new
  • LocalAlloc

0x02 申请内存API的关系

其实以上所有的内存申请方式都与VirtualAlloc有关,因为VirtualAlloc申请的单位是“页”。而Windows操作系统管理内存的单位也是“页”。

0x03 实现一次正常加载

这里我创建了一个C++项目,名字为:BadCode
先来使用cobaltstrike默认的shellcode进行加载,为了方便阅读参考,在代码中我会尽量留下注释。
编译成功后,运行:
notion image
V站查杀结果:
notion image
这个效果已经很好,但是我想要更好。

0x04 实现一次混淆加载

使用之前的Python脚本混淆生成RAW文件,最后得到混淆后的数组:
上线效果:
notion image
notion image
V站查杀:
notion image
©2021-2024 倾旋. All rights reserved.