Полный текст
Взламываем 40-летний донгл защиты от копированияБухгалтерский софт на древнем языке RPG отказывался работать без аппаратного ключа в LPT-порту. Эмулятор DOSBox с образом Windows 98 позволил запустить среду, но компилятор RPGC.EXE требовал физического наличия донгла для сборки любых программ.Анализ бинарника в Reko выявил скрытый сегмент кода, обращающийся к портам ввода-вывода. Подпрограмма опрашивала параллельный порт и возвращала результат в регистре BX. Логика оказалась тривиальной: функция не принимала аргументов, а значит, возвращала константу.Брутфорс 256 возможных значений младшего байта BL показал, что ключ всегда отдаёт 0x7606. Патч из 4 байт (MOV BX, 7606h; RETF) полностью отключил проверку. Изучим ассемблерный листинг.