Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Open-source чит для "Сапера" (https://forum.antichat.xyz/showthread.php?t=198383)

ntldr 22.04.2010 20:58

Open-source чит для "Сапера"
 
PHP код:

#include <windows.h>
#include <conio.h>
#include <stdio.h>

#define STRUCT_BASE 0x1005330  //VA структуры в процессе сапера, в разных билдах винды может быть по разному.

#define OBJECT_NONE 0x0F    //Разные объекты на минном поле
#define OBJECT_BORDER 0x10 //граница поля
#define OBJECT_OPEN 0x40 //открытая пустая клетка
#define OBJECT_MINE_E 0x8A  //Раскрытая мина
#define OBJECT_MINE 0x8F //Скрытая мина


typedef struct _MINEINFO {   //Структура данных о минном поле
    
DWORD numOfMines;  //кол-во мин
    
DWORD width;  //Ширина поля
    
DWORD height//Высота поля
    
DWORD reserved// :confused: 
    
BYTE field[27][32];  //Массив мин
MINEINFO,*PMINEINFO;


int main()
{
    
DWORD pid,buf,op;
    
DWORD addr STRUCT_BASE;
    
GetWindowThreadProcessId(FindWindow(NULL,"Сапер"),&pid); //Определяем PID по хендлу окна сапера
    
HANDLE hproc OpenProcess(PROCESS_VM_READ,NULL,pid); //Открываем процесс на чтение
    
if(!hproc)
    {
        
printf("Can't open process %d! Error %d!",pid,GetLastError());
        
_getch();
        return -
1;
    }
    
PMINEINFO localfield;
    
localfield=(PMINEINFO)malloc(sizeof(MINEINFO)); //динамически выделяем память под массив. Можно было и статически, но я поздно это понял и решил не переделывать
     
    
ReadProcessMemory(hproc,(LPCVOID)addr,localfield,sizeof(MINEINFO),&buf); //Копируем структуру к себе

    
int counter 0//Счетчик смещения в массиве
    
    
for(int j=0;j<localfield->height+2;j++)//цикл рисует минное поле в консоли
    
{
        for(
int i=0;i<localfield->width+2;i++)
        {
            switch(
localfield->field[j][i])
            {
                case 
OBJECT_OPEN:printf("-");break;
                case 
OBJECT_NONE:printf("-");break;
                case 
OBJECT_BORDER:printf("0");break;
                case 
OBJECT_MINE:printf("*");break;
                case 
OBJECT_MINE_E:printf("X");break;
                default:if((
localfield->field[j][i] & 0x40) == 0x40)//Если не объект минного поля и взведен 0х40, значит это цифра.
                            
printf("%d",localfield->field[j][i]&0x3f);
                        else
                            
printf("?",localfield->field[j][i]); //Мало ли что
                    
break;
            }
            
//printf(" %.2X ",localfield->field[j][i]);
            
counter++;
        }
        
printf("\r\n");
    }
    
_getch();
    return 
0;


Соответственно при запущенном сапере запустить чит, выведет положение всех мин, и других объектов, может быть кому-то пригодится.

http://dl.dropbox.com/u/3104173/pwnmine.rar - проект VS2008

http://dl.dropbox.com/u/3104173/pwnmine.exe - бинарник

Код под ANSI.

=Zeus= 23.04.2010 15:57

Ха-ха )) Забавно. Все работает на ура.
А почему массив мин [27]на[32] ?

Откуда вообще такая идея с сапером? :)

ntldr 23.04.2010 16:18

Цитата:

Сообщение от =Zeus=
Ха-ха )) Забавно. Все работает на ура.
А почему массив мин [27]на[32] ?

Откуда вообще такая идея с сапером? :)

Ну массив я определил через отладчик особенности заполнения. А идея возникла от нечего делать

naqnaq 23.04.2010 16:20

здорово
...на очереди пасьянс Косынка :D

ShkiperLol 23.04.2010 17:16

Пойдет

cheater_man 23.04.2010 19:12

Как узнал адреса не раскрытых мин?

gisTy 23.04.2010 19:43

Цитата:

Как узнал адреса не раскрытых мин?
я думаю сдампил память и посмотрел что да как там

cheater_man 23.04.2010 20:32

Цитата:

Сообщение от gisTy
я думаю сдампил память и посмотрел что да как там

:D это да :D
Вот только как?

ntldr 23.04.2010 20:36

olly debugger


Время: 01:24