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

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

Ранг: 7.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 01 августа 2011 11:34
· Личное сообщение · #1

понадобилось мне сейчас из чужого exe (исходников нет, да =) ) экспортировать одну функцию. В общем, нашел не очень-то много информации. Во-первых меня интересуют основные различия exe и dll (кроме флага dll в заголовке). Сейчас я в petools пытаюсь прикрутить секцию .edata (жертва на дельфи написана, да) и настроить в ней таблицу экспорта, но выходит чуть более, чем никак. Так, что мне вообще нужно, чтоб все правильно работало (ну, в смысле грамотно сделать длл. С вызовом функции все понятно)? И есть ли какой-нибудь софт для такого изврата? Заранее благодарю =)



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

Создано: 01 августа 2011 11:38
· Личное сообщение · #2

Если exe написан на Delphi, то ничего не получится. У него WinMain заканчивается ExitProcess'ом, а не выходом обратно в кернел как у dll. Если только ret поставить там где надо..



Ранг: 7.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 01 августа 2011 11:41
· Личное сообщение · #3

Enigma, с этим разберемся =) спасибо за информацию.




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

Создано: 01 августа 2011 11:43
· Личное сообщение · #4

Основная сложность будет в релоках, их в общем случае нарисовать (если их изначально нет)-алгоритмически неразрешимая задача. Но в принципе можно попробовать и без них обойтись, если есть гарантия, что нужное место будет свободно. Экспорт дорисовать не проблема. Ну и точку входа чуть переписать придётся, в дельфях она вообще дурная.



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

Создано: 01 августа 2011 11:46
· Личное сообщение · #5

Archer пишет:
Основная сложность будет в релоках, их в общем случае нарисовать (если их изначально нет)-алгоритмически неразрешимая задача. Но в принципе можно попробовать и без них обойтись, если есть гарантия, что нужное место будет свободно. Экспорт дорисовать не проблема. Ну и точку входа чуть переписать придётся, в дельфях она вообще дурная.


Точно, хотя Delphi создает релоки для exe тоже.



Ранг: 7.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 01 августа 2011 11:52
· Личное сообщение · #6

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




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 01 августа 2011 12:20
· Личное сообщение · #7

Я прикручивал экспорт к проге на Borland C, работало нормально. С релоками не заморачивался. Даже сделал софтину для этого. Но по моей глупости все мои проекты канули в лету.

-----
Лучше быть одиноким, но свободным © $me


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

Ранг: 7.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 01 августа 2011 12:46
· Личное сообщение · #8

BoRoV, если объяснишь как, то буду очень благодарен =) а то пока уг получается у меня




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

Создано: 01 августа 2011 12:47
· Личное сообщение · #9

А, да, ещё может быть фигня с кривым кодерским кодом. Например, GetModuleHandle с параметром 0 будет работать по-другому и вернёт уже не то, что ожидается. Не знаю, как с этим дело обстоит в рантайме дельфовом. Так что стоит иметь в виду, что, возможно, в коде тоже копаться придётся.
А в экспорте в принципе ничего сложного нет, читай доку по ПЕ+любую длл в качестве примера возьми. Или ехе, если хочется, хотя разницы нет. Как пример ехе-OllyDbg.




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 01 августа 2011 12:58
· Личное сообщение · #10

doctor_flasher пишет:
BoRoV, если объяснишь как, то буду очень благодарен =)

А вот и ответ:
Archer пишет:
в экспорте в принципе ничего сложного нет, читай доку по ПЕ+любую длл в качестве примера возьми


Экспорт намного проще импорта в структуре, руками там не сложно всё сделать. Почитай доку по ПЕ о структуре таблиц экспорта.

-----
Лучше быть одиноким, но свободным © $me





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

Создано: 01 августа 2011 15:31
· Личное сообщение · #11

Нах экспорт делать? Я всегда делаю так:

hModule := GetModuleHandle('victim.dll'); // Получаем базу модуля
@proc := Pointer(hModule + ProcOffset); // Добавляем оффсет экспортируемой процедуры

proc(param1, param2,...); // Дергаем процедуру

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




Ранг: 7.9 (гость)
Активность: 0.010
Статус: Участник

Создано: 01 августа 2011 16:45
· Личное сообщение · #12

PE_Kill, ну, разницы особой нет. А с экспортом все получится очень аккуратненько так ладно, всем спасибо - будем читать умные статьи


 eXeL@B —› Вопросы новичков —› сделать из exe dll.
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати