Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Привязка чужой dll к приложению

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Взлом программ] >> Привязка чужой dll к приложению
Имя
Сообщение << Старые топики   Новые топики >>
Привязка чужой dll к приложению - 2008-08-23 21:50:13.766666   
TiJeY

Сообщений: 1
Оценки: 0
Присоединился: 2008-08-23 21:44:34.903333
Народ подскажите как можно привязать чужую dll к приложению, (не имея сурсов не ДЛЛ, не ЕХЕ) может есть какие то программы которые могут с этим справиться или все таки придется использовать Дебаг-программы, если да то можно по подробнее.
Заранее спасибо!
Post #: 1
RE: Привязка чужой dll к приложению - 2008-08-23 22:23:53.840000   
Dgedit

Сообщений: 131
Оценки: 0
Присоединился: 2007-02-04 15:07:37.163333
По моему мнению это если и реально то тебе придется половину этой программы в машинных кодах переписывать. А дебаг программы не думаю что тебе помогут. Почитай вообще о принципе работы приложения с DLL. Ну а если я не прав то кинь ссылку ге можно почитать как это сделать - удет очень интересно.
Post #: 2
RE: Привязка чужой dll к приложению - 2008-08-24 09:34:09.943333   
fromRIDDER

Сообщений: 1075
Оценки: 30
Присоединился: 2008-01-14 20:20:53.380000
Тут три варианта, если библиотека

- ActiveX-объект, тогда всё просто: регистрируешь библиотеку, открываешь программную среду, находишь пункт меню "Ссылки (Refference)", находишь там свою библиотеку, включаешь в проект и жмёшь информацию о ссылках.

- Динамическая библиотека: нужно узнать имена экспортируемых функций и количество аргументов, если ты не знаешь как ими пользоваться, то еще надо узнать типы аргументов и варианты возвращаемых значений. Имена функций определить легко любым PE-редактором, если библиотека написана на C++, в имени функции может присутствать количество аргументов или функция не будет выравнивать стек. Всё остальное можно определить в отладчике. Если есть "родная" программа, использующая эту библиотеку, то всё узнать очень легко.

- Статическая библиотека: к моменту, когда я начал изучать программый код, они уже не имели широкого распространения, изучать историю интереса нет, так что ничего не знаю.

Post #: 3
RE: Привязка чужой dll к приложению - 2008-08-24 10:25:22.636666   
Dgedit

Сообщений: 131
Оценки: 0
Присоединился: 2007-02-04 15:07:37.163333
Ну насчет ActiveX возможно ты и прав я в нем ничего не понимаю.
Но насчет динамической библиотеки найти имена экспортируемых функций он возможно и сможет, но для того чтобы вызывать их из программы он должен (так как у него не исходников) вызов этой функции вписать в машинных инструкциях и при этом заботиться чтобы не уронить стек и еще много чего (например разбиратсья в РЕ формате чтобы за предели секции кода ниечо не записать).
Так что найти названия функции из DLL это самое легкое.
Post #: 4
RE: Привязка чужой dll к приложению - 2008-08-24 11:58:37.703333   
SACh

Сообщений: 62
Оценки: 0
Присоединился: 2007-09-28 10:28:06.850000
Вот прога, выдёргивает названия функций http://www.wasm.ru/toollist.php?list=7 название D2Inc - ver 0.7
А что ложить в стек сам както должен догодатся[:o]
Post #: 5
RE: Привязка чужой dll к приложению - 2008-08-24 12:24:49.603333   
Flint_ta

Сообщений: 3720
Оценки: 1120
Присоединился: 2007-01-26 15:49:18.323333
Я делал подобные вещи. Привязать можно что угодно, тем более dll к exeшнику. Самое главное: знать о  экспортируемых функция dll нужно, с какими параметрами вызываются, и как передают результат.
Для статической загрузки dll может пригодится прога PETools она просто добавит к уже существующему импорту необходимые функции.
Вообще было пару статей по теме

http://wasm.ru/print.php?article=addfunc
http://cydem.org.ua/pars.php?lnk=add_functions&amp;conf=12
http://wasm.ru/article.php?article=pemodify
Post #: 6
RE: Привязка чужой dll к приложению - 2008-08-24 14:40:04.626666   
fromRIDDER

Сообщений: 1075
Оценки: 30
Присоединился: 2008-01-14 20:20:53.380000
quote:

ORIGINAL: Dgedit

Ну насчет ActiveX возможно ты и прав я в нем ничего не понимаю.
Но насчет динамической библиотеки найти имена экспортируемых функций он возможно и сможет, но для того чтобы вызывать их из программы он должен (так как у него не исходников) вызов этой функции вписать в машинных инструкциях и при этом заботиться чтобы не уронить стек и еще много чего (например разбиратсья в РЕ формате чтобы за предели секции кода ниечо не записать).
Так что найти названия функции из DLL это самое легкое.


