Olá Galerinha Da SACHEATS-VIP , Hoje Vim Trazer Uma Video-Aula De Como São Criado Os Menus VIP Dos Forum De Hacks Por Ai, Este Tutorial Eu Já Tinha Postado Antes Mais Por Causa De Resetações No Forum Tinha Cido Removido Então Coloquei De Novo. o Tutorial Inclue Video-Aula + SourceCode Completa Do MENU D3D Vale Relembra Que Para Compilar é Presizo Da "LIB" e "INCLUDE" e "DETOURS" Já Pré Instalada Em Seu Visual Studio Ok! Vamos Ao Que Interesa. Video-Aula:VIDEO Créditos Do Autor:kohkae kung Source 1: // main.h #include <windows.h> #include <d3d9.h> #include <d3dx9.h> #pragma comment (lib, "d3dx9.lib") #include <detours.h> #pragma comment (lib, "detours.lib") #include <iostream> #include <fstream> #include "MenuSprite.h" using namespace std; struct Menu_t { char* type; int value; bool Number; int maxchoice; }; Menu_t MyMenu[7] = { {"Wallhack", 1, false, 2}, {"Color1", 4, true, 11}, {"Color2", 2, true, 11}, {"Crosshair", 1, true, 4000}, {"Speedhack", 0, false, 2}, {"Base Walk[F11]", 0, false, 2}, {"Walk Through[Home]", 0, false, 2}, }; LPD3DXFONT menuFont = NULL; LPDIRECT3DTEXTURE9 txBody = NULL; LPD3DXSPRITE spBody = NULL; D3DXVECTOR3 pBody; int menuIndex = 0; bool ShowMenu = true; DWORD StartMenuTextX = 50; DWORD StartMenuTextY = 200; DWORD StartMenuValueX = 210; DWORD MenuRank = 20; int MaxChoice = 7; HRESULT(__stdcall*pEndScene)(LPDIRECT3DDEVICE9) = NULL; HRESULT(__stdcall*pReset)(LPDIRECT3DDEVICE9,D3DPRESENT_PARAMETERS *) = NULL; Source 2: http://main.cpp #include "main.h" void DrawString(LPD3DXFONT fromFont, int x, int y, DWORD color, const char *fmt, ...) { RECT FontPos = { x, y, x + 120, y + 16 }; char buf[1024] = {'\0'}; va_list va_alist; va_start(va_alist, fmt); vsprintf(buf, fmt, va_alist); va_end(va_alist); fromFont->DrawText(NULL,buf, -1, &FontPos, DT_NOCLIP, color); } BOOL bCompare(const BYTE* pData, const BYTE* bMask, const char* szMask) { for(;*szMask;++szMask,++pData,++bMask) if(*szMask=='x' && *pData!=*bMask) return 0; return (*szMask) == NULL; } DWORD FindPattern(DWORD dwdwAdd,DWORD dwLen,BYTE *bMask,char * szMask) { for(DWORD i=0; i<dwLen; i++) if (bCompare((BYTE*)(dwdwAdd+i),bMask,szMask)) return (DWORD)(dwdwAdd+i); return 0; } HRESULT __stdcall myReset(LPDIRECT3DDEVICE9 pDevice,D3DPRESENT_PARAMETERS *pPresentationParameters) { __asm nop; HRESULT resultReset = pReset(pDevice,pPresentationParameters); if(SUCCEEDED(resultReset)) { if(menuFont) menuFont->OnResetDevice(); if(spBody) spBody->OnResetDevice(); } return resultReset; } HRESULT __stdcall myEndScene(LPDIRECT3DDEVICE9 pDevice) { __asm nop; if(GetAsyncKeyState(VK_END)&1) ShowMenu = !ShowMenu; if(ShowMenu) { if(GetAsyncKeyState(VK_LEFT)&1) MyMenu[menuIndex].value-=1; if(GetAsyncKeyState(VK_RIGHT)&1) MyMenu[menuIndex].value+=1; if(GetAsyncKeyState(VK_DOWN)&1) menuIndex+=1; if(GetAsyncKeyState(VK_UP)&1) menuIndex-=1; if(menuIndex < 0) menuIndex = 0; if(menuIndex > (MaxChoice-1)) menuIndex = (MaxChoice-1); if(MyMenu[menuIndex].value < 0) MyMenu[menuIndex].value = 0; if(MyMenu[menuIndex].value > (MyMenu[menuIndex].maxchoice -1)) MyMenu[menuIndex].value = (MyMenu[menuIndex].maxchoice -1); } if(menuFont == NULL) D3DXCreateFontA(pDevice, 15, 0, FW_BOLD, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, ANTIALIASED_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Tahoma", &menuFont); if(txBody == NULL) D3DXCreateTextureFromFileInMemory(pDevice, &_MenuSprite, sizeof(_MenuSprite), &txBody); if(spBody == NULL) D3DXCreateSprite(pDevice, &spBody); if(ShowMenu == true && menuFont != NULL) { pBody.x=0.0f; pBody.y= 0.0f; pBody.z=0.0f; spBody->Begin(D3DXSPRITE_ALPHABLEND); spBody->Draw(txBody,NULL,NULL,&D3DXVECTOR3(10.0f,10.0f, 0.0f), 0xFFFFFFFF); spBody->End(); for(int i = 0; i < MaxChoice; i++) { if(i == menuIndex) { DrawString(menuFont,StartMenuTextX, StartMenuTextY+(i*MenuRank),0xFF00FF00, "%s",MyMenu[i].type); if(MyMenu[i].value == 0 && MyMenu[i].Number == false) { DrawString(menuFont,StartMenuValueX, StartMenuTextY+(i*MenuRank),0xFF00FF00, "Off"); } else if(MyMenu[i].value == 1 && MyMenu[i].Number == false) { DrawString(menuFont,StartMenuValueX, StartMenuTextY+(i*MenuRank),0xFF00FF00, "On"); } else { DrawString(menuFont,StartMenuValueX, StartMenuTextY+(i*MenuRank),0xFF00FF00, "%i",MyMenu[i].value); } } else { DrawString(menuFont,StartMenuTextX, StartMenuTextY+(i*MenuRank),0xFF0000FF, "%s",MyMenu[i].type); if(MyMenu[i].value == 0 && MyMenu[i].Number == false) { DrawString(menuFont,StartMenuValueX, StartMenuTextY+(i*MenuRank),0xFF0000FF, "Off"); } else if(MyMenu[i].value == 1 && MyMenu[i].Number == false) { DrawString(menuFont,StartMenuValueX, StartMenuTextY+(i*MenuRank),0xFF0000FF, "On"); } else { DrawString(menuFont,StartMenuValueX, StartMenuTextY+(i*MenuRank),0xFF0000FF, "%i",MyMenu[i].value); } } } DrawString(menuFont,90, 180,0xFF0000FF, "DEMO D3DMENU"); DrawString(menuFont,85, 480,0xFF0000FF, "[End] Show/Hide"); } return pEndScene(pDevice); } VOID Dx9Hook() { DWORD hD3D = NULL; DWORD * VTable; while (!hD3D) hD3D = (DWORD)GetModuleHandle("d3d9.dll"); DWORD PPPDevice = FindPattern(hD3D, 0x128000, (PBYTE)"\xC7\x06\x00\x00\x00\x00\x89\x86\x00\x00\x00\x00\x89\x86", "xx????xx????xx"); memcpy( &VTable, (VOID *)(PPPDevice + 2), 4); pEndScene = (HRESULT(__stdcall*)(LPDIRECT3DDEVICE9))VTable[42]; pReset = (HRESULT(__stdcall*)(LPDIRECT3DDEVICE9,D3DPRESENT_PARAMETERS *))VTable[16]; DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach(&(PVOID&)pEndScene, myEndScene); DetourAttach(&(PVOID&)pReset, myReset); DetourTransactionCommit(); } BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { if( fdwReason == 1 ) { CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)Dx9Hook, NULL, NULL, NULL); return TRUE; } return FALSE; } Source 3 Transforma a Imagem Em Array Of Byte: #pragma once #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <stdio.h> #include <tchar.h> #include <stdlib.h> FILE* myOpenFile(char* FilePath) { FILE* DLL = fopen(FilePath, "rb"); return DLL; } long FindSize(FILE* File) { long size; fseek(File, 0, SEEK_END); size = ftell(File); fseek(File, 0, SEEK_SET); return size; } void* AllocateMemory(long size) { void* allocation = malloc(size); return allocation; } void CopyFileContents(void* DestinationBuffer, size_t Count, FILE* File) { fread(DestinationBuffer, 1, Count, File); } void Dump(char* FullPath, char* FullDumpPath) { int i; FILE* file = myOpenFile(FullPath); long size = FindSize(file); BYTE* contents = (BYTE*)AllocateMemory(size); CopyFileContents(contents, size, file); //DLLcontents now holds all the DLL fclose(file); //make c code file of DLLcontents file = fopen(FullDumpPath, "w"); fprintf(file, "const BYTE _MenuSprite[%li] = { ", size); for (i=0;i<=size-2;i++)//-2 because 1.the last byte in the buffer is a null - not wanted 2. we dont want a spare comma at the end { //let's break after every 50 bytes if( i % 50 != 0) { fprintf(file, "0x%X, ", *(contents + i)); } else { fprintf(file, "0x%X, \n", *(contents + i)); } } fprintf(file, "0x%X };", *(contents + i)); fclose(file); //you now have the whole file in a byte buffer return; } int main() { Dump("c:\\onep.png","c:\\dump.txt"); return 0; }