Как изменить hash файла

Привет. Я хочу показать вам небольшой фокус. Для начала вам потребуется скачать архив с двумя файлами. Оба имеют одинаковый размер и одну и ту же md5 сумму. Пров...

Забавляемся с хешами

Время прочтения
5 мин

Просмотры 82K

Привет. Я хочу показать вам небольшой фокус. Для начала вам потребуется скачать архив с двумя файлами. Оба имеют одинаковый размер и одну и ту же md5 сумму. Проверьте никакого обмана нет. Md5 хеш обоих равен ecea96a6fea9a1744adcc9802ab7590d. Теперь запустите программу good.exe и вы увидите на экране следующее.
Попробуйте запустить программу evil.exe.
Что-то пошло не так? Хотите попробовать сами?

О хешах и колллизиях

На самом деле ничего нового во всем этом нет. В действительности данный эффект достигается за счет методов быстрого поиска коллизий для хеш функции разработанных еще в 2004-2006 годах. Если кто не знает, коллизия это два разных набора данных, имеющих одно и тоже хеш-значение. Так вот, в 2004 году группа китайских исследователей разработала алгоритм, основанный на дифференциальном криптоанализе, позволяющий за относительно небольшое время находить два различных случайных блока данных, размером по 128 байт каждый, имеющих одну и ту же md5 сумму. И хотя алгоритм этот в свое время произвел эффект взорвавшейся бомбы быстродействие его оставляло желать лучшего. Но уже в 2006 году чешский криптограф Властимил Клима предложил для поиска коллизий новый метод, позволяющий найти разную пару случайных 128 байтных блоков с одной md5 суммой на персональном компьютере меньше чем за минуту.

Вы спросите, но что нам даст обладание такой парой сообщений, мало того что они короткие(всего 128 байт), так еще, в добавок, и случайные, т.е. метод не позволяет для заданного сообщения подобрать другое, с идентичным хешем. Однако это открывает огромный простор для различного рода атак на выполняемые файлы. И виной тому служит следующая особенность работы любой хеш функции: Хеш функция по своей природе итеративна. Это означает, что при подсчете хеша сообщение разбивается на блоки, к каждому блоку применяется функция сжатия, зависящая от некоторой переменной, называемой вектор инициализации. Результат этой функции будет являться вектором инициализации для следующего блока. Результат функции после работы с последним блоком и будет окончательным хеш значением нашего сообщения.

Схематично это можно представить следующим образом:
si+1 = f(si, Mi), где si вектор инициализации для i-го блока.
Метод Властимила Клима позволяет для любого заданного значения si подобрать два 128-байтных блока M,M` и N,N` таких, что f(f(s, M), M’) = f(f(s, N), N’).

Таким образом, с помощью данной методики можно сконструировать два файла с одинаковой md5 суммой, но имеющих различные 128 байт в середине.
M0, M1, …, Mi-1, Mi, Mi+1, Mi+2, …, Mn,

M0, M1, …, Mi-1, Ni, Ni+1, Mi+2, …, Mn.
Обратите внимание что хеши обоих этих файлов совпадут, т.к. различающиеся блоки Mi, Mi+1 и
Ni, Ni+1 вернут в качестве si+2 одно и тоже значение, т.к. f(f(s, Mi), Mi+1) = f(f(s, Ni), Ni+1), а поскольку все последующие данные идентичны то последующие значения функции сжатия для обоих файлов будут совпадать.

Что это нам дает

Теперь перейдем от вещей абстрактных и отдаленных к вопросу практическому. Предположим, что у нас есть исполняемый файл M0, M1, X, X, …, Mn. Но его основе мы можем создать два разных файла M0, M1, N1, N1, …, Mn и M0, M1, N2, N1,…, Mn(просто меняем блоки X на N1 и N2). Если блоки N1 и N2 – это коллизии то хеш-сумма этих файлов будет совпадать.
Теперь представим, что этот исполняемый файл имеет следующую структуру:
if (X == X) then { good_program } else { evil_program }
Вот собственно и весь секрет данного фокуса.

Как сделать самостоятельно

Теперь немного поговорим о том как это сделать самому.
Шаг первый: пишем программу с двойным дном.

