| Типы программирования, программирование, языки программирования, книги программирование | На сайте представлена информация про программирование в Интернете и работу |
|
Handle, пишет- нет такой переменной DLL и потоки!, Остановить DLL!!! Delphi, API, Message, Где найти соответствующие константы как пол. коорд. курсора мыши над TScroll Реестр, Работа с реестром Доступ к локальным дискам (XP), открытие\закрытие доступа... Использование mlang.dll Трей, Глюки в WinXP, Win2k Как очистить экран в консольном приложении? Лдюди объясните по русски как установить Rxlib, для Delphi 7.0 ошибка MItec, Помогите разобраться Перенаправление ввода и вывода, Bind Shell Текст вместо иконки Браузер на Delphi Помогите не могу понять!, Про окна Как упрятать программу Помогите с иконкой в трее!, иконка втрее Как Вы относитесь к курящим девушкам? IP адрес, связь Кнопки, Интерес Рисунок с рабочго стола по LAN, Рисунок с рабочго стола Как распознать запуск другой проги? Блокировка CD-ROMа полосы прокрутки у TMemo & TListBox, как сделать их плоскими и другого цвета Hook на процессы!, Отловить запуск и завершение процесса! Ресурсы: окошки Температура процессора, Как контролировать Как загружать прогу в безопасном режиме Идентификаторы в Delphi Новый форум, Новый форум Данные из клавы направить не туда. как получить температуру?, как программно получить температуру? ПРограммирование HASP-ключей, ЗАдали лабораторную .. ничего не понятно Есть ли в Делфи реализация интерфейса, а-ля интерфейс как в Java ?? Как минимизировать приложение при старте ?, Мне казалось что это так просто... Что такое хинты, и как их показывать Запрет запуска хранителя экрана, при работе программы Восстановление удалённых файлов Поиск ехе, Поиск ехе в директориях Работа с ОЗУ, как? Как загрузить данные из Reources ? А-у! Помогите, не работает детская процедура, Процедура сбора статистики работы СД Как программно запретить вход в виндовс убить заголовок окна, чужого Работа в потоке, Ну, типа, работа в потоке Как сделать окно поверх панели задач Как вычислить подключение винта к USB Как избежать LOg off/on при изменении реестра, Столкнулся с такой проблемой. метод Synchonize объекта TThread Функция типа TStringList Где храняться пути для переменных окружения ? Как сейчас на счет бесплатного Delphi 6 personal Дефрагментация Скрытие окна..., ...как это делает LiteAlloy Как сделать, чтобы фокус ввода окна нельзя, отменить пока его не закроешь Програмка для тестирования памяти, алгоритмы есть Серийный номер процессора, Как получить? Внедрение DLL Как получить информацию запущен процесс или нет ?? Hook на печать, это возможно? Текстурирование, как сделать скины для окон Прочитать значение из оперативки, ID процесса известен, адрес тоже. Надо прочитать куда нить значения из памяти, сабж Как Вы относитесь к курящим девушкам? объем физического диска под Win9x Кто пробывал написать свой компилятор ??, Нужен ваш хелп. WM_DEVICECHANGE, отслеживаем изменения одного устройства Порты и Дельфи, HELP!!!!!! CreateRemoteThread, как использовать? Как это работает?, есть такая прога... LClock |
Платные хостинги Раскрутка сайта Книги по программированию Внедрение DLL
- Я внедряю длл в чужой процесс. В длл код, который должен отсылать почту. Но почему-то ничего не отсылается(если сделать просто приложение, то отсылка работает). Вот код, внедряющий длл: Код dll:='c:\testlib.dll'; pid:=GetIDProcess('IEXPLORE.exe'); //процедура GetIDProcess //описана ранее Process := OpenProcess(PROCESS_ALL_ACCESS, False, PID); param:=VirtualAllocEx(Process, nil, 40960, MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(Process, param, pointer(dll), 4096, byt); CreateRemoteThread(Process, nil, 0, GetProcAddress(GetModuleHandle('KERNEL32.DLL'), 'LoadLibraryA'), Param, 0, ThreadId); highlightSyntax('delphixMmFjZ','delphi'); Сама длл: Код library testlib; uses Windows, Messages, sysutils, system, registry,idsmtp,IdMessage; var mes:tidmessage; smtp:tidsmtp; procedure MailSend; begin smtp:=TIdSMTP.Create(nil); mes:=TIdMessage.Create(smtp); smtp.Host := 'smtp.xxx.ru'; smtp.Port := 25; mes.From.Text := 'xxx@xxx.ru'; mes.Recipients.EMailAddresses := 'xxx@xxx.ru'; mes.Subject := 'XXX'; mes.Body.Text :='YYYYYYYYYYY '; smtp.Connect(100000); smtp.Send(mes); smtp.Disconnect; mes.Free; smtp.Free; end; begin mailsend; end. highlightSyntax('delphiE5ZjMx','delphi'); В чём тут дело? - Причём запарывается на smtp.Connect(100000); почему-то. - Как выяспилось в библиотеке не работает всё, что связано с сетью, даже просто соединение сокетов, не зависимо от того какой процесс её подгружает. Как сделать чтоб отправка работала? Это сообщение отредактировал a.S.d - 15.3.2005, 00:24 - я вообще удевляюсь как оно у тебя работаетфактически ты просто впихиваеш длл в процесс,даже не как длл а как просто кусок кода, без учета специфики загоузки РЕ файлов в винде,тамже нада импорты заполнить да и секции раскидать по своим местам - Дык вроде у него судя по коду всё-таки DLL подгружается к чужому процессу... CreateRemoteThread "вызывает" LoadLibrary ('c:\testlib.dll')... А в DLL при подключении делаются свои дела...Delphi нормально должна компилить DLL, с импортами и секциями...Или ты про что ?... - А причём тут внедрение? проблема там где ты пытаешься отправить почту, тот код отправки сам посебе вобще работоспобен? и что за smtp.Connect(100000); ?у моих индейцев такого вообще нет, просто smtp.Connect;(может у меня старая версия индейцев) Добавлено @ 06:21 Кстати есть такаой компонент CTRLSOCK (не VCL) специально для таких целей.http://tothpaul.free.fr/zip/CRTSOCK.ZIP Это сообщение отредактировал RAdmin - 15.3.2005, 06:22 - RAdminКод работоспособен, я же написал что если сделать приложение а не библиотеку, то всё работает. - a.S.d Ладно тогда покажи полный код того как ты внедряешь DLL. - Код CreateRemoteThread(Process, nil, 0, GetProcAddress(GetModuleHandle('KERNEL32.DLL'), 'LoadLibraryA'), Param, 0, ThreadId); highlightSyntax('delphiZjEwYj','delphi');вся фигня в том что после этого куска что происходит?выполнив LoadLibrary треад заканчивает свою работу и соответственно автоматом выгружается либая думаю тут косяк - Знач, после этого куска нужно вставить WaitForSingleObject(Thread,INFINITE); - Цитата (RAdmin @ 15.3.2005, 11:35)Знач, после этого куска нужно вставить WaitForSingleObject(Thread,INFINITE); Код dll:='e:\testlib.dll'+#0; pid:=... Process := OpenProcess(PROCESS_ALL_ACCESS, False, PID); param:=VirtualAllocEx(Process, nil, Length(dll), MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(Process, param, PChar(dll), Length(dll), byt); oTheread:=CreateRemoteThread(Process, nil, 0, GetProcAddress(GetModuleHandle('KERNEL32.DLL'), 'LoadLibraryA'), Param, 0, ThreadId); ...highlightSyntax('delphiiMDMxN','delphi');Код library testlib;uses Windows, idsmtp, IdMessage;{$R *.res}var mes:tidmessage; smtp:tidsmtp;procedure MailSend;begin smtp:=TIdSMTP.Create(nil); mes:=TIdMessage.Create(nil); smtp.Host := 'smtp.XXX.XX'; smtp.Port := 25; smtp.Password:='Мой пароль'; smtp.Username:='Мой логин'; smtp.AuthenticationType:=atLogin; //Типо по паролю и все такое smtp.HeloName:='Info'; mes.From.Text := 'XXX@From.XX'; mes.Sender.Text:='XXX@From.XX'; mes.Recipients.EMailAddresses:='XXX@Recipient.XX'; mes.Subject := 'Gbvier'; mes.Body.Text :='YYYYYYYYYYY'; mes.MessageParts.Clear; try smtp.Connect; smtp.Send(mes); except end; smtp.Disconnect; mes.Free; smtp.Free;end;begin mailsend; end.highlightSyntax('delphiZjkwMm','delphi');PS: Если не хочеш по паролю и все такое... то береш нужный тебе домен к примеру newmail.ru и через DNS определяеш Mail сервера (IdDNSResolver.QueryRecords:=[qtMX]) для данного адресса и пытаешся послать письмо через полученные Mail сервера(в ентом случаи smtp.AuthenticationType:=atNone). - Я просто имел в виду это:Код uses Windows, TLHelp32, SysUtils;VAR PID : DWORD; Process : DWORD;function GetProcessID(PeFile:STRING) : Integer;VAR hProcSnap : THandle; pe32 : TProcessEntry32;BEGIN Result:=-1; hProcSnap:=CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS,0); IF hProcSnap=INVALID_HANDLE_VALUE THEN Exit; pe32.dwSize:=SizeOf(ProcessEntry32); IF Process32First(hProcSnap,pe32)=True THEN WHILE Process32Next(hProcSnap,pe32)=True DO IF Pos(PeFile,UpperCase(pe32.szExeFile))>0 THEN Result:=pe32.th32ProcessID;end;function InjectLibrary(Process:LongWord;DLLPath:pChar) : Boolean;VAR BytesWritten : DWORD; Thread : DWORD; ThreadID : DWORD; Parameters : Pointer;BEGIN Result:=False; Parameters:=VirtualAllocEx(Process,NIL,4096,MEM_COMMIT,PAGE_READWRITE); IF Parameters=NIL THEN Exit; WriteProcessMemory(Process,Parameters,Pointer(DLLPath),4096,BytesWritten); Thread:=CreateRemoteThread(Process,NIL,0,GetProcAddress(GetModuleHandle('KERNEL32.DLL'),'LoadLibraryA'),Parameters,0,ThreadId); WaitForSingleObject(Thread,INFINITE); VirtualFreeEx(Process,Parameters,0,MEM_RELEASE); IF Thread=0 THEN Exit; CloseHandle(Thread); Result:=True;end; PID:=GetProcessID('HL.EXE'); Process:=OpenProcess(PROCESS_ALL_ACCESS,False,PID); InjectLibrary(Process,'C:\cd.dll');highlightSyntax('delphimYwYTV','delphi'); - Можно... конечно(Но ожидание все таки... лишние - нам же результат не нужен). PS: a.S.d не забудь выгружать библиотеку Это сообщение отредактировал Girder - 15.3.2005, 15:48 - Всем спасибо, всё работает, проблема была здесь:Код try smtp.Connect; smtp.Send(mes); except end;highlightSyntax('delphijMDQxZ','delphi'); - Ещё вопрос: почему приложение, которое подгружает библиотеку, всё время виснет, ведь библиотека работает независимо от приложения? Как этого избежать?GirderА как её выгружать? Надо опять писать в память процесса процедуру выгрузки? |