f13nd, А если строки динамик, как тогда быть ? Или например модуль немного изменён, так что декомпилер не пройдёт ?
Да по ситуации, бряком на ShowWindow или ReadConsoleA, или еще на что-нибудь, смотря что там. Процесс творческий, местами даже интересный. Даже если бы и существовало универсальное решение, это превратилось бы в пустое рутинное дрочево.
Нет, конечно, это же крекми, подразумевается, что крекми можно решить адекватным решением. Я изначально предполагал, что вы найдете нужный JMPF и пропатчите его NOP'ом (специально сделал просто очевидный NOP в ВМ, хотя ВМ само собой могла бы и без него обойтись). f13nd в первом раунде сделал то, что другие не смогли о чем я не подумал, а именно пропатчил хендлер инструкции JMPF инвертировав условие. Это сработало потому, что машина стековая, поэтому JMPF при вычисления хеша просто пропустился (хеш вообще не вычислялся), а второй JMPF (при проверке хеша) инвертировал условие. Во втором раунде я в прологе псевдо-кода вставил проверку семантики JMPF (помимо других минорных изменений, типа отсутствия свитча), то есть, что он не был пропатчен. Понятно, что это тоже можно было бы обойти патчем со счетчиком, но это такой веселый стаб, который должен был хотя бы улыбнуть. В итоге f13nd уже патчил псевдо-код, то есть решал так, как я изначально предполагал. --- Сообщение объединено, 26 фев 2022 --- Не, ну особо упоротые реверсеры могли бы и сбрутить хеш, там он по-сути 24-битный и довольно быстро должен вычисляться даже внутри ВМ.
VB6 и 5 по дефолту компилят в натив так-то. Разницы нет что к примеру С что VB. Можно выставить компиляцию в P-код стековой машины, но это заметно замедляет программу. Байткод там состоит из одно или двухбайтового кода операции и операндов, передающихся в стеке. В стеке также возвращается результат. Можно даже заюзать виртуальную машину отдельно для своих нужд.
Несколько дольше. С алфавитом из 0..9,a..z,A..Z получилось 1572480 вариантов. Это значит, что я 726180 раз могу подать заявку в антивирусники. А потом нарастить словарь другими печатными символами и задолбать их окончательно. --- Сообщение объединено, 27 фев 2022 --- А че нет-то, если да. С ходу нашел. Глазами. Вот эта длинная параша "result=..." проверка кея. Можно было бы разобраться, но лень, result=true сделал.
f13nd, Норм семплы трудно найти, кучу перебрал одна фигня. Они даже не смотрят на то что компилят, у большинства из тех что нэйтив строки открыты. Вот этот глянул, стандарт: Декомпиль пройдёт ?
Как-то и мысли не было, что там поиск, хотя... Попытаюсь перефразировать: как ваш софт определяет строку пароля.
Тут нашёл много семплов. ormoulu, Смотри пример. Строится кодовая карта и далее выводятся ветвления, которых в карте нет: Далее если окружение посмотреть, то иногда можно найти пароли: --- Сообщение объединено, 28 фев 2022 --- execrypt - первое с конца ветвление, следующее за сравнением 2-х регистров. --- Сообщение объединено, 28 фев 2022 --- pecompat f13nd, > Протекторы это дрочево. Вручную может быть
Вручную? А можно ещё поинтересоваться, что есть в данном контексте кодовая карта? Просто в общепринятом это довольно высокоуровневая вещь. Подозреваю что нечто вроде динамического покрытия (dynamic code coverage), верно?