Сейчас на форуме: hgdagon, asfa, bartolomeo (+4 невидимых) |
![]() |
eXeL@B —› Программирование —› запихнуть запись о dll в импорт проги |
Посл.ответ | Сообщение |
|
Создано: 15 ноября 2006 14:24 · Личное сообщение · #1 мне надо как-то запихнуть запись о длл в импорт проги. Нужно чтобы длл получила управление сразу после всех остальных длл, тоесть ее в конец нада добавить.... Чувствую нада писать перепаковщик, который будет добавлять эту сраную запись. 1) Есть какойнить путь проще? 2) какие особености при пересборке учитывать? надо ли импортировать хотя бы одну функцию, или достаточно просто имя длл вписать в нужное место? ![]() |
|
Создано: 15 ноября 2006 14:42 · Поправил: Rascal · Личное сообщение · #2 http://exelab.ru/f/action=vthread&forum=6&topic=6281&page= 0 Там есть аттач мой. Добавление в импорт новой библиотеки. Работает только с асмовыми прогами. Влом было доделывать. Прога работала, тестил. Новая библа получала управление. Перестраивать маловероятно что-нить заработает. Только новую секцию с импортом цеплять, это когда нулей не хватит для добавления новой библиотеки и функции. ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 15 ноября 2006 15:20 · Поправил: __ · Личное сообщение · #3 |
|
Создано: 15 ноября 2006 16:52 · Поправил: s0larian · Личное сообщение · #4 fix200, так тебе надо изменить таблицу импорта. Беда только в том, что "уедут" offset-ы внутри файла. Я бы написал кусок кода который бы добавлял в конец файла секцию .newImport, перемащал туда то что лежит по указателю import directory и потом добавлял туда свою .dll и её функцию. Но, придётся писать код. Попробуй сделать те же шаги но используя LordPE, imprec, pe explorer.... ![]() |
|
Создано: 16 ноября 2006 02:01 · Личное сообщение · #5 |
|
Создано: 16 ноября 2006 02:14 · Личное сообщение · #6 |
|
Создано: 16 ноября 2006 03:26 · Личное сообщение · #7 1) Создаешь новую секцию, забитую нулями; 2) в начало секции копируешь все Import Directory Table (их размер и количество определяется легко); 3) дописываешь к перенесенным свою Import Directory Table, остальное оставляешь забитым нулями; 4) в ПЕ-хидере меняешь указатель на виртуальный адрес твоей новой секции. Это все. В своей Import Directory Table проставишь ссылки на имя либы, табличку адресов на имена и на табличку адресов импорта из этой либы. Все эти указатели пусть кажут в твою же секцию. Думаю - это все. ЗЫ Новую секцию желательно создавать, поскольку в старой может не быть места для добавления. ![]() |
|
Создано: 16 ноября 2006 03:46 · Поправил: __ · Личное сообщение · #8 MoonShiner это все делает импрек автоматом сохраняем импорт в .txt FThunk: 0000303C NbFunc: 00000003 1 0000303C kernel32.dll 00B7 ExitProcess 1 00003040 kernel32.dll 013C GetCurrentProcess 1 00003044 kernel32.dll 002E CheckRemoteDebuggerPresent FThunk: 0000304C NbFunc: 00000002 1 0000304C user32.dll 01DD MessageBoxA 1 00003050 user32.dll 02D9 wsprintfA добавляем нужные функции FThunk: 0000303C NbFunc: 00000003 1 0000303C kernel32.dll 00B7 ExitProcess 1 00003040 kernel32.dll 013C GetCurrentProcess 1 00003044 kernel32.dll 002E CheckRemoteDebuggerPresent FThunk: 0000304C NbFunc: 00000002 1 0000304C user32.dll 01DD MessageBoxA 1 00003050 user32.dll 02D9 wsprintfA FThunk: 00003058 NbFunc: 00000002 1 00003058 kernel32.dll 0242 LoadLibraryA 1 0000305C kernel32.dll 0198 GetProcAddress загружаем обратно ![]() |
|
Создано: 16 ноября 2006 05:53 · Личное сообщение · #9 __, а если необходимо сделать для большого количества файлов на автомате? Будешь писать скрипт и прогу, которая будет запускать импрек, получать через него импорт, править его и нажимать в импреке кнопочку, чтобы сохранить его? Я просто описал алго, по которому можно написать соответствующую тулзу. ЗЫ А если у тебя есть ехе-шник, но нет специфических библиотек, которые он использует? Ты не сможешь его запустить, чтобы в дальнейшем натравить на него импрек... ![]() |
|
Создано: 17 ноября 2006 06:09 · Личное сообщение · #10 спасибо всем ИмпРеком получилось. Прога Rascal'a вылетает при загрузке в функции CImportEditor::FindImportSection на 3 строке mov ax, [ebx + 0x06]. Не разобрался почему. Вручную не получается что-то. Я добавил новую секцию размером 1000h, в хедер и физически. Посмотрел в хедере указатель на таблицу импорта, скопировал ее в новую секцию. Странно, но размер там стоял 64h, хотя там явно больше. Поправил указатель на последнюю секцию на начало моего импорта. Туда же влепил 1 мою функцию и имя DLL. Прога грузится. Но об моей длл ни слуху не духу. В списках импорта ее тоже не видно (( тоже незнаю почему, чтото неверно сделал. PE_Kill, загрузчик можно. А если GetProcAddress нету в импорте? ![]() |
|
Создано: 17 ноября 2006 06:28 · Личное сообщение · #11 |
|
Создано: 17 ноября 2006 07:59 · Личное сообщение · #12 fix200 пишет: Прога Rascal'a вылетает при загрузке в функции CImportEditor::FindImportSection на 3 строке mov ax, [ebx + 0x06]. Не разобрался почему. Хехе, плохо смотрел. Там чётко задано имя файла - calc.exe Нужно переименовать асмовую прогу в calc.exe, кинуть в папку с прогой и запустить. ----- Недостаточно только получить знания:надо найти им приложение ![]() |
|
Создано: 09 января 2007 15:13 · Поправил: 0xy · Личное сообщение · #13 |
|
Создано: 09 января 2007 22:30 · Личное сообщение · #14 |
|
Создано: 09 января 2007 23:08 · Личное сообщение · #15 |
|
Создано: 09 января 2007 23:43 · Поправил: RUffex · Личное сообщение · #16 0xy пишет: Это где? http://www.exelab.ru/f/action=vthread&forum=2&topic=3530 а поточнее: http://lord-phoenix.com/t53/ ![]() |
![]() |
eXeL@B —› Программирование —› запихнуть запись о dll в импорт проги |