private void AllocateMemory()
{
//Выделяем страницу память в 2000 байт
int alloc_address = WinApi.VirtualAllocEx(this.OpenedProcessHandle, 0, 2500, WinApi.AllocationType.Commit, WinApi.MemoryProtection.ReadWrite);
//Сначала листа будут прописываться функции
this.FuncAllocMemory = alloc_address;
//с отступом в 500 - будет логин
this.LoginAllocMemory = alloc_address + 500;
//с отступом в 1000 - будет пароль
this.PassAllocMemory = alloc_address + 1000;
//с отступом в 1500 - будет прописываться другой текст
this.TextAllocMemory = alloc_address + 1500;
//с отступом в 2000 - будет прописываться пакет
this.PacketAllocMemory = alloc_address + 2000;
}
Цитата:
public void RunAsm()
{
//Преобразовываем строку с асмом в байт-код
byte[] Asm = this.AsmChangebytes(this.Asmcode);
//Если процесс не открыт - сообщаем об ошибке и не запускаем функцию
if (this.memory.OpenedProcessID == 0)
{
MessageBox.Show("Process.ID = 0. Невозможно выполнить действие.");
return;
}
//временная переменная
int tmpInt;
//Записываем в открытую память asm-функцию
WinApi.WriteProcessMemory(memory.OpenedProcessHand le, memory.FuncAllocMemory, Asm, Asm.Length, out tmpInt);
IntPtr tmpIntPtr;
//запускаем этот байт код в отдельном потоке
WinApi.CreateRemoteThread(memory.OpenedProcessHand le, IntPtr.Zero, 0, memory.FuncAllocMemory, IntPtr.Zero, 0, out tmpIntPtr);
//очищаем эту память
WinApi.VirtualFreeEx(memory.OpenedProcessHandle, memory.FuncAllocMemory, Asm.Length, WinApi.FreeType.Release);
//очищаем строку с asm кодом
this.Asmcode = "";
}
продолжаю экспериментировать с asm но ни не получается.
Последний раз редактировалось Arsen0208; 15.11.2016 в 23:20.
для поиска WID удобно использовать вот этот оффсет в CE:
BA + 1C + 1C + 18 + 8
значение hex = WID по наведению мыши, работает на NPC, ресы, игроков, мобов
Тупо скопировал тупо вставил и тупо врубил!
Пакет отправился, перс не двигается... Что со мной не так?
P.S. отправку пакета проверил через ПакетЛист.
Добавлено через 3 минуты
Не понимаю почему отправка пакета на Медитацию, например, работает, а этот пакет не работает?..
И список у меня тоже не отображается через С#.. (список лута рядом)
На Delphi что ль переходить?
Последний раз редактировалось Arsen0208; 18.11.2016 в 17:35.
Причина: Добавлено сообщение
Добавлено через 7 минут намекните чайнику что тут не так?
Цитата:
public void Send(byte[] packet)
{
//временная переменная
int tmpInt;
//Записываем в открытую память пакет в выделенное место
WinApi.WriteProcessMemory(memory.OpenedProcessHand le, memory.PacketAllocMemory, packet, packet.Length, out tmpInt);
Кхм.. есть пакеты, а есть ижекты. Похоже ты их не различаешь.
Для пакетов действительно нужна функция отправки, которую ты привёл. Ты заливаешь в память, как функцию, так и сам пакет, потом выполняешь функцию.
Для инжектов достаточно загрузить функцию и выполнить только её.
То что я выложил выше это заботливо написанная функция, без использования asm. тупо загоняешь в память и CreateRemoteThread.
WinApi.WriteProcessMemory(memories[0].OpenedProcessHandle, memories[0].PacketAllocMemory, Packet, Packet.Length, out tmpInt);
WinApi.CreateRemoteThread(memories[0].OpenedProcessHandle, 0, 0,
какие переменные нужно вписать в CreateRemoteThread?...
Добавлено через 3 минуты
И есть ли где на просторах гайд по этой части?.. Потому что все мои скрипты были основанны на готовом ФрэймВорке в котором было достаточно просто адреса сменить, а сейчас вот выясняется что и это нужно хорошо выучить что бы что то получалось.
Последний раз редактировалось Arsen0208; 18.11.2016 в 18:29.
Причина: Добавлено сообщение
Блин, как же мне неудобно в этом вашем C#
накидал полный исходник консольной программы на этом языке, на котором ещё пару дней назад ничего не делал, поэтому косяки с типами переменных в DllImport, главное что это собирается и работает.
Блин, как же мне неудобно в этом вашем C#
накидал полный исходник консольной программы на этом языке, на котором ещё пару дней назад ничего не делал, поэтому косяки с типами переменных в DllImport, главное что это собирается и работает.
Слава чудоволшебнику! Огромнейшее спасибо!
Все работает чудесно!
На последок не подскажите где почитать об инжекте именно таких функций?
А то есть несколько строчек в коде, значение которых я не понимаю вообще
Добавлено через 4 минуты
Цитата:
Сообщение от KLAIDY
Попробуй тут прочитать, может поможет.
[Ссылки могут видеть только зарегистрированные пользователи. ]
Тоже взял на вооружение, спасибо, позже попробую вникнуть во всю предоставленную там инфу.
Последний раз редактировалось Arsen0208; 18.11.2016 в 20:19.
Причина: Добавлено сообщение
Не совсем понял, что не понятно поинжектам. Берём существующую функцию из клиента, которая передаёт необходымые параметры в другую (нам нужную). В конкретном случае: нужная функция расположена по адресу 0x004C46D0, а та функция, которую мы меняли для наших нужд находится по адресу 004BEF38 (посмотри её в памяти, что бы иметь представление). Дальше нам нужно заставить клиент выполнить отредактированную функцию. Для этого мы должны записать её в память нужного процесса, а затем передать на исполнение процессору.
FindWindow - ищем окно игры и получаем его дескриптор
GetWindowThreadProcessId - получаем pid по дискриптору
OpenProcess - подключаемся к процессу по его pid
VirtualAllocEx - выделяем страницу памяти в чужом процессе
WriteProcessMemory - записываем нашу функцию в эту память
CreateRemoteThread - передаём память на исполение процессору