Пишемо бота для MMORPG з асемблером і дренейками
Зміст
- Частина 0 — Пошук точки впровадження коду
- Частина 1 — Використання та виконання стороннього коду
- Частина 2 - Ховаємо код від сторонніх очей
- Частина 3 - Під прицілом World of Warcraft 5.4.x (Структури)
- Частина 4 - Під прицілом World of Warcraft 5.4.x (Переміщення)
- Частина 5 - Під прицілом World of Warcraft 5.4.x (Кастуємо фаєрбол)
GetAnyGameObjectFunctionPointer - повертає нам який-небудь об'єкт, покажчик на нього буде поміщений в eax argument[N]Pointer - покажчик на N-ий аргумент дляDoAnythingFunction.
Потім йде питання про DLL injection. На battle.net сервері це потенційно небезпечний спосіб, т.к. ваша DLL може піти на дослідження до відділу захисту. Адже це найпоширеніший підхід як у читерстві, так і в ботівництві впровадити свою DLL. І пам'ятайте, популярність підходу, прямо пропорційна можливості попастися.
Наступне питання це «чому не c++?». Це вже справа смаку. Якщо ви можете зробити краще і швидше на c++ - робіть, але на даний момент, крім неконструктивної критики підходу, нічого не побачив. Ніодного прикладу реалізації на c++. Адже дивно, коли всі можуть ніхто не робить.
Ще цікаве питання «чому не x64?». Якщо підняти 4 віртуалки з win7 x86 і запустити бота на кожній, при цьому ресурсів споживати від хост-машини вони будуть меншими, ніж win7 x64. Та й взагалі мені індиферентно на якій платформі бігає бот, та й йому теж. Це питання актуальне буде при написанні читів, коли сам граєш.
На решту запитань відповідь буде наступною: «За останні 4 роки на battle.net сервері, я жодного разу не отримав бан або попередження»
З приводу помилок у коді та постах. Так, у мене можливі помилки і помилки, як і у всіх вас і якщо ви помітили їх, то не варто ними розмахувати, як прапором на червоній площі на параді, просто напишіть мені особисте повідомлення і я обов'язково виправлю її. Це продемонструє не тільки вашу уважність та знання, а й ввічливість та вихованість. Це як якщо під час їжі у людини на бороді залишився соус чи сама їжа. Ви вважаєте це правильно за столом обговорити, наскільки концептуально вона зависла?
2. Пошук офсетівДля пошуку офсетів, я віддаю перевагу пошуку по масці. Природно, що найкращий спосіб знайти покажчик на функцію — це налагодження, і тільки вона дасть 100% гарантію, що ви знайшли саме те, що потрібно. Але цей процес може бути дуже стомлюючим і довгим, та й як для новачків у 5 статей пояснити про налагодження, брейкпоінти та дизассемблер, коли й так майже нічого не зрозуміло, як я помітив. Тому я використовую у статті пошук по масці. Давайте розглянемо все на прикладі. Для початку скачаємо 2 різних файли Wow.exe, однієї мажорної версії (я взяв 5.4.7 17898 та клієнт WowCircle-32.exe 5.4.7 18019). Наше завдання знайти офсети для Морфера при цьому офсети для 17898 нам відомі:
CD 21 - bytes0xCD, 0x21 21CD - bytes 0xCD, 0x21 (the order depends on the endiannes) Hello, 0 - null terminated string Hello L Hello - 'H', 0, 'e', 0, 'l', 0, 'l', 0, 'o', 0 B8. 90 - byte 0xB8, 4 bytes with any value, byte 0x90
Наприклад для пошуку CGUnit_C__UpdateScale я візьму не перші 15 байт, а з 21-го до 35-го, т.к. там нема небажаних інструкцій. Можна для цих цілей також використовувати IDA плагін MakeSig.
Хардкорна конфа за С++. Ми запрошуємо лише профі.