![]() |
eXeL@B —› Вопросы новичков —› Бинарь производства RealBasic |
Посл.ответ | Сообщение |
|
Создано: 16 сентября 2011 18:05 · Поправил: OKOB · Личное сообщение · #1 Ковыряюсь с приложением созданным на RealBasic. Подопытный: Corona Project Manager - система управления проектами при разработке для мобильной платформы Android / iOS с использованием Corona SDK. Представляет собой IDE, которого так не хватает в самом SDK. Регистрация ИМЯ-ПОЧТА-КЛЮЧ. Что под капотом пока не ясно, так как проблемы в используемой платформе RealBasic. По нашему форуму встечался вопрос пару раз в 2007 и 2009 годах, но особого движняка не было. Тогда было высказано предположение, что в оверлее лежит байткод как и у VisualBasic и что нужно искать или писать декомпиль. Взгляд на структуру данного приложения ставит все точки над И. В оверлее чистый натив, данные, ресурсы и т.д., а основное тело содержит лоадер и библиотеки. Из всей инфы найденной в инете полезна только структура оверлея, который начинается с сигнатуры "112358", а далее dword codesize; char native_code[codesize]; dword datasize; char init_data[datasize]; dword importsize; char imports[importsize]; dword symbolssize; char symbols[symbolssize]; dword ressize; char resources[ressize]; dword optsize; char options[optsize]; Основная проблемма заключается в том, что загрузчик загружает и настраивает оверлей в выделяемой памяти и каждый раз по разным адресам и ни в Олли ни в ИДе не точку останова не поставить по уму, не покоментировать код, программа мечется между основным кодом и кодом библиотек. Пробывал танцевать от .text:00532E24 call ds:GetWindowTextW через .text:00519797 call ds:WideCharToMultiByte но потерялся в коде. Сделал в ИДе снапшот памяти, но без сигнатур особо не поковыряешь и при загрузке по другим адресам не поиспользуешь. Пробовал отрезать оверлей и загрузить как бинарь. Толку мало, не настроенный импорт и куча вызовов в основное тело (ядро RealBasic). Кто встречался с подобной рыбой?? С какой стороны подобраться? ----- 127.0.0.1, sweet 127.0.0.1 ![]() |
|
Создано: 16 сентября 2011 18:50 · Поправил: Hexxx · Личное сообщение · #2 Посмотрел. Можно сделать новую секцию DATA (доступную на запись) размером с оверлей и перебить указатели там где выделяется память. Т.е. вот тут: Code:
занопить VirtualAlloc и в дальнейший ReadFile передать указатель на секцию, а в gOverlayAddress забить адрес оверлея в новой секции Теперь адрес всегда будет фиксированный ![]() ----- Реверсивная инженерия - написание кода идентичного натуральному ![]() |
|
Создано: 16 сентября 2011 20:35 · Личное сообщение · #3 А можно запатчить вызов VirtualAlloc так, чтоб передавался не NULL вместо lpAddress, а совершенно определённый адрес, который обычно не занят. Или даже не надо ничего патчить - просто во время сеанса отладки простым скриптом под олли менять с NULL на нужное значение. OKOB пишет: Основная проблемма заключается в том, что загрузчик загружает и настраивает оверлей в выделяемой памяти и каждый раз по разным адресам Тогда найдите место, где происходит выделение этой памяти и добейтесь скриптом выделения по одним и тем же адресам. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 16 сентября 2011 23:10 · Личное сообщение · #4 ARCHANGEL пишет: А можно запатчить вызов VirtualAlloc так, чтоб передавался не NULL вместо lpAddress, а совершенно определённый адрес, который обычно не занят Обычно такой адрес угадать не получается и VirtualAlloc() будет возвращать 0, т.е. ошибку. Так что вариант с секцией данных надежнее. ----- Реверсивная инженерия - написание кода идентичного натуральному ![]() |
|
Создано: 16 сентября 2011 23:17 · Личное сообщение · #5 |
|
Создано: 16 сентября 2011 23:20 · Личное сообщение · #6 |
|
Создано: 17 сентября 2011 14:55 · Личное сообщение · #7 Сделал на основе того что посоветовал Hexxx. Только добавил не одну пустую секцию, а порезал оверлей на секции и добавил уже заполненых 5 секций. Обошел не только выделение памяти, но и чтение из оверлея. Пришлось немного пропатчить дабы показать загрузчику, что где лежит Code:
Файл получился рабочий. Теперь поборемся дальше. В секциях импорта и символов (из оверлея) много информации на подобии отладочной. Попробую разобраться с форматом и облегчить себе жизнь. ----- 127.0.0.1, sweet 127.0.0.1 ![]() |
|
Создано: 17 сентября 2011 23:39 · Личное сообщение · #8 |
|
Создано: 27 сентября 2011 14:36 · Поправил: Dazz · Личное сообщение · #9 |
![]() |
eXeL@B —› Вопросы новичков —› Бинарь производства RealBasic |