Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Как написать бота с нуля [Borland C++ Builder 6]

-

Разработка ПО для Perfect World

- Бюро разработчиков Zhyk.Ru: создание ботов, снифферов и прочих программ для Perfect World

Ответ
 
Опции темы
Старый 27.12.2014, 15:12   #76
 Разведчик
Аватар для zasranecqwe1111
 
zasranecqwe1111 никому не известный тип
Регистрация: 13.08.2011
Сообщений: 15
Популярность: 10
Сказал(а) спасибо: 6
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Цитата:
Сообщение от leto2011Посмотреть сообщение
Всем привет!

Похоже тема с ником персонажа актуальна)
У меня таже проблема, не получается правильно считать ник своего персонажа, приведу код, может кто чем поможет).

Код:
void __fastcall TForm1::Button6Click(TObject *Sender)
{

   DWORD str_addr;
   str_addr=bot.client.get.Read_Name(); //...вычисляем адрес строки по нужным оффсетам
   char str[40]={0};
   bot.client.get.Read_Mass(str_addr, str, 40); // считываем
   AnsiString string=bot.client.get.UnicodeToAnsi(str, 20);

   Label16->Caption="Name - "+ string;
}


DWORD READER::Read_Name()
{
  DWORD buff;
  buff = Read_32(BA);
  //buff = Read_32(buff+D_GA);     //Пробовал и с D_GA и без как с некоторых постах
  buff = Read_32(buff+PERS_STRUCT);
  buff = Read_32(buff+MY_NAME);
  buff = Read_32(buff+ZERO);

  return buff;
}


void READER::Read_Mass(DWORD addr, char* mass, int len)
{
HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,pid) ;
ReadProcessMemory(hProcess,(void*)addr,mass,len,0) ;
CloseHandle(hProcess);

}


AnsiString READER::UnicodeToAnsi(char *mass, int len)
{
  AnsiString txt="";
  for (int i=0; i<len; i++)
  {
    BYTE lo=mass[i*2];
    BYTE hi=mass[i*2+1];
    if ((lo==0)&&(hi==0)) break;
    if ((lo==1)&&(hi==4)) {lo=168; hi=0;}
    if ((lo==81)&&(hi==4)) {lo=184; hi=0;}
    if (hi==4) lo+=176;
    txt+=(char)lo;
  }
  return txt;
}


где:  

  #define MY_NAME  0x670//0x6b0 //Пробовал разные значения
  #define ZERO        0x0
  #define BA            0x00C9DFAC
  #define GA           0x00C9E74C
  #define D_GA        0x1C
Уважаемые гуру, намекните хотя бы на правильное направление), заранее спасибо!



Код:
#define GA                  0xC9E74C
#define PERS_STRUCT         0x30
#define MY_NAME             0x6B0

void READER::Read_Mass(DWORD addr, char* mass, int len)
{
        HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,pid);
        ReadProcessMemory(hProcess,(void*)addr,mass,len,0);
        CloseHandle(hProcess);
}

AnsiString READER::UnicodeToAnsi(char *mass, int len)
{
        AnsiString txt="";
        for (int i=0; i<len; i++)
        {
                BYTE lo=mass[i*2];
                BYTE hi=mass[i*2+1];
                if ((lo==0)&&(hi==0)) break;
                if ((lo==1)&&(hi==4)) {lo=168; hi=0;}
                if ((lo==81)&&(hi==4)) {lo=184; hi=0;}
                if (hi==4) lo+=176;
                txt+=(char)lo;
        }
        return txt;
}

DWORD READER::PersStruct()
{
        DWORD buff;
        buff = Read_32(GA);
        return Read_32(buff+PERS_STRUCT);
}

AnsiString READER::myName()
{
        DWORD buff;
        buff = Read_32(PersStruct()+MY_NAME);
        char mass[70]={0};
        Read_Mass(buff,mass,70);
        return UnicodeToAnsi(mass, 35);
}
Скопировал 1 в 1 из рабочей версии программы
Если не запустится то ошибку надо искать в другом месте
  Ответить с цитированием
Пользователь сказал cпасибо:
leto2011 (27.12.2014)
Старый 27.12.2014, 15:40   #77
 Разведчик
Аватар для leto2011
 
leto2011 никому не известный тип
Регистрация: 13.02.2011
Сообщений: 12
Популярность: 10
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Огромное Вам спасибо!!!! )) все заработало))
  Ответить с цитированием
Старый 14.01.2015, 21:11   #78
 Разведчик
Аватар для Adrev
 
Adrev никому не известный тип
Регистрация: 27.10.2010
Сообщений: 4
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 1 сообщении
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

А как можно посмотреть пакеты, которые формируются в процессе. Допустим содержание пакета перемещения? Может можно как нибудь считывать данные...
  Ответить с цитированием
