Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Исследование PhotoShop Plug-in PSD2FLA 1.0

Обсудить статью на форуме

Хорошая подборка видеоуроков, инструментов крэкера, книг и статей - здесь.
 Используемые программы:
 Numega SoftIce 4.01,
 ICEDump 6.0.2.5
 URL: http://www.medialab.com
 
 Устанавливаем bpx hmemcpy , для простоты можно
 сразу bpx GetDlgItemTextA. В регистрационном окне
 вводим Name : Dexim и S/N: 121212121 - что нибудь отфонарно .
 Вываливаемся в S-ICE .
 
 0167:04C813B2  FF1548C1C904        CALL      [USER32!GetDlgItemTextA] ;<-- bpx
 0167:04C813B8  85C0                TEST      EAX,EAX                  ;Смотрят не пусто ли
 0167:04C813BA  0F841E010000        JZ        04C814DE
 0167:04C813C0  8D7C2414            LEA       EDI,[ESP+14]
 0167:04C813C4  83C9FF              OR        ECX,-01
 0167:04C813C7  33C0                XOR       EAX,EAX
 0167:04C813C9  F2AE                REPNZ SCASB                        ;Копируеться нами введенный
 0167:04C813CB  F7D1                NOT       ECX                      ;серийник
 0167:04C813CD  49                  DEC       ECX
 0167:04C813CE  83F901              CMP       ECX,01
 0167:04C813D1  0F8607010000        JBE       04C814DE
 0167:04C813D7  8D4C2414            LEA       ECX,[ESP+14]
 0167:04C813DB  51                  PUSH      ECX
 0167:04C813DC  8BCB                MOV       ECX,EBX
 0167:04C813DE  E86D350000          CALL      04C84950                 ;Читаеться серйник PhotoShop'a
 0167:04C813E3  50                  PUSH      EAX                      ;и кидаеться встек
 0167:04C813E4  E847060000          CALL      04C81A30                 ;Обработка нашего серийника
 0167:04C813E9  8B530C              MOV       EDX,[EBX+0C]
 0167:04C813EC  83C408              ADD       ESP,08
 0167:04C813EF  42                  INC       EDX
 0167:04C813F0  8BCA                MOV       ECX,EDX
 0167:04C813F2  89530C              MOV       [EBX+0C],EDX
 0167:04C813F5  83F932              CMP       ECX,32                   ;Если правильный серийник
 0167:04C813F8  7F04                JG        04C813FE                 ;то сразу идем на 04C813FE
 0167:04C813FA  84C0                TEST      AL,AL                    ;Если что-то не так
 0167:04C813FC  7464                JZ        04C81462                 ;то на 04C81462  (конец функции)
 0167:04C813FE  8D7C2414            LEA       EDI,[ESP+14]
 0167:04C81402  83C9FF              OR        ECX,-01
 0167:04C81405  33C0                XOR       EAX,EAX
 0167:04C81407  8D5314              LEA       EDX,[EBX+14]
 0167:04C8140A  F2AE                REPNZ SCASB
 0167:04C8140C  F7D1                NOT       ECX
 
 Теперь остаеться просто поменять JG 04C813FE (7404) на JMP 04C813FE (EB04).
 Но сначала рассмотрим подробнее функцию обработка нашего серийника 0167:04C813E4   CALL 04C81A30:
 
 0167:05191A2F  90                  NOP
 0167:05191A30  53                  PUSH      EBX
 0167:05191A31  8B5C2408            MOV       EBX,[ESP+08]
 0167:05191A35  56                  PUSH      ESI
 0167:05191A36  57                  PUSH      EDI
 0167:05191A37  85DB                TEST      EBX,EBX
 0167:05191A39  7477                JZ        05191AB2                (NO JUMP)
 0167:05191A3B  8B742414            MOV       ESI,[ESP+14]
 0167:05191A3F  85F6                TEST      ESI,ESI
 0167:05191A41  746F                JZ        05191AB2
 0167:05191A43  8BFE                MOV       EDI,ESI
 0167:05191A45  83C9FF              OR        ECX,-01
 0167:05191A48  33C0                XOR       EAX,EAX
 0167:05191A4A  F2AE                REPNZ SCASB
 0167:05191A4C  F7D1                NOT       ECX
 0167:05191A4E  49                  DEC       ECX
 0167:05191A4F  83F909              CMP       ECX,09                  ;Сравнение сколько символов
 0167:05191A52  755E                JNZ       05191AB2                ;наш серийник (должен быть равен 9)
 0167:05191A54  8A06                MOV       AL,[ESI]
 0167:05191A56  8D4C2410            LEA       ECX,[ESP+10]
 0167:05191A5A  51                  PUSH      ECX
 0167:05191A5B  68D0F01A05          PUSH      051AF0D0
 0167:05191A60  88442418            MOV       [ESP+18],AL
 0167:05191A64  C644241900          MOV       BYTE PTR [ESP+19],00
 0167:05191A69  FF15DCC01A05        CALL      [051AC0DC]
 0167:05191A6F  50                  PUSH      EAX
 0167:05191A70  53                  PUSH      EBX
 0167:05191A71  E86AFFFFFF          CALL      051919E0
 
 Теперь надо учесть, что серийник надо вводить 9-ти значный.
 
 2) Дополнительно об этом плагине:
 При запуске он ищет в %windir% файл "PSD2FLA Prefs_P.PRF" размером
 в 88 байт - где и хранит информацио о регистрации. Причем по смещениям
 0x14-0x1C - наш сейрийник. А по остальным вот различия (первый не
 регистрирован, а второй:
 
 00000000: 01 00
 00000001: 01 00
 0000000A: 1A C9
 0000000B: 05 04
 0000000C: 00 06
 0000001D: AA 00
 00000022: 1A C9
 00000023: 05 04
 00000028: 01 24
 00000029: 00 D7
 0000002A: 00 CD
 0000002E: 00 C8
 0000002F: 00 04
 
 
Подолжение : 02.10.2002 Как оказалось - PSD2FLA пишет, что но REGISTERED, но при этом по прежнему сохраняет файлы с синими полосками. Попробуем и это исправить. Исследование PhotoShop Plug-in PSD2FLA 1.0.1 r019 При исследовании применялась IDA Pro 4.15 (но без нее можно вполне обойтись). Регистрируем как и PSD2FLA 1.0 r017 - система защиты там не поменялась (изменились немного только адреса). После этого запускаем опять PSD2FLA и находясь в основном окне попытаемся перехватить процедуру рбработки кнопки "Ok". Для этого вычислим hWnd (хендл) этого окна. Достаточно дать в S-ICE комманду hwnd Photoshp и найти там в колонке Class-Name имя "#32770 (Dialog)" и посмотреть к нему Window handle - в моем слуае это был 0D00 . Теперь ставим брякпоинт bmsg hWnd WM_COMMAND (hwnd подставите свой) на событие WM_COMMAND - т.е. когда нажмут на кнопку. Далее жмем на кнопку "Ok" и вываливаемся в S-ICE теперь поищим наш введенный ранее номер на который зарегистрирован PSD2FLA - для этого воспользуемся коммандой S 00000000 L 0FFFFFFFF "121212121". он встречаеться в двух-трех местах ------ 0030:00CDD75C 31 32 31 32 31 32 31 32-31 00 8D 00 D1 9F 09 05 121212121....... 0030:00CDD76C 00 00 00 00 24 D7 CD 00-00 00 08 05 00 00 00 00 ....$........... 0030:00CDD77C 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ ------ 0030:0217C144 31 32 31 32 31 32 31 32-31 20 2A 2A 00 8B 94 00 121212121 **.... 0030:0217C154 90 8B 94 00 38 00 00 00-24 00 24 00 24 00 2F 00 ....8...$.$.$./. 0030:0217C164 44 00 69 00 61 00 6C 00-6F 00 67 00 2F 00 50 00 D.i.a.l.o.g./.P. ------ 0030:0217E7CF 31 32 31 32 31 32 31 32-31 20 2A 2A 0A 0A 56 69 121212121 **..Vi 0030:0217E7DF 73 69 74 20 75 73 20 61-74 20 68 74 74 70 3A 2F sit us at http:/ 0030:0217E7EF 2F 77 77 77 2E 6D 65 64-69 61 6C 61 62 2E 63 6F /www.medialab.co ------ Искать следующий - просто надо поставлять найденый адресс увеличенный на 1 вместо стартового. Нам нужен номер с адресом 00CDD75C - потому как при трассировке в процедуре при начальной регистрации было видно, что программа работала с адресами в этом диапазоне. Теперь ставим на него брякпоинт bpmd 00CDD75C после брякаемся до тех пор пока не бракнемся в PSD2FLA на приблизительно таком коде: 0167:050844CD 0FBE5114 MOVSX EDX,BYTE PTR [ECX+14] 0167:050844D1 8D4114 LEA EAX,[ECX+14] ;<-- здесь брякаемся 0167:050844D4 81FAFF000000 CMP EDX,000000FF 0167:050844DA 7413 JZ 050844EF 0167:050844DC 50 PUSH EAX 0167:050844DD E85E060000 CALL 05084B40 0167:050844E2 50 PUSH EAX 0167:050844E3 E8A8D6FFFF CALL 05081B90 0167:050844E8 83C408 ADD ESP,08 0167:050844EB 84C0 TEST AL,AL Рассморим код подробнее: .text:1000449E loc_1000449E: ; CODE XREF: sub_10004460+31j .text:1000449E 57 push edi .text:1000449F 8B CE mov ecx, esi .text:100044A1 E8 DA 8F 00 00 call sub_1000D480 .text:100044A1 .text:100044A6 8B CF mov ecx, edi .text:100044A8 E8 A3 57 00 00 call sub_10009C50 .text:100044A8 .text:100044AD 57 push edi .text:100044AE E8 1D 1A 00 00 call sub_10005ED0 .text:100044AE .text:100044B3 83 C4 04 add esp, 4 .text:100044B6 .text:100044B6 loc_100044B6: ; CODE XREF: sub_10004460+Ej .text:100044B6 8B 46 24 ; sub_10004460+18j .text:100044B6 mov eax, [esi+24h] .text:100044B9 55 push ebp .text:100044BA 8B AE 40 50 00+ mov ebp, [esi+5040h] .text:100044C0 C7 86 40 50 00+ mov dword ptr [esi+5040h], 0 .text:100044CA 8B 48 10 mov ecx, [eax+10h] .text:100044CD 0F BE 51 14 movsx edx, byte ptr [ecx+14h] .text:100044D1 8D 41 14 lea eax, [ecx+14h] .text:100044D4 81 FA FF 00 00+ cmp edx, 0FFh .text:100044DA 74 13 jz short loc_100044EF .text:100044DA .text:100044DC 50 push eax .text:100044DD E8 5E 06 00 00 call GetPhotoShopSN .text:100044DD .text:100044E2 50 push eax .text:100044E3 E8 A8 D6 FF FF call check_code .text:100044E3 .text:100044E8 83 C4 08 add esp, 8 .text:100044EB 84 C0 test al, al .text:100044ED 75 6B jnz short bez_polosok ; Надо поменять на jmp .text:100044ED .text:100044EF .text:100044EF loc_100044EF: ; CODE XREF: sub_10004460+7Aj .text:100044EF 8B 46 14 mov eax, [esi+14h] .text:100044F2 8B FD mov edi, ebp .text:100044F4 8B C8 mov ecx, eax .text:100044F6 D1 F9 sar ecx, 1 .text:100044F8 8D 14 8D 04 00+ lea edx, ds:4[ecx*4] .text:100044FF 8B 4E 10 mov ecx, [esi+10h] .text:10004502 0F AF C8 imul ecx, eax .text:10004505 89 54 24 10 mov [esp+18h+var_8], edx .text:10004509 8D 44 8D EC lea eax, [ebp+ecx*4-14h] .text:1000450D 3B E8 cmp ebp, eax .text:1000450F 89 44 24 14 mov [esp+18h+var_4], eax .text:10004513 73 45 jnb short bez_polosok .text:10004513 .text:10004515 53 push ebx .text:10004516 B2 80 mov dl, 80h .text:10004518 .text:10004518 loc_10004518: ; CODE XREF: sub_10004460+F7j .text:10004518 8D 47 01 lea eax, [edi+1] .text:1000451B B9 05 00 00 00 mov ecx, 5 .text:10004520 .text:10004520 loc_10004520: ; CODE XREF: sub_10004460+E9j .text:10004520 8A 58 01 mov bl, [eax+1] .text:10004523 83 C0 04 add eax, 4 .text:10004526 D0 EB shr bl, 1 .text:10004528 88 58 FD mov [eax-3], bl .text:1000452B 8A 58 FC mov bl, [eax-4] .text:1000452E D0 EB shr bl, 1 .text:10004530 88 58 FC mov [eax-4], bl .text:10004533 8A 58 FB mov bl, [eax-5] .text:10004536 88 5C 24 13 mov [esp+1Ch+var_9], bl .text:1000453A 8A 58 FE mov bl, [eax-2] .text:1000453D C6 40 FB FF mov byte ptr [eax-5], 0FFh .text:10004541 88 50 FE mov [eax-2], dl .text:10004544 49 dec ecx .text:10004545 88 5C 24 13 mov [esp+1Ch+var_9], bl .text:10004549 75 D5 jnz short loc_10004520 .text:10004549 .text:1000454B 8B 4C 24 14 mov ecx, [esp+1Ch+var_8] .text:1000454F 8B 44 24 18 mov eax, [esp+1Ch+var_4] .text:10004553 03 F9 add edi, ecx .text:10004555 3B F8 cmp edi, eax .text:10004557 72 BF jb short loc_10004518 .text:10004557 .text:10004559 5B pop ebx .text:1000455A .text:1000455A bez_polosok: ; CODE XREF: sub_10004460+8Dj .text:1000455A 89 AE 40 50 00+ ; sub_10004460+B3j .text:1000455A 00 mov [esi+5040h], ebp .text:10004560 5D pop ebp .text:10004561 5F pop edi .text:10004562 33 C0 xor eax, eax .text:10004564 5E pop esi .text:10004565 83 C4 0C add esp, 0Ch .text:10004568 C3 retn .text:10004568 .text:10004568 sub_10004460 endp Начало очень похоже на код который мы видели при регистрации на первом этапе. Анализируюя код можно увидеть что полоски рисуються c адреса.text:100044EF по адрес .text:1000455A. Соответсвенно теперь остаеться заменить ".text:10004513 73 45 jnb short bez_polosok" на ".text:10004513 EB 45 jmp short bez_polosok" и нет никаких полосок.



 Autor : Dexim
 E-mail: dexim@cydem.zp.ua
 Date  : 30.08.2002
 Update: 02.10.2002
 


Обсуждение статьи: Исследование PhotoShop Plug-in PSD2FLA 1.0 >>>


Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS