TrainerGame

05/24/2016 20:49 Zero-Clock#1
create you trainer game in C Win32

main.cpp :
Code:
#include <windows.h>
//#include <WinBase.h>
#include <cstdio>
#include <tlhelp32.h>
#include <stdio.h>
#include <string.h>
#include <psapi.h>
#include <time.h>
#define PREMUTO -32767
#define N_Cheats 8 // If change
/* --------------------------------------------------------------------------------- */
int _WinAPI_PlaySound(void* Bsound, DWORD flag){
HINSTANCE hDll = LoadLibrary("winmm.dll");
FARPROC PID = GetProcAddress(HMODULE (hDll),"PlaySoundW");
typedef int (__stdcall * pICFUNC)(void *, void *, DWORD);
pICFUNC PlaySound;
PlaySound = pICFUNC(PID);
int Val = PlaySound(Bsound, GetModuleHandle(NULL), flag);
FreeLibrary(hDll);
return Val;
}
int Call_DLL_EmptyWorkingSet_Function(void)
{
    HINSTANCE hGetProcIDDLL = LoadLibrary("psapi.dll");
    FARPROC lpfnGetProcessID = GetProcAddress(HMODULE (hGetProcIDDLL),"EmptyWorkingSet");
    typedef int (__stdcall * pICFUNC)(long);
    pICFUNC MyFunction;
    MyFunction = pICFUNC(lpfnGetProcessID);
    int intMyReturnVal = MyFunction(-1);
    FreeLibrary(hGetProcIDDLL);
    return intMyReturnVal;
}
/* --------------------------------------------------------------------------------- */
void MsgBox(char *t,char *m,int n)
{
    MessageBox(0, m, t, n);
}
/* --------------------------------------------------------------------------------- */
typedef struct Cheat
{
    char NameCheat[200];
    char CodeCave[1024];
    char Modulename[100];
    char Andress[1024];
    char Value[100];
    int Noffset;
    char Offset[101][50];
    char Onop[101][3];
    char Snop[101][3];
    int AoBscanner;
    int AoBscanner_Adrss;
    int BaseAndress;
    int Freeze;
    int Gamecode;
    int CheatActive;
} t_Cheat;
/* --------------------------------------------------------------------------------- */

DWORD GetModuleBase_or_Size(DWORD dwProcessId, char * ModuleName, int X);
DWORD AoBscanner(HANDLE hProcess, int BaseAndress, Cheat * ZD, int P);
void drawButton(DRAWITEMSTRUCT *dis, HWND hwnd);
void CenterWindow(HWND hwndChild);
void Game_Box_Update(HWND hwnd, HWND hwndChild, Cheat * ZD, int i);
void Inizialized_Struct(Cheat * ZD);
BOOL GemeIsRun(char * Wind_or_exe_file);
void WriteMemory_Pointer_ON_OFF(Cheat * ZD, int i);
void GameCode_ON_OFF(Cheat * ZD, int i, int SET); // set ON/OFF Cheat !
void Work_Cheats_Engine(HWND hwnd, Cheat * ZD,char * Wind_or_exe_file);
void Set_State_Cheat(Cheat * ZD, int i, int k);
void CodeCave(Cheat * ZD, int i, int SET);

/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);
/* --------------------------------------------------------------------------------- */
t_Cheat ZC[N_Cheats];
char Wind_or_exe_file[]="Plants vs. Zombies"; // If change
UINT TimmerID = 0;
bool Auto_Trainer_Closed = false;
DWORD MEM_ALLOC_END[10];
DWORD My_Process_ID;
/* --------------------------------------------------------------------------------- */
/*  Make the class name into a global variable  */
char szClassName[] = "Trainer_By_ZeroClock"; // non change
HWND hwndstatic[5], hwndBut[2];
int F11_cheatactive = 0, Trainer_Is_off = 0;
/* --------------------------------------------------------------------------------- */
int WINAPI WinMain(HINSTANCE hThisInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpszArgument,
                   int nFunsterStil)
{
    Inizialized_Struct(ZC);
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    ZeroMemory(&messages,sizeof(MSG));
    WNDCLASSEX wincl;        /* Data structure for the windowclass */
    ZeroMemory(&wincl,sizeof(WNDCLASSEX));

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon(NULL, 0);
    wincl.hIconSm = LoadIcon(NULL, 0);
    wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default color as the background of the window */
    wincl.hbrBackground = (HBRUSH) GetStockObject(BLACK_BRUSH);

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx(WS_EX_TOPMOST | WS_EX_APPWINDOW, /* Extended possibilites for variation */
                          szClassName,              /* Classname */
                          "",                       /* Title Text */
                          WS_SYSMENU|WS_MINIMIZEBOX, //WS_EX_WINDOWEDGE,              /* default window */
                          CW_USEDEFAULT,           /* Windows decides the position */
                          CW_USEDEFAULT,           /* where the window ends up on the screen */
                          350,                     /* The programs width */
                          310,                     /* and height in pixels */
                          HWND_DESKTOP,            /* The window is a child-window to desktop */
                          NULL,                    /* No menu */
                          hThisInstance,           /* Program Instance handler */
                          NULL                     /* No Window Creation data */
                         );
    /* Make the window visible on the screen */
    ShowWindow(hwnd, nFunsterStil);
    CenterWindow(hwnd);
//SetWindowLong(hwnd, GWL_EXSTYLE,GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_WINDOWEDGE);

//EnableWindow(hwnd,false);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {

        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);

    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)  /* handle the messages */
    {
    case WM_CREATE:

        hwndstatic[0] = CreateWindow("static","",
                                     WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_NOHIDESEL|ES_LEFT,
                                     5, 5, 335, 210,
                                     hwnd, (HMENU)(501),
                                     (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
        hwndstatic[3] = CreateWindow("static","\n\nThis program was created with :\n\n" // If Canged
                                     "\n Author: By ZeroClock \n",                           WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_NOHIDESEL|ES_CENTER,
                                     5, 5, 335, 210,
                                     hwnd, (HMENU)(504),
                                     (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
        ShowWindow(hwndstatic[3], SW_HIDE);
        hwndstatic[4] = CreateWindow("static","\n\n< Cheats Created By >\n\n" // If Canged
                                     "Autor: ???? \n\n"
                                     "Email: ???? \n\n"
                                     "Trainer Version: ?.?.?.?",
                                     WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_NOHIDESEL|ES_CENTER,
                                     5, 5, 335, 210,
                                     hwnd, (HMENU)(505),
                                     (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
        ShowWindow(hwndstatic[4], SW_HIDE);
        Game_Box_Update(hwnd, hwndstatic[0], ZC, N_Cheats);
        hwndstatic[1] = CreateWindow("static","Game Is Not Running  !",
                                     WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_NOHIDESEL|ES_CENTER,
                                     5, 225, 332, 20,
                                     hwnd, (HMENU)(502),
                                     (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), NULL);

        hwndstatic[2] = CreateWindow("static","Game Is Running  !",
                                     WS_CHILD|WS_VISIBLE|WS_TABSTOP|ES_NOHIDESEL|ES_CENTER,
                                     5, 225, 332, 20,
                                     hwnd, (HMENU)(503),
                                     (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
        ShowWindow(hwndstatic[2], SW_HIDE);

        hwndBut[0] = CreateWindow("Button","About !",
                                  WS_CHILD|WS_VISIBLE|BN_PAINT|BS_OWNERDRAW|WS_BORDER|BS_PUSHBUTTON|BS_FLAT|BS_TEXT,
                                  5, 250, 165, 25,hwnd,
                                  (HMENU) 101,
                                  (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), NULL);

        hwndBut[1] = CreateWindow("Button","Info !",
                                  WS_CHILD|WS_VISIBLE|BN_PAINT|BS_OWNERDRAW|WS_BORDER|BS_PUSHBUTTON|BS_FLAT|BS_TEXT,
                                  172, 250, 165, 25,hwnd,
                                  (HMENU) 102,
                                  (HINSTANCE) GetWindowLong(hwnd, GWL_HINSTANCE), NULL);
        TimmerID = SetTimer(hwnd, 210, 1 *10 , NULL);
        break;
    case WM_TIMER:
         Work_Cheats_Engine(hwnd, ZC, Wind_or_exe_file);
        break;
    case WM_DRAWITEM:
    {
        DRAWITEMSTRUCT *dis = (DRAWITEMSTRUCT*)lParam;
        switch(dis->CtlID)
        {
        case 101:
            drawButton(dis, hwndBut[0]);
            break;
        case 102:
            drawButton(dis, hwndBut[1]);
            break;
        }
        return TRUE;
    }
    break;
    case WM_COMMAND:
        switch(LOWORD(wParam))
        {
        case  101:
            if(ShowWindow(hwndstatic[3], SW_SHOW) == 0)
            {
                ShowWindow(hwndstatic[0], SW_HIDE);
                ShowWindow(hwndstatic[4], SW_HIDE);
                SetWindowText(hwndBut[0],"<-- Return");
                EnableWindow(hwndBut[1],FALSE);
            }
            else
            {
                EnableWindow(hwndBut[1],TRUE);
                SetWindowText(hwndBut[0],"About !");
                ShowWindow(hwndstatic[0], SW_SHOW);
                ShowWindow(hwndstatic[3], SW_HIDE);
                ShowWindow(hwndstatic[4], SW_HIDE);
            }
            break;
        case  102:
            if(ShowWindow(hwndstatic[4], SW_SHOW) == 0)
            {
                ShowWindow(hwndstatic[0], SW_HIDE);
                ShowWindow(hwndstatic[3], SW_HIDE);
                SetWindowText(hwndBut[1],"<-- Return");
                EnableWindow(hwndBut[0],FALSE);
            }
            else
            {
                EnableWindow(hwndBut[0],TRUE);
                SetWindowText(hwndBut[1],"Info !");
                ShowWindow(hwndstatic[0], SW_SHOW);
                ShowWindow(hwndstatic[3], SW_HIDE);
                ShowWindow(hwndstatic[4], SW_HIDE);
            }
            break;
        }
        break;
    case WM_CTLCOLORSTATIC:
        for(int i=0; i<5; i++)
        {
            if((HWND)lParam == hwndstatic[i])
            {
                SetBkColor((HDC)wParam,(LPARAM) RGB(0,0,0));
                SetTextColor((HDC)wParam,(LPARAM) RGB(0,255,255)); // Celeste Text Color
                return (LRESULT)GetStockObject(BLACK_BRUSH);
            }
            if(i==0)
            {
                i=2;
            }
        }
        if((HWND)lParam == hwndstatic[1])
        {
            SetBkColor((HDC)wParam,(LPARAM) RGB(0,0,0));
            SetTextColor((HDC)wParam,(LPARAM) RGB(255,0,0)); // Red Text Color
            return (LRESULT)GetStockObject(BLACK_BRUSH);
        }
        if((HWND)lParam == hwndstatic[2])
        {
            SetBkColor((HDC)wParam,(LPARAM) RGB(0,0,0));
            SetTextColor((HDC)wParam,(LPARAM) RGB(0,255,0)); // Green Text Color
            return (LRESULT)GetStockObject(BLACK_BRUSH);
        }
        break;
    case WM_DESTROY:
        PostQuitMessage (0); /* send a WM_QUIT to the message queue */
        break;
    default: /* for messages that we don't deal with */
        return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}
/* --------------------------------------------------------------------------------- */
void drawButton(DRAWITEMSTRUCT *dis, HWND hwnd)
{
    RECT rc;
    GetClientRect(hwnd, &rc);
    SetBkMode(dis->hDC, TRANSPARENT);
    FillRect(dis->hDC, &rc, (HBRUSH) GetStockObject(BLACK_BRUSH));
    char buf[255];
    GetWindowText(hwnd, buf, 255);
    SetTextColor(dis->hDC, RGB(0,255,255));
    DrawText(dis->hDC, buf, strlen(buf), &rc, DT_CENTER|DT_VCENTER|DT_SINGLELINE);
}
/* --------------------------------------------------------------------------------- */
void CenterWindow(HWND hwndChild)
{
    RECT    rChild,  rWorkArea;
    int     wChild, hChild;
    int     xNew, yNew;
    BOOL    bResult;
    // Get the Height and Width of the child window
    GetWindowRect (hwndChild, &rChild);
    wChild = rChild.right - rChild.left;
    hChild = rChild.bottom - rChild.top;
    // Get the limits of the 'workarea'
    bResult = SystemParametersInfo(
                  SPI_GETWORKAREA,    // system parameter to query or set
                  sizeof(RECT),
                  &rWorkArea,
                  0);
    if (!bResult)
    {
        rWorkArea.left = rWorkArea.top = 0;
        rWorkArea.right = GetSystemMetrics(SM_CXSCREEN);
        rWorkArea.bottom = GetSystemMetrics(SM_CYSCREEN);
    }
    // Calculate new X position, then adjust for workarea
    xNew = (rWorkArea.right /2) - wChild/2;
    // Calculate new Y position, then adjust for workarea
    yNew = (rWorkArea.bottom/2) - hChild/2;
    // Set it, and return
    SetWindowPos(hwndChild, NULL, xNew, yNew, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
}
/* --------------------------------------------------------------------------------- */
void Game_Box_Update(HWND hwnds, HWND hwndChild, Cheat * ZD, int i)
{
    char XX[2048] = "";
    char str[10] = "";
    strcat(XX,"Plants vs. Zombies - Trainer+"); // If Canged
    itoa(i, str, 10);
    strcat(XX,str);
    strcat(XX,"\n\n");
    if(hwnds != (HWND) -1)
    {
        SetWindowText(hwnds,XX);
    }
    for(int j=0; j<i; j++)
    {
        itoa((j+1), str, 10);
        strcat(XX,"F");
        strcat(XX,str);
        strcat(XX," = ");
        strcat(XX,ZD[j].NameCheat);
        strcat(XX," [ ");
        if(ZD[j].CheatActive == 0)
        {
            strcat(XX,"OFF");
        }
        else
        {
            strcat(XX,"ON");
        }
        strcat(XX," ]\n");
    } // end F1 To F10
    strcat(XX,"F11 = Set All Cheats - { ON / OFF }");
    strcat(XX," - [ ");
    if(F11_cheatactive == 0)
    {
        strcat(XX,"OFF");
    }
    else
    {
        strcat(XX,"ON");
    }
    strcat(XX," ]\n");
    SetWindowText(hwndChild,XX);
}
/* --------------------------------------------------------------------------------- */
void Inizialized_Struct(Cheat * ZD)
{
// If change
// auto it used for(int i=0;i<10;i++){
//for(int i=0;i<10;i++){

    strcpy(ZD[0].NameCheat,"Cards Unlocked");
    strcpy(ZD[0].Modulename,""); // PlantsVsZombies.exe
    strcpy(ZD[0].Value,"");
    strcpy(ZD[0].Andress,"8B47243B"); // 91E4F
    ZD[0].Noffset = 3;
    strcpy(ZD[0].Offset[0],"");
    strcpy(ZD[0].Onop[0],"8B");
    strcpy(ZD[0].Onop[1],"47");
    strcpy(ZD[0].Onop[2],"24");
    strcpy(ZD[0].Snop[0],"");
    ZD[0].AoBscanner_Adrss = 0;
    ZD[0].AoBscanner = 1;
    ZD[0].BaseAndress = 1;
    ZD[0].Freeze = 0;
    ZD[0].Gamecode = 1;
    ZD[0].CheatActive = 0; // False

    strcpy(ZD[1].NameCheat,"Freeze Sun To 9999");
    strcpy(ZD[1].Modulename,"PlantsVsZombies.exe");
    strcpy(ZD[1].Value,"9999");
//strcpy(ZD[1].Andress,"00329728");
    strcpy(ZD[1].Andress,"1E846");
    strcpy(ZD[1].CodeCave,"C7877855000006270000");
    ZD[1].Noffset = 6;
    strcpy(ZD[1].Offset[0],"");
    strcpy(ZD[1].Onop[0],"89");
    strcpy(ZD[1].Onop[1],"B7");
    strcpy(ZD[1].Onop[2],"78");
    strcpy(ZD[1].Onop[3],"55");
    strcpy(ZD[1].Onop[4],"00");
    strcpy(ZD[1].Onop[5],"00");
    strcpy(ZD[1].Snop[0],"");
    ZD[0].AoBscanner_Adrss = 0;
    ZD[1].AoBscanner = 1;
    ZD[1].BaseAndress = 1;
    ZD[1].Freeze = 0;
    ZD[1].Gamecode = 1;
    ZD[1].CheatActive = 0; // False

    strcpy(ZD[2].NameCheat,"Not Decrease Money");
    strcpy(ZD[2].Modulename,"");
    strcpy(ZD[2].Value,"");
    strcpy(ZD[2].Andress,"976AC");
    ZD[2].Noffset = 1;
    strcpy(ZD[2].Offset[0],"");
    strcpy(ZD[2].Onop[0],"50");
    strcpy(ZD[2].Snop[0],"");
    ZD[2].BaseAndress = 1;
    ZD[2].Freeze = 0;
    ZD[2].Gamecode = 1;
    ZD[2].CheatActive = 0; // False

    strcpy(ZD[3].NameCheat,"Not Decrease Fertilizer tree of wisdom");
    strcpy(ZD[3].Modulename,"");
    strcpy(ZD[3].Value,"");
    strcpy(ZD[3].Andress,"3018D");
    ZD[3].Noffset = 6;
    strcpy(ZD[3].Offset[0],"");
    strcpy(ZD[3].Onop[0],"FF");
    strcpy(ZD[3].Onop[1],"88");
    strcpy(ZD[3].Onop[2],"58");
    strcpy(ZD[3].Onop[3],"02");
    strcpy(ZD[3].Onop[4],"00");
    strcpy(ZD[3].Onop[5],"00");
    strcpy(ZD[3].Snop[0],"");
    ZD[3].BaseAndress = 1;
    ZD[3].Freeze = 0;
    ZD[3].Gamecode = 1;
    ZD[3].CheatActive = 0; // False

    strcpy(ZD[4].NameCheat,"Not Decrease Chocolate");
    strcpy(ZD[4].Modulename,"PlantsVsZombies.exe");
    strcpy(ZD[4].Value,"");
    strcpy(ZD[4].Andress,"1295C7");
    ZD[4].Noffset = 6;
    strcpy(ZD[4].Offset[0],"");
    strcpy(ZD[4].Onop[0],"FF");
    strcpy(ZD[4].Onop[1],"88");
    strcpy(ZD[4].Onop[2],"50");
    strcpy(ZD[4].Onop[3],"02");
    strcpy(ZD[4].Onop[4],"00");
    strcpy(ZD[4].Onop[5],"00");
    strcpy(ZD[4].Snop[0],"");
    ZD[4].BaseAndress = 1;
    ZD[4].Freeze = 0;
    ZD[4].Gamecode = 1;
    ZD[4].CheatActive = 0; // False

    strcpy(ZD[5].NameCheat,"Not Decrease Fertilizer");
    strcpy(ZD[5].Modulename,"");
    strcpy(ZD[5].Value,"");
    strcpy(ZD[5].Andress,"12992B");
    ZD[5].Noffset = 6;
    strcpy(ZD[5].Offset[0],"");
    strcpy(ZD[5].Onop[0],"FF");
    strcpy(ZD[5].Onop[1],"88");
    strcpy(ZD[5].Onop[2],"20");
    strcpy(ZD[5].Onop[3],"02");
    strcpy(ZD[5].Onop[4],"00");
    strcpy(ZD[5].Onop[5],"00");
    strcpy(ZD[5].Snop[0],"");
    ZD[5].BaseAndress = 1;
    ZD[5].Freeze = 0;
    ZD[5].Gamecode = 1;
    ZD[5].CheatActive = 0; // False

    strcpy(ZD[6].NameCheat,"Not Decrease Spray");
    strcpy(ZD[6].Modulename,"");
    strcpy(ZD[6].Value,"");
    strcpy(ZD[6].Andress,"129A23");
    ZD[6].Noffset = 6;
    strcpy(ZD[6].Offset[0],"");
    strcpy(ZD[6].Onop[0],"FF");
    strcpy(ZD[6].Onop[1],"88");
    strcpy(ZD[6].Onop[2],"24");
    strcpy(ZD[6].Onop[3],"02");
    strcpy(ZD[6].Onop[4],"00");
    strcpy(ZD[6].Onop[5],"00");
    strcpy(ZD[6].Snop[0],"");
    ZD[6].BaseAndress = 1;
    ZD[6].Freeze = 0;
    ZD[6].Gamecode = 1;
    ZD[6].CheatActive = 0; // False

    strcpy(ZD[7].NameCheat,"Not Plant's Damage !");
    strcpy(ZD[7].Modulename,"");
    strcpy(ZD[7].Value,"");
    strcpy(ZD[7].Andress,"140680");
    ZD[7].Noffset = 4;
    strcpy(ZD[7].Offset[0],"");
    strcpy(ZD[7].Onop[0],"83");
    strcpy(ZD[7].Onop[1],"46");
    strcpy(ZD[7].Onop[2],"40");
    strcpy(ZD[7].Onop[3],"FC");
    strcpy(ZD[7].Snop[0],"");
    ZD[7].BaseAndress = 1;
    ZD[7].Freeze = 0;
    ZD[7].Gamecode = 1;
    ZD[7].CheatActive = 0; // False

//}
    if(true == true)
    {
        UINT X_X = WinExec("PlantsVsZombies.exe", SW_SHOW); // Game AutoRun
        if(X_X == 0)
        {
            MsgBox("Error...","The system is out of memory or resources.",16+4096);
        }
        if(X_X == ERROR_FILE_NOT_FOUND)
        {
            MsgBox("Error...","The specified FILE was not found.\n\nFILE: PlantsVsZombies.exe",16+4096);
        }
        else
        {
            Auto_Trainer_Closed = true;    // End If change
        }
    }
}
/* --------------------------------------------------------------------------------- */
void Work_Cheats_Engine(HWND hwnd, Cheat * ZD,char * Wind_or_exe_file)
{
    Call_DLL_EmptyWorkingSet_Function();
    if(GemeIsRun(Wind_or_exe_file) == true)
    {
        if(Trainer_Is_off == 0)
        {
            ShowWindow(hwndstatic[1], SW_HIDE); // Game Is Not Running !
            ShowWindow(hwndstatic[2], SW_SHOW); // Game Is Running !
            Trainer_Is_off = 1;
        }
// auto code press key ...
        for(int i=0; i<N_Cheats; i++)
        {
            if((ZD[i].CheatActive != 0)&&(ZD[i].Gamecode == 0)&&(ZD[i].Freeze != 0))
            {
                WriteMemory_Pointer_ON_OFF(ZD, i);  // On Freeze
            }
        }
//Logga i tasti F1 a F11
        if(GetAsyncKeyState(VK_F1)==PREMUTO)
        {
            Set_State_Cheat(ZD,0,-1);
        }
        if(GetAsyncKeyState(VK_F2)==PREMUTO)
        {
            Set_State_Cheat(ZD,1,-1);
        }
        if(GetAsyncKeyState(VK_F3)==PREMUTO)
        {
            Set_State_Cheat(ZD,2,-1);
        }
        if(GetAsyncKeyState(VK_F4)==PREMUTO)
        {
            Set_State_Cheat(ZD,3,-1);
        }
        if(GetAsyncKeyState(VK_F5)==PREMUTO)
        {
            Set_State_Cheat(ZD,4,-1);
        }
        if(GetAsyncKeyState(VK_F6)==PREMUTO)
        {
            Set_State_Cheat(ZD,5,-1);
        }
        if(GetAsyncKeyState(VK_F7)==PREMUTO)
        {
            Set_State_Cheat(ZD,6,-1);
        }
        if(GetAsyncKeyState(VK_F8)==PREMUTO)
        {
            Set_State_Cheat(ZD,7,-1);
        }
        if(GetAsyncKeyState(VK_F9)==PREMUTO)
        {
            Set_State_Cheat(ZD,8,-1);
        }
        if(GetAsyncKeyState(VK_F10)==PREMUTO)
        {
            Set_State_Cheat(ZD,9,-1);
        }
        if(GetAsyncKeyState(VK_F11)==PREMUTO)
        {
            if(F11_cheatactive == 0)
            {
                F11_cheatactive = 1;
            }
            else
            {
                F11_cheatactive = 0;
            }
            for(int i=0; i<N_Cheats; i++)
            {
                Set_State_Cheat(ZD,i,F11_cheatactive);
            }
        }
    }
    else
    {
        if(Trainer_Is_off == 1)
        {
            for(int i=0; i<N_Cheats; i++)
            {
                F11_cheatactive = 0;
                Set_State_Cheat(ZD,i,F11_cheatactive);
            }
            Trainer_Is_off = 0;
            ShowWindow(hwndstatic[2], SW_HIDE); // Game Is Running !
            ShowWindow(hwndstatic[1], SW_SHOW); // Game Is Not Running !
            if(Auto_Trainer_Closed == true)
            {
                SendMessage(hwnd, WM_SYSCOMMAND, SC_CLOSE, 0);    // if canged
            }
        }
    }
}
/* --------------------------------------------------------------------------------- */
void Set_State_Cheat(Cheat * ZD, int i, int k)
{
    if(k == 1)
    {
        ZD[i].CheatActive = 0;
        _WinAPI_PlaySound(MAKEINTRESOURCE(300), 0x00040005);
    }
    if(k == 0)
    {
        ZD[i].CheatActive = 1;
    }
    if(ZD[i].CheatActive == 0)
    {
        ZD[i].CheatActive = 1;
        if(ZD[i].Gamecode != 0)
        {
            GameCode_ON_OFF(ZD, i, 0); // On
        }
        else
        {
            WriteMemory_Pointer_ON_OFF(ZD, i); // On
        }
    }
    else
    {
        ZD[i].CheatActive = 0;
        if(ZD[i].Gamecode != 0)
        {
            GameCode_ON_OFF(ZD, i, 1); // Off
        }
    }
    Game_Box_Update((HWND) -1, hwndstatic[0], ZC, N_Cheats);
}
/* --------------------------------------------------------------------------------- */
/*
void wait(int seconds){
Sleep(seconds * 10);
}*/
/* Returns a pointer to a PROCESSENTRY32 structure given the process name */
PROCESSENTRY32 *GetProcessInfo(char *szExeFile)
{
    PROCESSENTRY32 *pe32 = new PROCESSENTRY32 [sizeof(PROCESSENTRY32)];
    HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if(hSnapshot == INVALID_HANDLE_VALUE)
        CloseHandle(hSnapshot);
        delete [] pe32;
        pe32 = NULL;
    if(!Process32First(hSnapshot, pe32))
    {
        CloseHandle(hSnapshot);
        delete [] pe32;
        pe32 = NULL;
        printf("2");
        return NULL;
    }
    while(Process32Next(hSnapshot, pe32))
    {
        if(strcmp(szExeFile, pe32->szExeFile) == 0)
        {
            CloseHandle(hSnapshot);
            printf("3");
            return pe32;
        }
    }
    delete [] pe32;
    pe32 = NULL;
    printf("4");
    return NULL;
}

DWORD GetModuleBase_or_Size(DWORD dwProcessId, char * ModuleName, int X){
    MODULEENTRY32 lpModuleEntry; // ={0}
    HANDLE hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwProcessId); // TH32CS_SNAPMODULE | TH32CS_SNAPMODULE32
    if(!hSnapShot)
    {
        CloseHandle(hSnapShot);
        return 0;
    }
    lpModuleEntry.dwSize = sizeof(MODULEENTRY32);
    BOOL bModule = Module32First(hSnapShot, &lpModuleEntry);
    while(bModule)
    {
        if(lpModuleEntry.th32ProcessID == dwProcessId)
        {
            if(stricmp(ModuleName,"") != 0)
            {
                if(stricmp(lpModuleEntry.szModule,ModuleName) == 0)
                {
                    CloseHandle(hSnapShot);
                    if(X == 0){
                    return (DWORD)lpModuleEntry.modBaseAddr;
                    }else{
                    return (DWORD)lpModuleEntry.modBaseSize;
                    }
                }
            }
            if(stricmp(ModuleName,"") == 0)
            {
                CloseHandle(hSnapShot);
                if(X == 0){
                return (DWORD)lpModuleEntry.modBaseAddr;
                }else{
                return (DWORD)lpModuleEntry.modBaseSize;
                }
            }
        }
        bModule = Module32Next(hSnapShot, &lpModuleEntry);
    }
    CloseHandle(hSnapShot);
    return 0;
}

HANDLE xopenx(char *tit, int * BaseAndress, char * ModuleNames)
{
    HWND hwnd = 0;
    DWORD proc_id = 0;
    hwnd = FindWindow(0, tit);
    if(hwnd)
    {
        GetWindowThreadProcessId(hwnd, &proc_id);
    }
    else
    {
        PROCESSENTRY32 *PE32 = GetProcessInfo(tit);
        if(PE32 != NULL)
        {
            proc_id = PE32->th32ProcessID;
        }
    }
    if(!proc_id)
    {
        return NULL;
    }
    HANDLE hProcess;
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, proc_id);
    if(!hProcess)
    {
        CloseHandle(hProcess);
        return NULL;
    }
    else
    {
        *BaseAndress = GetModuleBase_or_Size(proc_id, ModuleNames, 0); // Return BaseAndress From ID Process Or Modules
         My_Process_ID = proc_id;
        return hProcess;
    }
}


BOOL GemeIsRun(char * Wind_or_exe_file)
{
    int BaseAndress = 0;
    HANDLE hProcess = xopenx(Wind_or_exe_file,&BaseAndress,"");
    if(!hProcess)
    {
        CloseHandle(hProcess);
        return FALSE;
    }
    else
    {
        CloseHandle(hProcess);
        return TRUE;
    }
}


void WriteMemory_Pointer_ON_OFF(Cheat * ZD, int i)
{
    char msg[200];
    int BaseAndress,Andress;
    HANDLE hProcess = xopenx(Wind_or_exe_file,&BaseAndress,ZD[i].Modulename);
    strcpy(msg, ZD[i].Andress);
    sscanf(msg,"%x", &Andress);
    if(ZD[i].BaseAndress == 0)
    {
        BaseAndress=Andress;
    }
    if(ZD[i].BaseAndress == 1)
    {
        BaseAndress+=Andress;
    }
    int Value=atoi(ZD[i].Value),Va;
    DWORD BAndr=BaseAndress;
    for(int I=0; I<(ZD[i].Noffset); I++)
    {
        ReadProcessMemory(hProcess, (LPVOID) BAndr, (LPVOID) &BAndr, sizeof(DWORD), NULL);
        strcpy(msg, ZD[i].Offset[I]);
        sscanf(msg,"%x", &Va);
        BAndr+=Va;
    }
    WriteProcessMemory(hProcess, (LPVOID) BAndr, &Value, sizeof(Value), NULL);
}

void GameCode_ON_OFF(Cheat * ZD, int i, int SET)
{
    char msg[200];
    int BaseAndress,Andress,B,BAndr;
    HANDLE hProcess = xopenx(Wind_or_exe_file,&BaseAndress,ZD[i].Modulename);

if(ZD[i].AoBscanner == 1 && ZD[i].AoBscanner_Adrss == 0){
    BAndr = AoBscanner(hProcess, BaseAndress, ZD, i);
    ZD[i].AoBscanner_Adrss = BAndr;
    printf("Anddress: %.8x \n\n", BAndr);
    system("pause");
}

/*
    strcpy(msg, ZD[i].Andress);
    sscanf(msg,"%x", &Andress);
    if(ZD[i].BaseAndress == 0)
    {
        BaseAndress=Andress;
    }
    if(ZD[i].BaseAndress == 1)
    {
        BaseAndress+=Andress;
    }
    BAndr = BaseAndress;
    //CodeCave(ZD, i, SET);
*/
    BYTE Nop[(ZD[i].Noffset)];
    for(int I=0;I<(ZD[i].Noffset);I++){
    if(SET == 1){
    strcpy(msg, ZD[i].Onop[I]);
    sscanf(msg,"%x", &B);
    Nop[I]=B;}
    if(SET == 0){Nop[I] = 0x90;}
    }
    WriteProcessMemory(hProcess, (LPVOID) BAndr, &Nop, sizeof(Nop), NULL);
    CloseHandle(hProcess);
}

DWORD AoBscanner(HANDLE hProcess, int BaseAndress, Cheat * ZD, int P){
char msg[1024];
int Andress;
strcpy(msg, ZD[P].Andress);
sscanf(msg,"%x", &Andress);
DWORD B;
int lx = strlen(ZD[P].Andress);
BYTE Nop[(lx/2)];
char MsgX[3];
int ix=0;
for(int I=0; I<(lx/2); I++){
strncpy(MsgX,(msg+ix),2);
sscanf(MsgX,"%x", &B);
Nop[I]=B;
ix+=2;
}
// ----------------------------------------------------------------------------->
int Size_Step = 9216, k = 0, a = 0;
BYTE* memdump = (BYTE*) calloc(Size_Step, sizeof(BYTE));
DWORD i, IAddr = 0x00000000, searchsize = 0x7FFFFFFF;
//if(ZD[P].BaseAndress != 0){ IAddr = (DWORD)(BaseAndress); }
//if(stricmp(ZD[P].Modulename,"") != 0){ searchsize = GetModuleBase_or_Size(My_Process_ID, ZD[P].Modulename,1); }
for(i = IAddr; i < searchsize; i+=(DWORD)(Size_Step)){
ReadProcessMemory(hProcess, (LPVOID) i, memdump, (Size_Step), NULL);
for(k = 0; k < Size_Step; k++){
if(memdump[k] == Nop[a]){
//printf("Addr: %.8X | Byte: %.2X | AoB: %.2X - %d\n\n", (i+(DWORD)k), memdump[k], Nop[a], (lx/2));
if(a == (lx/2) -1){
return (i + (DWORD)k - ((lx/2) -1));
}
a++;
}else{
a = 0;
}}}
return 0;
}

void CodeCave(Cheat * ZD, int i, int SET)
{
    char msg[1024];
    int Andress, BaseAndress, Size_CodeCave_JMP = (strlen(ZD[i].CodeCave)/2);
    DWORD Mem_Alloc, CodeJmp, B;
    HANDLE hProcess = xopenx(Wind_or_exe_file,&BaseAndress,ZD[i].Modulename);

    strcpy(msg, ZD[i].Andress);
    sscanf(msg,"%x", &Andress);
    if(ZD[i].BaseAndress == 0)
    {
        BaseAndress=Andress;
    }
    if(ZD[i].BaseAndress == 1)
    {
        BaseAndress+=Andress;
    }
    DWORD BAndr = BaseAndress;
    if( SET == 0 )
    {

if(ZD[i].AoBscanner == 1 && ZD[i].AoBscanner_Adrss == 0){
BAndr = AoBscanner(hProcess, BaseAndress, ZD, i);
ZD[i].AoBscanner_Adrss = BAndr;
}
if(ZD[i].AoBscanner == 1 && ZD[i].AoBscanner_Adrss != 0){
BAndr = ZD[i].AoBscanner_Adrss;
}

        Mem_Alloc = (DWORD) VirtualAllocEx(hProcess, NULL, (Size_CodeCave_JMP+10), 0x1000, 0x40);
        /* salto di andata */
        CodeJmp = ( Mem_Alloc - BAndr - (DWORD)(5));
        wsprintf(msg, "%.8x", CodeJmp);
        strcat(msg,"E9");
        int lx = strlen(msg);
//printf("Adr:%.8x Mall:%.8x\n%s - %d\nJMP:%d\n\n", BAndr, Mem_Alloc, msg, lx, Size_CodeCave_JMP);

        BYTE Nop[(ZD[i].Noffset)];
        int lz = (lx/2);
        char MsgX[3];
        int ix=2;
        for(int I=0; I<(ZD[i].Noffset); I++)
        {
            strncpy(MsgX,((msg+lx))-(ix),2);
            sscanf(MsgX,"%x", &B);
//printf("%d - %s\n", I, MsgX);
//system("pause");
            if( I < lz )
            {
                Nop[I]=B;
            }
            else
            {
                Nop[I] = 0x90;
            }
            ix+=2;
        }
        /*
        for(int I=0; I<(ZD[i].Noffset); I++){
        printf("%d - %x\n", I, Nop[I]);
        }
        printf("\n\n");
        system("pause");
        */
        WriteProcessMemory(hProcess, (LPVOID) BAndr, &Nop, sizeof(Nop), NULL);

        /* Scrivi CodeCave */
        BYTE Ncc[Size_CodeCave_JMP];
        strcpy(msg, ZD[i].CodeCave);
        lx = strlen(msg);
//printf("= %s\n", msg);
        ix=0;
        for(int I=0; I<(Size_CodeCave_JMP); I++)
        {
            strncpy(MsgX,(msg+ix),2);
            sscanf(MsgX,"%x", &B);
//printf("1:: %d - %s\n", I, MsgX);
            Ncc[I]=B;
            ix+=2;
        }
        /*
        for(int I=0; I<(Size_CodeCave_JMP); I++){
        printf("%d - %.2x :", I, Ncc[I]);
        }
        printf("\n\n");
        system("pause");
        */
        WriteProcessMemory(hProcess, (LPVOID) (Mem_Alloc), &Ncc, sizeof(Ncc), NULL);

        /* salto di ritorno */
        CodeJmp = BAndr - Mem_Alloc - ((Size_CodeCave_JMP)-1);
        wsprintf(msg, "%.8x", CodeJmp);
        strcat(msg,"E9");
        lx = strlen(msg);
//printf("Adr:%.8x\n%s - %d\n\n", (Mem_Alloc+(Size_CodeCave_JMP)), msg, lx);
//system("pause");
        BYTE Nope[lx+1];
        lz = (lx/2);
        ix=2;
        for(int I=0; I<(lz); I++)
        {
            strncpy(MsgX,((msg+lx)+sizeof(4))-(ix+sizeof(4)),2);
            sscanf(MsgX,"%x", &B);
//printf("%d - %s\n", I, MsgX);
            Nope[I]=B;
            ix+=2;
        }
        WriteProcessMemory(hProcess, (LPVOID) (Mem_Alloc+(Size_CodeCave_JMP)), &Nope, sizeof(Nope), NULL);
//system("pause");
        MEM_ALLOC_END[i] = (Mem_Alloc+(Size_CodeCave_JMP)+10);
    }
    else
    {
        BYTE Nopr[(ZD[i].Noffset)];
        for(int I=0; I<(ZD[i].Noffset); I++)
        {
            strcpy(msg, ZD[i].Onop[I]);
            sscanf(msg,"%x", &B);
            Nopr[I]=B;
        }
        WriteProcessMemory(hProcess, (LPVOID) BAndr, &Nopr, sizeof(Nopr), NULL);
        VirtualFreeEx(hProcess, (void*)MEM_ALLOC_END[i], 0, 0x4000);
    }
}
DEV file myproject.rc :
Code:
/* THIS FILE WILL BE OVERWRITTEN BY DEV-C++ */
/* DO NOT EDIT! */

A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "Trainer.ico"

IDR_Sound1 300 "Activated.wav"
IDR_Sound2 301 "Disactived.wav"
06/09/2016 03:35 Zero-Clock#2
increased the speed in the search
added support for the mask { AA??CC????FF }

Code:
Code:
DWORD AoBscanner(HANDLE hProcess, int BaseAndress, Cheat * ZD, int P){ 
char Mask[] = "??"; 
char MsgX[3], msg[2048]; 
DWORD64 B; 
strcpy(msg, ZD[P].Andress); 
int ix=0, lx = ( strlen( ZD[P].Andress ) /2); 
bool MaskOp[lx]; 
BYTE Nop[lx]; 
for(int I=0; I<lx; I++){ 
    strncpy(MsgX,(msg+ix),2); 
    if( strcmp(MsgX, Mask) == 0 ){ 
        MaskOp[I] = true; 
    }else{ 
        MaskOp[I] = false; 
    } 
    sscanf(MsgX,"%x", &B); 
    Nop[I]=B; 
    ix+=2; 
} 
// -----------------------------------------------------------------------------> 
int Size_Step = 51200, k = 0, a = 0, bR, plen = lx; 
BYTE* memdump = (BYTE*) calloc(Size_Step, sizeof(BYTE)); 
DWORD i, IAddr = 0x00000000, searchsize = 0x7FFFFFFF; 
for(i = IAddr; i < searchsize; i+= (DWORD)Size_Step){ 
    bool g = ReadProcessMemory(hProcess, (LPVOID) i, memdump, Size_Step, (PDWORD)&bR); 
    if(g != 0 && bR >= plen){ 
        for(k = 0; k < bR; k++){ 
            if( (memdump[k] == Nop[a]) || (MaskOp[a] == true) ){ 

                if(a == (plen -1)){ 
                    return (i + (DWORD)k - (plen -1)); 
                } 
                a++; 
            }else{ 
                a = 0; 
            } 
        } 
        i = (i - (DWORD)(plen +1)); 
    } 
} 
return 0; 
}
08/16/2016 22:42 atom0s#3
You shouldn't use a static size like 51200 to read memory and scan for data within in. If you need to break things into parts like that, use VirtualQuery/VirtualQueryEx to step the pages of memory. Dump the full page, scan within it, then continue on to the next until the signature is found. It'll be a lot faster, more efficient, and less prone to failure if the signature lies between the bounds of your static size of 51200.