首页/技术代码/ 利用shellcode实现植物大战僵尸自动种植辣椒

利用shellcode实现植物大战僵尸自动种植辣椒

作者:神奇   分类:技术代码   时间:2021-07-26 20:07:43  标签:



视频链接:https://b23.tv/dS86xA
植物大战僵尸的逆向教程有很多人已经做过了,我想稍微做一点不一样的东西。
这个视频从最开始找数据讲起,到编写机器码的思路,再到最后的C语言代码构建都有详细的说明和步骤。
(C语言代码部分没有包含程序提权、判断空指针、返回错误代码等功能,仅仅写了最基础的能实现功能的框架,如有需要请自行添加)
在这个视频中我把shellcode分为了数据段和代码段两个部分,但是就此视频想要实现的功能而言不需要这么麻烦,
可以去掉数据段并用C直接修改代码段里相应的机器码。
这里仅仅是分享一种构建shellcode的思路,你可以将它用于更复杂的场合。
如果还有不明白的地方或者是有更好的建议也欢迎在评论区留言~
视频中的代码:
[C] 纯文本查看 复制代码#include <Windows.h>#include <TlHelp32.h>int main(){/**********Ⅰ.依次获取窗口句柄,进程ID,线程句柄**********/DWORD pid = NULL;HWND hWnd = FindWindowW(NULL, L"Plants vs. Zombies");GetWindowThreadProcessId(hWnd, &pid);HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid);/*********************Ⅱ.获取模块地址*******************/DWORD modaddr = NULL;MODULEENTRY32 modentry;memset(&modentry, 0, sizeof(modentry));HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pid);modentry.dwSize = sizeof(MODULEENTRY32);Module32FirstW(hSnapshot, &modentry);do {if (wcscmp(modentry.szModule, L"popcapgame1.exe") == 0){modaddr = (DWORD)modentry.hModule;CloseHandle(hSnapshot);break;}} while (Module32Next(hSnapshot, &modentry));/**************Ⅲ.创建并远程调用shellcode***************/BYTE shellcode[1024] = {0x60, 0xE8, 0x00, 0x00, 0x00, 0x00, 0x5D, 0x8D, 0x6D, 0x1D, 0x68, 0xFF, 0xFF, 0xFF, 0xFF, 0x6A,0x14, 0x8B, 0x45, 0x00, 0x8B, 0x4D, 0x04, 0x51, 0x8B, 0x55, 0x08, 0x52, 0x8B, 0x4D, 0x0C, 0xFF,0xD1, 0x61, 0xC3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00 };//对象指针 pObj [[popcapgame1.exe + 0x331C50]+ 0x868]//函数指针 pFunc popcapgame1.exe + 105A0DWORD x = 0;DWORD y = 0;DWORD pObj = modaddr;ReadProcessMemory(hProcess, (LPCVOID)(pObj + 0x331C50), &pObj, 4, 0);ReadProcessMemory(hProcess, (LPCVOID)(pObj + 0x868), &pObj, 4, 0);DWORD pFunc = modaddr + 0x105A0;*(DWORD*)(shellcode + 0x23) = y;*(DWORD*)(shellcode + 0x27) = x;*(DWORD*)(shellcode + 0x2B) = pObj;*(DWORD*)(shellcode + 0x2F) = pFunc;while (true){*(DWORD*)(shellcode + 0x23) = y;LPVOID calladdr = VirtualAllocEx(hProcess, NULL, 1024, MEM_COMMIT, PAGE_EXECUTE_READWRITE);WriteProcessMemory(hProcess, calladdr, shellcode, 1024, NULL);HANDLE hRemote = CreateRemoteThread(hProcess, NULL, NULL, (LPTHREAD_START_ROUTINE)calladdr, NULL, NULL, NULL);WaitForSingleObject(hRemote, INFINITE);y++;if (y == 5) y = 0;Sleep(1000);VirtualFreeEx(hProcess, calladdr, NULL, MEM_RELEASE);CloseHandle(hRemote);}CloseHandle(hProcess);return 0;}
温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!

评论:

发表评论:

code