Сейчас на форуме: _MBK_, Adler (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Бинарь производства RealBasic
Посл.ответ Сообщение


Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 16 сентября 2011 18:05 · Поправил: OKOB
· Личное сообщение · #1

Ковыряюсь с приложением созданным на RealBasic. Подопытный: Corona Project Manager - система управления проектами при разработке для мобильной платформы Android / iOS с использованием Corona SDK. Представляет собой IDE, которого так не хватает в самом SDK.

--> CPM-Setup.zip <--

Регистрация ИМЯ-ПОЧТА-КЛЮЧ. Что под капотом пока не ясно, так как проблемы в используемой платформе 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




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 16 сентября 2011 18:50 · Поправил: Hexxx
· Личное сообщение · #2

Посмотрел. Можно сделать новую секцию DATA (доступную на запись) размером с оверлей и перебить указатели там где выделяется память.
Т.е. вот тут:
Code:
  1. .text:0046E2D3                 mov     eax, gOverlaySize
  2. .text:0046E2D8                 push    40h             ; flProtect
  3. .text:0046E2DA                 push    1000h           ; flAllocationType
  4. .text:0046E2DF                 push    eax             ; dwSize
  5. .text:0046E2E0                 push    0               ; lpAddress
  6. .text:0046E2E2                 call    ds:VirtualAlloc
  7. .text:0046E2E8                 mov     edx, gOverlaySize
  8. .text:0046E2EE                 push    0               ; lpOverlapped
  9. .text:0046E2F0                 lea     ecx, [ebp+NumberOfBytesRead]
  10. .text:0046E2F6                 push    ecx             ; lpNumberOfBytesRead
  11. .text:0046E2F7                 push    edx             ; nNumberOfBytesToRead
  12. .text:0046E2F8                 push    eax             ; lpBuffer
  13. .text:0046E2F9                 push    edi             ; hFile
  14. .text:0046E2FA                 mov     gOverlayAddress, eax

занопить VirtualAlloc и в дальнейший ReadFile передать указатель на секцию, а в gOverlayAddress забить адрес оверлея в новой секции

Теперь адрес всегда будет фиксированный

-----
Реверсивная инженерия - написание кода идентичного натуральному





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 16 сентября 2011 20:35
· Личное сообщение · #3

А можно запатчить вызов VirtualAlloc так, чтоб передавался не NULL вместо lpAddress, а совершенно определённый адрес, который обычно не занят. Или даже не надо ничего патчить - просто во время сеанса отладки простым скриптом под олли менять с NULL на нужное значение.

OKOB пишет:
Основная проблемма заключается в том, что загрузчик загружает и настраивает оверлей в выделяемой памяти и каждый раз по разным адресам

Тогда найдите место, где происходит выделение этой памяти и добейтесь скриптом выделения по одним и тем же адресам.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 16 сентября 2011 23:10
· Личное сообщение · #4

ARCHANGEL пишет:
А можно запатчить вызов VirtualAlloc так, чтоб передавался не NULL вместо lpAddress, а совершенно определённый адрес, который обычно не занят

Обычно такой адрес угадать не получается и VirtualAlloc() будет возвращать 0, т.е. ошибку. Так что вариант с секцией данных надежнее.

-----
Реверсивная инженерия - написание кода идентичного натуральному





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 16 сентября 2011 23:17
· Личное сообщение · #5

Hexxx
Возможно, но если прога проверяет свою контрольную сумму, то, быть может, проще будет через VirtualQueryEx получить диапазоны, доступные для выделения, и их уже вставить в скрипт.

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 16 сентября 2011 23:20
· Личное сообщение · #6

ARCHANGEL пишет:
если прога проверяет свою контрольную сумму, то, быть может, проще будет через VirtualQueryEx получить диапазоны

Проще будет отключить проверку CRC

-----
Реверсивная инженерия - написание кода идентичного натуральному





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 17 сентября 2011 14:55
· Личное сообщение · #7

Сделал на основе того что посоветовал Hexxx. Только добавил не одну пустую секцию, а порезал оверлей на секции и добавил уже заполненых 5 секций. Обошел не только выделение памяти, но и чтение из оверлея. Пришлось немного пропатчить дабы показать загрузчику, что где лежит

Code:
  1. 046E1A7 C7 05 5C 5C 62 00 98 07 65 00  mov     dwSizeCode, 650798h
  2. 046E1B1 C7 05 AC 79 62 00 00 10 69 00  mov     hOverlayCode, 691000h
  3. 046E1BB C7 05 58 5C 62 00 20 47 07 00  mov     dwSizeData, 74720h
  4. 046E1C5 C7 05 A8 79 62 00 00 20 CE 00  mov     hOverlayData, 0CE2000h
  5. 046E1CF C7 85 E0 FD FF FF 9F 9B 06 00  mov     [ebp+dwSizeImport], 69B9Fh
  6. 046E1D9 BB 00 70 D5 00                 mov     ebx, 0D57000h
  7. 046E1DE C7 85 DC FD FF FF 33 2E 07 00  mov     [ebp+dwSizeSymbol], 72E33h
  8. 046E1E8 C7 05 B0 79 62 00 00 10 DC 00  mov     hOverlaySymbol, 0DC1000h
  9. 046E1F2 C7 85 E4 FD FF FF 47 08 2D 00  mov     [ebp+dwSizeResource], 2D0847h
  10. 046E1FC C7 85 C4 FD FF FF 00 00 A1 00  mov     [ebp+dwResourceFileOfs], 0A10000h
  11. 046E206 C7 85 C8 FD FF FF 00 40 E3 00  mov     [ebp+hOverlayResource], 0E34000h
  12. 046E210 C7 85 D8 FD FF FF 00 00 00 00  mov     [ebp+dwSizeOption], 0
  13. 046E21A E9 C9 02 00 00                 jmp     do_set


Файл получился рабочий.

--> CPM__.EXE <--

Теперь поборемся дальше.

В секциях импорта и символов (из оверлея) много информации на подобии отладочной. Попробую разобраться с форматом и облегчить себе жизнь.

-----
127.0.0.1, sweet 127.0.0.1


| Сообщение посчитали полезным: sapog93


Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 17 сентября 2011 23:39
· Личное сообщение · #8



Вот и все, телемаркет.

--> CPM__.EXE <--

-----
127.0.0.1, sweet 127.0.0.1




Ранг: 22.4 (новичок), 23thx
Активность: 0.020
Статус: Участник

Создано: 27 сентября 2011 14:36 · Поправил: Dazz
· Личное сообщение · #9

OKOB

Перезалейте пожалуйста вылеченный файл на multiupload.com


 eXeL@B —› Вопросы новичков —› Бинарь производства RealBasic
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати