-
Автор темы
- #1
Приветствую любителей пастинга для варфейса.
В нашем сегодняшнем уроке я научу вас реверсить варфейс, чтобы получить то, что вам нужно.
В этом уроке научимся искать STATIC_SSGE, CWeaponSpecific_RequestReload, CWeaponSpecific_RequestShoot, CWeaponSpecific_RequestUnber, GameCvars, IRender, IGame, IPhysicalWorld, IConsole и т.д
Этап 1. Снимаем дамп.
Для того, чтобы начать наше приключение в мира реверсинга нам нужно снять дамп игры. Делается это с помощью Scylla или других удобных для вас дамперов. Скачиваем Scylla, открываем версию в x64 разрядности, запускаем Game.exe из корня Bin64Realease, ждем пока игра полностью загрузиться пока мы не увидим черным экран с логотипом варфейса. После чего в Scylla открываем процесс игры и выбираем File - Dump:
Сохраняем дамп в ту же папку, где находится ваш Game.exe, это важно!
Этап 2. Начинаем работу с IDA.
Скачиваем IDA a.k.a Interactive Disassembler. Открываем наш дамп в IDA. После того, как вы откроете дамп вы увидите это:
Вам нужно подождать пока дамп просканируется полностью, когда он просканируется в нижнем левом углу вы увидите:
Этап 3. Ищем SSGE.
В IDA поиск нужных делается с помощью поиска по строкам. Чтобы найти SSGE вам нужна строка "ai_Compatibilitymode", в IDA нажмите SHIFT+F12 и дождитесь пока IDA просканит весь лист строк, после чего вы увидите окно со строками, нажмите CTRL+F и в пишите в строку ai_Compatibilitymode.
Нажмите на найденную строку два раза, вас перенесет в IDA View, нажмите вот сюда:
Затем нажмите кнопку X, вас перебросит в xref'ы вашей строки, прыгаем по первой строке нажав ОК, мы окажемся в IDA View, нажимаем f5 ничего не делая:
Нас перебросит сюда:
qword_141E62C98 это наш оффсет, уберите из начала qword. Мы получили SSGE, теперь нажав на наш адрес и пометив его желтым цветом нажмите кнопку N, в появившемся поле введите SSGE.
Теперь это выглядит так:
Этап 4. Ищем IGame.
Наша строка для поиска "IsPlayer", именно IsPlayer, а не isPlayer или isplayer.
img]https://i.ibb.co/mFQSW7h/image.png[/img]
Снова прыгаем по второму xref и попадаем в IDA view.
Если сделали все правильно увидите это, нам нужна строка entityId.
Она находится чуть выше нашего IsPlayer.
Жмем F5 и попадаем в псевдокод, здесь нас встретят два саба, нам нужно прыгнуть в первый нажав на него два раза:
Выделено желтым цветом
Мы попадаем сюда и нас встречает такая картина, наш адрес находится здесь:
Выделил желтым
Заходим на сайт https://www.rapidtables.com/convert/number/decimal-to-hex.html
И конвертируем 64 в Hex, получаем 40, адрес нашего IGame = 0x40.
Этап 5. Ищем IRenderer.
Строка для поиска "Draw2DLine". Прыгаем в самый первый xref и сразу жмем f5, попадаем в псевдокод. Прыгаем в самый первый саб, там где v98 =
Выделил желтым:
Скроллим вниз и видим наш адрес, выделил желтым, запомните ваши адреса никогда не должны быть схожи с IGame:
Конвертируем в Hex, получаем адрес IRenderer = 0x48.
Этап 6. Ищем ISystem.
Как обычно ищем строку GetUserName, прыгаем в первый xref, жмем f5, попадаем в псевдокод и тыкаем в самый первый sub.
Видим это, опять выделил желтым, наш адрес 240, конвертируем в hex:
ISystem = 0xF0.
Этап 7. Найдем IPhysicalWorld.
Строка - RayWorldIntersection(Game). Делаем все тоже самое. Xref'оф будет очень много, переходим по самому первому, прыгаем в псевдокод и видим наш адрес, выделил желтым:
Конвертируем в HEX, PhysicalWorld = 0x70.
Этап 8. Найдем IEntitySystem.
Строка: GetEntities.
Делаем все тоже самое и прыгаем в самый первый sub. Летим вниз пропуская SSGE + IGame, ибо это ловушка.
Находим наш ЕнтитиСистем вот тут:
Делаем все по аналогии и получаем EntitySystem = 0xE0.
Этап 9. Найдем IConsole.
Строка: GetCVar. Делаем абсолютно точно также, прыгаем в первый саб.
Наш адрес:
Переводим в HEx и получаем IConsole = 0xC8.
Этап 9. Найдем GameCvars и один из кваров.
Ищем строку isSameTeam. Делаем абсолютно тоже самое, прыгаем в первый саб.
Дальше не ищем никаких SSGE и прочего, прыгаем в следующий sub:
Наш адрес GameCvars:
Найдем i_pelletsDisp. Строка i_pelletsDisp. Делаем тоже самое, в никакие сабы не прыгаем.
Конвертируем в HEX выделенное желтым на скрине и получаем 0x130, это наш адрес i_pelletsDisp.
Этап 10. Найдем CWeaponSpecific_RequestReload, CWeaponSpecific_RequestShoot, CWeaponSpecific_RequestUnber.
Строки для поиска: RequestReload, RequestShoot, RequestReloadUnber.
Аналогичные действия для Unber, Reload и ShootHit:
Прыгаем в этот саб после xref и f5:
Листаем в самый низ, наш адрес:
На этом мой гайд окончен, надеюсь, что помог вам. Очень старался для вас!
В нашем сегодняшнем уроке я научу вас реверсить варфейс, чтобы получить то, что вам нужно.
В этом уроке научимся искать STATIC_SSGE, CWeaponSpecific_RequestReload, CWeaponSpecific_RequestShoot, CWeaponSpecific_RequestUnber, GameCvars, IRender, IGame, IPhysicalWorld, IConsole и т.д
Этап 1. Снимаем дамп.
Для того, чтобы начать наше приключение в мира реверсинга нам нужно снять дамп игры. Делается это с помощью Scylla или других удобных для вас дамперов. Скачиваем Scylla, открываем версию в x64 разрядности, запускаем Game.exe из корня Bin64Realease, ждем пока игра полностью загрузиться пока мы не увидим черным экран с логотипом варфейса. После чего в Scylla открываем процесс игры и выбираем File - Dump:
Сохраняем дамп в ту же папку, где находится ваш Game.exe, это важно!
Этап 2. Начинаем работу с IDA.
Скачиваем IDA a.k.a Interactive Disassembler. Открываем наш дамп в IDA. После того, как вы откроете дамп вы увидите это:
Вам нужно подождать пока дамп просканируется полностью, когда он просканируется в нижнем левом углу вы увидите:
Этап 3. Ищем SSGE.
В IDA поиск нужных делается с помощью поиска по строкам. Чтобы найти SSGE вам нужна строка "ai_Compatibilitymode", в IDA нажмите SHIFT+F12 и дождитесь пока IDA просканит весь лист строк, после чего вы увидите окно со строками, нажмите CTRL+F и в пишите в строку ai_Compatibilitymode.
Нажмите на найденную строку два раза, вас перенесет в IDA View, нажмите вот сюда:
Затем нажмите кнопку X, вас перебросит в xref'ы вашей строки, прыгаем по первой строке нажав ОК, мы окажемся в IDA View, нажимаем f5 ничего не делая:
Нас перебросит сюда:
qword_141E62C98 это наш оффсет, уберите из начала qword. Мы получили SSGE, теперь нажав на наш адрес и пометив его желтым цветом нажмите кнопку N, в появившемся поле введите SSGE.
Теперь это выглядит так:
Этап 4. Ищем IGame.
Наша строка для поиска "IsPlayer", именно IsPlayer, а не isPlayer или isplayer.
img]https://i.ibb.co/mFQSW7h/image.png[/img]
Снова прыгаем по второму xref и попадаем в IDA view.
Если сделали все правильно увидите это, нам нужна строка entityId.
Она находится чуть выше нашего IsPlayer.
Жмем F5 и попадаем в псевдокод, здесь нас встретят два саба, нам нужно прыгнуть в первый нажав на него два раза:
Выделено желтым цветом
Мы попадаем сюда и нас встречает такая картина, наш адрес находится здесь:
Выделил желтым
Заходим на сайт https://www.rapidtables.com/convert/number/decimal-to-hex.html
И конвертируем 64 в Hex, получаем 40, адрес нашего IGame = 0x40.
Этап 5. Ищем IRenderer.
Строка для поиска "Draw2DLine". Прыгаем в самый первый xref и сразу жмем f5, попадаем в псевдокод. Прыгаем в самый первый саб, там где v98 =
Выделил желтым:
Скроллим вниз и видим наш адрес, выделил желтым, запомните ваши адреса никогда не должны быть схожи с IGame:
Конвертируем в Hex, получаем адрес IRenderer = 0x48.
Этап 6. Ищем ISystem.
Как обычно ищем строку GetUserName, прыгаем в первый xref, жмем f5, попадаем в псевдокод и тыкаем в самый первый sub.
Видим это, опять выделил желтым, наш адрес 240, конвертируем в hex:
ISystem = 0xF0.
Этап 7. Найдем IPhysicalWorld.
Строка - RayWorldIntersection(Game). Делаем все тоже самое. Xref'оф будет очень много, переходим по самому первому, прыгаем в псевдокод и видим наш адрес, выделил желтым:
Конвертируем в HEX, PhysicalWorld = 0x70.
Этап 8. Найдем IEntitySystem.
Строка: GetEntities.
Делаем все тоже самое и прыгаем в самый первый sub. Летим вниз пропуская SSGE + IGame, ибо это ловушка.
Находим наш ЕнтитиСистем вот тут:
Делаем все по аналогии и получаем EntitySystem = 0xE0.
Этап 9. Найдем IConsole.
Строка: GetCVar. Делаем абсолютно точно также, прыгаем в первый саб.
Наш адрес:
Переводим в HEx и получаем IConsole = 0xC8.
Этап 9. Найдем GameCvars и один из кваров.
Ищем строку isSameTeam. Делаем абсолютно тоже самое, прыгаем в первый саб.
Дальше не ищем никаких SSGE и прочего, прыгаем в следующий sub:
Наш адрес GameCvars:
Найдем i_pelletsDisp. Строка i_pelletsDisp. Делаем тоже самое, в никакие сабы не прыгаем.
Конвертируем в HEX выделенное желтым на скрине и получаем 0x130, это наш адрес i_pelletsDisp.
Этап 10. Найдем CWeaponSpecific_RequestReload, CWeaponSpecific_RequestShoot, CWeaponSpecific_RequestUnber.
Строки для поиска: RequestReload, RequestShoot, RequestReloadUnber.
Аналогичные действия для Unber, Reload и ShootHit:
Прыгаем в этот саб после xref и f5:
Листаем в самый низ, наш адрес:
На этом мой гайд окончен, надеюсь, что помог вам. Очень старался для вас!