eXeL@B —› Вопросы новичков —› Реверсинг CRC |
Посл.ответ | Сообщение |
|
Создано: 15 июля 2015 08:03 · Личное сообщение · #1 Всем привет! Столкнулся с защитой, основанной на CRC. Смысл состоит в том, что есть участок кода (Block1), который зашифрован и есть CRC этого участка. Программа делает некоторые преобразования с введенным серийным кодом (Key1), затем происходит xor зашифрованного участка кода (Block1) с полученным результатом от серийника (Key1). После этого вычисляется CRC измененного участка кода и сверяется с CRC, который должен быть. Если CRC равны, то управление передается расшифрованному участку кода. Вопрос: как получить последовательность байт, которая будет соответствовать данному CRC? У меня только одна идея: использовать брутфорс. Подскажите, пожалуйста, как расковырять данный алгоритм? Уже снится hex Заранее спасибо! |
|
Создано: 15 июля 2015 08:16 · Личное сообщение · #2 |
|
Создано: 15 июля 2015 08:24 · Личное сообщение · #3 |
|
Создано: 15 июля 2015 08:37 · Личное сообщение · #4 |
|
Создано: 15 июля 2015 08:55 · Личное сообщение · #5 |
|
Создано: 15 июля 2015 09:03 · Поправил: Vnv · Личное сообщение · #6 |
|
Создано: 15 июля 2015 09:11 · Личное сообщение · #7 |
|
Создано: 15 июля 2015 10:36 · Личное сообщение · #8 |
|
Создано: 15 июля 2015 11:16 · Личное сообщение · #9 По поводу самой программы: я ее выложу позже, если сам не разберусь и не сойду с ума Распишу немного подробнее про серийник. В программе есть массив констант (Array1). Вводим серийник и этот массив констант каким-то образом преобразуется с серийником (для меня это пока что черный ящик). На выходе получаем новый массив констант (Array2). Затем считаем CRC от Array2 (получаем CRC_2). Делаем XOR dword ptr [Array2], CRC_2 - то есть первый dword в Array2 теперь изменен. Затем в цикле делаем XOR Array_code, dword ptr [Array2] - здесь Array_code - это массив зашифрованных байт. Длина массива порядка 200 байт. Далее считаем CRC от поксоренного Array_code (получаем CRC_code) и сравниваем его со значением в программе. Если равны, то выполняется код Array_code. Надеюсь, понятно расписал. Спасибо за ответы! |
|
Создано: 15 июля 2015 12:26 · Личное сообщение · #10 Mefist0 пишет: В программе есть массив констант (Array1). Вводим серийник и этот массив констант каким-то образом преобразуется с серийником (для меня это пока что черный ящик). На выходе получаем новый массив констант (Array2). Может это какой нибудь RSA??! Я полагаю, надо обратить внимание на две вещи: 1. Исполняемый массив кода это константа в любом случае. 2. По идее, разбор черного ящика ответит на вопрос, целесообразен брутфорс или нет |
|
Создано: 15 июля 2015 12:38 · Поправил: ClockMan · Личное сообщение · #11 hello пишет: По идее, разбор черного ящика ответит на вопрос, целесообразен брутфорс или нет Надо знать какой код по-шифрован по идее, понять алгоритм, и брутить, но есть одно но, если разработчики не дураки, то в начале закриптованного кода могли напихать рандомный мусор, тогда туши свет...... ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 15 июля 2015 12:46 · Личное сообщение · #12 hello пишет: Может это какой нибудь RSA??! Сомневаюсь, но все возможно. По крайней мере плагин для PEiD Krypto Analyzer ничего не показывает. Да и в целом визуально код мало похож на какой-то криптоалгоритм. Вот расчет CRC видно без анализатора невооруженным глазом. hello пишет: По идее, разбор черного ящика ответит на вопрос, целесообразен брутфорс или нет Согласен. Попробую разобрать алгортим этого "черного ящика", но все равно не пойму, как это поможет определить тот код, который должен получиться в итоге. То есть я вижу сейчас это так: TargetArray = Array2 XOR Array_code, где по сути две неизвестные: Array2 и TargetArray. Хотя мы и получаем Array2, но какой он точно должен быть - неизвестно. |
|
Создано: 15 июля 2015 13:00 · Личное сообщение · #13 |
|
Создано: 15 июля 2015 13:50 · Поправил: -=AkaBOSS=- · Личное сообщение · #14 Mefist0 пишет: Согласен. Попробую разобрать алгортим этого "черного ящика", но все равно не пойму, как это поможет определить тот код, который должен получиться в итоге. Для начала стоило бы определить, какой длины искомый ключ, тоесть сколько байт из серийника берётся для трансформации Array1. Это даст понятие о количестве возможных комбинаций, а стало быть - о предполагаемом времени брутфорса. Mefist0 пишет: XOR dword ptr [Array2], CRC_2 - то есть первый dword в Array2 теперь изменен. Делаю предположение что Array2 - блок из 256 двордов, тоесть 1024 байт Mefist0 пишет: здесь Array_code - это массив зашифрованных байт. Длина массива порядка 200 байт. Тоесть, сообщение заметно короче ключа, а стало быть, на глаз его фиг вскроешь. Если бы там было еще хоть 2-3 блока, зашифрованных тем же ключом, был бы вариант анализировать данные с целью вытащить ключ. //ADD Mefist0 пишет: Нет. Длина Array1 = Array2 = 037h (55 dec). хм.. странная цифра какая-то Mefist0 пишет: Хотелось бы просто совета в каком направлении продолжить реверсинг Расковырять наложение серийника на ключ расшифровки. Там будет яснее. И, возможно, стоит поискать еще такие же зашифрованные блоки кода. Шифровать один блок чисто на проверке серийника - несерьёзно. Как происходит передача управления зашифрованному коду? call? jmp? |
|
Создано: 15 июля 2015 14:02 · Личное сообщение · #15 Kindly пишет: Как еще топик не закрыли, ни кода, ни проги - одно гадание. Не стоит так набрасываться. Я предоставил пока все, что могу. Терпение! -=AkaBOSS=- пишет: Делаю предположение что Array2 - блок из 256 двордов, тоесть 1024 байт Нет. Длина Array1 = Array2 = 037h (55 dec). Длина зашифрованного участка кода 200 байт. Понимаю, что без кода сложно что-то сказать, но я хочу сам доковырять. Хотелось бы просто совета в каком направлении продолжить реверсинг. Завис на полпути по сути. И это раздражает |
|
Создано: 15 июля 2015 14:18 · Личное сообщение · #16 Mefist0 пишет: Понимаю, что без кода сложно что-то сказать, но я хочу сам доковырять. Если это чья-то приватная прога (поднасрать другу или знакомому охота), то разбирайтесь сами и смысла в создании треда нет, а если это паблик говнище, которое Вам нужно для личных целей, то невыкладывание тела недопустимо.Может алгос вообще неверно получен. ----- TEST YOUR MIGHT |
|
Создано: 15 июля 2015 14:19 · Личное сообщение · #17 |
|
Создано: 15 июля 2015 15:03 · Поправил: Mefist0 · Личное сообщение · #18 Парни, все будет! Терпение reversecode пишет: скажите, а вы когда болеете, диагноз вам доктор по телефону на основании ваших пересказываний ставит? Все зависит от характера болезни и квалификации доктора. В целом и на приеме у врача вы пересказываете свои ощущения и симптомы. Вопрос был задан не ради создания треда. Как я считаю, вопрос конкретен. Я думал, что кто-нибудь уже сталкивался с чем-то похожим. По-большому счету я не ошибся и многие дали грамотные советы. Да и ветка все-таки для для новичков ( не зря же написано "Вопросы новичков"). У всех случаются проблемы и ступоры с реверсингом. Поэтому будьте терпимее, пожалуйста! |
|
Создано: 15 июля 2015 16:36 · Личное сообщение · #19 |
|
Создано: 15 июля 2015 16:46 · Личное сообщение · #20 |
Ранг: 419.0 (мудрец), 647thx Активность: 0.46↗0.51 Статус: Участник "Тибериумный реверсинг" |
Создано: 15 июля 2015 17:08 · Личное сообщение · #21 |
|
Создано: 15 июля 2015 17:42 · Личное сообщение · #22 |
|
Создано: 15 июля 2015 21:09 · Поправил: dosprog · Личное сообщение · #23 Mefist0 пишет: Тему не закрывать, оффтоп не разводить! Хорошо, отложили все дела и с нетерпеньем ждём. --Добавлено-- К следующему посту: DenCoder пишет: Полностью согласен с Боровом! 4-5 байтов отсилы, и то если стандартная RTL использовалась. То же и с эпилогом. Из 55 байтов даже 10 угаданных - это ерунда. |
|
Создано: 15 июля 2015 22:21 · Личное сообщение · #24 BoRoV пишет: Если это отдельная функция то можно по прологу найти часть значения которым ксорится Полностью согласен с Боровом! Пробуйте различные прологи/продолжения, ксором получите возможные преобразованные части ключей. Если длина ключа 55 байт, то через 55 же байт если не будет смысла в коде - не тот пролог/продолжение. Конец кода можно поподбирвать, очень возможно он должен заканчиваться на retn/retn n, а может push и jmp. Шифрованный блок 200 байт? Ключ 55 байт? Это даст 200 % 55 = 35 <- ещё по одному смещению байт 5-10 ключа можно подобрать... Дальше реверсите преобразования с введенным серийным кодом, получите серийник. ----- IZ.RU | Сообщение посчитали полезным: Mefist0 |
|
Создано: 16 июля 2015 07:30 · Личное сообщение · #25 |
eXeL@B —› Вопросы новичков —› Реверсинг CRC |