 |
[Инжект] Функция для работы с GUI - Разработка ПО для Perfect World - Бюро разработчиков Zhyk.Ru: создание ботов, снифферов и прочих программ для Perfect World |
16.04.2017, 17:59
|
#46
|
|
|
|
Разведчик
|
 Регистрация: 19.10.2011
 Сообщений: 29
 Популярность: 12
 Сказал(а) спасибо: 7
Поблагодарили 8 раз(а) в 7 сообщениях
|
Re: [Инжект] Функция для работы с GUI
День добрый.
Уже пару дней расковыриваю как взаимодействовать с GUI и как-то не очень получается.
Кейс первый.
Загружен клиент, в нем открыт список титулов, фокус установлен на editbox с поиском: Win_TitleList.Txt_Search.
Пытаюсь установить новое текстовое значение в этот контрол, но просто затирается текущее, причем каретка остается на месте:
Код:
public static void Test1(int pid = 1111)
{
//process
Process process = null;
var processes = Process.GetProcessesByName("elementclient");
foreach (var p in processes)
if (p.Id == pid)
{
process = p;
break;
}
if (process == null)
return;
//handle
IntPtr handle = OpenProcess(0x001F0FFF, false, process.Id);
//read mem
uint bytesread;
var buffer = new byte[4];
//game
ReadProcessMemory(handle, 0xEFFDAC, buffer, 4, out bytesread);
var game_addr = BitConverter.ToUInt32(buffer, 0);
//gui
ReadProcessMemory(handle, game_addr + 0x18, buffer, 4, out bytesread);
var gui_addr = BitConverter.ToUInt32(buffer, 0);
ReadProcessMemory(handle, gui_addr + 0x8, buffer, 4, out bytesread);
gui_addr = BitConverter.ToUInt32(buffer, 0);
//active_win
ReadProcessMemory(handle, gui_addr + 0x74, buffer, 4, out bytesread);
var active_win = BitConverter.ToUInt32(buffer, 0);
//active_control
ReadProcessMemory(handle, active_win + 0xE8, buffer, 4, out bytesread);
var active_control = BitConverter.ToUInt32(buffer, 0);
//active_edittext
ReadProcessMemory(handle, active_control + 0x13FC, buffer, 4, out bytesread);
var active_edittext = BitConverter.ToUInt32(buffer, 0);
//alloc
var value = "some text";
var new_addr = VirtualAllocEx(handle, 0, value.Length * 2 + 2, 0x1000, 0x04);
//write str
var bytes = Encoding.ASCII.GetBytes(value + "\0");
uint byteswritten;
WriteProcessMemory(handle, new_addr, bytes, bytes.Length, out byteswritten);
//write addr
bytes = BitConverter.GetBytes(new_addr);
WriteProcessMemory(handle, active_edittext, bytes, bytes.Length, out byteswritten);
//free
CloseHandle(handle);
}
Кейс второй.
Фокус все там же. В строке поиска какое-то значение. Пытаюсь нажать кнопку "Поиск" Win_TitleList.Btn_Search, но ничего не происходит.
Код:
public static void Test2(int pid = 1111)
{
//process
Process process = null;
var processes = Process.GetProcessesByName("elementclient");
foreach (var p in processes)
if (p.Id == pid)
{
process = p;
break;
}
if (process == null)
return;
//handle
IntPtr handle = OpenProcess(0x001F0FFF, false, process.Id);
//read mem
uint bytesread;
var buffer = new byte[4];
//game
ReadProcessMemory(handle, 0xEFFDAC, buffer, 4, out bytesread);
var game_addr = BitConverter.ToUInt32(buffer, 0);
//gui
ReadProcessMemory(handle, game_addr + 0x18, buffer, 4, out bytesread);
var gui_addr = BitConverter.ToUInt32(buffer, 0);
ReadProcessMemory(handle, gui_addr + 0x8, buffer, 4, out bytesread);
gui_addr = BitConverter.ToUInt32(buffer, 0);
//active_win
ReadProcessMemory(handle, gui_addr + 0x74, buffer, 4, out bytesread);
var active_win = BitConverter.ToUInt32(buffer, 0);
//controls
ReadProcessMemory(handle, active_win + 0x1C8, buffer, 4, out bytesread);
var controls = BitConverter.ToUInt32(buffer, 0);
//control
var it = 31;//Btn_Search index
var control = controls;
for (var i = 0; i < it; i++)
{
ReadProcessMemory(handle, control + 0xC, buffer, 4, out bytesread);
control = BitConverter.ToUInt32(buffer, 0);
}
ReadProcessMemory(handle, control + 0x8, buffer, 4, out bytesread);
control = BitConverter.ToUInt32(buffer, 0);
#region check name
ReadProcessMemory(handle, control + 0x18, buffer, 4, out bytesread);
var control_name_addr = BitConverter.ToUInt32(buffer, 0);
var string_buffer = new byte[8000];
ReadProcessMemory(handle, control_name_addr, string_buffer, string_buffer.Length, out bytesread);
var control_name = string.Empty;
for (var i = 0; i < string_buffer.Length; i = i + 1)
if (string_buffer[i] == 0)
{
control_name = Encoding.ASCII.GetString(string_buffer, 0, i);
break;
}
if (!control_name.Equals("Btn_Search"))
return;
#endregion
//command
ReadProcessMemory(handle, control + 0x1C, buffer, 4, out bytesread);
var command = BitConverter.ToUInt32(buffer, 0);
//asm
var asm = string.Empty;
asm += Asm.Pushad();//60
asm += Asm.Mov_ECX((int)active_win);//B9+IntToHex(addr)
asm += Asm.Push68((int)command);//68+IntToHex(addr)
asm += Asm.Mov_EAX((int)0xAE71C0);//B8C071AE00
asm += Asm.Call_EAX();//FFD0
asm += Asm.Popad();//61
asm += Asm.Ret();//C3
//run
var func_alloc_address = VirtualAllocEx(handle, 0, 1024, 0x1000, 0x04);
var asm_bytes = Asm.GetBytes(asm);
uint byteswritten;
WriteProcessMemory(handle, func_alloc_address, asm_bytes, asm_bytes.Length, out byteswritten);
IntPtr thread_id;
CreateRemoteThread(handle, IntPtr.Zero, 0, (int)func_alloc_address, IntPtr.Zero, 0, out thread_id);
VirtualFreeEx(handle, (int)func_alloc_address, asm_bytes.Length, 0x8000);
//free
CloseHandle(handle);
}
Вызовы из winapi без оберток.
asm - модифицированный krukovis.ASM, так чтоб они возвращали значение.
|
|
|
28.05.2017, 19:43
|
#47
|
|
|
|
Разведчик
|
 Регистрация: 19.08.2011
 Сообщений: 25
 Популярность: 465
 Сказал(а) спасибо: 2
