Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Актуально. Закрытие диалогового окна с НПС

-

Общение разработчиков

- Программирование для Perfect World, общение и обсуждене разработок

Ответ
 
Опции темы
Старый 05.02.2016, 18:03   #16
 Пехотинец
Аватар для diagnost
 
diagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражания
Регистрация: 02.01.2010
Сообщений: 95
Популярность: 1542
Сказал(а) спасибо: 110
Поблагодарили 460 раз(а) в 288 сообщениях
 
По умолчанию Re: Актуально. Закрытие диалогового окна с НПС

Нашел старый клиент
Код:
CPU Disasm
Address   Hex dump          Command                                  Comments
00809A00    53              PUSH EBX
00809A01    56              PUSH ESI
00809A02    8B7424 0C       MOV ESI,DWORD PTR [ESP+0C]
00809A06    8BD9            MOV EBX,ECX
00809A08    57              PUSH EDI
00809A09    8BFE            MOV EDI,ESI
00809A0B    83C9 FF         OR ECX,FFFFFFFF
00809A0E    33C0            XOR EAX,EAX
00809A10    F2:AE           REPNE SCAS BYTE PTR [EDI]
00809A12    F7D1            NOT ECX
00809A14    49              DEC ECX
00809A15    75 08           JNE SHORT elementclient.00809A1F
00809A17    5F              POP EDI
00809A18    5E              POP ESI
00809A19    B0 01           MOV AL,1
00809A1B    5B              POP EBX
00809A1C    C2 0400         RET 4
00809A1F    8B43 78         MOV EAX,DWORD PTR [EBX+78]
00809A22    BF 01000000     MOV EDI,1
00809A27    3BC7            CMP EAX,EDI
00809A29    75 76           JNE SHORT elementclient.00809AA1
00809A2B    55              PUSH EBP
00809A2C    8B2D E884A100   MOV EBP,DWORD PTR [<&MSVCRT._strcmpi>]
00809A32    68 98B9AC00     PUSH OFFSET elementclient.00ACB998       ; ASCII "IDCANCEL"
00809A37    56              PUSH ESI
00809A38    FFD5            CALL EBP
00809A3A    83C4 08         ADD ESP,8
00809A3D    85C0            TEST EAX,EAX
00809A3F    75 16           JNE SHORT elementclient.00809A57
00809A41    8B4B 34         MOV ECX,DWORD PTR [EBX+34]
00809A44    BF 02000000     MOV EDI,2
00809A49    53              PUSH EBX
00809A4A    57              PUSH EDI
00809A4B    8B01            MOV EAX,DWORD PTR [ECX]
00809A4D    FF50 18         CALL DWORD PTR [EAX+18]
00809A50    5D              POP EBP
00809A51    5F              POP EDI
00809A52    5E              POP ESI
00809A53    5B              POP EBX
00809A54    C2 0400         RET 4
Нашел в новом клиенте тоже место
Код:
CPU Disasm
Address   Hex dump          Command                                  Comments
009B2FC0  /.  53            PUSH EBX
009B2FC1  |.  56            PUSH ESI
009B2FC2  |.  8B7424 0C     MOV ESI,DWORD PTR [ARG.1]
009B2FC6  |.  8BD9          MOV EBX,ECX
009B2FC8  |.  57            PUSH EDI
009B2FC9  |.  8BFE          MOV EDI,ESI
009B2FCB  |.  83C9 FF       OR ECX,FFFFFFFF
009B2FCE  |.  33C0          XOR EAX,EAX
009B2FD0  |.  F2:AE         REPNE SCAS BYTE PTR [EDI]
009B2FD2  |.  F7D1          NOT ECX
009B2FD4  |.  49            DEC ECX
009B2FD5  |.  75 08         JNZ SHORT elementclient.009B2FDF
009B2FD7  |.  5F            POP EDI
009B2FD8  |.  5E            POP ESI
009B2FD9  |.  B0 01         MOV AL,1
009B2FDB  |.  5B            POP EBX
009B2FDC  |.  C2 0400       RET 4
009B2FDF  |>  8B43 78       MOV EAX,DWORD PTR [EBX+78]
009B2FE2  |.  BF 01000000   MOV EDI,1
009B2FE7  |.  3BC7          CMP EAX,EDI
009B2FE9  |.  75 76         JNE SHORT elementclient.009B3061
009B2FEB  |.  55            PUSH EBP
009B2FEC  |.  8B2D 84C3BF00 MOV EBP,DWORD PTR [<&MSVCRT._strcmpi>]
009B2FF2  |.  68 EC10CF00   PUSH OFFSET elementclient.00CF10EC       ; /Arg2 = ASCII "IDCANCEL"
009B2FF7  |.  56            PUSH ESI                                 ; |Arg1 => [ARG.1]
009B2FF8  |.  FFD5          CALL EBP                                 ; \msvcrt._strcmpi
009B2FFA  |.  83C4 08       ADD ESP,8
009B2FFD  |.  85C0          TEST EAX,EAX
009B2FFF  |.  75 16         JNZ SHORT elementclient.009B3017
009B3001  |.  8B4B 34       MOV ECX,DWORD PTR [EBX+34]
009B3004  |.  BF 02000000   MOV EDI,2
009B3009  |.  53            PUSH EBX
009B300A  |.  57            PUSH EDI
009B300B  |.  8B01          MOV EAX,DWORD PTR [ECX]
009B300D  |.  FF50 18       CALL DWORD PTR [EAX+18]
009B3010  |.  5D            POP EBP
009B3011  |.  5F            POP EDI
009B3012  |.  5E            POP ESI
009B3013  |.  5B            POP EBX
009B3014  |.  C2 0400       RET 4
Получил готовый инжект закрытия любого окна
Код:
 const
  DlgCancelPush     = $00CF10EC;//$00ACB998;
  DialogOpAddr      = $009B2FC0;//$00809A00;

  PW_BASE_ADDRESS   = $00D6F0AC;
  PW_DYNAMIC_BASE_OFFSET = $001c;       // [base] + 1c = CECGameRun
  PW_UIMANAGER_OFFSET = $0010;          // [base] + 1c + 18
  PW_UIMANAGER_GAMEUI_OFFSET  = $0008;   // [base] + 1c + 18 + 08 = CECGameUIMan
  PW_UIMANAGER_CURRENT_DIALOG = $0074;   // [base] + 1c + 18 + 08 + 74

