ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Mobile Music Pro 1.0.0.1. Убираем ограничения!
  #1  
Старый 14.09.2007, 22:24
Аватар для KindEcstasy
KindEcstasy
Участник форума
Регистрация: 30.09.2006
Сообщений: 134
Провел на форуме:
352963

Репутация: 197
Отправить сообщение для KindEcstasy с помощью ICQ
Arrow Mobile Music Pro 1.0.0.1. Убираем ограничения!

Mobile Music Pro 1.0.0.1. Убираем ограничения!


Инструменты:

OllyDebuger - отладчик.




Программа:

Mobile Music Pro может служить конвертером из формата midi в другие форматы мелодий для сотовых телефонов (mmf,imelody,rtttl) и наоборот из форматов для сотовых может сделать midi. Кроме того она предназначенна и для составления мелодий из нот, короче программа нужна только для тех у кого сотовые телефоны старых моделей, или кому не нравиться mp3!




Процесс:

Итак, для начала проверим программу в PEiD, который скажет нам что прога не запакованна и написанна на C++, что не может нас не радовать. Посмотрим какие ограничения составили нам разработчики:

1) Сохранить созданную мелодию кнопкой "Save" не удаётся!
2) Кнопка "Save As..." тоже не работает
3) При конвертации мелодий стоит ограничение на конвертацию всего лишь на несколько нот.

Приступим. Загружаем прогу без отладчика! Сочиняем мелодию и пытаемся сохранить, но тут облом... Мерзкое окошко с ошибкой вида "You can't save file in evaluation version!", пытаеться остановить нас! Теперь попробуем нажать на "Save As..." и тоже самое окно мозолит нам глаза... Так картина ясна!

Грузим прогу в Olly и сканируем строки, далее ищем строку "You can't save file in evaluation version!", и переходим туда, где она встечаеться в коде. Мдааа плачевная ситуация, почему бы разработчикам не применять банальный способ защиты от StringReference-взлома, ну да ладно, видим такую картину:


Код:
0044E91D     0FBE02         MOVSX EAX,BYTE PTR DS:[EDX]              ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0044E920     85C0           TEST EAX,EAX                             ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0044E922     75 19          JNZ SHORT MMPro.0044E93D                 ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0044E924  |. 6A 20          PUSH 20                                  ; /Style = MB_OK|MB_ICONQUESTION|MB_APPLMODAL
0044E926  |. 68 DCD24C00    PUSH MMPro.004CD2DC                      ; |Title = "Evaluation Version"
0044E92B  |. 68 F0D24C00    PUSH MMPro.004CD2F0                      ; |Text = "You can't save file in evaluation version."
0044E930  |. 6A 00          PUSH 0                                   ; |hOwner = NULL
0044E932  |. FF15 00A54B00  CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
0044E938  |. E9 3D040000    JMP MMPro.0044ED7A
0044E93D  |> 8B8D 14D4FFFF  MOV ECX,DWORD PTR SS:[EBP-2BEC]
0044E943  |. 81C1 70030000  ADD ECX,370
0044E949  |. E8 0418FFFF    CALL MMPro.00440152
0044E94E  |. E9 27040000    JMP MMPro.0044ED7A
0044E953  |> 8B0D E81B4D00  MOV ECX,DWORD PTR DS:[4D1BE8]
0044E959  |. 030D E41B4D00  ADD ECX,DWORD PTR DS:[4D1BE4]
0044E95F     0FBE11         MOVSX EDX,BYTE PTR DS:[ECX]              ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0044E962  |. 85D2           TEST EDX,EDX                             ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0044E964  |. 75 19          JNZ SHORT MMPro.0044E97F                 ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0044E966  |. 6A 20          PUSH 20                                  ; /Style = MB_OK|MB_ICONQUESTION|MB_APPLMODAL
0044E968  |. 68 1CD34C00    PUSH MMPro.004CD31C                      ; |Title = "Evaluation Version"
0044E96D  |. 68 30D34C00    PUSH MMPro.004CD330                      ; |Text = "You can't save file in evaluation version."
0044E972  |. 6A 00          PUSH 0                                   ; |hOwner = NULL
0044E974  |. FF15 00A54B00  CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
0044E97A  |. E9 FB030000    JMP MMPro.0044ED7A
0044E97F  |> 8B8D 14D4FFFF  MOV ECX,DWORD PTR SS:[EBP-2BEC]
0044E985  |. 81C1 70030000  ADD ECX,370

Посмотрите на первые три строки! В регистр EAX что-то должно отправиться из EDX (вернее байт), потом идёт сравнение EAX, и если в EAX содержиться значение большее значения "0" то условный переход отправит нас по адресу 0044E93D! Но вся загвоздка в том что этого не произойдёт, по причине что в EAX так и останеться НУЛЬ! Значит чтобы перепрыгнуть окошко с ошибкой нам нужно как то увеличить значение EAX! Конечно можно и JNZ заменить на JMP (безусловный переход), но этот способ работает не всегда, хотя тут я думаю что сработает, но мы сделаем по другому:

Если по адресу 0044E91D, написать вместо MOVSX EAX,BYTE PTR DS:[EDX], mov eax,1, то какая инструкция затрёт наш переход потому, что mov eax,1 занимает больше байт в памяти чем MOVSX EAX,BYTE PTR DS:[EDX] (это видно в отладчике). А вот если написать вместо MOVSX EAX,BYTE PTR DS:[EDX], INC EAX (один байт - увеличение eax на 1), то всё пройдет отлично, главное поставить галочку на "Fill with NOP's", которая добавит 2 NOP'a в недостающие байты. (Если ей пренибреч, то отладчик автоматически вставит в следующие 2 инструкции мусорные байты). Должна получиться такая вот картина:


Код:
0044E91D     40             INC EAX                                  ; ПРОПАТЧЕННЫЕ БАЙТЫ
0044E91E     90             NOP
0044E91F     90             NOP
0044E920     85C0           TEST EAX,EAX
0044E922     75 19          JNZ SHORT MMPro.0044E93D
0044E924  |. 6A 20          PUSH 20                                  ; /Style = MB_OK|MB_ICONQUESTION|MB_APPLMODAL
0044E926  |. 68 DCD24C00    PUSH MMPro.004CD2DC                      ; |Title = "Evaluation Version"
0044E92B  |. 68 F0D24C00    PUSH MMPro.004CD2F0                      ; |Text = "You can't save file in evaluation version."
0044E930  |. 6A 00          PUSH 0                                   ; |hOwner = NULL
0044E932  |. FF15 00A54B00  CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
0044E938  |. E9 3D040000    JMP MMPro.0044ED7A
0044E93D  |> 8B8D 14D4FFFF  MOV ECX,DWORD PTR SS:[EBP-2BEC]
0044E943  |. 81C1 70030000  ADD ECX,370
0044E949  |. E8 0418FFFF    CALL MMPro.00440152
0044E94E  |. E9 27040000    JMP MMPro.0044ED7A
0044E953  |> 8B0D E81B4D00  MOV ECX,DWORD PTR DS:[4D1BE8]
0044E959  |. 030D E41B4D00  ADD ECX,DWORD PTR DS:[4D1BE4]
0044E95F     0FBE11         MOVSX EDX,BYTE PTR DS:[ECX]
0044E962  |. 85D2           TEST EDX,EDX
0044E964  |. 75 19          JNZ SHORT MMPro.0044E97F
0044E966  |. 6A 20          PUSH 20                                  ; /Style = MB_OK|MB_ICONQUESTION|MB_APPLMODAL
0044E968  |. 68 1CD34C00    PUSH MMPro.004CD31C                      ; |Title = "Evaluation Version"
0044E96D  |. 68 30D34C00    PUSH MMPro.004CD330                      ; |Text = "You can't save file in evaluation version."
0044E972  |. 6A 00          PUSH 0                                   ; |hOwner = NULL
0044E974  |. FF15 00A54B00  CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
0044E97A  |. E9 FB030000    JMP MMPro.0044ED7A
0044E97F  |> 8B8D 14D4FFFF  MOV ECX,DWORD PTR SS:[EBP-2BEC]
0044E985  |. 81C1 70030000  ADD ECX,370
Теперь когда EAX увеличиться на 1, условный переход кинет нас на 0044E93D, но там нас подстеригает вторая проверка (как я понял это проверка комманды "Save Ass..."). C ней поступаем аналогично, только вместо EAX, у нас теперь фигурирует EDX! Оставлю это вам, ничего сложного в этом нет, просто сделать всё тоже, но с EDX! Итак, первые две проверки мы обошли! Осталать трейтия!

Не закрывая отладчик, запустите копию программы и попробуйте сконвертировать что-нибудь... Вы увидите сообщение:

"In evaluation version only 10 notes will be converted!"

Вот эту сроку мы и найдём в отладчике. Перейдём по ней и увидим код:


Код:
0048CEC3     0FBE08         MOVSX ECX,BYTE PTR DS:[EAX]
0048CEC6  |. 85C9           TEST ECX,ECX
0048CEC8  |. 75 42          JNZ SHORT MMPro.0048CF0C
0048CECA  |. 817D 08 100C00>CMP DWORD PTR SS:[EBP+8],0C10
0048CED1  |. 74 09          JE SHORT MMPro.0048CEDC
0048CED3  |. 817D 08 110C00>CMP DWORD PTR SS:[EBP+8],0C11
0048CEDA  |. 75 19          JNZ SHORT MMPro.0048CEF5
0048CEDC  |> 6A 30          PUSH 30
0048CEDE  |. 68 60F94C00    PUSH MMPro.004CF960                ;  ASCII "Evaluation version limit"
0048CEE3  |. 68 7CF94C00    PUSH MMPro.004CF97C                ;  ASCII "Note: In evaluation version, only 4 whole notes duration will be converted.
If you want whole song will be converted. Please register Mobile Music Pro.
Thanks."
0048CEE8  |. 8B8D D0FDFFFF  MOV ECX,DWORD PTR SS:[EBP-230]
0048CEEE  |. E8 50F40100    CALL MMPro.004AC343
0048CEF3  |. EB 17          JMP SHORT MMPro.0048CF0C
0048CEF5  |> 6A 30          PUSH 30
0048CEF7  |. 68 20FA4C00    PUSH MMPro.004CFA20                ;  ASCII "Evaluation version limit"
0048CEFC  |. 68 3CFA4C00    PUSH MMPro.004CFA3C                ;  ASCII "Note: In evaluation version, only 10 notes will be converted.
If you want whole song will be converted. Please register Mobile Music Pro.
Thanks."
0048CF01  |. 8B8D D0FDFFFF  MOV ECX,DWORD PTR SS:[EBP-230]
0048CF07  |. E8 37F40100    CALL MMPro.004AC343
0048CF0C  |> 6A 20          PUSH 20
0048CF0E  |. 6A 00          PUSH 0
0048CF10  |. 8D95 8CFEFFFF  LEA EDX,DWORD PTR SS:[EBP-174]
0048CF16  |. 52             PUSH EDX
0048CF17  |. E8 A48C0000    CALL MMPro.00495BC0
Как вы догадались наверное, тут нужно сделать тоже самое, но с регистром ECX, а именно по адресу 0048CEC3 нужно вписать INC ECX вместо MOVSX ECX,BYTE PTR DS:[EAX], и тогда условный переход JNZ по адресу 0048CEC8 кинет нас на 0048CF0C, тем самым мы обойдём проверку 4 или 10 нот! Кстати комманда JNZ означает Jump if Not Zero (прыгнуть, если не нуль). После всех манипуляций у меня получилось вот так:


Код:
0048CEC3     41             INC ECX                           ; ПРОПАТЧИЛ ТУТ <----------
0048CEC4     90             NOP                               ; //---//
0048CEC5     90             NOP                               ; //---//
0048CEC6  |. 85C9           TEST ECX,ECX
0048CEC8  |. 75 42          JNZ SHORT MMPro.0048CF0C
0048CECA  |. 817D 08 100C00>CMP DWORD PTR SS:[EBP+8],0C10
0048CED1  |. 74 09          JE SHORT MMPro.0048CEDC
0048CED3  |. 817D 08 110C00>CMP DWORD PTR SS:[EBP+8],0C11
0048CEDA  |. 75 19          JNZ SHORT MMPro.0048CEF5
0048CEDC  |> 6A 30          PUSH 30
0048CEDE  |. 68 60F94C00    PUSH MMPro.004CF960                ;  ASCII "Evaluation version limit"
0048CEE3  |. 68 7CF94C00    PUSH MMPro.004CF97C                ;  ASCII "Note: In evaluation version, only 4 whole notes duration will be converted.
If you want whole song will be converted. Please register Mobile Music Pro.
Thanks."
0048CEE8  |. 8B8D D0FDFFFF  MOV ECX,DWORD PTR SS:[EBP-230]
0048CEEE  |. E8 50F40100    CALL MMPro.004AC343
0048CEF3  |. EB 17          JMP SHORT MMPro.0048CF0C
0048CEF5  |> 6A 30          PUSH 30
0048CEF7  |. 68 20FA4C00    PUSH MMPro.004CFA20                ;  ASCII "Evaluation version limit"
0048CEFC  |. 68 3CFA4C00    PUSH MMPro.004CFA3C                ;  ASCII "Note: In evaluation version, only 10 notes will be converted.
If you want whole song will be converted. Please register Mobile Music Pro.
Thanks."
0048CF01  |. 8B8D D0FDFFFF  MOV ECX,DWORD PTR SS:[EBP-230]
0048CF07  |. E8 37F40100    CALL MMPro.004AC343
0048CF0C  |> 6A 20          PUSH 20
0048CF0E  |. 6A 00          PUSH 0
0048CF10  |. 8D95 8CFEFFFF  LEA EDX,DWORD PTR SS:[EBP-174]
0048CF16  |. 52             PUSH EDX
0048CF17  |. E8 A48C0000    CALL MMPro.00495BC0
Вот все исправления которые получились у меня:


Код:
0048CEC3     41             INC ECX
0048CEC4     90             NOP
0048CEC5     90             NOP
0044E91D     40             INC EAX
0044E91E     90             NOP
0044E91F     90             NOP
0044E95F     42             INC EDX
0044E960     90             NOP
0044E961     90             NOP



Итак мы сделали все необходимые исправления в бинарнике, теперь необходимо всё сохранить в файл! Делаем через Olly, чтоб не заморачиваться с хексерами. Пкм--> Copy To Executable --> All Modifications --> Copy All --> Пкм --> Save File

Далее вводим имя для файла, желательно отличное от оригинала, чтоб можно было поправить потом что-нибудь например "patched.exe" и жмём OK! Запускаем, проверяем, работает??? Ну и слава богу!

Вот так вот обходяться разного рода ограничения в таких прогах.


Спасибо за внимание с вами был и буду (теперь не отвяжитесь ) robo9 aka KindEcstasy. Пока!
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сегодняшний разговор с Mobile Nova Болталка 11 25.03.2006 10:32
Aladdin представила новый eToken PRO Zek Мировые новости 0 21.03.2006 23:36



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