Как программа на python проверит свою собственную md5sum? - PullRequest
3 голосов
/ 16 февраля 2011

Я играл в игру около года назад.Желая немного ускорить его, я отредактировал основной файл .py и добавил psyco в самом начале.Игра шла быстрее и лучше, но она не позволяла мне присылать свои результаты.Я вошел в файл, и он проверял свою собственную md5sum.Меня смутило то, что у них в файле был md5.Мой вопрос, как мне получить md5 файла с суммой файла, включая md5, которого у меня еще нет.Кажется, уловка 22 для меня, но они сделали это.

Надеюсь, я объяснил это достаточно хорошо.Пример:

Файл: Example.example

check md5 of Example.example
If md5 I just obtained == "###################################"
allow send score.

Ответы [ 3 ]

5 голосов
/ 16 февраля 2011

Вы не можете (легко) внедрить MD5 программы в программу, в которой она вычисляет MD5, потому что при изменении MD5 того, что вы встраиваете, изменяется MD5 программы.Зацикливайтесь на некоторое время, и в итоге вы сможете достичь стабильной точки.Опять же, вы не можете.«время» обычно означает 2 ^ 128 шагов, так что это будет очень долго - как после того, как солнце станет красным гигантом.

Итак, есть хитрость.Когда программа вычисляет свой собственный MD5, она определенно распознает, где находится встроенный MD5, и использует заданное значение, как и все NULL.

Чтобы усложнить работу хакеров, не используйте все NULL - используйтезначение соли.Запутайте это значение в вашем бинарном файле.Теперь людям будет сложнее редактировать встроенный MD5 и «исправлять» его после того, как они отредактировали вашу программу.

1 голос
/ 16 февраля 2011

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

Это широко используется в криптографических механизмах, таких как IPSEC.

0 голосов
/ 16 февраля 2011

Это было бы очень трудно сделать, вам нужно было бы перебором. Вы уверены, что это не красная сельдь и настоящая проверка сделана в другом месте?

В любом случае это не очень хорошая защита, что может помешать вам изменить алгоритм так (используя ваш псевдокод)

check md5 of Example.example
If md5 I just obtained != "###################################"
allow send score.
...