Сейчас на форуме: Lohmaty, tyns777 (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Исходник .lh из Autoplay Media Studio + MemoryEx LH Compiler
Посл.ответ Сообщение

Ранг: -0.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 июня 2017 09:43 · Поправил: Xsite
· Личное сообщение · #1

Часом нико не занимался выдергиванием исходного кода, если это вообще возможно, из .lh файлов скомпилированных с помощью MemoryEx LH Compiler для Autoplay Media Studio?
Для этого всего есть собственно сам компилятор (ссылка выше) и плагин для AMS, который может "прикручивать" этот скомпилированный файл к проекту.
Пробовал прогонять готовый проект через дебагер (x64dbg), нашел примерно место, где происходит подгрузка .lh файла, дампил память, колупал сам компилятор, но знаний и опыта не хватает, что бы что то получилось
Часами гуглил, но ничего не нашел даже близкого

Пример проекта из примеров студии - --> Link <--



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 23 июня 2017 12:13
· Личное сообщение · #2

Xsite пишет:
Пример проекта из примеров студии - --> Link <--

Конечно я не имел дела с этими програмами. Сейчас просто немного подебажил. По-моему, там не совсем в lh дело.

AutoPlay\autorun.cdd - это обычный запароленный .zip архив с тремя файло: _proj.dat, _fonts.dat, _detect.dat.
AutoPlay\Plugins\MemoryEx.lmd - это exe'шник работающий с rgba.lh
AutoPlay\Docs\rgba.lh - формат MXLH (4D 58 4C 48 9E 91 32 D0 - первые байты). Но оно явно не имеет отношения к MXL-формату 1C. Там вероятно на lua-скриптахъ завязано (lua5.1.dll и lua51.dll намекают).

В autorun.exe расшифровка архива вроде тут:
Code:
  1. 00528A53  |> \8B4C24 34     MOV ECX,DWORD PTR SS:[ESP+34]
  2. 00528A57  |.  8B5424 18     MOV EDX,DWORD PTR SS:[ESP+18]
  3. 00528A5B  |.  8B4424 28     MOV EAX,DWORD PTR SS:[ESP+28]
  4. 00528A5F  |.  51            PUSH ECX                                 ; /Arg4 => [8C10E0] = 6
  5. 00528A60  |.  8B4C24 18     MOV ECX,DWORD PTR SS:[ESP+18]            ; |
  6. 00528A64  |.  52            PUSH EDX                                 ; |Arg3 => [8C10DC] = 9
  7. 00528A65  |.  50            PUSH EAX                                 ; |Arg2
  8. 00528A66  |.  51            PUSH ECX                                 ; |Arg1
  9. 00528A67  |.  E8 B4F4FFFF   CALL 00527F20                            ; \autorun.00527F20


MemoryEx.lmd - чтение и работа с rgba.lh тут:
Code:
  1. 01F28AAD  |.  68 30000000   PUSH 30                                  ; /Arg3 = 30
  2. 01F28AB2  |.  8D4424 0C     LEA EAX,[ESP+0C]                         ; |
  3. 01F28AB6  |.  50            PUSH EAX                                 ; |Arg2
  4. 01F28AB7  |.  FF7424 6C     PUSH DWORD PTR SS:[ESP+6C]               ; |Arg1
  5. 01F28ABB  |.  E8 D0520000   CALL 01F2DD90                            ; \MemoryEx_lmd.01F2DD90
  6. 01F28AC0  |.  8D6C24 08     LEA EBP,[ESP+8]
  7. 01F28AC4  |.  8B5D 00       MOV EBX,DWORD PTR SS:[EBP]
  8. 01F28AC7  |.  81FB 4D584C48 CMP EBX, 0x484C584D //проверка сигнатуры MXLH
  9. 01F28ACD  |.  0F85 DE060000 JNE 01F291B1


А что Вы контретно накопали по "колупанию" самого компилятора?
Отпароливали ли _proj.dat, _fonts.dat, _detect.dat в архиве autorun.cdd??



Ранг: -0.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 23 июня 2017 13:18 · Поправил: Xsite
· Личное сообщение · #3

ELF_7719116, не, мне именно надо из .lh исходник выдернуть, если это вообще возможно.
То, что autorun.cdd это архив я знаю. Он вскрывается AMSUnpacker`ом. Он (унпакер) на C# написан, так что его тоже разбирал, что бы понять как оно распаковывается. Там все относительно просто. Пароль в самом autorun.exe зашит, он оттуда выдергивается, перекодируется в IBM437 и им распаковывается.
_proj.dat это собственно и есть основной исходник программы на lua.
Основной исходник программы пишется на lua, но к нему можно подключать скомпилированные .lh, которые по сути работают как подключаемая библиотека. Подключение этого .lh происходит с использованием бибилотеки MemoryEx.lmd (это .dll). Это не основная функция библиотеки и библиотека служит для много чего другого.

По текущему примеру подключается это все
Code:
  1. rgba, szerr, nerr = MemoryEx.LoadLH("AutoPlay\Docs\rgba.lh");

И потом можно пользоваться функциями их этого самого .lh, вроде rgba.getRed(), rgba.getBlue() и т.д.

То, что это все на lua пишется и наталкивает на мысль, что этот самый .lh в какой то момент выполнения преобразуется в исходный код. Хотя может и нет, т.к. этот компилятор поддерживает ассемблерные вставки на fAsm и это все как то иначе работает...
Собственно у самого rgba.lh есть известный исходник.

Естественно мне не именно эту программу "поломать" надо. Это просто аналогичный пример, максимально простой, без нагромождений лишних фич, плагинов и т.д.

Копание в компиляторе тоже мне толком ничего не дало, я там заблудился в переходах и само место где парсится исходник не нашел. А за что зацепиться толком не знаю.

Я думал, что может быть кто нибудь более опытный это уже колупал или захочет поколупать (может кому интересно), т.к. я по сути ламер и "разбираюсь" (если это так можно назвать) в этом всем весьма поверхностно.




Ранг: 55.9 (постоянный), 29thx
Активность: 0.120.22
Статус: Участник

Создано: 19 ноября 2017 21:54 · Поправил: Adler
· Личное сообщение · #4

Может кому пригодится.
При отладке в модуле MemoryEx.lmd находим сигнатуру E8 45 3D 00 00 (для модуля из примера в первом после, для других версий вероятно другой, надо искать).
Сдампив память по адресу, содержащемуся в EAX до вызова функции с сигнатурой выше (дампим естественно после вызова) получаем бинарник LUA (начинается с ".LuaQ"(1B 4C 75 61 51)), который в последствии можно декомпилировать в читабельный формат с помощью Luadec51.exe.

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

P.S. Этот luadec получает более читабельный исходник



Ранг: 35.8 (посетитель), 23thx
Активность: 0.030
Статус: Участник

Создано: 20 ноября 2017 07:27
· Личное сообщение · #5

Это, возможно, никому не пригодится. Но раз уж на то пошло, интерпретатор луа там стандартный (можно убедиться, заменив либу), значит, все скрипты можно отловить на экспортируемой функции lua_load. Асм вставок внутри самого скрипта нет, они хранятся с контейнере *.lh и загружаются в память перед использованием. Стоит поискать VirtualAlloc с флагом PAGE_EXECUTE, если найдете нужное место - сможете снять дамп асм вставки + узнать имя метода, по которому её идентифицурет скрипт.




Ранг: 55.9 (постоянный), 29thx
Активность: 0.120.22
Статус: Участник

Создано: 20 ноября 2017 11:09
· Личное сообщение · #6

Psalmopoeus Pulcher, спасибо за наводку
Оказывается, что через lua_load все просто, а я дурень этот MemoryEx колупал.
Я подозревал, что через lua5.1.dll это можно сделать, но не знал где искать.
Ну ничего, все же практика...


 eXeL@B —› Вопросы новичков —› Исходник .lh из Autoplay Media Studio + MemoryEx LH Compiler
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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