البرنامج يقوم بالتالي
#include "pch.h"
#include <Windows.h>
#include <mbstring.h>
const char* AT4RE = "AT4RE";
const char* DOT_AT4RE = ".AT4RE";
HWND p;
RECT WINDOW_RECT;
BOOL CALLBACK f(HWND h, LPARAM param) {
char A[0xC8];
memset(A, 0, 0xC8);
p = h;
_mbscpy((unsigned char*)A, (unsigned char*)AT4RE);
//char tempBuffer[0xC];
//strcat(A, itoa((int)p, tempBuffer, 0x10));
strcat(A, (char*)p);
strcat(A, DOT_AT4RE);
HDC dc = GetDC(p);
GetWindowRect(p, &WINDOW_RECT);
int height = WINDOW_RECT.bottom - WINDOW_RECT.top;
int width = WINDOW_RECT.right - WINDOW_RECT.left;
int area = height * width;
int modifiedArea = area * 4 + 39;
HGLOBAL mem = GlobalAlloc(0x40, modifiedArea);
*(short*)(mem) = 0x4D42;
*(int*)((byte*)mem + 0x2) = 0xE;
*(int*)((byte*)mem + 0xA) = 0x36;
*(int*)((byte*)mem + 0xE) = 0x28;
*(short*)((byte*)mem + 0xE + 0xC) = 0x1;
*(short*)((byte*)mem + 0xE + 0xE) = 0x18;
*(int*)((byte*)mem + 0xE + 0x8) = height;
*(int*)((byte*)mem + 0xE + 0x4) = width;
*(int*)((byte*)mem + 0xE + 0x10) = 0;
HDC cdc = CreateCompatibleDC(dc);
HBITMAP bitmapHandle = CreateCompatibleBitmap(dc, width, height);
SelectObject(cdc, bitmapHandle);
BitBlt(cdc, 0, 0, width, height, dc, 0, 0, 0x40CC0020);
GetDIBits(cdc, bitmapHandle, 0, height, (LPVOID)((byte*)mem + 0x36), (LPBITMAPINFO)((byte*)mem + 0xE), 0);
HANDLE file = CreateFileA(A, 0x40000000, 2, 0, 2, 0, 0);
int numberOfBytes;
WriteFile(file, mem, modifiedArea, LPDWORD(&numberOfBytes), 0);
CloseHandle(file);
GlobalFree(mem);
return true;
}
int main() {
char someArray[0x10];
HWND windowHandle = FindWindowA("Notepad++", NULL);
EnumChildWindows(windowHandle, f, (LPARAM)someArray);
return 0;
}
سابقاً: لكن هذا المكتوب أعلاه غالبا ليس صحيحا تماما فلم أحصل على نفس النتيجة بعد. سأكمل غدا فقد حان وقت النوم
، ومن أراد أن يكمل بدلا عني فليتفضل.