Авторские статьи делаем патч для всех версий Crystal Player Pro

Discussion in 'Статьи' started by ProTeuS, 9 Jan 2007.

  1. ProTeuS

    ProTeuS --

    Joined:
    26 Nov 2004
    Messages:
    1,239
    Likes Received:
    542
    Reputations:
    445
    делаем патч для всех версий Crystal Player Pro

    Попытаемся сделать универсальный пат4ер для всех версий Crystal Player Pro, которая нагло просит заругистрировать, 4то проявляется в показе длительного нага каждые 5 минут при просматривании фильмов поверх него самого. Это не радует. так 4то грузим жертву в ольку. распаковываем.

    Code:
    00775001 > 90               NOP
    00775002   60               PUSHAD
    00775003   E8 03000000      CALL Crystal.0077500B
    00775008  -E9 EB045D45      JMP 45D454F8
    0077500D   55               PUSH EBP
    0077500E   C3               RETN
    
    трейсим по F7 p заходом в подфункции до команды восстановления предыдущего состояния регистров.

    Code:
    007753B0   61               POPAD
    007753B1   75 08            JNZ SHORT Crystal.007753BB
    007753B3   B8 01000000      MOV EAX,1
    007753B8   C2 0C00          RETN 0C
    
    попадаем на OEP. можем дампить и без проблем восстанавливать импорт импреком.

    Code:
    004E3253     6A 60          PUSH 60
    004E3255   . 68 08585300    PUSH Crystal.00535808
    004E325A   . E8 F5EAFFFF    CALL Crystal.004E1D54
    004E325F   . BF 94000000    MOV EDI,94
    004E3264   . 8BC7           MOV EAX,EDI
    004E3266   . E8 35EDFFFF    CALL Crystal.004E1FA0
    004E326B   . 8965 E8        MOV DWORD PTR SS:[EBP-18],ESP
    004E326E   . 8BF4           MOV ESI,ESP
    004E3270   . 893E           MOV DWORD PTR DS:[ESI],EDI
    004E3272   . 56             PUSH ESI                                 ; /pVersionInformation
    004E3273   . FF15 2C124F00  CALL DWORD PTR DS:[4F122C]               ; \GetVersionExA
    004E3279   . 8B4E 10        MOV ECX,DWORD PTR DS:[ESI+10]
    004E327C   . 890D DC065B00  MOV DWORD PTR DS:[5B06DC],ECX
    004E3282   . 8B46 04        MOV EAX,DWORD PTR DS:[ESI+4]
    004E3285   . A3 E8065B00    MOV DWORD PTR DS:[5B06E8],EAX
    004E328A   . 8B56 08        MOV EDX,DWORD PTR DS:[ESI+8]
    004E328D   . 8915 EC065B00  MOV DWORD PTR DS:[5B06EC],EDX
    004E3293   . 8B76 0C        MOV ESI,DWORD PTR DS:[ESI+C]
    004E3296   . 81E6 FF7F0000  AND ESI,7FFF
    004E329C   . 8935 E0065B00  MOV DWORD PTR DS:[5B06E0],ESI
    004E32A2   . 83F9 02        CMP ECX,2
    004E32A5   . 74 0C          JE SHORT Crystal.004E32B3
    
    дамп пофиксен, рабо4ий файл создан, теперь можно искать функции регистрации. поскольку они более "интерфейсны" и реализуют лишь визуальное оповещение пользователя о вводе верного\неправильного регкода(4то я обнаружил в изу4ении прошлых релизов исследуемого продукта), то достато4но найти\править код, выводящий наг каждые 5мин и работаться жизни. Я в свое время нашел код проверки (немного поразмыслив, нужно искать вызовы функций CreateCompatibleDC, BitBlt, SelectObject, SetTimer и т.д., вызывающиеся в коде "рядом") - это .0041AB59 для последней 1.97 версий.
    0041AB59 |. FF15 88104B00 CALL DWORD PTR DS:[<&gdi32.CreateCompati>; \CreateCompatibleDC
    Для любого релиза найти его просто - поставив бряк на CreateCompatibleDC (бряков будет до 10) и
    найдя нижележащий код около вызова:
    Code:
    0041AB06  |. 53             PUSH EBX                                 ; /hWnd
    0041AB07  |. 895C24 44      MOV DWORD PTR SS:[ESP+44],EBX            ; |
    0041AB0B  |. 895C24 48      MOV DWORD PTR SS:[ESP+48],EBX            ; |
    0041AB0F  |. 895C24 4C      MOV DWORD PTR SS:[ESP+4C],EBX            ; |
    0041AB13  |. 895C24 50      MOV DWORD PTR SS:[ESP+50],EBX            ; |
    0041AB17  |. C74424 54 BC02>MOV DWORD PTR SS:[ESP+54],2BC            ; |
    0041AB1F  |. 885C24 58      MOV BYTE PTR SS:[ESP+58],BL              ; |
    0041AB23  |. 885C24 59      MOV BYTE PTR SS:[ESP+59],BL              ; |
    0041AB27  |. 885C24 5A      MOV BYTE PTR SS:[ESP+5A],BL              ; |
    0041AB2B  |. C64424 5B 01   MOV BYTE PTR SS:[ESP+5B],1               ; |
    0041AB30  |. C64424 5C 03   MOV BYTE PTR SS:[ESP+5C],3               ; |
    0041AB35  |. C64424 5D 02   MOV BYTE PTR SS:[ESP+5D],2               ; |
    0041AB3A  |. C64424 5E 01   MOV BYTE PTR SS:[ESP+5E],1               ; |
    0041AB3F  |. C64424 5F 22   MOV BYTE PTR SS:[ESP+5F],22              ; |
    0041AB44  |. 895424 68      MOV DWORD PTR SS:[ESP+68],EDX            ; |
    0041AB48  |. 894424 6C      MOV DWORD PTR SS:[ESP+6C],EAX            ; |
    0041AB4C  |. 894C24 7C      MOV DWORD PTR SS:[ESP+7C],ECX            ; |
    0041AB50  |. FF15 44134B00  CALL DWORD PTR DS:[<&user32.GetDC>]      ; \GetDC
    
    Это и есть отрисовка нага. На пару десятков байт выше будет процедура проверки.

    Code:
    00476F3A  |. E8 3C67FFFF    CALL dumped_.0046D67B                    ; \dumped_.0046D67B
    00476F3F  |. 84C0           TEST AL,AL
    00476F41  |. 0F84 AD010000  JE dumped_.004770F4
    00476F47  |. A1 98D15200    MOV EAX,DWORD PTR DS:[52D198]
    00476F4C  |. 8945 B4        MOV DWORD PTR SS:[EBP-4C],EAX
    00476F4F  |. A1 9CD15200    MOV EAX,DWORD PTR DS:[52D19C]
    
    Нам достато4но подменить выдаваемые ей результаты на


    0041AAD2 . FEC8 DEC AL
    0041AAD4 . E9 06020000 JMP cracked.0041ACDF
    0041AAD9 90 NOP

    где JMP прыгает на команду вида

    0041ACDF > 8B77 08 MOV ESI,DWORD PTR DS:[EDI+8]

    за 10-40 байт перед самим RET из функции

    Результирующая сигнатура для пат4а будет выглядеть как


    E8 ?? ?? FF FF 84 c0 0F 84! ?? ?? 00 00

    она в файле встре4ается только 1 раз, и 4тобы сделать универсальный пат4ер для любой версии проигрывателя в ка4естве домашнего задания (никогда не думал 4то такое скажу) нужно сделать простенький парсер для подс4ета зна4ения 9ого байта в сигнатуре (этот байта равен смещению команды MOV ESI, XXX относительно JE XXX)

    E8 ?? ?? FF FF FE c8 E9 A2! ?? ?? 00 00

    ЗЫ: на ошибки и смыслой брейнфак не обращаем внимания - писалось в своебразном состоянии сознания

    ЗЫЫ: gl hff!
     
    #1 ProTeuS, 9 Jan 2007
    Last edited: 9 Jan 2007
    7 people like this.