 |
Инжектим на C#| Injection on C# - Разработка ПО для Perfect World - Бюро разработчиков Zhyk.Ru: создание ботов, снифферов и прочих программ для Perfect World |
20.06.2012, 22:14
|
#1
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 07.10.2009
 Сообщений: 496
 Популярность: 2687
 Сказал(а) спасибо: 64
Поблагодарили 325 раз(а) в 105 сообщениях
|
Инжектим на C#| Injection on C#
Добрый день!
Считается что C# сложнее для использования инжектов чем Delphi. Хочу раз и навсегда развеять этот миф.
Проблема часто в том, что в C# нет встроенного asm-а, а практически все примеры функций для внедрения выкладываются на Delphi. И каждый программист придумывает для себя свои способы для внедрения байт-кода в процесс игры. Для этой цели существует класс ASM для C#. Он абстрагирует программиста от байт-кода и заменяет его привычными командами asm-а. Чем облегчает жизнь и новичков и тех кто уже пожил.
Хочу с вами поделиться этим классом. Он облегчает перевод функций написанных на Delphi и других языках где есть встроенный asm(С++, Power Basic и др.) .
Чтобы не грузить объяснениями я добавил этот класс в PW FrameWork (а так же добавил несколько функций в него и пару переделал для личных и возможно в будущем ваших целей) и добавил в решение Демо проект по использованию Инжекта на C#, а так же пример функции на Delphi и ее перевод на C# с использованием класса ASM.
Итак во вложении Пример использования класса ASM для Инжекта и PW FrameWork (с моими правками и классом ASM).
Всем комфортного кодинга!
________________
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
|
|
|
7 пользователя(ей) сказали cпасибо:
|
|
21.06.2012, 00:29
|
#2
|
|
|
|
Разведчик
|
 Регистрация: 17.09.2009
 Сообщений: 46
 Популярность: 1187
 Сказал(а) спасибо: 8
Поблагодарили 50 раз(а) в 13 сообщениях
|
Re: Инжектим на C#| Injection on C#
FASM_Managed ? BlackMagic ?
|
|
|
21.06.2012, 15:52
|
#3
|
|
|
|
Разведчик
|
 Регистрация: 23.12.2011
 Сообщений: 42
 Популярность: 192
 Сказал(а) спасибо: 26
Поблагодарили 11 раз(а) в 9 сообщениях
|
Re: Инжектим на C#| Injection on C#
krukovis вот у меня вопрос а как передать UInt значение так как wid его требует а в int не влезет wid.
Вот код
Код:
private void PickWall(int wid, int type)
{
int intProcID = this.ProcessID;
int Address = 0x0489470;
asm.Pushad();
asm.Mov_EAX(BaseAddress);
asm.Mov_EAX_DWORD_Ptr_EAX();
asm.Mov_EAX_DWORD_Ptr_EAX_Add(0x1c);
asm.Mov_ESI_DWORD_Ptr_EAX_Add(0x34);
asm.Mov_EAX(type);
asm.Push_EAX();
asm.Mov_EDX(wid);//Вот тут та и должно дыть uint а если эго поставить оно орет.
asm.Push_EDX();
asm.Mov_EDX(Address);
asm.Call_EDX();
asm.Popad();
asm.Ret();
asm.RunAsm(intProcID, 0);
}
|
|
|
21.06.2012, 16:02
|
#4
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 07.10.2009
 Сообщений: 496
 Популярность: 2687
 Сказал(а) спасибо: 64
Поблагодарили 325 раз(а) в 105 сообщениях
|
Re: Инжектим на C#| Injection on C#
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
krukovis вот у меня вопрос а как передать UInt значение так как wid его требует а в int не влезет wid.
|
|
 |
|
 |
|
У меня нормально работало с int.
Вот старая функция:
Код:
/// <summary> Поднятие лута и Копка ресурсов(переделано) </summary>
/// <param name="ItemWorldID">WorldID ресурса (SN)</param>
/// <param name="ItemType">Type ресурса (0-лут, 1-шахта)</param>
///
public void PickLoot(int ItemWorldID, int ItemType)
{
int intProcID = ProcessID;
int CallAddress = 0x469b40;
//ASM asm = new ASM();
asm.Pushad();
asm.Mov_ECX_DWORD_Ptr(BaseAddress);
asm.Mov_ECX_DWORD_Ptr_ECX_Add(0x1c);
asm.Mov_ECX_DWORD_Ptr_ECX_Add(0x34);
asm.Push68(ItemType);
asm.Push68(ItemWorldID);
asm.Mov_EAX(CallAddress);
asm.Call_EAX();
asm.Popad();
asm.Ret();
asm.RunAsm(intProcID, 0);
}
Добавлено через 2 минуты
Считывай WID в int и передавай в int. Просто у тебя WID будет отрицательное. Но какая разница. Все нормально отрабатывает.
________________
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
Последний раз редактировалось krukovis; 21.06.2012 в 16:04.
Причина: Добавлено сообщение
|
|
|
2 пользователя(ей) сказали cпасибо:
|
|
21.06.2012, 16:06
|
#5
|
|
|
|
Разведчик
|
 Регистрация: 23.12.2011
 Сообщений: 42
 Популярность: 192
 Сказал(а) спасибо: 26
Поблагодарили 11 раз(а) в 9 сообщениях
|
Re: Инжектим на C#| Injection on C#
Теперь уже понял как обращаться с инжектами на C#. Благодарствую.
Добавлено через 5 минут
krukovis, Вот у меня почему то оно ругаеца что wid uint а вот и сам он 3222277307. В чем может быть проблема.
Добавлено через 9 минут
Так все понял. Надо из игры читать вид как инт. Все работает спс.
Последний раз редактировалось samosi; 21.06.2012 в 16:16.
Причина: Добавлено сообщение
|
|
|
21.06.2012, 16:20
|
#6
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 07.10.2009
 Сообщений: 496
 Популярность: 2687
 Сказал(а) спасибо: 64
Поблагодарили 325 раз(а) в 105 сообщениях
|
Re: Инжектим на C#| Injection on C#
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
krukovis, Вот у меня почему то оно ругаеца что wid uint а вот и сам он 3222277307. В чем может быть проблема.
|
|
 |
|
 |
|
А моя функа работает? Не забудь адрес только поправить на сегодняшний перед тестом.
Проблема в том, что не работает класс ASM с UInt, только с Int или Int32. Передавай в функцию int wid. И считывай MemoryManager.ReadInt. И все будет работать.
Добавлено через 3 минуты
Или конвертируй в Int тут:
asm.Mov_EDX(wid);//Вот тут та и должно дыть uint а если эго поставить оно орет.
меняй на:
asm.Mov_EDX(Convert.ToInt32(wid));
________________
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
Последний раз редактировалось krukovis; 21.06.2012 в 16:23.
Причина: Добавлено сообщение
|
|
|
Пользователь сказал cпасибо:
|
|
16.07.2012, 11:10
|
#7
|
|
|
|
Разведчик
|
 Регистрация: 12.01.2012
 Сообщений: 10
 Популярность: 10
 Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Инжектим на C#| Injection on C#
Движение по координатам, в режиме полета - перс самостоятельно не встает на полет, это у меня косяк или это не закладывалось? (использую твой пример с инжектом)
|
|
|
16.07.2012, 11:28
|
#8
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 07.10.2009
 Сообщений: 496
 Популярность: 2687
 Сказал(а) спасибо: 64
Поблагодарили 325 раз(а) в 105 сообщениях
|
Re: Инжектим на C#| Injection on C#
________________
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
|
|
|
22.07.2012, 22:50
|
#9
|
|
|
|
Разведчик
|
 Регистрация: 27.06.2011
 Сообщений: 30
 Популярность: 351
 Сказал(а) спасибо: 25
Поблагодарили 144 раз(а) в 13 сообщениях
|
Re: Инжектим на C#| Injection on C#
Хотел сделать с помощью этого инжекта что-то типа прогулки по вейпоинтам. Но прописав несколько WalkTo, персонаж идёт только в одно место. Подскажите, как можно реализовать такую "прогулку по вейпоинтам".
|
|
|
22.07.2012, 23:19
|
#10
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 07.10.2009
 Сообщений: 496
 Популярность: 2687
 Сказал(а) спасибо: 64
Поблагодарили 325 раз(а) в 105 сообщениях
|
Re: Инжектим на C#| Injection on C#
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Хотел сделать с помощью этого инжекта что-то типа прогулки по вейпоинтам. Но прописав несколько WalkTo, персонаж идёт только в одно место. Подскажите, как можно реализовать такую "прогулку по вейпоинтам".
|
|
 |
|
 |
|
Может надо это делать в цикле?
Алгоритм м.б. примерно такой:
Пока не дошли до точки 1 - идем в эту точку.
Как дошли - идем во вторую.
...
Пока не дойдем до последней.
________________
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
Последний раз редактировалось krukovis; 22.07.2012 в 23:23.
|
|
|
Пользователь сказал cпасибо:
|
|
05.08.2012, 10:36
|
#11
|
|
|
|
Разведчик
|
 Регистрация: 02.04.2010
 Сообщений: 3
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Инжектим на C#| Injection on C#
krukovis, Подскажи пожалуйста, как правильно пользоваться классом OffsetRetriever (как я понимаю, он нужен для поиска оффсетов в файле elementclient.exe, верно?)?
|
|
|
05.08.2012, 11:29
|
#12
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 07.10.2009
 Сообщений: 496
 Популярность: 2687
 Сказал(а) спасибо: 64
Поблагодарили 325 раз(а) в 105 сообщениях
|
Re: Инжектим на C#| Injection on C#
________________
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
|
|
|
19.09.2012, 13:32
|
#13
|
|
|
|
Сержант
|
 Регистрация: 07.09.2010
 Сообщений: 124
 Популярность: 147
 Сказал(а) спасибо: 22
Поблагодарили 87 раз(а) в 18 сообщениях
|
Re: Инжектим на C#| Injection on C#
krukovis, на самом деле, он ищет не в процессе, а в файле elementclient.exe на диске, зоторый был запущен  Нужен для поиска оффсетов и адресов по шаблонам. Например, некий оффсет меняется от версии к версии, но в коде клиента различных версий используется всегда в одной и той же последовательности команд, например:
PUSH ECX
XOR ECX, ECX
MOV EAX, [EDX+OFF_1]
тогда переводим этот фрагмент в байтовый код, те байты, в которых должно находиться значение оффсета заменяем на ? - получаем шаблон для поиска.
Вообще, класс ASM полезный, но слишком сильно дублирует возможности MemoryManager2. Я бы сделал класс, который вообще ничего не знает о процессах, тупо сериализует ассемблерные команды в массив байт, который потом можно было бы записать в память процесса через MemPtr.Bytes, и выполнить с помощью MemPtr.CreateRemoteThread()
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
|
|
|
19.09.2012, 16:49
|
#14
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 07.10.2009
 Сообщений: 496
 Популярность: 2687
 Сказал(а) спасибо: 64
Поблагодарили 325 раз(а) в 105 сообщениях
|
Re: Инжектим на C#| Injection on C#
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
krukovis, на самом деле, он ищет не в процессе, а в файле elementclient.exe на диске, зоторый был запущен
|
|
 |
|
 |
|
Да, когда я писал, я думал что он ищет в открытой памяти процесса, а когда решил использовать в проекте PerfectAutoLogin, оказалось, что в файле. Это очень не удобно, если на elementclient навешена обертка - такое часто встречается на фришках.
Я дописал в класс OffsetRetriever несколько методов для работы с открытой памятью. Добавил поиск не только смещений, но еще и адресов функций для инжектов. Пример работы можно посмотреть в PerfectAutoLogin последней версии. Исходники последней версии PWFrameWork могу кинуть в личку. Но это все равно не конечный вариант. Хочу еще улучшить - переводить байт-код в строку и уже эту строку разбирать с помощью регулярных выражений. Мне кажется это должно быть быстрее и позволит составлять маски любой сложности и более гибко. Если есть какие то мысли по этому поводу - прошу озвучить.
Ты больше ничего не делал с фреймворком?
Можешь откомментировать класс MemoryManager2?
 |
Цитата: |
 |
|
|
|
|
|
|
|
|
Вообще, класс ASM полезный, но слишком сильно дублирует возможности MemoryManager2. Я бы сделал класс, который вообще ничего не знает о процессах, тупо сериализует ассемблерные команды в массив байт, который потом можно было бы записать в память процесса через MemPtr.Bytes, и выполнить с помощью MemPtr.CreateRemoteThread()
|
|
 |
|
 |
|
Я не понимаю в чем дублирование MemoryManager2. Поясни плиз. Класс ASM как раз ничего не знает о процессах, а просто переводит псевдо-ассемблерные команды в байт код, а уже потом инжектит его.
В данные момент у меня новая версия класса ASM и новый класс для работы с памятью, вместо MemoryManager. Я переписал MemoryManager для работы с несколькими окнами и добавил несколько дополнительных свойств.
Все это было нужно чтобы решить большую проблему при внедрении своего кода в процесс игры. При инжекте кода в процесс игры, через какое то время, память перестает выделяться и инжекты перестают работать. Чтобы решить эту проблему - я переписал класс для работы с памятью. Теперь память у меня выделяется один раз - при открытии памяти и вся работа с памятью строится на работе с этой выделенной страницей. Так же я добавил возможность работы с несколькими окнами.
В паблик пока тоже не выкладывал. Если кому нужно - могу кинуть в личку. Просьбы, соответственно, тоже прошу направлять в ЛС.
________________
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
Последний раз редактировалось krukovis; 20.09.2012 в 20:23.
|
|
|
26.09.2012, 14:46
|
#15
|
|
|
|
Сержант
|
 Регистрация: 07.09.2010
 Сообщений: 124
 Популярность: 147
 Сказал(а) спасибо: 22
Поблагодарили 87 раз(а) в 18 сообщениях
|
Re: Инжектим на C#| Injection on C#
krukovis, регулярные выражения для таких задач - слишком медленные. Хоть и мощная штука.
MemoryManager - это было в самой первой версии PWFW, сделано первоначальным разработчиком библиотеки =) Я её почти не трогал, оставил для совместимости. MemoryManager2 - более удобная штука, плюс позволяет работать с несколькими процессами (в т.ч. с текущим) одновременно, с внутриигровыми списками, мэпами и т.д.
А чтобы память не переставала выделяться - её надо освобождать
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
[Помогите!] SQL injection
|
carl1993 |
Общение и обсуждение, архив Lineage 2 |
3 |
19.05.2012 12:59 |
faild injection dll
|
FABIK |
Общение и обсуждение, архив Point Blank |
1 |
05.11.2011 12:48 |
SQL injection с ЛК
|
KillerTT |
Общение и обсуждение, архив Lineage 2 |
0 |
04.07.2011 00:32 |
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 21:31.
|
 |