Старый 14.01.2015, 21:33   #79
 Разведчик
Аватар для Hilling
 
Hilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личностьHilling определенно авторитетная личность
Регистрация: 05.09.2010
Сообщений: 32
Популярность: 1182
Сказал(а) спасибо: 38
Поблагодарили 12 раз(а) в 10 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Пакеты лови через Packet Listener http://zhyk.ru/forum/showthread.php?t=276220

Но про пакеты перемещения лучше забудь - намного проще инжектом бегать.
  Ответить с цитированием
Старый 23.01.2015, 16:47   #80
 Разведчик
Аватар для Fess88
 
Fess88 никому не известный тип
Регистрация: 11.05.2014
Сообщений: 6
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Всем привет, прошу совета опять

C инжектами разобрался, вот теперь с пакетами засада Подскажите пожалуйста, по статье dwa83, раздел 3 (пакеты), у него идет строка:

Код:
char fdata[29]="\x60\x8B\x0D\x00\x00\x00\x00\x8B\x49\x20\x68\x11\x11\x11\x11\x68\x22\x22\x22\x22\xB8\x33\x33\x33\x33\xFF\xD0\x61\xC3";
она актуальна на сегодняшний день?

Я пытаюсь таргет сделать, по его примеру, и вылетает клиент Вот пример моей функции:

Код:
SendPacket(PACKET *pack)
{
  HANDLE hProcThread;
								// базовый адрес									адрес пакета	   // функция для отправки (33)		
  char fdata[30]="\x60\x8B\x0D\x00\x00\x00\x00\x8B\x49\x20\x68\x11\x11\x11\x11\x68\x22\x22\x22\x22\xB8\x33\x33\x33\x33\xFF\xD0\x61\xC3";
  int lenfunc=30;
  DWORD func=F_SEND_PACKET;
  DWORD ba=BA;
  DWORD len=pack->len;
  void* pParams = Alloc(); // Указатель на память для функций
  
  void* pFunction = Alloc(); // Указатель на память для функций
  cout << pParams << endl << pFunction << endl;
  WriteProcessMemory(m_hProc,pParams,pack->Bytes,len,NULL); // инжектим данные пакета

  DWORD addr=DWORD(pParams); // возьмём адрес расположения данных нашего пакета
  memcpy(fdata+3,&ba,4);
  memcpy(fdata+11,&len,4);
  memcpy(fdata+16,&addr,4); // запишем адрес расположения пакета прямо в массив кода
  memcpy(fdata+21,&func,4);

  WriteProcessMemory(m_hProc,pFunction,fdata,lenfunc,NULL); // инжектим наш код
 
  hProcThread = CreateRemoteThread(m_hProc,NULL,NULL,(LPTHREAD_START_ROUTINE)pFunction,NULL,NULL,NULL);
  if(hProcThread==INVALID_HANDLE_VALUE) // не удалось создать поток
  {
    CloseHandle(m_hProc);
    return 0;
  }

  WaitForSingleObject(hProcThread, INFINITE); // ожидаем завершения работы потока
  CloseHandle(hProcThread); // освобождаем  
  
  CloseHandle(m_hProc);
  return 1;	// успешная инъекция и выполнение кода
}
и вот функция выделения:

TargetMobPack(DWORD wid)
{
PACKET pack; // структура пакета
pack.len=7; // длина данных пакета
char Packet[7] = "\x02\x00\x00\x00\x00\x00"; // массив данных пакета
memcpy(pack.Bytes,Packet,pack.len); // скопируем в структуру пакета данные массива
memcpy(pack.Bytes+2,&wid,4); // последние четыре байта - WID выделяемого моба
SendPacket(&pack); // инжектим

}