procedure DialogOperationCall(aPParams : PParams); stdcall;
var
  address : Pointer;
  param : Cardinal;
begin
   //DialogOpAddr      = $00809A00;
  address := Pointer(DialogOpAddr);
  param := aPParams^.Param1;
  asm
      pushad
        push  param
         //PW_BASE_ADDRESS   = $00b27a04;
        mov   esi, dword ptr [PW_BASE_ADDRESS]
        //PW_DYNAMIC_BASE_OFFSET = $001c;       // [base] + 1c = CECGameRun
        mov   esi, dword ptr [esi + PW_DYNAMIC_BASE_OFFSET]
        //PW_UIMANAGER_OFFSET = $0018;          // [base] + 1c + 18
        mov   esi, dword ptr [esi + PW_UIMANAGER_OFFSET]
        //PW_UIMANAGER_GAMEUI_OFFSET  = $0008;   // [base] + 1c + 18 + 08 = CECGameUIMan
        mov   esi, dword ptr [esi + PW_UIMANAGER_GAMEUI_OFFSET]
        // PW_UIMANAGER_CURRENT_DIALOG = $0074;   // [base] + 1c + 18 + 08 + 74
        mov   esi, dword ptr [esi + PW_UIMANAGER_CURRENT_DIALOG]
        mov   ecx, esi
        call  address
      popad
  end;
  address := nil;
