ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Как улучшить сверку больших файлов? (https://forum.antichat.xyz/showthread.php?t=780724)

Maksim 29.05.2021 23:31

Занимался проверкой файлов и возник вопрос как бы сделать это быстрее?

Код:


[CODE]
bool CheckSum(string newfile, int newfilesize, int newchecksum)
{
int flenght = newfilesize; //4696403; //FSIZE
int sum = newchecksum; //858273431; //CSUM

FILE* f;
if (!(f = fopen(newfile.c_str(), "rb")))
{
return false;
}

byte b;
unsigned int Csum = 0;
unsigned int Fsize = 0;

while (fread(&b, sizeof(byte), 1, f))
{
Fsize++;

Csum += b;
}

fclose(f);

//DEBUG: для генерации (CSUM) и размера файла (FSIZE) убрать комменты
/*ofstream myfile("CheckFiles_"+ newfile +".txt");
if (myfile.is_open())
{
myfile

òbiòbi верифицированный пользователь. 30.05.2021 00:24

Только размер файлов? Может лучше md5/crc32 сверять? Не быстро, но будет надежнее

Maksim 30.05.2021 00:27

Цитата:

Сообщение от òbi

Только размер файлов? Может лучше md5/crc32 сверять? Не быстро, но будет надежнее

Просто есть идея сделать так чтобы сверялись все файлы по списку из System папки lineage, потом Maps.

Но то что выше работает очень долго по такому алгоритму.

Возможно есть вариант проще с проверкой не только по размеру, но и по crc или md5 и быстрее чем сейчас?

Deazer 30.05.2021 01:04

А зачем простите сверять размер файла если есть сверка CRC ?

Если у исходного файла отличается хоть 1 байт, контрольная сумма измениться, не говоря о размере.

Maksim 30.05.2021 01:07

Цитата:

Сообщение от Deazer

А зачем простите сверять размер файла если есть сверка CRC ?

Сверка файла по размеру не обязательно, просто если есть более быстрое и точное решение тогда можно crc32 или md5.

Вся проблема именно в том что проверяет много файлов долго если есть большие.

Deazer 30.05.2021 01:08

конечно CRC, его на все ваши запросы с головой. Все остальное это мусор.

Maksim 30.05.2021 01:09

Цитата:

Сообщение от Deazer

конечно CRC, его на все ваши запросы с головой. Все остальное это мусор.

Но подделать crc32 возможно у файла в теории?

Deazer 30.05.2021 01:10

Цитата:

Сообщение от Maksim

Но подделать crc32 возможно у файла в теории?

Конечно, как и любой другой метод на процессе загрузке пропатчить место где ты вызываешь сверку. Это вопрос 10-15 минут.

Maksim 30.05.2021 01:11

Цитата:

Сообщение от Deazer

Конечно, как и любой другой метод на процессе загрузке пропатчить место где ты вызываешь сверку. Это вопрос 10-15 минут.

Какие тогда варианты от подмены файлов?

Deazer 30.05.2021 01:14

Цитата:

Сообщение от Maksim

Какие тогда варианты от подмены файлов?

Накрывать ВМками файл и вшивать прямо в не очевидный файл. Допустим использовать VMProtect или Themida и так далее. Но если станет вопрос и заплатят деньги что бы это отключить, ну примерно 40-80 USD цена вопроса и по времени день или пол.

Maksim 30.05.2021 01:16

Цитата:

Сообщение от Deazer

Накрывать ВМками файл и вшивать прямо в не очевидный файл. Допустим использовать VMProtect или Themida и так далее. Но если станет вопрос и заплатят деньги что бы это отключить, ну примерно 40-80 USD цена вопроса и по времени день и или пол.

Ну накрывать криптором не вариант, рано или поздно знающие снимут.

Просто если вопрос в защите от "дилетантов", кто знает чем накрыто но может только инжектить в процесс.

Deazer 30.05.2021 01:18

Ну ты то инжектишь на ините процесса, это еще проще отследить. Запускаешь отладчик и все видно сразу, это явно не тот путь. Имхо.

Maksim 30.05.2021 01:22

Цитата:

Сообщение от Deazer

Ну ты то инжектишь на ините процесса, это еще проще отследить. Запускаешь отладчик и все видно сразу, это явно не тот путь. Имхо.

По сути идея вот в чем:

1. Во время запуска прочитать размер / crc32 / md5 что то 1 из этого, что будет лучше.

2. После сверки выдать результат true или false

Главная проблема в больших файлах, если много тогда проверяет все это долго.

В случае если проверять только папку System все делает быстро, если же Maps тогда намного дольше.

Deazer 30.05.2021 01:28

CRC быстрее, размер файла бессмыслен, сверка по хешу нагрузочный

Logan22 30.05.2021 01:34

Цитата:

Сообщение от Maksim

По сути идея вот в чем:
1. Во время запуска прочитать размер / crc32 / md5 что то 1 из этого, что будет лучше.
2. После сверки выдать результат true или false

Главная проблема в больших файлах, если много тогда проверяет все это долго.
В случае если проверять только папку System все делает быстро, если же Maps тогда намного дольше.

Долго это сколько, какой размер файла и алгоритм?

По поводу crс32, юзаешь на свой страх и риск, во первых коллизии могут быть, а во вторых лучше уже юзай crc64,а в третьих crc не самый быстрый.

Maksim 30.05.2021 01:37

Цитата:

Сообщение от Logan22

Долго это сколько, какой размер файла и алгоритм?

По поводу crс32, юзаешь на свой страх и риск, во первых коллизии могут быть, а во вторых лучше уже юзай crc64,а в третьих crc не самый быстрый.

Если по клиенту lineage в папке maps: 16 мб одна из карт.

Просто много таких файлов, как бы ускорить проверку всего этого.

Все же передумал сверять по размеру файла, но вместо crc32 взял xxHash это самый быстрый алгоритм на сегодня.

Прикрепил ниже форк xxHash и всего 2 варианта, вместо зависимостей в оригинальном репозитории.

Возможно кто то использует вместо crc32.

Logan22 30.05.2021 02:11

Цитата:

Сообщение от Maksim

Если по клиенту lineage в папке maps: 16 мб одна из карт.
Просто много таких файлов, как бы ускорить проверку всего этого.

тьфу ты.... я думал ты имеешь дело с файлами по пару гигабайт.

Цитата:

Сообщение от Maksim

Все же передумал сверять по размеру файла, но вместо crc32 взял xxHash это самый быстрый алгоритм на сегодня.

я тоже его уже пару лет юзаю, печалит когда юзают всякие crc или MD5

xDarkDelux 30.05.2021 03:49

Я чет не понял, это очередная попытка "защиты от подмены файлов", или проверка нужна для других целей?

Maksim 30.05.2021 03:52

Цитата:

Сообщение от xDarkDelux

Я чет не понял, это очередная попытка "защиты от подмены файлов", или проверка нужна для других целей?

Оба варианта.

Mizuwokiru 30.05.2021 04:59

Не стоит с этим сильно заморачиваться, так как если захотят - в любом случае ломанут. Будь то вырезать проверку из клиентской части или отправлять на сервер заведомо валидные данные.

По поводу ускорения - попробуй распараллелить.

default_npc 30.05.2021 10:26

Цитата:

Сообщение от Mizuwokiru

Не стоит с этим сильно заморачиваться, так как если захотят - в любом случае ломанут.

именно поэтому "прихрдкоривание" никогда не должно быть в одном месте и не должно быть таким простым

на клиент можно поставить 3-4 растяжки - нечто вроде что делает ТС, код интерфейса (как минимум md5\примитивные привязки), флажок сервер>клиент, защиты типа сг\аа и всё это переплетено друг с другом (по возможности)

такая связка не то, что бы что-то исключит подмены, но создаст хороший клубок из зависимостей

WangYi 30.05.2021 11:38

Запихай файлы в экзешник и накрой какой-нибудь колбасой чтобы анпакать задолбались.

Gaikotsu 30.05.2021 16:59

Можно еще чекать хэши только это когда реально необходимо, т.е. когда размер или время у файла поменялись.

А данные о ранее вычисленном хэше и корректном времени хранить в потоке файла.

Ну и для большей надежности для больших файлов к примеру можно какой-то кусок/куски из всего объема проверять каждый раз на тему изменения их хэша.

Mizuwokiru 30.05.2021 22:09

Цитата:

Сообщение от default_npc

именно поэтому "прихрдкоривание" никогда не должно быть в одном месте и не должно быть таким простым

на клиент можно поставить 3-4 растяжки - нечто вроде что делает ТС, код интерфейса (как минимум md5\примитивные привязки), флажок сервер>клиент, защиты типа сг\аа и всё это переплетено друг с другом (по возможности)
такая связка не то, что бы что-то исключит подмены, но создаст хороший клубок из зависимостей

Именно поэтому и говорю - зачем париться? Лучше на стороне клиента сделать базовые вещи (проверки по хэшу файлов/рандомных блоков, шифрование файлов данных нестандартным ключом и т.п.). А уже остальные вещи хэндлить на стороне сервера. Например, если задача ограничить использование интерфейсов с автозаточкой и т.п. - сетапим троттлинг для пакетов, отвечающих за это.

Deazer 30.05.2021 22:41

Цитата:

Сообщение от Mizuwokiru

Именно поэтому и говорю - зачем париться? Лучше на стороне клиента сделать базовые вещи (проверки по хэшу файлов/рандомных блоков, шифрование файлов данных нестандартным ключом и т.п.). А уже остальные вещи хэндлить на стороне сервера. Например, если задача ограничить использование интерфейсов с автозаточкой и т.п. - сетапим троттлинг для пакетов, отвечающих за это.

С таким же успехом можно сделать свой бэк подменив банально в хостах адрес и валидировать это на стороне клиента как валидную дату и потом передавать управление на реальный адрес для подключения на порты.

Т.е. данный оратор шарит о чем говорит.

Mizuwokiru 31.05.2021 00:14

Цитата:

Сообщение от Deazer

С таким же успехом можно сделать свой бэк подменив банально в хостах адрес и валидировать это на стороне клиента как валидную дату и потом передавать управление на реальный адрес для подключения на порты.
Т.е. данный оратор шарит о чем говорит.

Может ты не мое сообщение прочитал? Никак не могу сопоставить твой написанный текст к своему. Зачем писать свой бэк, если можно обойти все это просто переходя сразу в блок с обработкой валидного респонса? Я и вел к тому, что эту часть в любом случае можно ломануть, так чего над ней сильно заморачиваться? Просто защиту от дурачка сделать и все.

По поводу подмены бэка не понял прикола. Просвети несведущего.

Deazer 31.05.2021 20:26

Цитата:

Сообщение от Mizuwokiru

По поводу подмены бэка не понял прикола. Просвети несведущего.

Ты серьезно ? Подымаешь локально допустим тот же веб, берем в учет что верификация на веб сервере. Предварительно получаем валидные ответы с "официального сервера", пишем аналог и хостим у себя, прописываем в хосты "оф. сервак". Этот вариант вообще для дуболомов, которые не уметь в реверс.

Профит ?

Desquire 31.05.2021 21:40

Цитата:

Сообщение от Deazer

Ты серьезно ? Подымаешь локально допустим тот же веб, берем в учет что верификация на веб сервере. Предварительно получаем валидные ответы с "официального сервера", пишем аналог и хостим у себя, прописываем в хосты "оф. сервак". Этот вариант вообще для дуболомов, которые не уметь в реверс.
Профит ?

Хах) я таким образом пейн тим «хакал»

Mizuwokiru 01.06.2021 01:25

Цитата:

Сообщение от Deazer

Ты серьезно ? Подымаешь локально допустим тот же веб, берем в учет что верификация на веб сервере. Предварительно получаем валидные ответы с "официального сервера", пишем аналог и хостим у себя, прописываем в хосты "оф. сервак". Этот вариант вообще для дуболомов, которые не уметь в реверс.
Профит ?

А при чем здесь это к тому, что я сказал? Я ни слова не обмолвил об обработке на стороне сервера кроме троттлинга запросов.

Под базовыми вещами я имел в виду базовые проверки client only. Без какого либо бэка, уж тем более веб.

Если говорить об эффективной защите, тогда нужно контролить частоту и порядок приема определенных пакетов - это против кастомных "читерских" UI в виде автоэнчанта и типа того. Против ботов, конечно, вряд ли что-то появится, так как даже какую-то нейронку можно обойти просто задавай случайную частоту и последовательность действий.

Других кейсов, в которых могут понадобиться подобные проверки, я не знаю.

Ну а если брать самую эффективную защиту - хостить файлы с данными, кроме текстур/моделей/анимаций/звуков/роликов, и таким образом получится что-то вроде лайтвэйт "твич" стрима Ну или вообще все данные хранить на сервере, а юзеру возвращать видеопоток

Вообщем, на профессиональность и правильность не претендую, лишь расписал как я считаю и чего придерживаюсь. Поэтому буду рад почитать опровержение, если оно будет.

Maksim 01.06.2021 03:27

Написал по алгоритму пока читал книгу по шифрации и прочее, здесь crc32.

В своей версии далеко ушел и там уже все на сокетах + xxHash.

Настройка простая переключаете на true конфиг в самом верху, закидываете в папку system от игры и генерируете файл.

Далее в исходниках заменяем кусок кода в самом низу и переключаем на false в верху.

После компиляции собираем и тестим меняя байты у файлов в System или Maps, только обязательно положите в папку System.

Deazer 01.06.2021 22:27

Цитата:

Сообщение от Maksim

Написал по алгоритму пока читал книгу по шифрации и прочее, здесь crc32.
В своей версии далеко ушел и там уже все на сокетах + xxHash.

Настройка простая переключаете на true конфиг в самом верху, закидываете в папку system от игры и генерируете файл.
Далее в исходниках заменяем кусок кода в самом низу и переключаем на false в верху.
После компиляции собираем и тестим меняя байты у файлов в System или Maps, только обязательно положите в папку System.

Выглядит крайне странно, но видно что стараешься.


Время: 22:09