R0 CREW

ZeroNightsCrackME #1

Какие все питонисты. :slight_smile:

Дарвин, ты молодец, спасибо за кей, но суть моей мысли в этом - зачем кейген, если можно пропатчить, сменив JE на JNE. А код очень прост в дизасме. На crackmes.de в 0 уровне и то сложнее…

Наверное потому, что в задании было указано, что нужно предоставить валидную пару mail/serial. Не? Ну или если все так просто, почему тогда ты не дал валидный серийник?

Питон рулит :slight_smile:

Криворукий, что ж поделать)

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

кстати сам алгоритм похож на ГОСТ шифр. но более простой.

Задания выполнено, всем решавшим спасибо за участие. Тема закрыта.

По просьбе Борова, открою тему дабы он выложил свое решение.

Hide
from random import choice

ALPHABET = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
MASK = [1, 0, 0,
0, 0, 1,
0, 1, 0]


def prepare_key(key):
table = range(256)
j = 0

for i in xrange(256):
j += table[i] + ord(key[i % len(key)])
j &= 0xFF
table[j], table[i] = table[i], table[j]

return table


def get_translate_table(table_):
table = [[] for i in xrange(7)]
for a in ALPHABET:
i = ord(a)
i -= ((i & 0xF0) >> 1)
table[table_[i & 0xf] % 7].append(a)
return [table[0], table[1]]


def get_serial_part(table):
return ''.join([choice(table[i]) for i in MASK])

if __name__ == '__main__':
email = raw_input('E-mail: ')
table = prepare_key(email)
translate_table = get_translate_table(table)
serial = get_serial_part(translate_table)
serial += get_serial_part(translate_table)
print 'Serial:', serial

Решение от журнала хакер: http://xakep.ru/howtos/kaspersky-crackme-research/