免杀学习——C++(一)

一、基本函数学习   1、VirtualAlloc函数 用来动态申请内存,通常用来分配大块的内存 VirtualAlloc是一个Windows API函数,它包含在windows系统文件Kernel32.dll中使用时要引用windows.h   该函数的功能是在调用进程的虚地址空间,预定或者提交一部分页 如果用于内存分配的话,并且分配类型未指定MEM_RESET,则系统将自动设置为0
LPVOID VirtualAlloc{ 
LPVOID lpAddress, // 要分配的内存区域的地址
DWORD dwSize, // 分配的大小 
DWORD flAllocationType, // 分配的类型 
DWORD flProtect // 该内存的初始保护属性 };
如果调用成功,返回分配的首地址;调用失败,返回NULL   参数说明:
LPVOID lpAddress, 分配内存区域的地址。当你使用VirtualAlloc来提交一块以前保留的内存块的时候,lpAddress参数可以用来识别以前保留的内存块。如果这个参数是NULL,系统将会决定分配内存区域的位置,并且按64-KB向上取整(roundup)。
SIZE_T dwSize, 要分配或者保留的区域的大小。这个参数以字节为单位,而不是页,系统会根据这个大小一直分配到下页的边界DWORD
flAllocationType, 分配类型 ,你可以指定或者合并以下标志:MEM_COMMIT,MEM_RESERVE和MEM_TOP_DOWN。
DWORD flProtect 指定了被分配区域的访问保护方式
使用示例
LPVOID Memory = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
  2、memcpy函数 memcpy是memory copy的缩写,意为内存复制 函数原型 void *memcpy(void *dest, const void *src, size_t n); 它的功能是从src的开始位置拷贝n个字节的数据到dest。如果dest存在数据,将会被覆盖。memcpy函数的返回值是dest的指针。memcpy函数定义在string.h头文件里   二、基本加载器   代码以及注释
#include <windows.h>
#include <stdio.h>
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")//不显示窗口

unsigned char shellcode[] = "";

void main()
{
    //申请内存空间,返回一个无类型的分配内存的首地址
    LPVOID Memory = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    if (Memory == NULL) { return; }
    //复制shellcode代码到指定内存地址
    memcpy(Memory, shellcode, sizeof(shellcode));
    //让程序跳转到指定内存地址执行
    ((void(*)())Memory)();
}

 

上一篇:linux 命令终端计算除法


下一篇:编写函数实现两个同类型值的交换(难度不断升级)