[Статья] Как написать бота с нуля [Borland C++ Builder 6] - Страница 5 - Zhyk.Ru Forums
Регистрация Главная Пользователи Все разделы прочитаны
Сообщения за день Справка Регистрация
Навигация
Zhyk.Ru LIVE! Реклама на Zhyk.Ru Доска почета top.zhyk.ru (beta) Премиум-аккаунт

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

-

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

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

Ответ
 
Опции темы Опции просмотра
Старый 02.03.2013, 16:24   #61
 Сержант
Аватар для gurin
 
gurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компанииgurin душа компании
Регистрация: 18.12.2009
Сообщений: 152
Популярность: 1075
Сказал(а) спасибо: 45
Поблагодарили 204 раз(а) в 67 сообщениях
Отправить сообщение для gurin с помощью Skype™
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

видимо
Цитата:
Сообщение от des99Посмотреть сообщение
bot.client.get.mobWID(i)

всегда возвращает 0, что говорит о том что или мобов нет или функция неверно работает.

P.S. 768 итераций - не самый лучший вариант.
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 07.03.2013, 20:15   #62
 Пехотинец
Аватар для dwa83
 
dwa83 лучик света в грозовом небеdwa83 лучик света в грозовом небеdwa83 лучик света в грозовом небеdwa83 лучик света в грозовом небеdwa83 лучик света в грозовом небеdwa83 лучик света в грозовом небеdwa83 лучик света в грозовом небе
Регистрация: 21.03.2012
Сообщений: 82
Популярность: 727
Сказал(а) спасибо: 17
Поблагодарили 97 раз(а) в 52 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Цитата:
Сообщение от gurinПосмотреть сообщение
P.S. 768 итераций - не самый лучший вариант.

ну да, ну да ладно, кому нужно, будут сортированный список использовать, мне просто так проще было


Цитата:
Сообщение от des99Посмотреть сообщение
Здравствуйте)
Возник вопрос. Когда пытаюсь считать имя персонажа то выводиться пустое значение. Вывожу таким образом

Прочитайте в темке внимательнеей

Цитата:
Сообщение от dwa83Посмотреть сообщение
Теперь сделаем считывание данных какого-нибудь моба.
Всё по аналогии, но не совсем. Идём в тему с оффсетами и видим целых 2 цепочки смещений

BA +0x1C +0x1C +0x24 +0x14 Count, dword /Количество/
BA +0x1C +0x1C +0x24 +0x18 +(i*0x4) +0x4 /i = 0 - 0x300/

Mоб не один, как наш персонаж, их много, и в памяти клиента структуры мобов расположены массивом, причём этих массивов два, упорядоченный и неупорядоченный.
Эти две цепочки смещений и приводят нас к данным этих массивов. Мы будем использовать неупорядоченный. В упорядоченном количество записей меняется так как количество мобов вокруг меняется, и номер одного и того же моба в этом массиве может изменяться со временем. Это для некоторых не очень удобно. Но у несортированного массива своя фишка. Один и тот же моб всегда в нём занимает одно и то же положение по порядку. Массив расчитан на 768(0x300 hex) мобов, но ведь вокруг нет столько, поэтому некоторые места пустуют. Причём существующие мобы расположены не по порядку в нём, а могут быть раскиданны по всему массиву.

Итак берём вторую цепочку смещений, она для несортированного массива мобов.
Прочитав адреса по цепочке BA +0x1C +0x1C +0x24 +0x18 +(i*0x4) +0x4 мы получим адрес структуры моба с номером i. Если вместо адреса структуры мы получили 0, значит моба в этом месте массива нет и место пустует. Напишем в ридере новую функцию, которая будет возвращать адрес структуры моба по номеру(по аналогии с адресом структуры перса, но у перса номера не было.

________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝
  Ответить с цитированием
Старый 24.03.2013, 17:31   #63
 Разведчик
Аватар для des99
 
des99 никому не известный тип
Регистрация: 27.02.2013
Сообщений: 6
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Здравствуйте!

Писал функцию подбора лута и наткнулся на проблему при инжекте кода клиент вылитает, подскажите в чем может быть дело?

инжектор подъема лута:
Код:
 // Подбор лута
void INJECTOR::GetLoot(DWORD wid, BYTE type)
{
  char fdata[29]="\x60\x8B\x0D\x00\x00\x00\x00\x8B\x89\x11\x11\x11\x11\x6A\x22\x68\x33\x33\x33\x33\xBB\x44\x44\x44\x44\xFF\xD3\x61\xC3";
  DWORD func=0x00471860;
  DWORD ga=D_GA;
  DWORD prs=PERS_STRUCT;
  BYTE typ=0;
  if (type==2) typ=1;
  memcpy(fdata+3,&ga,4);
  memcpy(fdata+9,&prs,4);
  fdata[14]=typ;
  memcpy(fdata+16,&wid,4);
  memcpy(fdata+21,&func,4);
  InjectAndExecute(fdata,29);
}
заранее спасибо


--------------

все нашел и исправил = )