Возможно я не прав, но ты знаешь о библиотеках только с точки зрения языков программирования высокого уровня, потому не сильно разбираешься в вызове функций dll. Не нужно ничего вписывать в машинных инструкциях (конечно, если ты мазахист, то можно и так) и заботится о секциях. Если известен прототип функции, её вызов происходит как обычно это происходит в любом языке программирования. Чтобы правильно выровнять стек, достаточно посмотреть в отладчике последнюю инструкцию функции (ret, ret 4, ret 8, …). Количество выравниваемых байт делим на 4 (в 32-битной ОС) - это есть количество аргументов.

quote:

ORIGINAL: Flint_ta

Вообще было пару статей по теме

http://wasm.ru/print.php?article=addfunc
http://cydem.org.ua/pars.php?lnk=add_functions&amp;conf=12
http://wasm.ru/article.php?article=pemodify


Статьи не совсем в тему, они о вписывании своего кода в уже имеющийся экзэшник. Как я понял у TiJeY есть не его библиотека, а программу он будет писать сам, нужна только информация и функциях библиотеки.

TiJeY, если я правильно понял, то покопайся в библе в отладчике или залей её, может кто-нибудь ещё поможет.

Post #: 7
RE: Привязка чужой dll к приложению - 2008-08-24 16:35:17.153333   
Dgedit

Сообщений: 131
Оценки: 0
Присоединился: 2007-02-04 15:07:37.163333
Ну насчет языков высокого уровня ты зря. Я на асме не то чтобы собаку съел, но кое что писал в свое время, так к сути вопроса:
Автор топика DLL к файлу вешал не для размера или красоты а скорее всего чтобы вызвать функцию из нее (для других целей не представляю зачем это может понадобиться если знаешь - напиши буду рад расширить кругозор).
И теперь главный вопрос а как это сделать?
Вот я и пытался автору объяснить что надо для начала
- найти секции экспорта - найти вставить там необходимые функции (уже тут начинать выравнивать размер образа PE)
- потом после того как он вписал ее правильно начинает искать адрес секции кода который она получит при занрузке в память
- после того как найдет начинает ручками считать сколько ему надо начальных машинных кодов программы перенести в конец секции данных
- на их место вставляет сначала аргументы его функции из DLL
- потом высчитывает адрес где будет находится первая инструкция программы(которую он перенес)
- потом он пересчитывает размеры секций их смешение
- меняет размеры секции кода OptionalHeader
…. Я описал не все просто общий механизм
А про языки высокого уровня ты зря я примерно такую программу писал на асме и понимаю про что пишу.

Post #: 8
RE: Привязка чужой dll к приложению - 2008-08-24 16:38:46.750000   
Dgedit

Сообщений: 131
Оценки: 0
Присоединился: 2007-02-04 15:07:37.163333
Ты написал:
- Статьи не совсем в тему, они о вписывании своего кода в уже имеющийся экзэшник. Как я понял у TiJeY есть не его библиотека, а программу он будет писать сам, нужна только информация и функциях библиотеки.

Мне кажется ты его не так понял, читай что он написал:
Народ подскажите как можно привязать чужую dll к приложению, (не имея сурсов не ДЛЛ, не ЕХЕ)

Т.е у не него нет исходников ни того ни другого
Post #: 9
RE: Привязка чужой dll к приложению - 2008-08-24 16:51:20.223333   
fromRIDDER

Сообщений: 1075
Оценки: 30
Присоединился: 2008-01-14 20:20:53.380000
quote:

ORIGINAL: Dgedit

Ну насчет языков высокого уровня ты зря. Я на асме не то чтобы собаку съел, но кое что писал в свое время, так к сути вопроса:
Автор топика DLL к файлу вешал не для размера или красоты а скорее всего чтобы вызвать функцию из нее (для других целей не представляю зачем это может понадобиться если знаешь - напиши буду рад расширить кругозор).
И теперь главный вопрос а как это сделать?
Вот я и пытался автору объяснить что надо для начала
- найти секции экспорта - найти вставить там необходимые функции (уже тут начинать выравнивать размер образа PE)
- потом после того как он вписал ее правильно начинает искать адрес секции кода который она получит при занрузке в память
- после того как найдет начинает ручками считать сколько ему надо начальных машинных кодов программы перенести в конец секции данных
- на их место вставляет сначала аргументы его функции из DLL
- потом высчитывает адрес где будет находится первая инструкция программы(которую он перенес)
- потом он пересчитывает размеры секций их смешение
- меняет размеры секции кода OptionalHeader
…. Я описал не все просто общий механизм
А про языки высокого уровня ты зря я примерно такую программу писал на асме и понимаю про что пишу.


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