Поблагодарили 17 раз(а) в 9 сообщениях
|
Re: [Инжект] Функция для работы с GUI
Кто-нибудь уже искал адрес функции? Что-то сигнатура поменялась по ходу. Буду благодарен, если кто-то подскажет...
________________
Skype: ScriptoZ
ЗАПРОС АВТОРИЗАЦИИ=ИГНОР
|
|
|
02.06.2017, 14:38
|
#48
|
|
|
|
Разведчик
|
 Регистрация: 06.08.2016
 Сообщений: 13
 Популярность: -108
 Сказал(а) спасибо: 0
Поблагодарили 17 раз(а) в 9 сообщениях
|
Re: [Инжект] Функция для работы с GUI
|
|
|
19.12.2017, 16:55
|
#49
|
|
|
|
Разведчик
|
 Регистрация: 06.12.2009
 Сообщений: 20
 Популярность: 10
 Сказал(а) спасибо: 5
Поблагодарили 4 раз(а) в 3 сообщениях
|
Re: [Инжект] Функция для работы с GUI
Инжект не изменился? А то криент крашится при попытке нажать на кнопку(пви)
|
|
|
19.12.2017, 20:43
|
#50
|
|
|
|
Разведчик
|
 Регистрация: 11.10.2010
 Сообщений: 13
 Популярность: 10
 Сказал(а) спасибо: 3
Поблагодарили 5 раз(а) в 5 сообщениях
|
Re: [Инжект] Функция для работы с GUI
|
|
|
20.12.2017, 03:57
|
#51
|
|
|
|
Разведчик
|
 Регистрация: 06.12.2009
 Сообщений: 20
 Популярность: 10
 Сказал(а) спасибо: 5
Поблагодарили 4 раз(а) в 3 сообщениях
|
Re: [Инжект] Функция для работы с GUI
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Смотря какая кнопка, старые контролы все нажимаются.
|
|
 |
|
 |
|
Значит GUI адрес неправильный использую.
Не подскажешь адрес для этой версии клиента?
Все, нашел
Последний раз редактировалось Venzel; 20.12.2017 в 22:52.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
[Помогите!] Функция
|
Xaker-style |
Общение разработчиков |
7 |
16.03.2012 21:36 |
[Обсуждение] Функция Магнит
|
ˆGeFoRcEˆ |
Общение и обсуждение, архив Point Blank |
5 |
07.01.2012 11:50 |
[Помогите!] Функция открытия
|
Rakim |
Вопросы и ответы, обсуждения |
1 |
23.07.2011 09:40 |
[Информация] Функция открыта
|
Vadimka999 |
Общение и обсуждение, архив Point Blank |
5 |
10.05.2010 18:58 |
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 21:23.
|
 |