Ние пишем бот за MMORPG с асемблер и draenei

Съдържание

  1. Част 0 - Намиране на точка за въвеждане на код
  2. Част 1 - Внедряване и изпълнение на код на трета страна
  3. Част 2 - Скриване на кода от любопитни очи
  4. Част 3 - Под оръжието World of Warcraft 5.4.x (Структури)
  5. Част 4 - Под пушката World of Warcraft 5.4.x (Движение)
  6. Част 5 - Под оръжието World of Warcraft 5.4.x (Casting fireball)
1. ЧЗВНай-често задаваният въпрос е “защо асемблер?”. Човек получава чувството, че хората имат паническа атака при думата асемблер, слагат уши и изключват мозъка. Няма нужда да се страхувате толкова от него, той не е толкова страшен. В края на краищата, какво може да бъде по-лесно от това да поискате от самата програма да изпълни собствената си функция и да постави резултата в указател, който познавате? Няма нужда да преоткривам колелото, използвам това, което имам. Вижте колко лесно е да извикате вътрешната функцияDoAnythingFunctionс указателDoAnythingFunctionPointerкъм нея в асемблер

GetAnyGameObjectFunctionPointer - връща ни някакъв обект, указател към него ще бъде поставен в eax argument[N]Pointer - указател към N-тия аргумент заDoAnythingFunction.

След това идва въпросът за инжектирането на DLL. На сървър на 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). Нашата задача е да намерим отмествания за Morpher, докато отместванията за 17898 са ни известни:

CD 21 - байтове0xCD, 0x21 21CD - байтове 0xCD, 0x21 (редът зависи от endiannes) "Hello", 0 - низът с нулев край "Hello" L"Hello" - 'H', 0, 'e', ​​​​0, 'l', 0, 'l', 0, 'o', 0 B8. 90 - байт 0xB8, 4 байта с произволна стойност, байт 0x90

Например, за да търся CGUnit_C__UpdateScale, ще взема не първите 15 байта, а от 21 до 35, т.к. няма нежелани инструкции. Можете също да използвате плъгина MakeSig IDA за тази цел.

Hardcore conf в C++. Каним само професионалисти.