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

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

-

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

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

Ответ
 
Опции темы
Старый 07.12.2012, 07:49   #46
 Разведчик
Аватар для let999
 
let999 никому не известный тип
Регистрация: 06.10.2012
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Спасибо, так и знал, что косячит в ассемблере

хм... исправил, косячит там же

Последний раз редактировалось let999; 07.12.2012 в 08:08. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 07.12.2012, 11:31   #47
 Разведчик
Аватар для qwer7074
 
qwer7074 никому не известный тип
Регистрация: 07.09.2010
Сообщений: 9
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Используй отправку пакетов для таргета
От этого же автора
Код:
void INJECTOR::TargetMob(DWORD wid)
{
  PACKET pack;  // структура пакета
  pack.len=6;   // длина данных пакета
  char Packet[6] = "\x02\x00\x01\x00\x00\x00"; // массив данных пакета
  memcpy(pack.Bytes,Packet,pack.len);          // скопируем в структуру пакета данные массива
  memcpy(pack.Bytes+2,&wid,4);                 // последние четыре байта - WID выделяемого моба
  SendPacket(&pack);                     // инжектим
}
  Ответить с цитированием
Старый 07.12.2012, 16:36   #48
 Разведчик
Аватар для let999
 
let999 никому не известный тип
Регистрация: 06.10.2012
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Спасибо, разберусь, попробую.
  Ответить с цитированием
Старый 11.12.2012, 09:34   #49
 Пехотинец
Аватар для dwa83
 
dwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личность
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Кстати, все адреса указанные в темке - давние. Их скорее всего нужно будет поменять на корректные.
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝
  Ответить с цитированием
Старый 12.01.2013, 20:37   #50
 Разведчик
Аватар для SPONKE
 
SPONKE никому не известный тип
Регистрация: 03.01.2013
Сообщений: 2
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Столкнулся с одной проблемой.
В 1 разделе PID определился правильно. Дошел до получения НР.
Выдает не четырёхбайтное значение а восьмибайтное - 4208432
Вывел значение PersStruct()
Label1->Caption=bot.client.get.PersStruct(); - четырёхбайтное
Может проблема в типе переменной функции myHP()?
int myHP() имеет тип Integer, PersStruct();тип DWORD. Пробовал изменять тип - одни эмоции компилятора)))

Использую Borland C++ Builder 6
Оффсеты взял правильные
________________
1. Админ всегда прав.
2. Если админ не прав - смотрите п.1
  Ответить с цитированием
Старый 12.01.2013, 20:45   #51
Reaper
 Фельдмаршал
Аватар для Dinmaite
 
Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(Dinmaite сломал счётчик популярности :(
Регистрация: 13.08.2009
Сообщений: 1,004
Популярность: 25098
Золото Zhyk.Ru: 350
Сказал(а) спасибо: 110
Поблагодарили 830 раз(а) в 395 сообщениях
Отправить сообщение для Dinmaite с помощью ICQ
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Читать из памяти следует в переменную типа DWORD, ведь integer может получать отрицательные значения. Кроме того integer в различных системах имеет различную длину.
  Ответить с цитированием
Старый 12.01.2013, 21:46   #52
 Разведчик
Аватар для SPONKE
 
SPONKE никому не известный тип
Регистрация: 03.01.2013
Сообщений: 2
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Перебрал весь код - все по гайду.
Выдает одинаковое значение ХП, МР, Lvla и то неправильное:
[Ссылки могут видеть только зарегистрированные пользователи. ]
Вчера ночью работало, утром уже нет %)

Решил проблему.
Открыл исходник бота - нашел строчки:

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

отсчет велся сразу с GA)))
и зачем было все так усложнять в гайде)))

Всем спасибо, двигаюсь дальше
________________
1. Админ всегда прав.
2. Если админ не прав - смотрите п.1

Последний раз редактировалось SPONKE; 13.01.2013 в 02:33.
  Ответить с цитированием
Старый 13.01.2013, 04:06   #53
 Старший сержант
Аватар для sumikot
 
sumikot излучает ауруsumikot излучает ауруsumikot излучает ауруsumikot излучает ауруsumikot излучает ауруsumikot излучает ауру
Регистрация: 21.09.2009
Сообщений: 189
Популярность: 578
Сказал(а) спасибо: 27
Поблагодарили 144 раз(а) в 36 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Цитата:
Сообщение от SPONKEПосмотреть сообщение
и зачем было все так усложнять в гайде)))

Затем, чтобы было понятно, откуда что берется.
Вообще, читать HP от GA (GA+0x20+OffsetHP) - это классика ботостроения. Так делали, когда еще не знали, что существует адрес BA. А чтобы чтение HP было быстрее, можно при запуске бота получить и запомнить адрес структуры перса - тогда чтение занимает только одно действие - PersStruct+OffsetHP.
Хотя, это все относится к стилю программиста - каждый пишет немного по своему.
  Ответить с цитированием
Старый 29.01.2013, 10:23   #54
 Пехотинец
Аватар для dwa83
 
dwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личностьdwa83 определенно авторитетная личность
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Цитата:
Сообщение от DinmaiteПосмотреть сообщение
Читать из памяти следует в переменную типа DWORD, ведь integer может получать отрицательные значения. Кроме того integer в различных системах имеет различную длину.

Кстати да, здесь как то интуитивно было принято что хп в инт поместится и не может быть больше 65535, а до этого значения int аналогичен DWORD(руоф всё-таки, хотя может быть есть и папы у которых и зашкаливает хп, но наверное не будут сажать бота на тру-перса)), но корректнее DWORD.

Добавлено через 7 минут
Во туплю спросоня, последний бит же определяет знак, так что int сопоставим с DWORD аш до значения 2147483647, такого ХП точно нет и на фришках))

А вообще, все эти одинаково-длинные типы различаются только "на бумажке", в памяти же представляют фактически одно и то же - определённое количество байт. Потому, если я уверен на 1000%, что значение всегда будет в пределах положительного значения INT, то на автомате и пишу INT. Максимум компилятор варнингом пнёт тебя, но ясно что зря он так пугается)). Извиняюсь за отступление, не судите строго)
________________
╔═╗
ˑ ˑ ╬ ╬
╚═╝

Последний раз редактировалось dwa83; 29.01.2013 в 10:44. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 31.01.2013, 15:18   #55
 Разведчик
Аватар для micro-st
 
micro-st никому не известный тип
Регистрация: 31.01.2013
Сообщений: 1
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Доброе время суток. Ребят а кто нибудь мне может помочь изминить адрес в скрипте? я его там вообще не вижу. Или как это можно сделать? я только зарегистрировался если можно напишите впочту.
  Ответить с цитированием
Старый 26.02.2013, 18:47   #56
 Разведчик
Аватар для deman4ik
 
deman4ik никому не известный тип
Регистрация: 22.05.2011
Сообщений: 3
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Я не понял раздел пакеты, откуда брать данные для массива (как я понял они после обновы изменились), как их найти? Например откуда взялось "\x02\x00\x01\x00\x00\x00"; из значений для массива таргета.

Добавлено через 2 минуты
Ну или может кто скинет сразу готовые значения.

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

Цитата:
Сообщение от deman4ikПосмотреть сообщение
Я не понял раздел пакеты, откуда брать данные для массива (как я понял они после обновы изменились), как их найти? Например откуда взялось "\x02\x00\x01\x00\x00\x00"; из значений для массива таргета.

Добавлено через 2 минуты
Ну или может кто скинет сразу готовые значения.

пакеты меняются крайне редко и после этой обновы вроде не менялись. Ловятся PacketListener-ом (дай бог N00bSa1b0t здоровья)

саму структуру пакета можно или самомму постараться понять что там где или тут порыть - на мой памяти только в одном пакете она чуток поменялась, да и то на позапрошлой обнове

Что касаемо тарета, то там структура такая (значения в hex) 08 00 {00 00 00 00} , где то что в фигурных скобках - WID того кого берешь в таргет, просто 02 00 - это сброс таргета

Во вложении прикрепил то что когда-то нарыл на просторах интернета.
Вложения
Тип файла: zip packets.zip (6.6 Кб, 32 просмотров)
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]

Последний раз редактировалось gurin; 26.02.2013 в 23:56.
  Ответить с цитированием
Старый 27.02.2013, 19:25   #58
 Разведчик
Аватар для des99
 
des99 никому не известный тип
Регистрация: 27.02.2013
Сообщений: 6
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Здравствуйте)
Возник вопрос. Когда пытаюсь считать имя персонажа то выводиться пустое значение. Вывожу таким образом
Код:
DWORD str_addr = 0xA591E0 + 0x1C + 0x34 + 0x66C + 0x0;
 char str [40] = {0};
 bot.client.get.Read_Mass(str_addr, str, 40);
 Label5->Caption = bot.client.get.UnicodeToAnsi(str, 20);
Ошибок не выдает. Использовал в качестве примера это сообщение.

Цитата:
Сообщение от dwa83Посмотреть сообщение
Считываю в массив а затем перевожу из юникода в анси. Я на билдере шестом пишу, потому приходится с юникодом колдовать, так как более поздние версии с ним норм работают.

