Jump to content

Search the Community

Showing results for tags 'OllyDBG'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Russian Section
    • Новости и объявления
    • Пиратия: Документация
    • Пиратия: Релизы
    • Пиратия: Разработка
    • Пиратия: Web
    • Пиратия: Помощь
    • Совместные проекты / набор команды
    • Доска объявлений
    • Программирование
    • Оффтопик
    • Корзина
  • English Section
    • News & Announcements
    • Guides
    • Releases
    • Development
    • Web
    • Questions & Help
    • Shared Projects / Team search
    • Paid services & Requests
    • Programming
    • Offtopic
    • Recycle bin
  • Portuguese Section
    • Dúvidas & Ajuda
  • Spanish Section
    • Preguntas y Ayuda
  • Servers
    • Russian servers
    • English servers

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Found 2 results

  1. Отключаем сообщения о погоде Привет! В этом гайде я расскажу каким образом можно убрать сообщения о погоде из системы. Работать будем с GameServer.exe, под понятием "сервер" будет подразумеваться GameServer. Есть 2 способа отключения сообщений о погоде. Первый состоит в том, чтобы вообще убрать погоду с сервера. Второй - произвести некоторые изменения в GameServer.exe, при этом погода останется, но сообщения в систему о ней исчезнут. Способ I - Нет погоды нет сообщений В директории resource сервера находятся папки с картами (garner, magicsea, darkblue, guildwar и так далее). В каждой такой папке лежит файл: картаmonster_conf.lua где карта это название папки, в которой находится данный файл - garner, magicsea, darkblue, guildwar и так далее. В этом файле указываются точки возрождения монстров и области карты, в которых происходят погодные явления. Области карты для погоды определяются функцией AddWeatherRegion(). Например, для Аскарона (garner) погода в файле garnermonster_conf.lua определяется следующим образом: AddWeatherRegion(9, 8, 40, 2434, 2800 , 80, 80) AddWeatherRegion(11, 8, 40, 2247, 2960 , 80, 80) AddWeatherRegion(9, 8, 40, 1190, 1140 , 80, 80) AddWeatherRegion(11, 8, 40, 1160, 1400 , 80, 80) Наша задача заключается в том, чтобы удалить или закомментировать (--) вызовы функции AddWeatherRegion() в файле monster_conf.lua для каждой карты. Таким образом, мы отключим погоду на сервере. После проделанных изменений не забудьте перезагрузить GameServer.exe. Способ II - Патчим GameServer.exe Данный способ уже сложнее, но позволяет сохранить погоду на сервере. Вам понадобится отладчик OllyDbg 1.10 и базовые знания языка Ассемблера. Открываем GameServer.exe в OllyDbg (File -> Attach -> В списке процессов выбрать GameServer.exe). Затем переходим в модуль GameServer (View -> Executable modules -> В списке модулей выбрать GameServer), его адрес (Base) 0x00400000. Далее проанализируйте дизассемблированный код. Для этого в контекстном меню окошка с инструкциями (кодом) выберите Analysis -> Analyse code или нажмите сочетание клавиш Ctrl + A. В итоге мы должны получить следующее: Окно с инструкциями - кодом Далее нужно найти строку с сообщением о погоде. Так как я работаю с GameServer.exe версии 1.38, то данная строка находится в .res файле. Декомпилируем .res файл: На выходе получается текстовый файл. Производим поиск по файлу с помощью ключевого слова "weather" и находим строку: GM_WEATHER_CPP_00001 { "Weather: Current sea{0} {1}nearby will occur{2}" } Это шаблонная строка для сообщения о погоде, которое выводится в системный чат. Видно, что идентификатором этой строки является строка "GM_WEATHER_CPP_00001", её мы и будем искать в GameServer.exe. Для этого в контекстном меню окна с инструкциями выполняем команду Search for -> All refernced text strings. В появившемся окне с текстовыми строками ищем строку "GM_WEATHER_CPP_00001" (контекстное меню -> Search for text -> GM_WEATHER_CPP_00001). Затем кликаем по найденной строке правой кнопкой мыши и выбираем команду Follow in Disassembler (или нажимаем Enter). В результате мы видим, что данная строка используется по адресу 0x0004B1D93: 004B1D8B | PUSH EAX ; /Arg3 004B1D8C | LEA ECX,DWORD PTR SS:[EBP-C8] ; | 004B1D92 | PUSH ECX ; |Arg2 004B1D93 | PUSH 0x005C2AA8 ; |Arg1 = 005C2AA8 ASCII "GM_WEATHER_CPP_00001" 004B1D98 | MOV ECX,0x0071E084 ; | 004B1D9D | CALL 0x0054EA70 ; \?Format@CResourceBundleManage@@QAEHPBDAAVCFormatParameter@@QAD@Z 004B1DA2 | LEA EAX,DWORD PTR SS:[EBP-C0] 004B1DA8 | PUSH EAX ; /Arg1 004B1DA9 | MOV ECX,DWORD PTR DS:[71E078] ; | 004B1DAF | CALL 0x0049E0C0 ; \CGameApp::LocalNotice 004B1DB4 | MOV EAX,DWORD PTR SS:[EBP-14] 004B1DB7 | XOR EDX,EDX 004B1DB9 | MOV ECX,3E8 Как нетрудно догадаться, данные инструкции загружают шаблонную строку из .res файла, подставляют в неё координаты и название погодного явления, а затем выводят получившееся сообщение в системный чат. Отключим вывод сообщения о погоде в системный чат. Для этого необходимо затереть соответствующие инструкции: 004B1DA2 | LEA EAX,DWORD PTR SS:[EBP-C0] 004B1DA8 | PUSH EAX ; /Arg1 004B1DA9 | MOV ECX,DWORD PTR DS:[71E078] ; | 004B1DAF | CALL 0x0049E0C0 ; \CGameApp::LocalNotice Чтобы затереть данные инструкции, нужно заменить их байты на 0x90 (инструкция NOP). Выделяем инструкции начиная с адреса 0x04B1DA2 по адрес 0x004B1DAF и вызываем контекстное меню. В контекстном меню выполняем команду Binary -> Fill with NOP's. Получаем следующие инструкции: 004B1D8B | PUSH EAX ; /Arg3 004B1D8C | LEA ECX,DWORD PTR SS:[EBP-C8] ; | 004B1D92 | PUSH ECX ; |Arg2 004B1D93 | 0x005C2AA8 ; |Arg1 = 005C2AA8 ASCII "GM_WEATHER_CPP_00001" 004B1D98 | MOV ECX,0x0071E084 ; | 004B1D9D | 0x0054EA70 ; \?Format@CResourceBundleManage@@QAEHPBDAAVCFormatParameter@@QAD@Z 004B1DA2 | NOP 004B1DA3 | NOP 004B1DA4 | NOP 004B1DA5 | NOP 004B1DA6 | NOP 004B1DA7 | NOP 004B1DA8 | NOP 004B1DA9 | NOP 004B1DAA | NOP 004B1DAB | NOP 004B1DAC | NOP 004B1DAD | NOP 004B1DAE | NOP 004B1DAF | NOP 004B1DB0 | NOP 004B1DB1 | NOP 004B1DB2 | NOP 004B1DB3 | NOP 004B1DB4 | MOV EAX,DWORD PTR SS:[EBP-14] 004B1DB7 | XOR EDX,EDX 004B1DB9 | MOV ECX,3E8 Сохраним проделанные изменения. В контекстном меню выбираем команду Copy to executable -> All modifications. На вопрос "Copy selection to executable file?" отвечаем "Copy all". Появится окошко, просто закрываем его крестиком. Далее программа задаст новый вопрос типа: "Файл GameServer.exe был изменен! Сохранить изменения?", отвечаем "Да" и в диалоге выбора файла, вводим название для измененного GameServer.exe. Запускаем измененный GameServer.exe и убеждаемся, что сообщений о погоде в системе больше нет. Для GameServer.exe версии 1.36 шаг с декомпиляцией .res соответственно нужно пропустить и сразу искать непосредственно строку сообщения о погоде по ключевому слову "weather". Я нашел такую строку: Weather: %s has occurred at location %d %d Затем нужно аналогичным образом затереть инструкции начиная с адреса 0x004AA928 по адрес 0x004AA935.
  2. Can anyone make a guide on how to increase the code caves to be able to insert new function into assembly? Thank you in advance and apologize for English.
×
×
  • Create New...