Защита IDA.KEY
Если Вы поищите в Сети, то вполне вероятно сможете найти старые варианты IDA с генераторами IDA.KEY. Не тратьте время на шифрование и дешифрование программ, Вы играете на чужом поле. Значительно легче предоставить возможность дешифрования Вашему компьютеру, а затем посмотреть, что получилось. Загрузите SotfICE, установите прерывание 'bpx createfileA do "d esp->4"', и подождите, пока в эту функцию не будет передан 'IDA.KEY'. Запомните дескриптор (handle), возвращаемый в EAX. Установите новое прерывание 'bpx readfile', дождитесь передачи этого дескриптора (в 'esp->4') в функцию, выполните 'd esp->8' и нажмите 'F12'. В результате получите дамп содержимого использованного ключа IDA.KEY. Теперь будьте внимательны! Установите bpr на байт в пределах полученного блока, что приведет Вас к остановке при выполнении команды 'movsd'. Удалите это прерывание, а вместо него установите новое в той области памяти, куда этот блок копируется. Получите повторное прерывание на инстуркции 'movsd', при котором указанную выше процедуру нужно будет повторить. В результате Вы окажетесь по адресу $10078231 в пределах IDA.WLL, содержащего зашифрованную информацию. Несколько раз нажмите на 'F12' (p ret) до тех пор, пока не окажитесь по адресу $10077aa6. В окне данных SoftICE Вы должны будете увидеть Вашу персональную информацию, расположенную в обратном порядке. Таким образом, мы прошли через несколько процедур, которые читают ida.key, дешифруют и меняют порядок символов Вашей лицензионной информации. Продолжим выполнение 'p ret' до тех пор, пока не дойдем до следующего участка кода:
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]
001B:10077855 83F83D CMP EAX,3D
001B:10077858 7404 JZ 1007785E <-- исправить на 'jmp 1007785e'
001B:1007785A 33C0 XOR EAX,EAX
001B:1007785C EB1F JMP 1007787D
001B:1007785E 6A7F PUSH 7F
001B:10077860 56 PUSH ESI
001B:10077861 53 PUSH EBX
001B:10077862 E84556FBFF CALL 1002CEAC
001B:10077867 83C40C ADD ESP,0C
001B:1007786A C605B4EE091007 MOV BYTE PTR [1009EEB4],07
001B:10077871 C7054488081001000000 MOV DWORD PTR [10088844],00000001
001B:1007787B 8BC3 MOV EAX,EBX
Если теперь выполнить "d esi", то получите Вашу регистрационную информацию. Первая задача теперь состоит в том, чтобы поместить в IDA. KEY несколько байтов FF, чтобы удалить из него Ваши персональные данные. Вы обнаружите соответствующие байты, виденные Вами ранее после выхода из readfile api, все остальные байты - не используются. Этот участок кода вызывается до 5 раз, пока IDA все не расшифрует. Для того, чтобы заставить IDA работать без "правильного "ключа", необходимо сделать 3 исправления. Они приведены ниже.
Первый участок исправлений в IDA.WLL
.text:1006A34E jz short loc_0_1006A36B
.text:1006A350 mov eax, [eax+8]
.text:1006A353 mov edx, dword_0_1009AA62
.text:1006A359 cmp edx, 20h
.text:1006A35C jge short loc_0_1006A376 <- исправить на 'jmp'
.text:1006A35E mov ecx, edx
.text:1006A360 mov edx, 1
.text:1006A365 shl edx, cl
.text:1006A367 test edx, eax
.text:1006A369 jnz short loc_0_1006A376
.text:1006A36B
Последний участок корректировки показан ниже:
001B:1006A340 0000 ADD [EAX],AL
001B:1006A342 BA01000000 MOV EDX,00000001
001B:1006A347 E800D40000 CALL 1007774C <-- этот вызов приводит к 1му листингу
001B:1006A34C 85C0 TEST EAX,EAX
001B:1006A34E 741B JZ 1006A36B
001B:1006A350 8B4008 MOV EAX,[EAX+08]
001B:1006A353 8B1562AA0910 MOV EDX,[1009AA62]
001B:1006A359 83FA20 CMP EDX,20
001B:1006A35C 7D18 JGE 1006A376 <--исправить это на 'jmp'
001B:1006A35E 8BCA MOV ECX,EDX
001B:1006A360 BA01000000 MOV EDX,00000001
001B:1006A365 D3E2 SHL EDX,CL
001B:1006A367 85C2 TEST EDX,EAX
001B:1006A369 750B JNZ 1006A376
001B:1006A36B 6812770810 PUSH 10087712
001B:1006A370 E8F7CEFEFF CALL 1005726C
Этот участок выполняется, когда IDA вызывает загрузчик, например, PE.LDW. Эти модули используются для интерпретации типичных форматов файлов типа PE, NE, DOS и т.п...
Однако, перед Вами стоит огромная проблема, так как Вы не можете найти эти участки в IDAG.EXE. Это совершенно естественно - ведь программа шифрована. Дальше Вы с этим столкнетесь еще раз, в обоих случаях я буду пользоваться для исправлений различными подходами. Первый из них был показан здесь с чисто учебными целями, и если Вы захотите им воспользоваться для удаления водяных знаков, то у Вас ничего не получится. Почему? Да потому, что IDAG.EXE зашифрован с помощью Вашей регистрационной информации, поэтому проще попытаться восстановить исходный файл приложения.