end;

procedure CloseDialog();
var
  aParams : TParams;
begin
  aParams.Param1 := DlgCancelPush; //DlgCancelPush     = $00ACB998; DlgOkPush =00ACB6C8 адрес кнопки ОК
  InjectFunc(hProcess, @DialogOperationCall, @aParams, SizeOf(aParams));
end;

procedure TForm3.Button4Click(Sender: TObject);
begin
   connect;
   CloseDialog();
end;
Ну и до кучи Структура GUI

Код:
GA+10+08
Остальное на сколько понял осталось без изменения

Всем спасибо за проделанную работу.

Последний раз редактировалось diagnost; 05.02.2016 в 18:07.
  Ответить с цитированием
Старый 05.02.2016, 18:37   #17
 Старший сержант
Аватар для N00bSa1b0t
 
N00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядом
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
 
По умолчанию Re: Актуально. Закрытие диалогового окна с НПС

Ради интереса спрошу - а кроме как чисто эстетической цели (ну, чтобы лишних окон не было), данный инжект несет практическую пользу?
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
PW Everyday Helper Bot
  Ответить с цитированием
Старый 06.02.2016, 00:04   #18
 Пехотинец
Аватар для diagnost
 
diagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражания
Регистрация: 02.01.2010
Сообщений: 95
Популярность: 1542
Сказал(а) спасибо: 110
Поблагодарили 460 раз(а) в 288 сообщениях
 
По умолчанию Re: Актуально. Закрытие диалогового окна с НПС

Зачем нужен этот инжект? Мне кажется здесь полный ответ на этот вопрос. Тоже все перелопатил пока смог запустить этот инжект. Он имеет непосредственное отношение к GUI. Раньше его называли ButtonPress(это Call адрес), потом он получил название DialogOpAddr(Call адрес), а теперь просто GUI(Call адрес, еще его называют GUI_Command ) Я не хочу сказать что, они все одинаковы, но все они крутятся возле выше указанного участка кода. И как его искать до сих пор мне не понятно.
Осталось выяснить, как найти вот эти адреса
Код:
BA+0x1C+0x04+0x18+I+D
I (окна, длинна 0x850 байт)
0x2B8 Действия
0x2C0 Игроки и группы
0x2C4 Служба поддержки
0x314 Характеристики персонажа
0x32C Ремонт
0x36C Призыв духа
0x3E8 Помощь
0x40C Инвентарь
0x428 Диалог с нпс
0x438 Домашние животные
0x458 Окно алхимика
0x468 Панель 1-9
0x470 Горячие клавиши
0x4B0 Настройки
0x4C4 Умения
0x50C Системная панель
0x51C Задания
D (данные окна, длинна 0x218 байт)
0x98 WndX, dword
0x9C WndY, dword
0xA0 WndW, dword
0xA4 WndH, dword
0X90 WndO, byte (1-open, 0-close)

Последний раз редактировалось diagnost; 06.02.2016 в 00:24.
  Ответить с цитированием
Старый 06.02.2016, 00:12   #19
 Старший сержант
Аватар для N00bSa1b0t
 
N00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядом
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
 
По умолчанию Re: Актуально. Закрытие диалогового окна с НПС

Цитата:
Зачем нужен этот инжект? Мне кажется здесь полный ответ на этот вопрос.

Нет, я понимаю, что он делает, но я не вижу смысла в закрытии окон.
Если бот работает автономно - какая разница, откыто у него окно разговора с нпц или нет?)
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
PW Everyday Helper Bot
  Ответить с цитированием
Старый 06.02.2016, 00:30   #20
 Пехотинец
Аватар для diagnost
 
diagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражания
Регистрация: 02.01.2010
Сообщений: 95
Популярность: 1542
Сказал(а) спасибо: 110
Поблагодарили 460 раз(а) в 288 сообщениях
 
По умолчанию Re: Актуально. Закрытие диалогового окна с НПС

Если окно не закрыть, перестают работать скиллы(в Пати), кроме этого после подключения инжекта автопути к боту, персы перестали следовать за ПЛ, тупо стоят, пока не закроешь окно. А также, если в таргете кто то есть при нажатии ESC идет команда сброс таргета, мне не всегда нужно делать сброс таргета, нужно просто закрыть окно(нажать на крестик). У ПЛ всегда кто то есть в таргете ESC просто не помогает.

Последний раз редактировалось diagnost; 06.02.2016 в 00:37.
  Ответить с цитированием
Старый 06.02.2016, 00:41   #21
 Старший сержант
Аватар для N00bSa1b0t
 
N00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядомN00bSa1b0t в состоянии испепелить взглядом
Регистрация: 09.04.2010
Сообщений: 204
Популярность: 5518
Сказал(а) спасибо: 49
Поблагодарили 512 раз(а) в 198 сообщениях
 
По умолчанию Re: Актуально. Закрытие диалогового окна с НПС

А не проще было найти флаг блокировки интерфейса и его обнулять? :-)
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]-cофт и прочее для комфортной игры в PW.
PW Everyday Helper Bot
  Ответить с цитированием
Старый 06.02.2016, 00:49   #22
 Пехотинец
Аватар для diagnost
 
diagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражанияdiagnost блестящий пример для подражания
Регистрация: 02.01.2010
Сообщений: 95
Популярность: 1542
Сказал(а) спасибо: 110
Поблагодарили 460 раз(а) в 288 сообщениях
 
По умолчанию Re: Актуально. Закрытие диалогового окна с НПС

По другому менять фокус окна?(Хорошая идея, и почему об этом не подумал?) Для него также нужно искать адреса и инжектить, в начале топа есть такое, только примеров не видел.
Теперь по поводу оптимизации кода. ESI и EDI регистры используются немного по другому, они нам здесь не нужны. У нас остались свободными регистры EAX, EBX. Мы будем использовать EAX и ECX(который уже используется). После преобразования последняя строчка mov ecx, esi нам совсем не нужна. Приводим код к общему стандарту:
Код:
procedure BtnPressAs(aPParams:PParams); stdcall;
var
Btn_Call, BaseAddr: Pointer;
IdCancel: dword;
  begin
   BaseAddr := Pointer(aPParams^.Param1);
   IdCancel := aPParams^.Param2;
   Btn_Call := Pointer(aPParams^.Param3);
 asm
   pushad
     mov eax, IdCancel
     push eax
     mov ecx, BaseAddr
     mov ecx, dword ptr [ecx]
     mov ecx, dword ptr [ecx+$1C]
     mov ecx, dword ptr [ecx+$10]
     mov ecx, dword ptr [ecx+$8]
     mov ecx, dword ptr [ecx+$74]
     call Btn_Call
   popad
end;
end;

procedure WinClose();
var
aParams: TParams;
  begin
    aParams.Param1 := base_addr;
    aParams.Param2 := IdCancel_addr;
    aParams.Param3 := ButtonPress_addr;
    if (aParams.Param1 <> 0) and (aParams.Param2 <> 0) and (aParams.Param3 <> 0) then
    InjectFunc(@BtnPressAs, @aParams, SizeOf(aParams));
  end;

Последний раз редактировалось diagnost; 06.02.2016 в 20:40.
  Ответить с цитированием
Ответ


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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Помогите!] баг на закрытие профиля! /predator=- Общение и обсуждение 1 19.01.2012 23:56
Закрытие клиента Fuckker555 Вопросы и ответы: RF Online 2 29.11.2011 21:47
Закрытие игры sanekkka Общение и обсуждение S4 League 25 06.06.2011 13:54
[Помогите!] Закрытие формы CheaterNoob Вопросы и ответы, обсуждения 2 22.04.2011 03:18

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

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

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