Форум программистов, компьютерный форум CyberForum.ru

Можно ли определить содержимое файла? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Неопределённое количество указателей http://www.cyberforum.ru/cpp-beginners/thread893543.html
Подскажите у меня есть два элемента (структуры), к этим элементам добавляется разное количество других таких же элементов. Т.е., при первом запуске программы мы можем добавить 12 элементов и 14 элементов, в другом 1 и 100, в другом 200 и 1000. Не совсем корректное слово добавить. Суть задачи такая, что нужно реализовать "динамические указатели", но я не слишком хорошо представляю как можно...
C++ Вычислить сумму Помогите решить! Дано действительное x и натуральное n. Вычислить y=(sin(x))/2+(sin(x))/3+(sin(x))/4...(sin(x))/n Нужно использовать цыкл for,while и do while! http://www.cyberforum.ru/cpp-beginners/thread893539.html
C++ найти среднее значение всех ключей дерева
Всем приветик! подскажите пожалуйста, как найти среднее значение всех ключей дерева. Прога есть. #include<iostream.h> struct node { int Key; int Count; node *Left;
Сформировать массив из всех делителей введенного с клавиатуры натурального числа C++
Сформировать массив из всех делителей введенного с клавиатуры натурального числа. Сформированный массив вывести на экран.
C++ Составить программу вычисления произвольного количества значений выражения http://www.cyberforum.ru/cpp-beginners/thread893526.html
Составить программу вычисления произвольного количества значений выражения. Необходимость повторного вычисления значений и аргументы задает пользователь. Вычисление выражения должно происходить в отдельной функции. 10 вариант в файле "Задание 5"
C++ Программа с перемещением строк! нужна помощь с программой, суть программы в следующем: в первой строке на экране в случайно месте появляется символ, затем эта строка спускается на строку вниз, а в первой снова в случайном месте появляется символ, и эти строки вместе спускаются вниз и так далее... Удалось сделать лишь это: #include<conio.h> #include<iostream.h> #include<dos.h> #include <stdlib.h> int main(void) { подробнее

Показать сообщение отдельно
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2133 / 966 / 222
Регистрация: 30.11.2013
Сообщений: 3,231
21.11.2016, 17:31     Можно ли определить содержимое файла?
Alvares89, все файлы от геймдева своего типа для своей программы, как правило бинарники.
Почитайте про сериализацию в С++ и вы найдете много примеров как она работает.
Но в крупных играх бинарники может прочесть только сама игра, так как она знает куда и как писать,
и тут же код на чтение. В основном такие файлы имеют вначале древо мапирования "Раздел" - "Offset".
Где-то есть в сети представление psd файла. К такому "стандарту" придерживаются многие:
вначале карта с версией read/write программы и сами данные. В коде "ссылки" на разделы могут
быть вбиты через enum и имя файл не возможно будет узнать, что за раздел и какой его offset.

Больше конкретике: в коде сериализатор знает, что 10 пункт( enum ) это сохранка главного героя,
далее идёт 32 бита отображающие смещение от начала файла к началу "Раздела". При переходе на
это смещение информационный заголовок от класса "Player" которому и разрешили писать в раздел.
Но в каком порядке там данные? Количество жизней, скорость и броня ? Или Уровень, мана и скорострельность?
Опять же никто не знает, кроме создателей игры.

Это я описал систему, где создатели взяли готовое решение "мапирования". А представьте, что они не пишут
"Раздел; отступ", а зашифровали 32-ух битный отступ в 128 битах после названия раздела. Как теперь
найти? Методом тыка? Прочитать в документации игры, если есть? Искать слив информации/код?

А как тогда взламывали игры наши деды? Есть правило в С++, что адрес переменной совпадает с
её размером. Переменная int 32 бита будет иметь адрес кратный 32-ум. Что дальше? Берём все данные
выделенные процессом игры, запоминаем все данные во всех адресах кратных 32-ум. Разворачиваем игру,
меняем эту переменную. Как? Ну знаем, что жизней у нас 133, нашли все переменные с адресами 32, нашли
у кого значение 133. Нашлось 199 шт. Почему так много? Вдруг это пиксели или еще что интереснее)
Поменялось здоровье, теперь 72, теперь в тех значениях адресов убираем все, у кого сейчас не 72, осталось 51 шт.
И так до победного) Как программисту защитить свои данные от такой атаки? Не хранить в явных местах или в явной форме.
Например разрабы Космических рейнджеров выводили золото "522", хотя у них в переменной было "5220". Так
они отсеяли 90% школьников мечтающий взломать вк и их игру)

Но это вмешательство в игру, в OЗУ, при перезагрузке всё слетит. Внедрение в сохранку намного круче,
как же туда залесть? Начнём с защиты: в онлайн играх общаются через hash сообщения и понять, где что
очень тяжело. Так же стоит аутентификация между клиентом и сервером. Самая простая все данные клиент
превращает отдельно в hash, вместе с секретным ключём от сервера, который пришёл ему с просьбой отослать все
данные и отправляет данные и их hash. Если попытаться даже как научиться подбирать hash меняя золото с 100 на 99999,
хакеру всеравно не узнать какой hash-секрет hash-ировался вместе с данными для отправки.

И это браузерные игры, где низкий уровень защиты. А теперь представьте онлайн игру. Там есть целые отделы отвечающие
за безопастность от хакерский-атак игры. И тут вы хотите их обмануть?

В целом всё реально, в защите слабое звено всегда человек. Я как-то нашёл на продажу исходники одного продукта,
над которым я работал в конторе более 7 месяцев) Найдите в гугле мепинг сохранки и меняйте значения,
но знайте, что если бы вы как программист поставили перед собой цель в течении 7 дней, защитить свои данные перед
релизом, вы бы отсеяли 97% мелких атак.


По вашей теме - вот есть небольшой пример мепинга для вашей игры https://steamcommunity.com/sharedfil.../?id=180211741
 
Текущее время: 03:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru