000000F0 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF ............................
0000010C FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF ............................
00000128 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF ............................
00000144 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF ............................
Можно удалить и другие байты, попытайтесь сделать это в качестве упражнения.
В результате, несмотря на удаление всей шифрованной регистрационной информации, IDA 4.01 тем не менее продолжает нормально работать и не показывает ее больше нигде, в том числе *.ASM и *.LST, а встроенная в IBD базы лицензия больше не воспроизводится.
ОДНАКО, осталась еще небольшая проблема. Начните декомпилировать большую программу. Сначала все идет хорошо, но в конце работа прерывается сообщением, что "программа превысила допустимые пределы" (execution flows beyond limits) или ему подобным. Но если вы возвратите исходный неисправленный ida.key, то все заканчивается нормально. Что же случилось?
Вернем нормальный ключ в директорию IDA. По окончании процедуры декомпиляции существует последняя проверка целостности ключа, одна из тех, которые трудно обнаружить. Как я сам нашел ее? Я проследил программу до следующего фрагмента:
001B:10077848 E83B020000 CALL 10077A88
001B:1007784D 85C0 TEST EAX,EAX <-- остановимся здесь
001B:1007784F 7C09 JL 1007785A <-- исправить на 'nop'
001B:10077851 0FBE4610 MOVSX EAX,BYTE PTR [ESI+10]
Если установить в этом фрагменте прерывание 'bpmb 1b:10077848 x' и загрузить idag.exe, то до момента окончания процедуры декомпиляции это прерывание произойдет 5 раз. По окончании выполните команду 'd esi' и увидите в окне данных расшифрованную регистрационную информацию в виде "= имя, дата, ...мусор...". Если теперь в памяти изменить лицензионные данные на что-либо еще, то в конце второй попытки декомпиляции возникнет та самая ошибка.
Проверка происходит именно здесь - в расшифрованном ключе. Да, мы исправили код IDA, однако, регистрационная информация хранится в памяти и используется повторно. Если Вы хотите все сделать самостоятельно, то запаситесь временем и терпением, эта информация копируется в памяти из области в область (около 300 раз!), прежде чем будет проверена. Вам придется ставить контрольные точки 'bpmb' в памяти на регистрационную запись и удалять их, как только эти данные будут скопированы в новое место. Я использовал другие хитрости, здесь не описанные, однако, если Вы терпеливы, то и этот метод прекрасно срабатывает. В конце концов мы оказываемся в участке кода IDA.WLL, где регистрационная информация уже больше никуда не копируется и где происходит ее окончательная проверка.
0008:10013318 53 PUSH EBX