1)определить массив для хранения считанных символов
2)считать юникод-строку имени или названия
(в основном строки в клиенте в юникоде, 2 байта на символ, строка оканчивается двойным нулём)
3)преобразовать в удобную для работы строку(я неревожу в анси)

Вот например функция считывания для структуры READER из этой статьи
addr - адрес строки юникода
mass - массив в который считываем
len - количество считываемых байт
Код:
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);
}
Преобразовываю вот такой ерундой(самому не обязательно такие "велосипеды" писать, должны быть готовые средства)
len - количество СИМВОЛОВ(не байт), или проще указать размерность_массива/2
Код:
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 str_addr=...вычисляем адрес строки по нужным оффсетам
char str[40]={0};
get.Read_Mass(str_addr, str, 40); // считываем
AnsiString string=get.UnicodeToAnsi(str, 20);

Подскажите из-за чего такое может быть?
  Ответить с цитированием
Старый 28.02.2013, 15:27   #59
 Сержант
Аватар для pw.assistant
 
pw.assistant излучает ауруpw.assistant излучает ауруpw.assistant излучает ауруpw.assistant излучает ауруpw.assistant излучает ауруpw.assistant излучает ауру
Регистрация: 16.02.2012
Сообщений: 105
Популярность: 651
Сказал(а) спасибо: 19
Поблагодарили 39 раз(а) в 31 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Цитата:
Сообщение от des99Посмотреть сообщение
DWORD str_addr = 0xA591E0 + 0x1C + 0x34 + 0x66C + 0x0;

вы неверно вычисляете адрес, адрес надо считать путем последовательного чтения значения участка памяти с последующим сложением смещения к результату, а не простым суммированием

правильно было бы так, правда пример на делфи

Код:
  function ReadString(hProc: THandle; addr: int64): UnicodeString;
  const
    len = 255;
  var
    st: array [0..len] of widechar;
    BytesCountOfRead: NativeUInt;
  begin
    if addr > 0 then
    begin
      ZeroMemory(@st, len*2);
      ReadProcessMemory(hProc, ptr(addr), @st, len*2, BytesCountOfRead);
      result := st;
    end
    else
      result := '';
  end;

  function ChainReadAddr(hProc: THandle; const addresses: array of dword): DWORD;
  var
    BytesCountOfRead: NativeUInt;
    i, len: Integer;
    addr, NextAddr: DWORD;
  begin
    addr := 0;
    len := length(addresses);
    try
      for i:=0 to len-1 do
      begin
        NextAddr := addresses[i];
        if (addr+NextAddr+4 < $FFFFFFFF) then
        begin
          if i < len-1 then
            ReadProcessMemory(hProc, ptr(addr+NextAddr), @addr, 4, BytesCountOfRead)
          else
            addr := addr+NextAddr;
        end
        else
        begin
          addr := 0;
          break;
        end;
      end;
      Result := addr;
    except
      Result := 0;
    end;
  end;

  function ChainReadString(hProc: THandle; const addresses: array of dword): String;
  var
    addr: dword;
  begin
    addr := ChainReadAddr(hProc, addresses);
    result := ReadString(hProc, addr);
  end;
вызов

Код:
const
  game_addr       =  $00B9029C;
  GamerStructOfs = $34;
  ofsGamerName  = $670;
  
  GamerName  : array [1..4] of dword = (game_addr, GamerStructOfs, ofsGamerName, $0);

                              ***

  Name := ChainReadString(hProc, GamerName);
________________
backup - акт проявления трусости

Последний раз редактировалось pw.assistant; 28.02.2013 в 16:09.
  Ответить с цитированием
Старый 02.03.2013, 15:33   #60
 Разведчик
Аватар для des99
 
des99 никому не известный тип
Регистрация: 27.02.2013
Сообщений: 6
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Как написать бота с нуля [Borland C++ Builder 6]

Дошел до считывание координат мобов и наткнулся на такую ошибку

Код:
int nom=-1;
 float Dist=100000;

	for (int i=0; i<768; i++)
	{
		if (bot.client.get.mobWID(i)!=0)
//Суда цикл да же не заходит (проверил путем вывода в Label значения i)
		{
			if (bot.client.get.mobType(i) == 6)
			{
			   if (bot.client.get.mobDist(i) < Dist) 
			   {
					Dist = bot.client.get.mobDist(i);
					nom = i;
			   }
			}
		}
	}
Подскажите в чем может быть дело

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

почему то в цикле он не захотел к i++ увеличивать, решил проблему путем прописи i++ в конце тела цикла

Последний раз редактировалось des99; 02.03.2013 в 17:11. Причина: Нашел ошибку
  Ответить с цитированием
Ответ

Опции темы

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

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

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

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

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