![]() |
eXeL@B —› Вопросы новичков —› Выдрать функцию из дампа реально!? |
Посл.ответ | Сообщение |
|
Создано: 08 января 2008 09:18 · Личное сообщение · #1 Собственно незнаю еще терминологии, поэтому объясню на пальцах: Всю ночь возился с програмкой наконец нашел в ней CALL на процедуру которая шифрует буффер данных по замутному алгоритму, использует для шифрования две таблици данных, которые еще и изменяет по ходу дела... Повторить такой алгоритм большая проблема, очень много времени уйдёт, поэтому вопрос у меня такой: Возможно ли выдрать эту функцию из проги и использовать затем в своей программе? Может уже есть инструментарий для этого? А если нет, то как быть в такой ситуации? ![]() |
|
Создано: 08 января 2008 10:13 · Личное сообщение · #2 |
|
Создано: 08 января 2008 11:57 · Поправил: WiseFalcon · Личное сообщение · #3 TMG Ripper Studio - штука хорошая но видимо не для моего случая =( В этой процедуре все переходы вычисляются непосредственно по ходу работы, если бы в TMG Ripper Studio можно было задать начально значение регистров.... А CodeRipper найти немогу...) ЗЫ. А можно сделать "экспорт" процедуры, или что-то вроде, чтобы ничего не выдерая использовать её прямо из программы!? ![]() ![]() |
|
Создано: 08 января 2008 13:20 · Личное сообщение · #4 |
|
Создано: 09 января 2008 23:07 · Личное сообщение · #5 WiseFalcon, как написал archer - проработай код в Иде. Посмотри что твоя функция вызывает, от чего зависит. Дай названия ф-циям, переходам и переменным. После этого ты поймёшь можно ли это выдрать или проще переписать самому. Кста, в случае переписывания hex-rays сильно упростит задачу перевода асма в С. ![]() |
|
Создано: 10 января 2008 15:55 · Личное сообщение · #6 Вот блин.. ![]() ![]() ![]() Вопрос такой: Я снял протект с программы (Темидой упакована была), но при открытии в Олли выскакивает придупреждение о том что "Точка входа вне сегмента code". Это нормально для проги без протекта? а то у меня мысли, что это влияет и на мою процедурку шифрации... Пытался сделать так: Нахожу OEP ставлю бряк на неё, прогоняю до бряка, снимаю фулл дамп из PE Tools , затем IpmRec'ом из памяти считываю таблицу импорта (считывается ровно, без битых) и патчу получившийся дамп. Итог: Программа запускается но нипискнув сразу завершается. И "сразу" это мягко сказано, кликаешь по exe'шнику, а такое ощущение что мимо кликнул, вообще без имоций (пробывал пересобирать Ребилдиром в PE Tools, непомогло)... ![]() ![]() |
|
Создано: 10 января 2008 16:11 · Личное сообщение · #7 |
|
Создано: 10 января 2008 16:26 · Поправил: WiseFalcon · Личное сообщение · #8 VaZeR, "у Фемиды вроде весь первый код на OEP в ВМ" - что такое BM? Я еще незнаток понятий )
Я OEP получил плагином из PEiD. мне кажется он верный. Так как тотже PEiD определяет тип упаковки в просто распакованном файле как "Nothing found *", а в полученном дампе сразу определяет компилятор "Microsoft Visual C++ 6.0". ![]() |
|
Создано: 10 января 2008 16:41 · Личное сообщение · #9 |
|
Создано: 10 января 2008 17:18 · Личное сообщение · #10 |
|
Создано: 10 января 2008 17:32 · Личное сообщение · #11 WiseFalcon Тебе нужно работоспособное приложение? Ты же вроде хочешь выдрать функцию из проги. Так это можно сделать и так без снятия Фемиды, если конечно твоя функция не в ВМ, тогда все значительно усложняется ![]() А так чтобы получить работоспособную программу нужно сдампливать необходимые регионы и прикручивать их к файлу. Но я что то очень сомневаюсь что тебе это под силу. ![]() |
|
Создано: 10 января 2008 18:05 · Личное сообщение · #12 VaZeR Посмотрел в процедуре у неё в самом начале идёт тройка PUSH и затем она прыгает джампом в область памяти Фемиды (секция называется Themida, а содержание написанно SFX) ![]() А насчёт "Но я что то очень сомневаюсь что тебе это под силу." - это вопрос времени и устремлённости. ![]() |
|
Создано: 10 января 2008 18:09 · Личное сообщение · #13 |
|
Создано: 10 января 2008 18:44 · Личное сообщение · #14 |
|
Создано: 10 января 2008 19:01 · Личное сообщение · #15 WiseFalcon Так логер должен собирать только нужную инфу, а не весь мусор. Для этого надо разобрать ВМ. И найти в ней контрольные точки. Чтобы когда остановится на ней можно было точно сказать что это за выполнимая команда. Здесь есть неколько проблем. Первая с которой сталкиваешься это то что весь код состоит из переходов (JMP JE JNZ ...), но это не сложно побороть. т.е. получить код ВМ без переходов. Фемида в этом отношении очень лояльна. Следующая проблема это условные переходы которые были в первоначальном коде. ВМ Фемиды их тоже эмулирует. Но это тоже можно обойти просто запуская два раза ВМ с изменением условия. Есть ещё одна проблема это то что не которые команды могут давать исключения, типа обращения к несуществующий области. Но это тоже можно обойти просто не выполня команд т.е. дойти до команды эмуляции и пропустить её. Вот в принципе и все. Но если конечно у тебя такая реализация эмуляции. Лучше всего выложи прогу и скажи где тебе нужно выдрать ВМ. Тогда уже точно можно сказать, что там у тебя. ![]() |
|
Создано: 10 января 2008 19:43 · Поправил: WiseFalcon · Личное сообщение · #16 |
|
Создано: 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 на основную ветку ВМ ![]() |
|
Создано: 11 января 2008 07:17 · Личное сообщение · #18 |
|
Создано: 12 января 2008 05:13 · Личное сообщение · #19 |
|
Создано: 12 января 2008 07:58 · Личное сообщение · #20 |
|
Создано: 12 января 2008 09:36 · Личное сообщение · #21 WiseFalcon Да это можно сделать, но тоже есть кое какие проблемы. Во первых размер будет большой. Я бы в такой ситуации сделал бы трейсер который бы обработал несколько вызовов ВМ у тебя насколько я понял их всего три. Причем первый я тебе уже декомпильнул. Плюс этого метода в том что размер ВМ очень сильно уменьшится. Там будет лишь то что необходимо, вместо всей ВМ, можно ещё к трейсеру прикрутить фильтрацию наиболее характерного мусора. Во вторых это то что ВМ уже настроена на адреса. Я честно не когда не пытался переносить код ВМ в другое приложение, но думаю что ВМ все равно нужно будет пофиксить. Покрайней мере нужно будет указать адреса для структур ВМ. По мне легче всего это опять же получить оригинальный код нежели возится с переносом ВМ. ![]() |
![]() |
eXeL@B —› Вопросы новичков —› Выдрать функцию из дампа реально!? |