через отладчик (прога останавливаю после всех WriteMemoryProcess, не создавая поток: CreateRemoteThread - видно, что записалось вот что:
Код:
0FF90000   60               PUSHAD
0FF90001   8B0D ACEFCC00    MOV ECX,DWORD PTR DS:[CCEFAC]            ; elementc.00CCF730
0FF90007   8B49 20          MOV ECX,DWORD PTR DS:[ECX+20]
0FF9000A   68 07000000      PUSH 7
0FF9000F   68 00008F08      PUSH 88F0000
0FF90014   B8 E0556F00      MOV EAX,6F55E0                           ; ASCII "<i"
0FF90019   FFD0             CALL EAX
0FF9001B   61               POPAD
0FF9001C   C3               RETN
WID у меня такой:
wid = 0x80108594;
Подскажи, куда копать плиз.

Если делаю поток, после всех WriteProcessMemory, то получаю вылет(
  Ответить с цитированием
Старый 23.01.2015, 17:29   #81
 Разведчик
Аватар для zasranecqwe1111
 
zasranecqwe1111 никому не известный тип
Регистрация: 13.08.2011
Сообщений: 15
Популярность: 10
Сказал(а) спасибо: 6
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Цитата:
она актуальна на сегодняшний день?

Да

Цитата:
Код:
TargetMobPack(DWORD wid)
{
PACKET pack; // структура пакета
pack.len=7; // длина данных пакета
char Packet[7] = "\x02\x00\x00\x00\x00\x00"; // массив данных пакета
memcpy(pack.Bytes,Packet,pack.len); // скопируем в структуру пакета данные массива
memcpy(pack.Bytes+2,&wid,4); // последние четыре байта - WID выделяемого моба
SendPacket(&pack); // инжектим

}

Длинна пакета неверна, должна быть 6

char fdata[30] Тут тоже надо 29

Последний раз редактировалось zasranecqwe1111; 23.01.2015 в 17:42.
  Ответить с цитированием
Старый 23.01.2015, 18:13   #82
 Разведчик
Аватар для Fess88
 
Fess88 никому не известный тип
Регистрация: 11.05.2014
Сообщений: 6
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Поправил, теперь так:

Код:
TargetMobPack(DWORD wid)
{
PACKET pack; // структура пакета
pack.len=6; // длина данных пакета
char Packet[] = "\x02\x00\x00\x00\x00\x00"; // массив данных пакета
memcpy(pack.Bytes,Packet,pack.len); // скопируем в структуру пакета данные массива
memcpy(pack.Bytes+2,&wid,4); // последние четыре байта - WID выделяемого моба
SendPacket(&pack); // инжектим

}
вылетает все равно. По сути,
Код:
char Packet[] = "\x02\x00\x00\x00\x00\x00";
- в реальности здесь же 7 символов, т.к компилятор C++ добавляет автоматически в конец \0.

Здесь также переделал:
Код:
 char fdata[]="\x60\x8B\x0D\x00\x00\x00\x00\x8B\x49\x20\x68\x11\x11\x11\x11\x68\x22\x22\x22\x22\xB8\x33\x33\x33\x33\xFF\xD0\x61\xC3";
  int lenfunc=29;
в итоге вылетает точно также

P.S. static const DWORD F_SEND_PACKET= 0x006F55E0;

Последний раз редактировалось Fess88; 23.01.2015 в 18:25.
  Ответить с цитированием
Старый 23.01.2015, 19:36   #83
 Разведчик
Аватар для zasranecqwe1111
 
zasranecqwe1111 никому не известный тип
Регистрация: 13.08.2011
Сообщений: 15
Популярность: 10
Сказал(а) спасибо: 6
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

А если написать char Packet[6] = "\x02\x00\x00\x00\x00\x00";
char fdata[29]="\x60\x8B\x0D\x00\x00\x00\x00\x8B\x49\x20\x68\x11 \x11\x11\x11\x68\x22\x22\x22\x22\xB8\x33\x33\x33\x 33\xFF\xD0\x61\xC3";

Скажу честно не знаю на сколько это принципиально, так как мне сложно даются строготипизированные языки
  Ответить с цитированием
Старый 23.01.2015, 19:42   #84
 Разведчик
Аватар для Fess88
 
Fess88 никому не известный тип
Регистрация: 11.05.2014
Сообщений: 6
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Все, разобрался, оказывается проблема была в
Код:
F_SEND_PACKET= 0x006F55E0
Заменил её на F_SEND_PACKET= 0x751D10, и все заработало!

Всем спасибо!
  Ответить с цитированием
Старый 26.01.2016, 18:36   #85
 Разведчик
Аватар для botowod1
 
botowod1 никому не известный тип
Регистрация: 09.01.2016
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Гуры!!! Возникла проблема с получением хендлера процесса PW. При открытия процесса хендлер не получаю.
Код:
DWORD READER::Read_32(DWORD addr)
{
  HANDLE hProcess=OpenProcess(PROCESS_ALL_ACCESS,false,pid); // открываем процесс
  if (hProcess == NULL)
  {
	  return 0;
  }
  DWORD value;
  ReadProcessMemory(hProcess, (LPCVOID)addr, &value, sizeof(DWORD) * 2, 0);  // считываем значение по заданному адресу
  CloseHandle(hProcess); // закроем процесс
  return value; // вернём считанное значение
}
Пишу в Microsoft Visual Studio 10 в Windows 7
проваливаюсь сюда:
Код:
  {
	  return 0;
  }
Добавлено через 1 час 33 минуты
Вот тормознул... Нужно было запустить от админа...

Последний раз редактировалось botowod1; 26.01.2016 в 20:10. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 23.02.2016, 21:51   #86
 Разведчик
Аватар для seergeeyy
 
seergeeyy неизвестен в этих краях
Регистрация: 21.04.2012
Сообщений: 13
Популярность: -88
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
Отправить сообщение для seergeeyy с помощью Skype™
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Спасибо огромное автору, сделал неплохого бота
теперь пытаюсь сделать чтоб он умел ходить
но никак не могу понять где взять вот эти значения:
Цитата:
fdata[117]="\x60\xA1\x00\x00\x00\x00\x8B\xB0\x11\x11\x11\x11 \x8B\x8E\x22\x22\x22\x22\x6A\x01\xBB\x33\x33\x33\x 33\xFF\xD3\x89\xC7\x8D\x44\xE4\x0C\x50\x68\x44\x44 \x44\x44\x89\xF9\xBB\x55\x55\x55\x55\xFF\xD3\x8B\x 8E\x66\x66\x66\x66\x6A\x00\x6A\x01\x57\x6A\x01\xBB \x77\x77\x77\x77\xFF\xD3\xA1\x88\x88\x88\x88\x8B\x 80\x99\x99\x99\x99\x8B\x80\xAA\xAA\xAA\xAA\x8B\x40 \x30\x8B\x48\x04\xB8\xBB\xBB\xBB\xBB\x89\x41\x20\x B8\xCC\xCC\xCC\xCC\x89\x41\x24\xB8\xDD\xDD\xDD\xDD \x89\x41\x28\x61\xC3";

тык
я так понимаю эти значения переводятся примерно в такой вид:

тык

но у меня структура в клиенте немного другая (нашел адрес в CE примерно по гайду) :
тык
у меня версия клиента старая( 1.3.4 версии, сборка 2265 )
и я не нашел даже приблизительно одинаковых строчек подряд во всем elementclient
например команды "mov eax, dword ptr [PW_GAMERUN_ADDR]" у меня вообще нету, все начинается с BaseAdress а не с GameAdress,
прошу помощи где мне взять эти строки ( walk оффсеты имеются)
________________

Последний раз редактировалось seergeeyy; 23.02.2016 в 21:56.
  Ответить с цитированием
Старый 15.02.2017, 11:43   #87
 Разведчик
Аватар для Iana.
 
Iana. никому не известный тип
Регистрация: 10.01.2012
Сообщений: 2
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Спасибо большое за такое прекрасное руководство!
Уже на протяжении довольно долгого времени захожу на эту статью, перечитываю и сверяюсь на сколько больше начала понимать. Эта статья служит индикатором моего прогресса в С++ и win32 API.
А цель то в конечном итоге с полным пониманием каждого слова написать того самого бота.
Спасибо за Ваш труд!
  Ответить с цитированием
Старый 27.04.2017, 13:12   #88
 Разведчик
Аватар для dronte
 
dronte никому не известный тип
Регистрация: 06.07.2013
Сообщений: 9
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Вопрос ко всем, как сейчас обстоят дела с таким вот неприкрытым доступом к памяти клиента?
никак скрывать от протектора это не нужно?? Вопрос особенно касательно инъекций и пакетов

//////
не удается никаким вменяемым образом распечатать Ник персонажа и Локацию в консоль, чтобы получились читаемые символы. пример выше - не помог, среда VS2017 C++

Последний раз редактировалось dronte; 27.04.2017 в 20:35.
  Ответить с цитированием
Старый 19.10.2017, 18:12   #89
 Разведчик
Аватар для BJIoM
 
BJIoM никому не известный тип
Регистрация: 12.03.2015
Сообщений: 10
Популярность: 10
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Не получается считать данные о персонаже из клиента, вместо моего текущего уровня (73) выдает -858993460
Сначала грешил на оффсеты, но CheatEngine по тому же адресу все нормально прочитал, как привести выводимое значение в нормальный вид?
  Ответить с цитированием
Старый 19.10.2017, 22:56   #90
 Рыцарь
Аватар для Sirioga
 
Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(Sirioga сломал счётчик популярности :(
Регистрация: 19.11.2008
Сообщений: 385
Популярность: 13343
Сказал(а) спасибо: 124
Поблагодарили 217 раз(а) в 109 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Цитата:
Сообщение от BJIoMПосмотреть сообщение
Не получается считать данные о персонаже из клиента, вместо моего текущего уровня (73) выдает -858993460
Сначала грешил на оффсеты, но CheatEngine по тому же адресу все нормально прочитал, как привести выводимое значение в нормальный вид?

Может читаешь что-то не так? Покажи хотя бы код, офсеты, скажи версию PW, сервер...
  Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] Написать бота! romel Вопросы и ответы, обсуждения 2 10.02.2012 17:39
[Помогите!] Как же написать бота? ХАМнаМИЛЛИОН Школа Читера 3 29.07.2011 19:58
[Помогите!] написать бота @ndreyk@ Общение и обсуждение Perfect World 32 23.07.2011 12:32
[Помогите!] хочу написать бота! Фестер Аддамс Общение и обсуждение (Тюряга ВК) 7 31.01.2011 21:36

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 21:02.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net