 |
Бот на основе GUI - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
25.08.2016, 19:24
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 24.10.2011
 Сообщений: 8
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
|
Бот на основе GUI
Так как научился более менее писать ботиков на основе инжекта и отправки пакетов то решил и в GUI разобраться но ничегошеньки не понял.
Ситуация такая. Цель: Принять кв у НПСа так что бы диалог с НПС закрылся (+бонусом бы активировать награду из инвентаря).
Делал я это так: инжектом автопути добирался до НПСа, пакетами выделял в таргет НПСа и открывал диалог, квест принимал тож пакетом (диалог при этом не закрывается) и закрывал Диалог отправкой нажатия ESC в нужное окно.
Долго, не красиво, но работает.
Попытался то же самое сделать с GUI но не смог даж считать имя активного окна.
По идее имя активного окна находится тут BA+1c+18+08+08+4c.
CE выдает пустоту по этому адресу...
Пожалуйста помогите разобраться :с
В принципе все что нужно тупо найти структуру крестика и вызвать как то его нажатие если я правильно все понимаю.
|
|
|
29.08.2016, 11:41
|
#2
|
|
|
|
Разведчик
|
 Регистрация: 29.08.2016
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Бот на основе GUI
Имя активного окна читается по адресу
BA+1c+18+08+74+4c
Последний раз редактировалось Doakes; 29.08.2016 в 12:27.
|
|
|
29.08.2016, 20:29
|
#3
|
|
|
|
Разведчик
|
 Регистрация: 24.10.2011
 Сообщений: 8
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
|
Re: Бот на основе GUI
Океей.
Все равно крашит клиент :с
 |
Цитата: |
 |
|
|
|
|
|
|
|
ASM asm = new ASM(memories[0]);
asm.Mov_EAX(PWOffssAndAddrss.base_address);
asm.Mov_EAX_DWORD_Ptr_EAX();
asm.Mov_EAX_DWORD_Ptr_EAX_Add(0x1C);
asm.Mov_EAX_DWORD_Ptr_EAX_Add(0x18);
asm.Mov_EAX_DWORD_Ptr_EAX_Add(0x08);
asm.Mov_EAX_DWORD_Ptr_EAX_Add(0x74);
asm.Push_EAX();
asm.Push68(0x00DD732C);
asm.Mov_EBP(0x00813030);
asm.Call_EBP();
asm.Popad();
asm.Ret();
asm.RunAsm(); |
|
 |
|
 |
|
Добавлено через 2 минуты
Это тоже крашит
 |
Цитата: |
 |
|
|
|
|
|
|
|
ASM asm = new ASM(memories[0]);
asm.Mov_ECX(PWOffssAndAddrss.base_address + 0x1c + 0x18 + 0x08 + 0x74);
asm.Push68(0x00DD732C);
asm.Mov_EAX(0x00813030);
asm.Call_EAX();
asm.Popad();
asm.Ret();
asm.RunAsm(); |
|
 |
|
 |
|
Добавлено через 33 минуты
Перепробовал еще пару инжектов и пробовал менять адреса.
Ничего не помогло.
Прошу о помощи а то руки совсем опускаются ._.
Последний раз редактировалось Arsen0208; 29.08.2016 в 21:03.
Причина: Добавлено сообщение
|
|
|
30.08.2016, 11:59
|
#4
|
|
|
|
Разведчик
|
 Регистрация: 29.08.2016
 Сообщений: 0
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Бот на основе GUI
Берем гуй инжект из этой темы.
Для его применения нам нужны адрес WinStruct, адрес команды нужного нам контрола и адрес GUI инжекта.
Приведу код на Delphi, думаю на шарп перевести не составит труда.
Получение Winstuct
Код:
GetWindowThreadProcessid(FindWindow('Elementclient Window',nil),@pid);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,PID);
addr:=$00E5AFA4;
ReadProcessMemory(hProcess,ptr(addr),@addr,sizeof(addr),rw);
ReadProcessMemory(hProcess,ptr(addr+$1c),@addr,sizeof(addr),rw);
ReadProcessMemory(hProcess,ptr(addr+$18),@addr,sizeof(addr),rw);
ReadProcessMemory(hProcess,ptr(addr+$08),@addr,sizeof(addr),rw);
ReadProcessMemory(hProcess,ptr(addr+$74),@addr,sizeof(addr),rw);
winstr:=addr;
Далее получаем адрес команды контрола
Код:
ReadProcessMemory(hProcess, ptr(winstr+$1c8), @addr, sizeof(addr), rw);
for i := 1 to 6 do
ReadProcessMemory(hProcess, ptr(addr+$0c), @addr, sizeof(addr), rw);
ReadProcessMemory(hProcess, ptr(addr+$08), @addr, sizeof(addr), rw);
ReadProcessMemory(hProcess, ptr(addr+$18), @addr, sizeof(addr), rw);
COMMAND_TEXT_ADDRESS:=addr;
Примечание:6 это номер крестика в диалоговом окне с НПС. В зависимости от контрола, COMMAND_TEXT_ADDRESS может быть +18 или +1C.
Ну и адрес для гуй инжекта это $009EB960. Берется из соответствующей темы.
|
|
|
30.08.2016, 22:15
|
#5
|
|
|
|
Разведчик
|
 Регистрация: 24.10.2011
 Сообщений: 8
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
|
Re: Бот на основе GUI
О господи какой же я дурак....
Все заработало....
Огромнейшее спасибо Doakes!!
|
|
|
04.11.2016, 20:40
|
#6
|
|
|
|
Разведчик
|
 Регистрация: 11.10.2010
 Сообщений: 13
 Популярность: 10
 Сказал(а) спасибо: 3
Поблагодарили 5 раз(а) в 5 сообщениях
|
Re: Бот на основе GUI
|
|
|
11.11.2016, 15:28
|
#7
|
|
|
|
Разведчик
|
 Регистрация: 24.10.2011
 Сообщений: 8
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
|
Re: Бот на основе GUI
Не помню точно что я сделал но вроде адрес нужно было считывать по цепочке оффсетов а не прибавляя к адресу:
int CallAddress = 0x00A69420;
ASM asm = new ASM(this.memory);
asm.Pushad();
asm.Mov_ECX(this.memory.ChainReadInt32(0x00E5AFA4, 0x1c, 0x18, 0x08, 0x74));
asm.Push68(0x00DD732C);
asm.Mov_EAX(CallAddress);
asm.Call_EAX();
asm.Popad();
asm.Ret();
asm.RunAsm();
(адреса старые, поменять надо)
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 20:30.
|
 |