Набор статей и руководств по дизассемблеру IDA


Защита 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 зашифрован с помощью Вашей регистрационной информации, поэтому проще попытаться восстановить исходный файл приложения.
 

Содержание раздела