Ida.key
00000054 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF ............................
00000070 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF ............................
0000008C FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF ............................
000000A8 FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF ............................
000000C4 FFFF FFFF FFFF FFFF FFFF .........
Следующий блок вставляется в создаваемые Вами IDB файлы и не используется в проверках целостности. Его тоже можно деперсонифицировать.
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
0008:10013319 56 PUSH ESI
0008:1001331A 57 PUSH EDI
0008:1001331B 55 PUSH EBP
0008:1001331C 51 PUSH ECX
0008:1001331D E876FFFFFF CALL 10013298
0008:10013322 84C0 TEST AL,AL <- Вы оказались здесь
0008:10013324 0F858E000000 JNZ 100133B8
0008:1001332A A1CF930910 MOV EAX,[100993CF]
0008:1001332F E8AC080000 CALL 10013BE0
0008:10013334 33D2 XOR EDX,EDX
0008:10013336 8AD0 MOV DL,AL
0008:10013338 B888AA0810 MOV EAX,1008AA88
0008:1001333D 891424 MOV [ESP],EDX
0008:10013340 E857E1FFFF CALL 1001149C
0008:10013345 50 PUSH EAX
Что можно предположить? Если AL содержит 0, то происходит ошибка, и это случается всякий раз, когда вы удаляете из ключа регистрационную информацию. Подпрограмма по адресу 10013298 используется и в дальнейшем, следовательно нам надо так исправить ее, чтобы она никогда не помещала 0 в регистр AL.
Чрезвычайно важно: та же самая методика будет использована для зашифрованных модулей IDA (найдите их сами). Нам придется сделать это во всех точках, так как шифрование использует водяные знаки - я имею в виду, что везде для шифрования используется Ваша персональная информация. Я должен поблагодарить Nolan Blender, который помог, снабдив меня CRC-кодами всех файлов его копии IDA 4.01. Это понадобилось мне, чтобы обнаружить различающиеся файлы. Вот их общий список:
IDAG.EXE
IDA.WLL
IDA.KEY - куда же без него :)
все *.LDW и *.W32
В предыдущих версиях различался только IDA.KEY. Вы же теперь сами видите, где именно использованы водяные знаки. Я также рекомендую Вам почитать статьи по стенографии на нашем сайте, чтобы побольше узнать об этом.
В каждом из исследованных файлов, я обнаружил лишь незначительные различия между копиями Nolan'а и моей. Это означает, что шифрованные водяные знаки, которые IDAG.EXE расшифровывает в время загрузки и инициализации модуля, невелики по размерам.