#include <stdafx.h> 
#include<iostream>
#include <string>
using namespace std;
//переменные str1 и str2 в данном примере являются теми самыми элементами X.
static char *str1="qwertyuioplkjhgfdaszxcvbnmkjhgfdsaqwertyuikjh"
"gbvfdsazxdcvgbhnjikmjhbgfvcdsazxdcfrewqikolkjnhgfqwertyuioplkjh"
"gfdaszxcvbnmkjhgfdsaqwertyuikjhgbvfdsazxdcvgbhnjikmjhbgfvcdsa"
"zxdcfrewqikolkjnhgfq123"
;
static char *str2="qaswderftgyhujikolpmnbvcxzasxdcfvgbhnjmkijuy"
"gtfdeswaqscfvgyjqaswderftgyhujikolpmnbvcxzasxdcfvgbhnjmkijuyg"
"tfdeswaqscfvgyjqaswderftgyhujikolpmnbvcxzasxdcfvgbhnjmkijuygt"
"fdeswaqscfvgyjqwertyuikja2"
;int good()
{
  int a;
  std::cout<<"Good, nice programme!";
  std::cin>>a;
  return 0;
}
int bed()
{
  int a;
  for(int i=0; i<1000; i++)
  {
  std::cout<<"Evil, evil code!";
  }
  std::cin>>a;
  return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
//строки s и s2 содержат только блоки с коллизиями без лишних элементов
  string s=str1;  
  string s2=str2;    
  s.erase(0,56);
  s.erase(128,8);
  s2.erase(0,64);
   if (s==s2) {
  return good();
 } else {
  return bed();
 }
  return 0;
}

* This source code was highlighted with Source Code Highlighter.

Особое внимание прошу обратить на переменные str1 и str2. Они служат для того, чтобы их можно было быстро найти в hex-редакторе и заменить нужными данными.
Функция main в зависимости от содержимого переменных s вызывает хорошую или плохую версию программы.

Шаг второй: После компиляции программы нужно будет немного поработать с hex-редактором для того чтобы найти в .exe файле наши строки str1 и str2. Скопируй полученный .exe файл. Пусть копия будет называется «обрезанная версия». Откройте копию в hex-редакторе и найди в ней строки str1 и str2. Удалите все данные идущие после первых 64 байт первой из строк. Последние строки полученного файла будут выглядеть вот таким образом: . Сохраните данный файл.

Шаг третий: Созданный на втором шаге файл будет служить так называемым префиксом для поиска коллизий. Чтобы найти коллизию с заданным префиксом нужно скачать отсюда программу fastcoll(Спасибо ее автору Marc Stevens). Исходники лежат тут.
Запустите программу с параметром –p. В качестве префикса укажите «обрезанную версию». В результате работы программы будут созданы два файла «обрезанная версия_msg1» и «обрезанная версия_msg2».

Шаг четвертый: создайте еще одну копию вашей программы. Пусть оригинал будет называться good.exe, а копия evil.exe. Откройте файлы msg1 и msg2 в hex редакторе. Сперва замените блок в котором хранится str2 данными из блока str1. Пусть теперь в них будет одинаковая информация. После этого скопируйте из файла msg1 последние 128 байт и вставьте их в ваш good файл так как показано на рисунке.

Обратите внимание, отступы должны соответствовать следующим параметрам: первый блок вставляется прямо в том месте где заканчивается файл «обрезанная версия», второй блок располагается в 96 байтах от первого. Важно: блоки вставлять одни и те же. Это будет доброй версией нашей программы. Сохраняем файл good.exe и открываем файл evil.exe. Блоки в файл evil.exe нужно будет вставить в те же места, что и в good.exe, единственное отличие заключается в том, что первый блок мы берем из файла msg2, а второй из файла msg1. Это различие и обеспечит нам невыполнение условия программы if (s==s2) и соответственно запустит злую версию программы.

Шаг пятый: Profit! Сравниваем md5 суммы файлов, наслаждаемся полученным результатом.

Список литературы:
1. Замечательный сайт с описанием данного метода
2. Сайт Властимила Клима
3. Сайт автора программы findcoll

0 / 0 / 0

Регистрация: 26.07.2015

Сообщений: 16

1

20.02.2017, 00:30. Показов 9998. Ответов 13


