Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых)

 eXeL@B —› Программирование —› Заюзать экспорт из EXE - как?
Посл.ответ Сообщение

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

Создано: 27 декабря 2006 18:30
· Личное сообщение · #1

Привет всем!

Есть EXE, в котором находятся экспортируемые функции, которые нужно заюзать. Я бы мог сконвертировать этот EXE в DLL, да релоков нет, как на зло... Каким образом можно заюзать экспорты из EXE?

-----
MicroSoft? Is it some kind of a toilet paper?




Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 27 декабря 2006 19:14
· Личное сообщение · #2

Можно попробывать собрать свой екзешник с адресом загрузки != тому что у екзешника, который экспортирует функции.



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

Создано: 27 декабря 2006 22:32 · Поправил: kropalik
· Личное сообщение · #3

1. написать плагин (.dll) которую загрузит
этот exe. из нее вызывать функции находящиеся
в .exe (при необходимости подпавить EntryPoint
добавив туда загрузку твоей .dll и затем jmp на OEP)

2. написать свой .exe с базовым адресом (image base)
таким чтобы оставить свободным адрес 0x400000
потом поюзать LoadLibrary + GetProcAddress
EntryPoint тоже придется подправить тк .exe
не вернет управление или юзать LoadLibraryEx



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

Создано: 27 декабря 2006 23:02
· Личное сообщение · #4

а я думал, например, сделать так:
вызвать процесс по CreateProcess с флагом SUSPENDED, создать в нем тред через CreateRemoteThread и из этого треда вызвать функции, предварительно заполучив их с помощью GetProcAddress... но это так, мысли...

-----
MicroSoft? Is it some kind of a toilet paper?




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

Создано: 27 декабря 2006 23:04
· Личное сообщение · #5

asd
не получается... без релоков система не грузит DLL... с пустыми релоками она все равно грузит DLL по другому адресу, даже если 400000 свободен...

-----
MicroSoft? Is it some kind of a toilet paper?





Ранг: 240.5 (наставник)
Активность: 0.190
Статус: Участник
Author of ACKiller

Создано: 27 декабря 2006 23:07
· Личное сообщение · #6

Tim
по-моему, asd имел ввиду сдампить ехе с разными адресами загрузки, а потом скормить эти дампы утилите для построения релоков (названия не помню).



Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 27 декабря 2006 23:59 · Поправил: S_T_A_S_
· Личное сообщение · #7

Чем скомпилен EXE? По умолчанию экспорты делают борланды, но они и релоки оставляют.

Если релоков нет, то решение, предложенное asd, имхо единственно рабочее (см. аттач).

Для гарантии, что 0x40000 никто не займёт к моменту загрузки EXE, можно свой exe слинковать на 0x40000, создать в нём подходящую пустую секцию и отобразить туда другой exe руками.

1abe_27.12.2006_CRACKLAB.rU.tgz - exe_dll.zip



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

Создано: 28 декабря 2006 05:27
· Личное сообщение · #8

Всем спасибо!!! Пошел по этому пути:

kropalik пишет:
1. написать плагин (.dll) которую загрузит
этот exe. из нее вызывать функции находящиеся
в .exe (при необходимости подпавить EntryPoint
добавив туда загрузку твоей .dll и затем jmp на OEP)


-----
MicroSoft? Is it some kind of a toilet paper?




Ранг: 160.1 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 28 декабря 2006 05:46
· Личное сообщение · #9

Tim пишет:
написать плагин (.dll) которую загрузит
этот exe. из нее вызывать функции находящиеся
в .exe (при необходимости подпавить EntryPoint
добавив туда загрузку твоей .dll и затем jmp на OEP

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



Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 28 декабря 2006 06:43
· Личное сообщение · #10

Если допустимо падчить файл EXE, то можно прилепить лишнюю секцию.




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

Создано: 28 декабря 2006 11:19
· Личное сообщение · #11

Есть такой вопрос: Как можно узнать параметры экспортируемой функции, если EXE или DLL были собраны не мной, ?




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

Создано: 28 декабря 2006 12:05
· Личное сообщение · #12

опытным путем.. грузи в иду и исследуй

-----
Тут не могла быть ваша реклама




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

Создано: 30 декабря 2006 00:51
· Личное сообщение · #13

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

да конечно. просто если в exe есть экспорт
это значит что скорее всего это для поддержки
плагинов. в этом случае ничего патчить не придется
просто написать свой 'плагин'



Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 01 января 2007 22:07
· Личное сообщение · #14

А как загрузить этот плагин, не пропадчив секцию кода или каталог импорта?




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

Создано: 03 января 2007 14:13 · Поправил: s0larian
· Личное сообщение · #15

Tim, думаю что всё сведётся к одному вопросу - в какой момент надо/можно вызывать этот export.

Иными словами, сколько инициализации требуется от самого exe? Если ничего, и, соответственно, export не трогает глобальные переменные, heap, etc и сам делает себе init/cleanup, то можно вбить "ret" в entry point и пользоваться файлом как DLLкой.



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

Создано: 04 января 2007 04:01
· Личное сообщение · #16

я сделал маленький загрузчик (LoadLibrary) на месте старой WinMain. все-таки многое из RTL юзается в проге, так что без инициализации никак.

-----
MicroSoft? Is it some kind of a toilet paper?




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

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

Снова привет.

Со временем появилась новая проблема...

Я подправил EP у EXE так, чтобы он грузил мою DLL (сделал вызов LoadLibrary на месте WinMain). Саму DLL я делаю в C++Builder 6. Проблема заключается в том, что при попытке вызова GetOpenFileName (системный диалог выбора файлов) прога виснет намертво. Никаких Access Violation, никаких ошибок... просто висит. Нашел временное решение, установив старый стиль диалога... но вскоре прога стала подвисать при работе с контролом ListView... простой щелчок на ListView уводит прогу в завис...

-----
MicroSoft? Is it some kind of a toilet paper?




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

Создано: 07 января 2007 02:05 · Поправил: kropalik
· Личное сообщение · #18

попробуй добавить это в начало:

INITCOMMONCONTROLSEX x;

x.dwSize=sizeof(x);
x.dwICC=ICC_LISTVIEW_CLASSES;
// используется ListView
InitCommonControlsEx(&x);


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


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