Последний раз редактировалось des99; 08.04.2013 в 22:49. Причина: исправил
  Ответить с цитированием
Старый 21.04.2013, 20:43   #64
 Разведчик
Аватар для Xantrax
 
Xantrax никому не известный тип
Регистрация: 14.04.2013
Сообщений: 5
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Посмотрите пожалуйста эту тему: http://zhyk.ru/forum/showthread.php?t=691683
Аналогичная проблема с вылетом клиента при выделении моба.
  Ответить с цитированием
Старый 11.05.2013, 03:24   #65
 Пехотинец
Аватар для dwa83
 
dwa83 лучик света в грозовом небеdwa83 лучик света в грозовом небеdwa83 лучик света в грозовом небеdwa83 лучик света в грозовом небеdwa83 лучик света в грозовом небеdwa83 лучик света в грозовом небеdwa83 лучик света в грозовом небе
Регистрация: 21.03.2012
Сообщений: 82
Популярность: 727
Сказал(а) спасибо: 17
Поблагодарили 97 раз(а) в 52 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Проблема может быть в неправильных оффсетах или самой функции, после написания статьи было много обновлений и данные могли поменяться. Просьба указывать как именно исправили чтоб работало, у других с подобной проблемой будет меньше головной боли
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝

Последний раз редактировалось dwa83; 11.05.2013 в 03:26.
  Ответить с цитированием
Старый 16.05.2013, 10:14   #66
 Разведчик
Аватар для des99
 
des99 никому не известный тип
Регистрация: 27.02.2013
Сообщений: 6
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Внимательным быть, заместо адреса GA, подставил его смещение

__________________________________________________ ____
По части клиент-сервер возник вопрос, у сина инвиз похож на ГМ-инвиз и если так, то данные о синах/ГМ в инвизе подгружается в массив игроков которые находятся вблизи или нет?

Последний раз редактировалось des99; 16.05.2013 в 10:55.
  Ответить с цитированием
Старый 14.08.2013, 07:47   #67
 Разведчик
Аватар для leto2011
 
leto2011 никому не известный тип
Регистрация: 13.02.2011
Сообщений: 12
Популярность: 10
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Всем добрый день!

Я пытаюсь написать бота по статьям данного сайта, за месяц получилось
сделать почти все, бот выделяет мобов ,бъет их собирает лут, пьет банки, вобщем сайт очень полезен)).
Но никак не получается сделать передвижение по координатам, голова уже идет кругом.

Вот сама функция инжекта движения:
void INJECTOR::MoveTo(float x, float y, float z, int walkmode)
{
char 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";

DWORD func1=F_MOVE1;
DWORD func2=F_MOVE2;
DWORD func3=F_MOVE3;
DWORD ga=GA;
DWORD ps=PERS_STRUCT;
DWORD maa=MY_ACTION_ARRAY;
DWORD wmode=1; if (walkmode==0) wmode=0;


memcpy(fdata+2,&ga,4);
memcpy(fdata+8,&ps,4);
memcpy(fdata+14,&maa,4);
memcpy(fdata+21,&func1,4);
memcpy(fdata+35,&wmode,4);
memcpy(fdata+42,&func2,4);
memcpy(fdata+50,&maa,4);
memcpy(fdata+62,&func3,4);
memcpy(fdata+69,&ga,4);
memcpy(fdata+75,&ps,4);
memcpy(fdata+81,&maa,4);
memcpy(fdata+92,&x,4);
memcpy(fdata+100,&z,4);
memcpy(fdata+108,&y,4);

InjectAndExecute2(&fdata,117);
}

Функция InjectAndExecute2(void *code, int len); - работает 100% т.к. подбор лута и выделения в таргет через нее работают.

данные которые получает функция MoveTo:
GA = 0x00B9029C - 100% рабочий
PERS_STRUCT = 0x34 - 100% рабочий

MY_ACTION_ARRAY = 0x1050 - под вопросом
F_MOVE1 = 0x00479A40 - под вопросом
F_MOVE2 = 0x0047DD40 - под вопросом
F_MOVE3 = 0x00479EB0 - под вопросом

А вообще F_MOVE1, F_MOVE2, F_MOVE3 уже от безвыходности пробовал
перебором ставить разные значения с сайта :


#define F_MOVE1 0x0047B290//0x00495680//0x00479A40//0x0047B290//0x00479A40//0x0046E410 //Перемещение персонажа 0x00494620
#define F_MOVE2 0x0047F5A0//0x00499320//0x0047DD40//0x0047F5A0//0x0047DD40//0x004728E0 //Перемещение персонажа 0x00498290
#define F_MOVE3 0x0047B700//0x00495F20//0x00479EB0//0x0047B700//0x00479EB0//0x0046E880 //Перемещение персонажа 0x00494EC0

клиент постоянно вылетает.

И еще в некоторых статьях указываются непонятные оффсеты Walk_Ofs1=1204 - 4612
WalkMode=688 - 1672

Так вот вопрос) , что я делаю не так ?)) и для чего Walk_Ofs1 ?
  Ответить с цитированием
Старый 14.08.2013, 08:26   #68
 Пехотинец
Аватар для Desmond Hume
 
Desmond Hume лучик света в грозовом небеDesmond Hume лучик света в грозовом небеDesmond Hume лучик света в грозовом небеDesmond Hume лучик света в грозовом небеDesmond Hume лучик света в грозовом небеDesmond Hume лучик света в грозовом небеDesmond Hume лучик света в грозовом небе
Регистрация: 13.08.2013
Сообщений: 68
Популярность: 829
Золото Zhyk.Ru: 100
Сказал(а) спасибо: 25
Поблагодарили 13 раз(а) в 6 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Цитата:
Сообщение от des99Посмотреть сообщение
По части клиент-сервер возник вопрос, у сина инвиз похож на ГМ-инвиз и если так, то данные о синах/ГМ в инвизе подгружается в массив игроков которые находятся вблизи или нет?

Нет, сервер не отсылает пакеты о координатах сина в инвизе. Это отлично видно через Pandora_s_Box — клиенту эта информация не передается.

Последний раз редактировалось Desmond Hume; 14.08.2013 в 08:28. Причина: Вместо сина написал сервер
  Ответить с цитированием
Старый 05.12.2014, 05:12   #69
 Разведчик
Аватар для flyland
 
flyland никому не известный тип
Регистрация: 24.09.2009
Сообщений: 2
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Всем привет! Совсем не вдупляю как вывести Имя перса... Может потому что уже почти утро, а может и незнание)

Юзаю XE7 C++

Полностью по уроку. Все циферки выводит как надо, А Никнейм не хочет... Выводит какой то 1 знак.

Подскажите, гуру.
  Ответить с цитированием
Старый 05.12.2014, 13:33   #70
-= Мастер Света =-
 Рыцарь-капитан
Аватар для Ginrey
 
Ginrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака НоррисаGinrey троюродный дядя Чака Норриса
Регистрация: 14.06.2012
Сообщений: 511
Популярность: 7566
Сказал(а) спасибо: 4
Поблагодарили 179 раз(а) в 87 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Цитата:
Полностью по уроку. Все циферки выводит как надо, А Никнейм не хочет... Выводит какой то 1 знак.

чтобы вывести ник создайте массив типа char и туда считывайте ник
________________
Хотите как то отблагодарить за помощь?
Не стесняйтесь нажимайте "Спасибо"

Делаю программы на заказ, по всем вопросам в скайп: Ginrey2
  Ответить с цитированием
Старый 26.12.2014, 16:56   #71
 Разведчик
Аватар для leto2011
 
leto2011 никому не известный тип
Регистрация: 13.02.2011
Сообщений: 12
Популярность: 10
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Всем привет!

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

