Нужен совет по исследованию HTMLanalysator из Seamonitor

Тема в разделе "WASM.RESEARCH", создана пользователем Chanson, 21 фев 2006.

  1. Chanson

    Chanson New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2006
    Сообщения:
    11
    Программа запакована ASProtect 1.23 RC4, его я распоковал. Программа проверяет зарегистрирована она или нет по форме About, проверяет не красная ли надпись user (0FFh), и содержит ли она символы перевода строки и перевода каретки (0Ah, 0Dh). При загрузке формы пропатчил и загружаю имя юзера с этими символами. Ограничения программы только в том, что она не дает сохранить проект. Пишет что это демо версия. Строку я нашел, но проблема джамп идет только на эту ветку, без всяких вариантов. Вот кусок кода:



    .text:00425C4F Proj_not_saved: ; CODE XREF: sub_425B00+148j

    .text:00425C4F push ecx ; lpCaption

    .text:00425C50 push offset aNotPagesInProj ; "Not pages in project. Project is not sa"...

    .text:00425C55 mov eax, [ebp+var_70]

    .text:00425C58 call @Controls@TWinControl@GetHandle$qqrv ; Controls::TWinControl::GetHandle(void)

    .text:00425C5D push eax ; hWnd

    .text:00425C5E call MessageBoxA

    .text:00425C63 dec [ebp+var_50]

    .text:00425C66 lea eax, [ebp+var_10]

    .text:00425C69 mov edx, 2

    .text:00425C6E call StrClr

    .text:00425C73 dec [ebp+var_50]

    .text:00425C76 lea eax, [ebp+var_NameSaveFile]

    .text:00425C79 mov edx, 2

    .text:00425C7E call StrClr

    .text:00425C83 mov ecx, [ebp+var_6C]

    .text:00425C86 mov large fs:0, ecx

    .text:00425C8D jmp end

    .text:00425C92 ; ---------------------------------------------------------------------- -----

    .text:00425C92

    .text:00425C92 loc_425C92: ; CODE XREF: sub_425B00+11Cj

    .text:00425C92 mov eax, [ebp+var_70]

    .text:00425C95 mov edx, [eax+508h] ; in eax - ASCII "#none#"

    .text:00425C9B xor ecx, ecx

    .text:00425C9D mov eax, [ebp+var_70]

    .text:00425CA0 call sub_425990

    .text:00425CA5 mov cl, 1

    .text:00425CA7 mov edx, [ebp+var_NameSaveFile]

    .text:00425CAA mov eax, [ebp+var_70]

    .text:00425CAD call sub_425990

    .text:00425CB2 jmp demo

    .text:00425CB2 ; ---------------------------------------------------------------------- -----

    .text:00425CB7 db 60h ; `

    .text:00425CB8 db 4Ah ; J

    .text:00425CB9 db 0

    .text:00425CBA db 0D5h ; -

    .text:00425CBB db 2Fh ; /

    .text:00425CBC db 64h ; d

    .text:00425CBD db 0Ch

    .text:00425CBE db 0CBh ; T

    .text:00425CBF db 5Ch ; \

    .text:00425CC0 db 0F4h ; ¯

    .text:00425CC1 db 0D2h ; T

    .text:00425CC2 db 8Bh ; Ë

    .text:00425CC3 db 4

    .text:00425CC4 db 0D7h ; +

    .text:00425CC5 db 6Bh ; k

    .text:00425CC6 db 34h ; 4

    .text:00425CC7 db 3Dh ; =

    ...

    ...

    ...

    .text:00426080 db 0FFh

    .text:00426081 db 0EBh ; û

    .text:00426082 db 64h ; d

    .text:00426083 db 0DCh ; -

    .text:00426084 db 0EDh ; ý

    .text:00426085 db 4Ch ; L

    .text:00426086 db 0A8h

    .text:00426087 db 0C8h, 67h, 10h

    .text:0042608A ; ---------------------------------------------------------------------- -----

    .text:0042608A

    .text:0042608A demo: ; CODE XREF: sub_425B00+1B2j

    .text:0042608A mov word ptr [ebp-5Ch], 0D4h

    .text:00426090 mov edx, offset aSorryThisFunct ; "Sorry, this function isn't available in"...

    .text:00426095 lea eax, [ebp-48h]

    .text:00426098 call Str_str_point_

    .text:0042609D inc dword ptr [ebp-50h]

    .text:004260A0 mov eax, [eax]

    .text:004260A2 call @Dialogs@ShowMessage$qqrx17System@AnsiString ; Dialogs::ShowMessage(System::AnsiString)

    .text:004260A7 dec dword ptr [ebp-50h]

    .text:004260AA lea eax, [ebp-48h]

    .text:004260AD mov edx, 2

    .text:004260B2 call StrClr

    .text:004260B7 dec dword ptr [ebp-50h]

    .text:004260BA lea eax, [ebp-4]

    .text:004260BD mov edx, 2

    .text:004260C2 call StrClr

    .text:004260C7 mov ecx, [ebp-6Ch]

    .text:004260CA mov large fs:0, ecx

    .text:004260D1

    .text:004260D1 end: ; CODE XREF: sub_425B00+109j

    .text:004260D1 ; sub_425B00+18Dj

    .text:004260D1 pop edi

    .text:004260D2 pop esi

    .text:004260D3 pop ebx

    .text:004260D4 mov esp, ebp

    .text:004260D6 pop ebp

    .text:004260D7 retn

    .text:004260D7 sub_425B00 endp



    В середине идет мусор. Ставил бряки на доступ к этому мусору - не помогло. WriteProcessMemory - не используется. Новый поток не создается. У меня такое ощущение, что это зашифрованный кусок кода. Т.к. функция открытия проекта примерно похожи по размеру.

    Вопрос: Как найти дешифратор функции? Или как найти ветку в коде отвечающую за сохранение проекта?
     
  2. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Ну, глядя на такой короткий фрагмент, можно только гипотезы высказывать. Самая разумная - смотришь код, который сразу после jmp demo следует:

    .text:00425CB7 db 60h ; `

    .text:00425CB8 db 4Ah ; J

    ...

    очень похоже на зашифрованный фрагмент, который соб-но и сохраняет проект. Весьма вероятно, что где-то он расшифровывается (поищи адресок 425CB7, может поможет). А сам jmp demo после дешифрования надо nop -ами заменить.

    Было бы лучше,если бы ты приаттачил хотя бы код sub_425B00 целиком.
     
  3. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Одно добавление: может быть jmp demo надо не nop-ами заменить, а, скажем, подправить на другой адрес...
     
  4. Chanson

    Chanson New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2006
    Сообщения:
    11
    Поищу адресочек, хотя ида не ссылается на этот кусок, и поиск ничего не дает. Может Адрес этот вычисляется ([eax+???]),как-то так и ида не видит? В том то и загвоздка, как найти адрес расшифровщика?

    Присоединяю два аттача. Первый это сама функция обработки нажатия "Save", Второй это функция, где идут проверки и этот мусор, выдержка из него сверху темы.

    [​IMG] 730939732__SaveClick.doc
     
  5. Chanson

    Chanson New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2006
    Сообщения:
    11
    Второй аттач
     
  6. Chanson

    Chanson New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2006
    Сообщения:
    11
    Что-то первый раз не приаттачился :dntknw:
     
  7. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Ты приаттачил только _TMainForm_SaveProject1Click и помни, что максимальный размер аттача 50К! Лучше сожми.
     
  8. Chanson

    Chanson New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2006
    Сообщения:
    11
    Дошло сейчас, сархивировал раром. В этот раз должно получиться.

    [​IMG] _180120414__CheckSave.rar
     
  9. Chanson

    Chanson New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2006
    Сообщения:
    11
    sub_425b00 заменил имя на CheckSave:)
     
  10. Chanson

    Chanson New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2006
    Сообщения:
    11
    И еще как можно изменять секцию кода, кроме как WriteProcessMemory, потому что эту функцию я не нашел в импорте, может лохо искал?
     
  11. Kola

    Kola New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2004
    Сообщения:
    69
    Этот мусор - закриптованый кусок кода программы (вероятно отвечает за ф-ю Save). Данный кусок расшифорвывается Аспротектом на старте программы, если имеется валидный ключ. Расшифорвать данный кусок без валидного ключа - нереально.
     
  12. Chanson

    Chanson New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2006
    Сообщения:
    11
    Выходит, что можно защитить программы. Ради интереса куплю версию зарегистрированную, посмотрю что там.:dntknw:
     
  13. Chanson

    Chanson New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2006
    Сообщения:
    11
    А Аспр 1.23 шифрует выборочно секцию кода?
     
  14. Solo

    Solo New Member

    Публикаций:
    0
    Регистрация:
    11 июл 2003
    Сообщения:
    131
    в аспре есть примеры, есть хелп. там все рассказано.



    аспр шифрует помеченные участки кода стойким алгоритмом (если правильно помню - IDEA, хотя это и не важно), а ключ для этого алгоритма хранится внутри лицензии. А чтобы его достать из лицензии, нужно еще и hardwareID иметь правильный, если он включен...
     
  15. Kola

    Kola New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2004
    Сообщения:
    69
    Chanson



    Еще как, если грамотно АПИ аспра используешь.



    можно прям в сишном коде выделять участки, которые хочешь покриптовать



    ессно такая защита живет до первого скарденного ключа, но от этого мало что может спасти
     
  16. Oxy

    Oxy New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2005
    Сообщения:
    28
    А возможно ли (и насколько сложно) написать кейген для проги, защищенной Аспром, если имеется один или несколько валидных ключей?
     
  17. Chanson

    Chanson New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2006
    Сообщения:
    11
    Так мне все таки не понятно, как можно еще изменить код, кроме как функцией WriteProcessMemory?
     
  18. Chanson

    Chanson New Member

    Публикаций:
    0
    Регистрация:
    21 фев 2006
    Сообщения:
    11
    А если изменить аттрибуты кодовой секции? Если да, то какой API?
     
  19. Kola

    Kola New Member

    Публикаций:
    0
    Регистрация:
    23 июн 2004
    Сообщения:
    69
    Если из контекста другого процесса и из UserMode, то лично я способа не знаю...