吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 12097|回复: 94
上一主题 下一主题
收起左侧

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

  [复制链接]
跳转到指定楼层
楼主
Ceylon 发表于 2021-7-26 00:49 回帖奖励
本帖最后由 Ceylon 于 2021-7-26 19:51 编辑

视频链接: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 + 105A0
	
	DWORD 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;
}

免费评分

参与人数 20威望 +1 吾爱币 +37 热心值 +19 收起 理由
Ladylululu + 1 用心讨论,共获提升!
256947328 + 1 + 1 我很赞同!
1323873 + 1 + 1 谢谢@Thanks!
t171 + 1 谢谢@Thanks!
xiong930626 + 1 + 1 谢谢@Thanks!
awj + 1 + 1 用心讨论,共获提升!
a517753728 + 1 + 1 谢谢@Thanks!
jomme012 + 1 + 1 我很赞同!
leeofwar + 1 + 1 用心讨论,共获提升!
嚯嚯嚯000 + 1 + 1 我很赞同!
sam喵喵 + 1 + 1 用心讨论,共获提升!
hack88888888 + 1 + 1 我很赞同!
Hmily + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
笙若 + 1 + 1 谢谢@Thanks!
hjthack + 1 + 1 我很赞同!
1392yy + 1 热心回复!
银.桑 + 1 + 1 热心回复!
gkwdfrgy + 1 + 1 谢谢@Thanks!
yechao25038 + 1 + 1 用心讨论,共获提升!
为之奈何? + 1 + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

  • · 仙踪|主题: 14, 订阅: 3

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
 楼主| Ceylon 发表于 2021-7-26 19:53 |楼主
小木曾雪菜 发表于 2021-7-26 09:13
这个视频录制太糊了,都看不清

手机看起来可能会比较糊?电脑上开1080p全屏看应该是挺清楚的
沙发
netpeng 发表于 2021-7-26 01:06
3#
枫叶波澜 发表于 2021-7-26 02:05
感谢发布原创作品,吾爱破解论坛因你更精彩!
4#
knight5801 发表于 2021-7-26 02:53
不明觉厉
5#
alongzhenggang 发表于 2021-7-26 03:03
额  问我不太会玩这个
6#
bbk520 发表于 2021-7-26 03:24
厉害了。。。。。
7#
Jokerwow 发表于 2021-7-26 06:57
谢谢分享&#128512;
8#
bugcode776 发表于 2021-7-26 08:17
66666666666666666
9#
caidesi520 发表于 2021-7-26 08:40

学到了 感谢分享
10#
已默然 发表于 2021-7-26 08:59
get it,感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 04:05

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表