Код:
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
Уважаемые гуру, намекните хотя бы на правильное направление), заранее спасибо!

Последний раз редактировалось Smertig; 26.12.2014 в 22:03.
  Ответить с цитированием
Старый 26.12.2014, 22:03   #72
-= Мастер Света =-
 Рыцарь-лейтенант
Аватар для Smertig
 
Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(Smertig сломал счётчик популярности :(
Регистрация: 31.01.2011
Сообщений: 413
Популярность: 14489
Золото Zhyk.Ru: 300
Сказал(а) спасибо: 77
Поблагодарили 361 раз(а) в 145 сообщениях
Отправить сообщение для Smertig с помощью ICQ Отправить сообщение для Smertig с помощью Skype™
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Цитата:
DWORD READER::Read_Name()
{
DWORD buff;
buff = Read_32(BA);
buff = Read_32(buff+D_GA);
buff = Read_32(buff+PERS_STRUCT);
buff = Read_32(buff+MY_NAME);

return buff;
}

Не пишу на дельфи, остальных ошибок не вижу.
________________
Больше не занимаюсь читами, ушёл в серверную часть. Новый ник - int 3.
P.S. Но я всё такой же добрый модератор раздела PW.

Последний раз редактировалось Smertig; 26.12.2014 в 23:35.
  Ответить с цитированием
Старый 26.12.2014, 22:30   #73
 Разведчик
Аватар для leto2011
 
leto2011 никому не известный тип
Регистрация: 13.02.2011
Сообщений: 12
Популярность: 10
Сказал(а) спасибо: 1
Поблагодарили 1 раз в 1 сообщении
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Это не делфи ) это С++ 6 ).

но и так не работает...
Код:
DWORD READER::Read_Name()
{
DWORD buff;
buff = Read_32(BA);
buff = Read_32(buff+D_GA);
buff = Read_32(buff+PERS_STRUCT);
buff = Read_32(buff+MY_NAME);

return buff;
}

Последний раз редактировалось Smertig; 26.12.2014 в 23:37.
  Ответить с цитированием
Старый 27.12.2014, 13:40   #74
 Разведчик
Аватар для Simyr
 
Simyr никому не известный тип
Регистрация: 24.10.2010
Сообщений: 7
Популярность: 12
Сказал(а) спасибо: 0
Поблагодарили 5 раз(а) в 5 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

имя перса вроде
GA
+pers_str
+pers_name
+0
  Ответить с цитированием
Старый 27.12.2014, 14:28   #75
 Разведчик
Аватар для bestbeer
 
bestbeer никому не известный тип
Регистрация: 06.10.2013
Сообщений: 27
Популярность: 10
Сказал(а) спасибо: 24
Поблагодарили 12 раз(а) в 8 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Имя как и любой текст - массив байт, нужно прочитать эти байты в массив , а потом кодировать в текст. Я поступал следующим образом: 1) выделял большой массив (255) 2) считывал эти данные в массив 3) обрезал этот массив до нулей 4) конвертировал

Vb.net:
Код:
 
    Declare Function ReadProcessMemory1 Lib "kernel32" Alias "ReadProcessMemory" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef lpBuffer As Byte, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
  
    Public Function Read_String() As String
        Dim i As Integer
        Dim StringBuffer As Byte() = New Byte(255) {}


        If Me.Adres_And <> -1 Then
            ReadProcessMemory1(Me.Hendle, (Me.Adres + Me.Adres_And), StringBuffer(0), StringBuffer.Length, Nothing) ' (Me.Adres + Me.Adres_And) - адрес структуры массива
        Else
            ReadProcessMemory1(Me.Hendle, (Me.Adres), StringBuffer(0), StringBuffer.Length, Nothing)
        End If


        For i = 0 To (StringBuffer.Count - 1) Step 2

            If StringBuffer(i) = 0 And StringBuffer(i + 1) = 0 Then

                If i > 0 Then
                    ReDim Preserve StringBuffer(i - 1)
                    Return System.Text.Encoding.Unicode.GetString(StringBuffer)
                Else
                    Return ""
                End If

            End If

        Next

    End Function
  Ответить с цитированием
Ответ

Опции темы
Опции просмотра

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

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

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

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

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

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

Пишите нам: forum@zhyk.ru
Copyright © 2019 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net