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

 eXeL@B —› Вопросы новичков —› Выдрать функцию из дампа реально!?
Посл.ответ Сообщение

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

Создано: 08 января 2008 09:18
· Личное сообщение · #1

Собственно незнаю еще терминологии, поэтому объясню на пальцах:
Всю ночь возился с програмкой наконец нашел в ней CALL на процедуру которая шифрует буффер данных по замутному алгоритму, использует для шифрования две таблици данных, которые еще и изменяет по ходу дела...
Повторить такой алгоритм большая проблема, очень много времени уйдёт, поэтому вопрос у меня такой:
Возможно ли выдрать эту функцию из проги и использовать затем в своей программе? Может уже есть инструментарий для этого? А если нет, то как быть в такой ситуации?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 08 января 2008 10:13
· Личное сообщение · #2

Можно и выдрать, для Ольки есть плагин, CodeRipper зовёццо, что ли. Мона отдельную прожку заюзать типа TMG Ripper Studio. ИДА в асм сгонять умеет, только ссылки на данные не парсит не фига.



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

Создано: 08 января 2008 11:57 · Поправил: WiseFalcon
· Личное сообщение · #3

TMG Ripper Studio - штука хорошая но видимо не для моего случая =( В этой процедуре все переходы вычисляются непосредственно по ходу работы, если бы в TMG Ripper Studio можно было задать начально значение регистров....
А CodeRipper найти немогу...)

ЗЫ. А можно сделать "экспорт" процедуры, или что-то вроде, чтобы ничего не выдерая использовать её прямо из программы!?




Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 08 января 2008 13:20
· Личное сообщение · #4

WiseFalcon если бы она была в длл, то можно было. А так, разбирайся в коде

-----
invoke OpenFire





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 09 января 2008 23:07
· Личное сообщение · #5

WiseFalcon, как написал archer - проработай код в Иде. Посмотри что твоя функция вызывает, от чего зависит. Дай названия ф-циям, переходам и переменным. После этого ты поймёшь можно ли это выдрать или проще переписать самому. Кста, в случае переписывания hex-rays сильно упростит задачу перевода асма в С.



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

Создано: 10 января 2008 15:55
· Личное сообщение · #6

Вот блин.. весь яндекс измучил в поисках hex-rays, а он оказывается уже здесь есть в архиве с Идой 5.2 Спасибо

Вопрос такой: Я снял протект с программы (Темидой упакована была), но при открытии в Олли выскакивает придупреждение о том что "Точка входа вне сегмента code". Это нормально для проги без протекта? а то у меня мысли, что это влияет и на мою процедурку шифрации...

Пытался сделать так: Нахожу OEP ставлю бряк на неё, прогоняю до бряка, снимаю фулл дамп из PE Tools
, затем IpmRec'ом из памяти считываю таблицу импорта (считывается ровно, без битых) и патчу получившийся дамп. Итог: Программа запускается но нипискнув сразу завершается. И "сразу" это мягко сказано, кликаешь по exe'шнику, а такое ощущение что мимо кликнул, вообще без имоций (пробывал пересобирать Ребилдиром в PE Tools, непомогло)...




Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 10 января 2008 16:11
· Личное сообщение · #7

WiseFalcon
А ты правильно нашёл OEP, у Фемиды вроде весь первый код на OEP в ВМ.



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

Создано: 10 января 2008 16:26 · Поправил: WiseFalcon
· Личное сообщение · #8

VaZeR, "у Фемиды вроде весь первый код на OEP в ВМ" - что такое BM? Я еще незнаток понятий )

Я OEP получил плагином из PEiD. мне кажется он верный. Так как тотже PEiD определяет тип упаковки в просто распакованном файле как "Nothing found *", а в полученном дампе сразу определяет компилятор "Microsoft Visual C++ 6.0".




Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 10 января 2008 16:41
· Личное сообщение · #9

WiseFalcon
Протектор модифицирует исходный код программы, где участки кода защищаемого файла переводятся в байткод, выполняемые на виртуальной машине (ВМ). Проще говоря протектор ворует часть кода и эмулирует его выполнение в своей защищенной области.



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

Создано: 10 января 2008 17:18
· Личное сообщение · #10

Т.е. когда программа работает некоторые её части выполняются через ВМ... вот блин... А я думаю чё эт у меня процедурка по всей памяти разбросана.. это она в ВМ прыгает за очередным кусочком кода
И как с этим бороться?




Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 10 января 2008 17:32
· Личное сообщение · #11

WiseFalcon
Тебе нужно работоспособное приложение? Ты же вроде хочешь выдрать функцию из проги. Так это можно сделать и так без снятия Фемиды, если конечно твоя функция не в ВМ, тогда все значительно усложняется .
А так чтобы получить работоспособную программу нужно сдампливать необходимые регионы и прикручивать их к файлу. Но я что то очень сомневаюсь что тебе это под силу.



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

Создано: 10 января 2008 18:05
· Личное сообщение · #12

VaZeR
Посмотрел в процедуре у неё в самом начале идёт тройка PUSH и затем она прыгает джампом в область памяти Фемиды (секция называется Themida, а содержание написанно SFX) Значит полюбому ВМ. От неё можно какнибудь избавиться или как вообще быть в такой ситуации?
А насчёт "Но я что то очень сомневаюсь что тебе это под силу." - это вопрос времени и устремлённости.




Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 10 января 2008 18:09
· Личное сообщение · #13

WiseFalcon
Ну значит тут только один выход это декомпильнуть ВМ. Но для это очень волокитно, но тем немение возможно. По мне в Фемиде легче всего это сделать логер. Ну это уже твой выбор писать транслятор байт кода или логер дизамп.



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

Создано: 10 января 2008 18:44
· Личное сообщение · #14

VaZeR
Во, классно! Сделать скрипт для Оли который будет от входа в процедуру до выхода из неё логить все выполняемые инструкци... ой нет.. несканает. туда и ВМ попадёт...
Что это за логер тогда?? В чем его принцип действия?




Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 10 января 2008 19:01
· Личное сообщение · #15

WiseFalcon
Так логер должен собирать только нужную инфу, а не весь мусор. Для этого надо разобрать ВМ. И найти в ней контрольные точки. Чтобы когда остановится на ней можно было точно сказать что это за выполнимая команда. Здесь есть неколько проблем. Первая с которой сталкиваешься это то что весь код состоит из переходов (JMP JE JNZ ...), но это не сложно побороть. т.е. получить код ВМ без переходов. Фемида в этом отношении очень лояльна.
Следующая проблема это условные переходы которые были в первоначальном коде. ВМ Фемиды их тоже эмулирует. Но это тоже можно обойти просто запуская два раза ВМ с изменением условия.
Есть ещё одна проблема это то что не которые команды могут давать исключения, типа обращения к несуществующий области. Но это тоже можно обойти просто не выполня команд т.е. дойти до команды эмуляции и пропустить её.
Вот в принципе и все. Но если конечно у тебя такая реализация эмуляции. Лучше всего выложи прогу и скажи где тебе нужно выдрать ВМ. Тогда уже точно можно сказать, что там у тебя.



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

Создано: 10 января 2008 19:43 · Поправил: WiseFalcon
· Личное сообщение · #16

сразу скажу что это L2Walker 10.7.4, пожалуйста без камней..
Вызов процедуры происходит здесь .00433438 CALL [edx+18] (00433B30)
вот тут уже распакованная версия лежит (5,3 Мб): TouchMe http://87.225.71.131/other/dump/




Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 10 января 2008 21:09 · Поправил: VaZeR
· Личное сообщение · #17

WiseFalcon
Да там как раз такая эмуляция как я описал. Первый вызов эмулирует примерно вот этот код:
add ebp,4
mov edi, [esp+18]
push edi
mov eax, [esi+217C]
push eax
mov ebx, [esp+20]
mov eax, ebx
call 488430

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

Вызов ВМ стандартный:
PUSH ключ
jmp на основную ветку ВМ



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

Создано: 11 января 2008 07:17
· Личное сообщение · #18

Спасибо, буду ковырять...



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

Создано: 12 января 2008 05:13
· Личное сообщение · #19

У меня тут мысли возникли: А можно выдрать Фемидовскую ВМ и прикрутить её к свое проге. и функцию шифровки тогда использовать как она есть, вместе с фемидовским байт кодом?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 12 января 2008 07:58
· Личное сообщение · #20

WiseFalcon год назад примерно это было сделать как два пальца, текущюю версию не смотрел, но как развивается гавномида думаю, что ничего не изменилось.

-----
Yann Tiersen best and do not fuck





Ранг: 88.4 (постоянный)
Активность: 0.080
Статус: Участник

Создано: 12 января 2008 09:36
· Личное сообщение · #21

WiseFalcon
Да это можно сделать, но тоже есть кое какие проблемы. Во первых размер будет большой. Я бы в такой ситуации сделал бы трейсер который бы обработал несколько вызовов ВМ у тебя насколько я понял их всего три. Причем первый я тебе уже декомпильнул. Плюс этого метода в том что размер ВМ очень сильно уменьшится. Там будет лишь то что необходимо, вместо всей ВМ, можно ещё к трейсеру прикрутить фильтрацию наиболее характерного мусора.
Во вторых это то что ВМ уже настроена на адреса. Я честно не когда не пытался переносить код ВМ в другое приложение, но думаю что ВМ все равно нужно будет пофиксить. Покрайней мере нужно будет указать адреса для структур ВМ.
По мне легче всего это опять же получить оригинальный код нежели возится с переносом ВМ.


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


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