Собственно, интересует, как изменить MD5 хеш-сумму видео файла? Если был бы текстовый файл, хватило бы добавить символ и хеш стал другой. Как быть с видео? Если можно, не только теорию, но и код. Ну, а вообще, за любую помощь буду благодарен.

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

20.02.2017, 00:30

Ответы с готовыми решениями:

md5 хеш файла
требуется получить мд5 хеш, нашел исходник https://www.cyberforum.ru/post104544.html но как его…

MD5 хеш файла
Здраствуйте, помогите вычислить MD5 хеш файла. Те что то типа ввел путь до файла в edit а он…

Не верный хеш md5
Здравствуйте!
Возникла проблема, а именно с расчетом хеша MD5. Да, я читал, что начиная с 9й…

Как получить MD5-хеш файла
Добрый дннь уважаемые форумчане. Хотел бы у вас поинтересоваться. Собственно пишу я лаунчер на…

13

82 / 82 / 39

Регистрация: 17.02.2016

Сообщений: 464

20.02.2017, 00:40

2

post4ok, видео — определенный тип файлаконтейнер
смотрите описание вашего формата и «добавляйте» сколько угодно символов



0



0 / 0 / 0

Регистрация: 26.07.2015

Сообщений: 16

20.02.2017, 00:48

 [ТС]

3

HiredKiller, не совсем понял, можно какой-то пример? Что/куда и т.д.



0



1039 / 855 / 335

Регистрация: 08.12.2016

Сообщений: 3,283

20.02.2017, 01:30

4

Цитата
Сообщение от post4ok
Посмотреть сообщение

Что

это ты должен сказать, для начала, что у тебя за видео-файл



0



0 / 0 / 0

Регистрация: 26.07.2015

Сообщений: 16

20.02.2017, 01:46

 [ТС]

5

YuryK, любой видео файл. К примеру, формата .avi



0



1039 / 855 / 335

Регистрация: 08.12.2016

Сообщений: 3,283

20.02.2017, 01:55

6

все под одну гребенку не причешешь. а контейнера avi один формат, у mkv — другой, и т.д. подумай спецификации каждого и смотри куда можно «добавить байты», не повредив работоспособность.

З.Ы. Навскидку, лишний байт в конце файла, по идее не должен сказаться вообще, т.к. видео можно воспроизводить и из «недокачанного» файла, поэтому все важное о размере и составе контейнера хранится в заголовке, ИМХО.



0



0 / 0 / 0

Регистрация: 26.07.2015

Сообщений: 16

20.02.2017, 02:06

 [ТС]

7

YuryK, как допустим в .avi файл «добавить байты» через Delphi? Как вообще это реализовать?



0



пофигист широкого профиля

4602 / 3062 / 850

Регистрация: 15.07.2013

Сообщений: 17,669

20.02.2017, 02:51

8

Цитата
Сообщение от post4ok
Посмотреть сообщение

Собственно, интересует, как изменить MD5 хеш-сумму видео файла?

А нафига? Озвучь свою задачу.



0



5446 / 4270 / 1375

Регистрация: 14.04.2014

Сообщений: 19,210

Записей в блоге: 19

20.02.2017, 09:30

9

чтобы не палили правообладатели ))



2



0 / 0 / 0

Регистрация: 26.07.2015

Сообщений: 16

20.02.2017, 11:07

 [ТС]

10

northener, верно ответил за меня krapotkin. Я работаю в сфере файлообмена, в итоге, правообладатели ищут свои файлы по MD5 и абузят (жалуются/удаляют). Так как у меня свой софт по автоматизации данной деятельности, то нужно автоматизировать и смену MD5.



0



Модератор

8257 / 5480 / 2249

Регистрация: 21.01.2014

Сообщений: 23,584

Записей в блоге: 3

20.02.2017, 15:28

11

Цитата
Сообщение от post4ok
Посмотреть сообщение

по автоматизации данной деятельности

по автоматизации пиратства?



0



1039 / 855 / 335

Регистрация: 08.12.2016

Сообщений: 3,283

20.02.2017, 15:31

12

откуда у правообладателей MD5 рипов Они что по сети все рипы собирают?



0



0 / 0 / 0

Регистрация: 26.07.2015

Сообщений: 16

20.02.2017, 15:50

 [ТС]

13

D1973, можно по разному это называть, но по-моему, форум/тема не обсуждения пиратсва и т.д.

YuryK, у правообладателей свои видео-файлы (ролики) и MD5 своих роликов получить у них нет проблем. Контент не проходит сотни торрентов, а берётся напрямую у правообладателя из официального сайта (из закрытой его части — платной). И да, не подумайте, что сфера деятельности обычные фильмы рунета и т.д. Это вообще не под рунет/варезники заточено, если кто-то думает про это. Поэтому, вникать, думаю, смысла нет. Главное решить вопрос изменения MD5.
Как Вы писали YuryK — добавлять байт в конце файла. Собственно, так и сделал. MD5 меняется. Буду смотреть результат, не будет ли каких-нибудь проблем при воспроизведении и т.д. Пока что всё отлично. Спасибо за наводку.



0



30 / 31 / 20

Регистрация: 30.12.2015

Сообщений: 340

22.02.2017, 09:51

14

post4ok, откройте, блин, видео как текст.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

22.02.2017, 09:51

Помогаю со студенческими работами здесь

MD5 Хеш файла
Доброго времени суток, уважаемые &quot;тыжпрограммисты&quot; :D
Пардоньте, если тему не там создал.. В общем…

Генерация MD5 хеш суммы файла
Сколько не пробовал, неправильно генерируется хеш! :(
Ведь файл это набор символов. Потому я…

Получить хеш файла (CRC32, MD5, SHA1, TTH, ED2K, BitPrint, AICH….)
Нужно написать приложение выводящее один любой хеш указанного файла, независящий от названия файла….

Как реверсировать (преобразовать обратно) хеш MD5?
Вот закодировал строку с помощью алгоритма MD5. 1 преобразовало в 06d49632c9dc9bcb62aeaef99612ba6b,…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

14


Форум программистов Vingrad

Модераторы: Poseidon, Snowy, bems, MetalFan

Страницы: (2) Все [1] 2 
( Перейти к первому непрочитанному сообщению )

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> Как изменить контрольную сумму файла ? 

:(

   

Опции темы

Rexar
Дата 27.12.2005, 22:15 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 105
Регистрация: 14.12.2005

Репутация: 0
Всего: 0

Как изменить контрольную сумму файла средствами Делфи…….
Нужно как-то просто добавить какой-то код или что-то в этом роде…

PM MAIL   Вверх
Poseidon
Дата 27.12.2005, 22:20 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Delphi developer
****

Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133

Какого файла? Формат?

В общем случае можно просто открыть файл как текст и добавить туда пару символов. Хотя для некоторых форматов может не прокатить

———————

Если хочешь, что бы что-то работало — используй написанное, 
если хочешь что-то понять — пиши сам

PM MAIL ICQ   Вверх
Rexar
Дата 27.12.2005, 22:25 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 105
Регистрация: 14.12.2005

Репутация: 0
Всего: 0

*.exe, если просто добавить символы, то программа не запуститься…..

PM MAIL   Вверх
Snowy
Дата 27.12.2005, 22:28 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484

Изменить контрольную сумму файла легко. Достаточно изменить любой байт файла и любой CRC выдвст другой результат.
Для exe файлов можно безболезненно заменить любой файл в первых $100 байтах.
Но лучше менять текстовый байт. Например $50 вполне подойдет без ущерба для функциональности.

PM MAIL   Вверх
Rexar
Дата 27.12.2005, 22:33 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 105
Регистрация: 14.12.2005

Репутация: 0
Всего: 0

Нужно изменить размер файла, например чтоб больше был…….., это Hex редактором что-ли делать или как ? Я просто не пойму что ты написал smile

PM MAIL   Вверх
DIMONSOFT
Дата 27.12.2005, 22:33 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Бывалый
*

Профиль
Группа: Участник
Сообщений: 230
Регистрация: 19.12.2004
Где: Киев

Репутация: 1
Всего: -3

Цитата(Rexar @ 27.12.2005, 22:15)
изменить контрольную сумму

Антивирусам это непонравиться

———————

PM MAIL   Вверх
Poseidon
Дата 27.12.2005, 22:43 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Delphi developer
****

Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133

DIMONSOFT, антивирусам все равно!
Ты когда перекомпилируешь свой проект, антивирус твой сильно ругается? А по сути это тоже изменение контрольной суммы

———————

Если хочешь, что бы что-то работало — используй написанное, 
если хочешь что-то понять — пиши сам

PM MAIL ICQ   Вверх
DIMONSOFT
Дата 27.12.2005, 22:49 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Бывалый
*

Профиль
Группа: Участник
Сообщений: 230
Регистрация: 19.12.2004
Где: Киев

Репутация: 1
Всего: -3

Цитата(Poseidon @ 27.12.2005, 22:43)
А по сути это тоже изменение контрольной суммы

Согласен. Но непонятно что
Rexar хочет. Если он будет приписывать одинаковый код к нескольким файлам то тогда и антивирус покажется.

———————

PM MAIL   Вверх
Guest
Дата 27.12.2005, 23:04 (ссылка)
   |    (голосов: 0)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Unregistered

Я хочу вот что: есть файл 1.exe он занимает 48,8 КБ, нужно сделать так чтоб он занимал места больше чем 48,8 КБ, например 50,8 КБ.

  Вверх
Zero
Дата 27.12.2005, 23:43 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: 8
Всего: 24

Цитата(Rexar @ 27.12.2005, 23:33)
это Hex редактором что-ли делать или как ?

Да можно и текстовым редактором… Или я например, использую Total Commander, там выбираешь любой файл, и нажимаешь <F4>

PM MAIL ICQ   Вверх
Guedda
Дата 28.12.2005, 14:47 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Подрывник
****

Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78

Если у тебя есть исходники, то лучше дописать что-нить (кроме комментариев)… А если исходников нет, тогда лучше делать, как посоветовал Snowy

———————

Ll 2

PM MAIL WWW ICQ Skype GTalk   Вверх
Yanis
Дата 28.12.2005, 17:07 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 72
Всего: 111

2 Rexar
Изменение контрольной суммы файла и изменение размера файла — это не одно и тоже. Опеределись сначала, что ты хочешь. Увеличить размер файла можно дописав в конец несколько байт. А это суть работа с файлами, причём основы и про это ты можешь прочитать почти в любом FAQ для Delphi/Pascal.

———————

user posted image *щёлк*

PM MAIL WWW ICQ   Вверх
Rexar
Дата 28.12.2005, 19:32 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 105
Регистрация: 14.12.2005

Репутация: 0
Всего: 0

Цитата(Yanis @ 28.12.2005, 17:07)
Увеличить размер файла можно дописав в конец несколько байт.

Как это сделать чтоб *.exe файл потом можно было запустить ? Если я тупо допишу через блокнот то экзэшник не запускается…

PM MAIL   Вверх
Poseidon
Дата 28.12.2005, 19:41 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Delphi developer
****

Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 53
Всего: 133

Цитата(Rexar @ 28.12.2005, 19:32)
Как это сделать чтоб *.exe файл потом можно было запустить ?

Цитата(Snowy @ 27.12.2005, 22:28)
Для exe файлов можно безболезненно заменить любой файл в первых $100 байтах.
Но лучше менять текстовый байт. Например $50 вполне подойдет без ущерба для функциональности.

———————

Если хочешь, что бы что-то работало — используй написанное, 
если хочешь что-то понять — пиши сам

PM MAIL ICQ   Вверх
Snowy
Дата 28.12.2005, 22:15 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
****

Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484

Цитата(Rexar @ 28.12.2005, 19:32)
Если я тупо допишу через блокнот то экзэшник не запускается…

smile LOL smile
Конечно. Ты ж бинарник в текст превратил.

Код

var
  fs: TFileStream;
  b:  byte;
begin
  fs:TFileStream.Create('MyExe.exe', fmOpenWrite);
  fs.Seek($50);
  b:=Trunc(Random(256));
  fs.Write(b,1);
  fs.Free;
end;

PM MAIL   Вверх



















Страницы: (2) Все [1] 2 

Ответ в темуСоздание новой темы
Создание опроса
Правила форума «Delphi: Общие вопросы»
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »

Понравилась статья? Поделить с друзьями:
  • Как изменить gpt на mbr ubuntu
  • Как изменить fov варфейс
  • Как изменить fov mw3
  • Как изменить cvv киви карты
  • Как изменить embed discord py