Post #: 10
RE: Привязка чужой dll к приложению - 2008-08-24 16:58:42.896666   
Dgedit

Сообщений: 131
Оценки: 0
Присоединился: 2007-02-04 15:07:37.163333
Если ты думать так как ты его понял, то ты абсолютно прав ))) Лучше автор топика сам бы вышел и уточнил что ему надо )))
Post #: 11
RE: Привязка чужой dll к приложению - 2008-08-27 12:25:02.806666   
SLESH

Сообщений: 109
Оценки: 0
Присоединился: 2005-08-19 11:37:22
Лично я действовал следующим методом - написал функцию которая через вирусные методы приписывает код к файлу, перебивает ан него точку входа. код подгружает нужную DLL а потом передает управление на реальный адрес.
Кому нуна могут пользоваться данным кодом - я им explroer патчил
P.S. заточен код под эксплорер. по этому может не пахать на других прогах. это связано с тем что я внедряю код без увиличения размера проги
var data: array[0..92] of byte = ( $68, $44, $33, $22, $11, $60, $9C, $E8, $00, $00, $00, $00, $5D, $83, $ED, $0C, $83, $C5, $5D, $64, $A1, $30, $00, $00, $00, $8B, $40, $0C, $8B, $70, $1C, $AD, $8B, $40, $08, $55, $89, $C3, $03, $40, $3C, $8B, $50, $78, $01, $DA, $8B, $4A, $18, $8B, $7A, $20, $01, $DF, $89, $DE, $03, $74, $8F, $FC, $81, $7E, $08, $61, $72, $79, $41, $75, $08, $81, $3E, $4C, $6F, $61, $64, $74, $06, $E2, $E7, $31, $C0, $EB, $05, $93, $03, $44, $8A, $24, $FF, $D0, $9D, $61, $C3); procedure CopyMemory(Destination: Pointer; Source: Pointer; Length: DWORD); begin Move(Source^, Destination^, Length); end; Procedure SetDword(buf:pointer; offs:dword; d:dword);assembler; asm mov [eax+edx],ecx end; procedure PatchExplorer(dllname:string); type TSectionTable=record // структура таблица секции Object_Name:array[1..8] of char; Virtual_Size:dword; Section_RVA:dword; Physical_Size:dword; Physical_Offset:dword; Reserved:array[1..12] of byte; Object_Flags:dword; end; PSectionTable=^TSectionTable; TARRAY=array[0..255] of byte; PARRAY=^TARRAY; var h:thandle; PE,EP,IB:dword; // PE Head / Entry Point / Image Base buf:PARRAY; x:integer; correct:boolean; PID:dword; d:dword; hMapping:dword; mapping:pointer; Sect:PSectionTable; windir:TARRAY; filename:string; begin filename:='explorer.exe'; dllname:=dllname+#0; h:=CreateFile(pansichar(filename), DWORD($80000000) or $40000000, $00000001 or $00000002, nil, 3, $00000080, 0); d:=GetFileSize(h, nil); hMapping:=CreateFileMapping(h, nil, 4, 0, d, nil); mapping:=MapViewOfFile(hMapping, 4 or 2, 0, 0, d); PE:=dword(pointer(dword(mapping)+$3C)^); EP:=dword(pointer(dword(mapping)+PE+$28)^); IB:=dword(pointer(dword(mapping)+PE+$34)^); SetDword(@data[0],1,EP+IB); Sect:=pointer(dword(mapping)+PE+248); buf:=pointer(dword(mapping)+Sect^.Physical_Offset+Sect^.Physical_Size-sizeof(data)-dword(length(dllname))); correct:=true; for x:=0 to sizeof(data)+length(dllname)-1 do if buf^[x]&lt;&gt;0 then correct:=false; if correct then begin EP:=Sect^.Section_RVA+Sect^.Physical_Size-sizeof(data)-dword(length(dllname)); dword(pointer(dword(mapping)+PE+$28)^):=EP; CopyMemory(pointer(dword(mapping)+Sect^.Physical_Offset+Sect^.Physical_Size-sizeof(data)-dword(length(dllname))),@data,sizeof(data)); CopyMemory(pointer(dword(mapping)+Sect^.Physical_Offset+Sect^.Physical_Size-dword(length(dllname))),@dllname[1],length(dllname)); end else exit; UnmapViewOfFile(mapping); CloseHandle(hMapping); CloseHandle(h); end;
юзается это примерно так:
PatchExplorer('myDLL.dll');
Post #: 12
Страниц:  [1]
Все форумы >> [Взлом программ] >> Привязка чужой dll к приложению







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.