Просмотр полной версии : апихуки.
alexteam
07.03.2009, 19:21
что юзает л2 для чтения с сокета ?
потыкался как слепой кролик в сторону recv wsarecv wsarecvfrom - ноль. :(
recv скорее всего, в крайнем случае wsarecv, больше точно ничего не юзает, ты либо тыкался не туда, либо каконить ГГ мешал тыкаться)
alexteam
07.03.2009, 23:08
Угу. в корейской доке об трепанации гг - есть упоминание о такой вещи.
прикрепить ловушку раньше чем это сделает гг возможно ?.
alexteam, ну ГГ грузиться довольно долго, так что если успеть "пропатчить" клиент в первые секунды запуска то по идее пахать должно...
alexteam
07.03.2009, 23:29
Просто учитывая сегодняшние ковыряние и слепые тыкания у меня сложилось впечатление что клиент имеет свою собственную функцию для чтения/записи в сокеты.
обнадежил, буду долбить дальше эту стену.
для начала - ловушку на креейт процес.. а потом в ловушке на креейт - сам инжект.
матрешка.. блин.
alexteam
09.03.2009, 16:27
в общем - написана софтина инжектирующая длл в процесс линейки, позволяющая без создания прокси манипулировать тем что отсылает/принимает линейка, отсылать пакеты от имени процесса ла2 ну и в этом духе.
идеально работает на клиентах без гг.
единственная проблемма - сам гг. после старта он востанавливает таблицу импортов для некоторых функций процесса линейки, в перечень их входит сенд и рецв.
после очередных слепых тыканий уже в сторону гг было выяснено что
гг сканирует первые байты защищаемых функций на предмет фарджампов и восстанавливает функцию если находит джампы.
есть 4 метода для создания подобных руткитов.
1. перехватываются функции LoadLibrary и GetProcAddress библиотеки kernel32.dll - GetProcAddress выдает поинтер моей функции. (годится для приложений загружающих длл динамически, пробовал это на гг - потерпел крах. линейка тоже не использует динамику)
2. с модификацией таблицы импорта. без гг метод прекрасно работает. пока за дело не принимается гг - исправляющий фарджампы. тем не менее я все еще могу отсылать данные от клиента, хотя видеть что шлет/принимает клиент с запущенным гг - не могу -)
3. метод сочетающий первое и второе (был опробован. гг выдавался неверный адресс рецв и сенд, и одновременно модифицировалась таблица импорта в линейке. потерпел крах. гг не держал чужую длл в своем адресном пространстве дольше чем пару секунд. потом происходил деатач дллки. запретить фрилибрари и подобных не удалось)
4й метод. интересный. чемто похож на 2й. но записываеться не джамп а машинный код своей функции в начале/конце целевой функции. если я правильно понимаю гг не увидит джамп, и естественно не будет ничего править.
есть у кого нибудь информация по подобной вещи ?.
Интересная тема.
Есть еще вариант использовать LSP для перехвата пакетов. Сейчас скачал исходник с МСДН, буду пробовать.
http://ru.wikipedia.org/wiki/Microsoft_Layered_Service_Provider
fragus, заебёшся с правильной установкой своего LSP модуля...
alexteam
18.03.2009, 20:12
Ух, даже так, спасибо за эти новые сведения -)
как раз с установкой готового модуля проблемм РОВНО ноль -)
так же не вижу особых проблем с самой длл.
добавлено, спустя пару-тройку часов.
вот.. как то так.. в принципе, даже проще чем апихуки, намного проще. все те же возможность а гг не шевелится -)
осталось код по взаимодействию с основным приложением со старой длл добавить.
http://img99.imageshack.us/img99/2662/92156428.th.jpg (http://img99.imageshack.us/img99/2662/92156428.jpg)
как раз с установкой готового модуля проблемм РОВНО ноль -)а ты попробуй установить своего провайдера когда уже какойнить установлен, от проксифиера там или нод32)
если твой пров единственный кроме основного системного то да, проблем ноль)
alexteam
19.03.2009, 12:56
а ты попробуй установить своего провайдера когда уже какойнить установлен, от проксифиера там или нод32)
если твой пров единственный кроме основного системного то да, проблем ноль)
воблин, ртфм!
теско, неудачный опыт чтоль с лса ? :)
только что включил имон, и проверил работу.
(хы. оф сделал подарочек. очередной. на скрине - попытка создать чара с ником test)
http://img5.imageshost.ru/imgs/090319/3e54ac1c799542368553c59f7365126f/t6b1d20dc0565a7850e435717495e938e.jpg (http://imageshost.ru/links/2c0deedbf6187c4a4e514f9a6692aa5a)
alexteam, а imon включен перед твоим провайдером или после?
Добавлено через 2 минуты
что за imon кста?
alexteam
19.03.2009, 13:34
Перед, либо после неважно, попробовал и так и эдак. главное чтобы мой хук не разрывал цепочку. передавая обработаные данные дальше, следующему модулю. это единственное узкое место которое создаст проблему.
имон - тот самый лса "провайдер" нода.
alexteam, ну вот у меня с проксифиером не получилось.., как я не извращался с передачей вызовов после моего провайдера к провайдеру проксифиера он ни в какую не обрабатывал их, ну точнее хз что он с ними делал но инет пропадал)
ну и когда он сам поверх моего модуля ставиться, то он свою цепочку ставит в обход моей и мой провайдер вообще не используется...
Для ознакомления, так сказать, код не выложите? Можно в ПМ.
alexteam
19.03.2009, 14:47
NLObP, сделаю обмен с основным, будет вам код в пм, модуля, и возможно поправленого под это дело пакетхака -)
2 xkor. с этого места поподробнее. ловил через лса коннект и пытался изменить направление соединения на локальный сервер ? все точно то же что и в инжекте пакетхака но с помошью лса ? без каких либо особых изменений ? все тот же локальный сервер ? -)
кстати, профиксер. не имеет ни малейшего отношения к лса. все те же джампы.
http://img5.imageshost.ru/imgs/090319/86c2e1ce5871f7fc8998a3412579c280/t5315d63cfb2ca3ca21849ac40ca8fb1e.jpg (http://imageshost.ru/links/f62a38fa29c11fc958f6286e6e287543)
не, у меня дллка просто логировала трафик в файл для определённых приложений, для ненужных она структуру указателей на функции даже полностью от следующего провайдера брала, но если следующим являлся проксифиер то у все проги переставали работать через нет...
Интересно было бы посмотреть исходники. Сам только начинаю разбираться.
alexteam
20.03.2009, 02:24
xkor, видно как и все первопроходцы, залез в дебри и там и утоп, сам такой же :D
как ни странно проблем с соцификаторами не заметил, корректно перенаправляет соединение на локальный и мониторит данные.
2fragus будет, либо так выложу, либо, если разработчики пакетхака согласятся, увидишь это чудо в комитте -)
помучал его под вечер, научил изменять отсылаемые/принимаемые данные на произвольные, и отсылать произвольные данные "от клиента" л2 на серв.
на завтра оставил самое веселое, а именно эмуляцию отсылки произвольных данных с сервера на клиент. одним местом чую, малой кровью тут не обойдется.
alexteam, чего используешь такой древний RkU?)
если разработчики пакетхака согласятсяесли будет пахать то однозначно согласятся всеми конечностями)
на завтра оставил самое веселое, а именно эмуляцию отсылки произвольных данных с сервера на клиент. одним местом чую, малой кровью тут не обойдется.если данные читаются в блокирующем режиме то впринципе крови не должно быть много, по моему надо просто сделать промежуточный буфер в который писать и то что приходит от серва и то что сам хочешь клиенту отправить, для этого в WSPsend делаем цикл проверяющий нет ли в сокете данных на чтение и нет ли "своих" пакетов на отправку, если что то из этого есть то пихает в промежуточный буфер и отправляет клиенту.
единственное надо в этой функции тогда делать и перешифровку пакетов...
выложи свою версию уже, может на руофе будет пахать, хочу затестить))
LOL, через LSP на руофе тоже отправлять не получиться)
alexteam
21.03.2009, 13:28
xkor, угу, приблизительно так и делаю. за исключением того что всетаки WSPRecv, и крипт/декрипт будут в основном приложение.
и кровь тут ЕСТЬ.
а именно. в
function WSPRecv(s: TSocket; lpBuffers: LPWSABUF; dwBufferCount: DWORD;
var lpNumberOfBytesRecvd, lpFlags: DWORD;
lpOverlapped: LPWSAOVERLAPPED;
lpCompletionRoutine: LPWSAOVERLAPPED_COMPLETION_ROUTINE;
lpThreadId: LPWSATHREADID;
var lpErrno: Integer): Integer; stdcall;
а точнее в
lpBuffers: LPWSABUF;
LPWSABUF = ^_WSABUF;
_WSABUF = record
len: u_long; // the length of the buffer
buf: PAnsiChar; // the pointer to the buffer
end;
понятно что при вызове этой функции ей передается указатель на уже созданный в памяти _WSABUF, изменить указатель на указатель новой структуры созданной вручную не получится. приложение его просто проигнорит продолжая читать данные со старого поинтера.
поэтому приходится работать с уже существующей в памяти структурой
как то вот так
CopyMemory(lpBuffers.buf,
буффер_обработаный_приложением(возможно со своими данными впереди),
длинна_нового_буфера);
узкое место тут одно:
длинна_нового_буфера должна быть <= lpBuffers.len иначе нехватит места в памяти чтобы записать данные в буфер который получит клиент.
благо при обмене с ГЕЙМСЕРВЕРОМ(не с ЛС), КЛИЕНТ (не проверял на волкере и прочих) резервирует буфер длинной 16к. далеко не всегда используя его полностью.
отсюда вывод - буфер который требуется отправить НА клиент с помощью контролирующего приложения и буфер который клиент получает от сервера по длине суммарно не должны превышать 16к. :shout:
зы.
с отправкой от клиента такой проблемы нет, ибо я могу отменить отправку и отправить данные вызвав send от имени клиента. так что если разбить модуль на части
1. перехват отправки, изменение данных на такие же подлинне либо меньше - готово.
2. перехват отправки, изменение данных на данные по длине превышающие изначально отправляемые -готово
3. самопроизвольная отправка данных от имени клиента на сервер - готово
4. перехват принимаемых клиентом данных и изменение их на данные с такой же длинной либо меньше - готово
5. перехват принимаемых клиентом данных и изменение их на данные с длинной больше - возможны проблеммы.
6. самопроизвольная отправка данных на клиент - невозможно. реализация через предыдущий пункт.
то готовность самого лсп модуля около 5/6, остается проблемный 5й пункт...
буду дальше в свободное от работы время мучать WSPRecv.
зы2.
LOL, не смеши. смотри выше скрин, они встроили кодировку пакетов при отправке, ТУТ эта криптовка не обсуждается.
да и я пока не интегрировал эту вещь в пакетхак. НИКАКОЙ разборки протокола нет.
кодировка пакетов онли ШК-сервер.
Клиент-ШК нету кодировки. Просто надо заставить ШК понимать, что этот пакет надо слать.)
alexteam
21.03.2009, 19:14
кодировка пакетов онли ШК-сервер.
Клиент-ШК нету кодировки. Просто надо заставить ШК понимать, что этот пакет надо слать.)
вот сразу видно Знаток истории развития ШК.
найди в перечне соединений соединение клиента с шилдконсолью сейчас. раньше было. а сейчас где ?
а если пойдеш на предыдущую страницу. увидиш что сейчас кодировка распространяется на пакеты клиент->сервер.
добавлено:
и, прошу, понять что тут, конкретно в этой теме обсуждение перехвата и модификации трафика.
то как устроена та или иная защита, имхо оффтоп.
alexteam
22.03.2009, 18:44
в общем, 5й пункт так и остаеться черной лошадкой вместе с 6м.
могу менять данные на такие же либо меньше по длинне, но если пихать больше чем влазит в буффер - мнгновенный терминейт приложения.
клиент резервирует под чтение 56636 байтикоф, как раз под длину максимальную пакета. таких пакетов я не видел, но мало ли. шансы хоть и небольшие но есть.
завтра, дай бог оформлю это все дело как класс и займусь дебагом -)
2. с модификацией таблицы импорта. без гг метод прекрасно работает. пока за дело не принимается гг - исправляющий фарджампы. тем не менее я все еще могу отсылать данные от клиента, хотя видеть что шлет/принимает клиент с запущенным гг - не могу -)
Если не сложно, можешь выложить код длли с таким типом перехвата?
alexteam
24.03.2009, 00:01
Если не сложно, можешь выложить код длли с таким типом перехвата?
то что ты попросил - апи перехват. тобиш не не лсп.
работает при отсутствующем гг. работающий гг снимает перехват рецв и сенд в юзермоде.
присутствуют те же проблемы при отправке пакет на клиент что и с лса модулем. (зарезервированная память под буфер).
функция перехвата данных идущих на сервер требует модификации, если ты собираешься слать буферы по длине превышающие изначально пересылаемые.
добавлено: ах да. никакого разбора траффика нет. чистые необработанные данные.
Спасибо, то что нужно. :)
alexteam, ты случайно не JEDI API используеш для работы с SPI ? Очень интересная тема, хотелось бы тоже разобратся =)
alexteam
24.03.2009, 21:50
да, его.
начал встраивать это дело в пакетхак. хочется чтобы осталось и соцк5 и апи пехеват...и чтоб еще лса работало..
переделывать чужой код - зло..
(пипец, нет чтобы в процедуру экземпляр класа передевать, так они айди передают, и потом по этому айди ищут екземпляр класса в масиве.. чертешо и с боку бантик -( хочеш добавить свое - надо переписать чужое.. хоть и хорошо написаное.. но, не поддающееся наращиванию так как этого бы хотелось. :p)
надо переписать чужое.. хоть и хорошо написаное..ну я бы не сказал что пакетхак хорошо написанное.., косяков там много(
Даже в работающем идеально коде находишь вот такое:
if chkSocks5.Checked then ChkIntercept.Checked := not chkSocks5.Checked; блин а ведь это вроде я писал(
alexteam
24.03.2009, 23:36
не в косяках дело. и не в этих перлах с условием и мега присваиванием.
все мы писали if babla=true then
все мы писали if i=2 then b:=true else b := false вместо b := (i=2)
все мы когдато начинали... но блин. вроде же профи.. мне до вас как небес во всяком случае я только недавно оседлал волшебный символ ^.
проблема а в общей организации.
почему нельзя было оформить КЛАССАМИ ?
не структурой а именно классами. с процедурками и функциями, с методами креейт и дестрой.
наращивание такого кода - это просто прелесть... создал екземпляр класа ответственного за перекодировку. свзал его с теми же выходами плагинов - и делов.
а не то как сейчас :((
я вообще модуль контроля ЛСП как компоненту невизуальную оформил.
думал "щааа.. кину компоненту.. в пару функций добавлю пару условий и все... ".. фигу там -(
сижу заливаю дымящийся мозг пивом. :(
все мы писали if i=2 then b:=true else b := false вместо b := (i=2)
А где про такое в учебниках пишут? То-то и оно. Только первый вариант и приведут. Хорошо, если сам допрешь, как второе работает.
PS: может общими усилиями приведем код к приемлимому виду, а?!
PPS: я к сожалению академиев не кончал - самоучка. Поэтому в классах, перехватах, шифровании плохо разбираюсь. =(
alexteam
25.03.2009, 01:13
как ни странно. я тоже. самоучка.
пытаюсь ассорти имеющееся сейчас и связаное с математикой (крипт/декрип) как класс оформить. и вынести в отдельный модуль.
глядишь и кода в основном юните будет не 2кс гаком строчек а 500-600.
продвигаюсь медленно и крайне осторожно, ибо нарушу чтото - потом фиг найду где накосячил. а нарушить могу.. ибо работаю в основном без запуска. иногда по 3-4 минуты колупаю 2 строчки в попытках выяснить "что оно делает" %)
на классах я пакетхак 3 пишу, но на него времени всё нехватает так что медленно продвигается...
alexteam
25.03.2009, 16:01
"у я бы не сказал что пакетхак хорошо написанное.., косяков там много"
кхе.. кхе.. лишнего кода там много, включая неиспользуемый вообще. а так норм. -)
ну и .. остальные перлы
case PacketB[2] of
...ляляля...
$15: begin
if not isKamael then begin //and (Thread[id].pckCount=7)
sendMSG('Считываем имя соединения...');
ii:=1;
while not ((Packet.DataB[ii]=0) and (Packet.DataB[ii+1]=0)) do Inc(ii);
SetLength(WStr, ii div 2);
Move(Packet.DataB[1], WStr[1], ii);
EnterCriticalSection(_cs);
Thread[id].Name:=WideStringToString(WStr, 1251);
sendMSG('Имя соединения:'+Thread[id].Name);
LeaveCriticalSection(_cs);
//обновляем Список соединений
SendMessage(L2PacketHackMain.Handle, WM_UpdateComboBox1, 0, 0);
end;
end;
//CharSelected
$0B: begin
if isKamael then begin // and (Thread[id].pckCount=6)
sendMSG('Считываем имя соединения...');
ii:=1;
while not ((Packet.DataB[ii]=0) and (Packet.DataB[ii+1]=0)) do Inc(ii);
SetLength(WStr, ii div 2);
Move(Packet.DataB[1], WStr[1], ii);
EnterCriticalSection(_cs);
Thread[id].Name:=WideStringToString(WStr, 1251);
if isGraciaOff then
Corrector(Packet.Size,id,False,True); // инициализация корректора
sendMSG('Имя соединения:'+Thread[id].Name);
LeaveCriticalSection(_cs);
//обновляем Список соединений
SendMessage(L2PacketHackMain.Handle, WM_UpdateComboBox1, 0, 0);
end;
...ляляля...
или.. вот...
function AddDateTime : string;
var
msg: string;
x : Integer;
begin
msg:=datetostr(now)+' '+timetostr(time);
x:=pos(':', msg); // ищем подстроку
if x>0 then begin
Delete(msg, x, length(':')); // удаляем её
Insert('.', msg, x); // вставляем новую
end;
x:=pos(':', msg); // ищем подстроку
if x>0 then begin
Delete(msg, x, length(':')); // удаляем её
Insert('.', msg, x); // вставляем новую
end;
result:=msg;
end;
эх :(
function AddDateTime : string;
begin
result := FormatDateTime('dd.mm.yyy hh.nn.ss' , now);
end;
+бага
в сендпакете в вот таких вот местах.
//проверка на длину лога пакетов
if Thread[tid].Dump.Count<MaxLinesInPktLog then begin
Thread[tid].Dump.Add('03'+ByteArrayToHex(TimeStepB,8)+ByteArr ayToHex(Packet.PacketB,Packet.Size));
PostMessage(L2PacketHackMain.Handle,WM_PrnPacket_L og,Integer(tid and $FF),Thread[tid].Dump.Count-1);
end else begin
//сохраняем и очищаем лог пакетов
sendMSG('Сохраняем лог пакетов...');
Thread[tid].Dump.SaveToFile(PChar(ExtractFilePath(Application .ExeName))+'logs\'+Thread[tid].Name+' '+AddDateTime+'.txt');
Thread[tid].Dump.Clear;
SendMessage(L2PacketHackMain.Handle, WM_ClearPacketsLog, 0, 0);
end;
заменить на
Thread[tid].Dump.Add('03'+ByteArrayToHex(TimeStepB,8)+ByteArr ayToHex(Packet.PacketB,Packet.Size));
PostMessage(L2PacketHackMain.Handle,WM_PrnPacket_L og,Integer(tid and $FF),Thread[tid].Dump.Count-1);
//проверка на длину лога пакетов
if Thread[tid].Dump.Count<MaxLinesInPktLog then begin
//сохраняем и очищаем лог пакетов
sendMSG('Сохраняем лог пакетов...');
Thread[tid].Dump.SaveToFile(PChar(ExtractFilePath(Application .ExeName))+'logs\'+Thread[tid].Name+' '+AddDateTime+'.txt');
Thread[tid].Dump.Clear;
SendMessage(L2PacketHackMain.Handle, WM_ClearPacketsLog, 0, 0);
end;
т.к. при превышении MaxLinesInPktLog мы упускаем пакет.
NLObP, стукнул в аську. ибо вопросы все таки есть.
наигрался с lsp пришлось винду переустанавливать )))
alexteam
26.03.2009, 10:12
ну, до такого мы не доходили.. но избавится от багнутого лсп модуля можно из под безопасного режима. (БЕЗ поддержки сети) с помошью, скажем вотэтого (http://www.google.com.ua/search?q=LSPFix.exe&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a), либо вручную, регедитом.
ну, до такого мы не доходили.. но избавится от багнутого лсп модуля можно из под безопасного режима. (БЕЗ поддержки сети) с помошью, скажем вотэтого (http://www.google.com.ua/search?q=LSPFix.exe&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:ru:official&client=firefox-a), либо вручную, регедитом.
да да да, именно этим я и обрезал "багнутый" модуль, но он как оказалось был небагнутым :D или в силу своей бажности весь винсок убил :D
Антивирусная утилита AVZ (www.z-oleg.com/secur/avz) может исправлять LSP и многое другое тоже может.
alexteam
26.03.2009, 20:42
(в поклоне) убить винсоцк, мастер :p
ладно.. хорошо.. я не буду офтопить...
по делу.. тему собственно можно закрывать, ибо разобрался. сейчас занимаюсь пакетхаком в плотную.
alexteam, не не не, закроем не раньше чем о результатах узнаем)
alexteam
30.03.2009, 01:34
приболел малех -)
результаты хорошие, если интересуют именно результаты по лсп модулю - спроси у NLObP ;)
чтото его давно не видно.. видать доексперементировалсо ;)
а по пх.. вчера "расфасованый" по модулям код прикрутил к новому проекту, точнее начал прикручивать, на ночь глядя немного его попинал опять, прикрутив лсп.
вот что за фейс получается пока что. и собственно работа через лсп. видно по ремот ендпоинту линейки:
http://img5.imageshost.ru/imgs/090330/2467bc673b640c26cc19c0d57b78c030/t930dfdcb5af8a32e600193747869a07a.jpg (http://imageshost.ru/links/a4980e8f7eb360a3887e59be84958c13)
alexteam, ух, чтот ты там накрутил ппц вкладок)
alexteam
30.03.2009, 11:47
нормально, нормально.
возможно верхний уровень вкладок разнесу по отдельным формам, так как они глобальные для всех соединений. а вот имя соединения и "просмотр, посылка, дополнительно" конкретно относящиеся к этому соединению приблизительно так и должны быть. в любом случае это получше будет чем комбобокс. тем более использую TJvPageControl для этих целей, установив clientborderwith в ноль, так что визуально верхний уровень вкладок мало чем отличается от кнопок (не тратится свободное место отступа с рамкой, так что не так уж оно страшно и смотрится.) а вот пользы от динамического создания нижней части при работе нескольких соединений гораздо больше -)
и вообще борьба за свободное пространство о основных диалогах - была всегда актуальной. так что повыносил всю мелочевку в отдельные диалоги, дабы не захламлять основную рабочую часть (процессы (не думаю что он будет вообще востребован), фильтр пакетов, преобразование, лог, и др. идут отдельными формами, естественно обработчики их находятся там же)
а так потихоньку двигаемся, исправляя по пути еконверэроры, "эрроркоде5" (ктото невнимательно по синх потоков доки курил?) и прочее, проче, прочее...
nezabudkin
30.03.2009, 12:30
Скорее выкладывай это чудо! Уже нетерпиться его затестить!
alexteam
30.03.2009, 13:28
вам бы лишь бы быстрее..
а мне важнее чтобы безкосяково.
вот только что обнаружил в лсп дллке багу, вызывающую креш контролирующего модуля.
забыл разремарить одно единственное условие оставшееся еще со времен дебага :(
PanAm, забанить тя чтоли)
alexteam
30.03.2009, 18:35
...лучше тему закрыть..
ибо по сабжу все и так ясно...
зы.
вылоЗу, как только так сразу. я еще до скриптов не добрался даже. а им вылоДыть уже горит.
я еще до скриптов не добрался дажеа что ты с ними мутить там хочешь?))
alexteam
30.03.2009, 18:58
цитата в виде "те же яйки, только в профиль" ©
думаю образно ответит на поставленный вопрос.
Be3geBJIa3
31.03.2009, 15:53
Большая просьба поделиться информацией о создании своего LSP модуля.
Уж очень заинтересовало.
alexteam
31.03.2009, 17:51
library spi, unit overlapped - касаемо самой длл.
unit Unit1 - касаемо установки.
листать сдеся:
станичка с закладок браузера (http://209.85.129.132/search?q=cache:oKY1b6EbMawJ:www.delphibbs.com/delphibbs/dispq.asp%3Flid%3D1638550+function+WSPStartup(wVer sionRequested:+WORD%3B+lpWSPData:+LPWSPDATA%3B+lpP rotocolInfo:+LPWSAPROTOCOL_INFOW%3B+UpcallTable:+W SPUPCALLTABLE%3B+lpProcTable:+LPWSPPROC_TABLE):+In teger%3B+stdcall%3B&cd=2&hl=ru&ct=clnk&gl=ua&client=firefox-a)
это была моя отправная точка.
alexteam, ИМХО инсталить/деинсталить и искать следующего прова через реестр не правильно, хотя возможно и работает лучше.., но зачем тогда для этих действий сделано куча специальных АПИ функций?
alexteam
31.03.2009, 22:54
видимо люди считали что если добавят регистри в юзес у них приложенице в разы выростет, либо писавший все привык делает через юзес виндоус.
видимо люди считали что если добавят регистри в юзес у них приложенице в разы выростет, либо писавший все привык делает через юзес виндоус.
Речь о том, что для установки LSP есть специальные API, а лезть в реестр - дурной тон.
alexteam
09.04.2009, 21:04
на момент написания того поста я почемуто думал что хкор говорит по поводу реализации самих readreg,savereg и т.п. по той ссылке.
а по поводу инсталяции провайдера функциями для этого предназначенными, один вопрос, что является результатом работы этих функций ? не то же самое ? есть видимые отличия ?
что является результатом работы этих функций ? не то же самое ? есть видимые отличия ?результат то может и тот же но зачем изобретать велосипед?)
единственное что в SPI не сделать без использования реестра это не узнать путь для NSP модуля, майкорософтовци почему то решили что хватит с нас функции возвращающей путь к LSP/TSP модулям...
alexteam
10.04.2009, 01:12
лучше уж кривой и покрашеный в зеленый цвет велосипед у которгго можно покрутить педали %)
Хотелось бы задать свой вопрос, пробывал кто ставить провайдера на х64. Имеется задача перехватить траф 64-го приженица. Обычный способ не вкатывает, на 64 платформе таким образом можно хукать только 32 приложения.
Asmoday, для 64битных процессов нужен 64битный провайдер)
Тогда встречный вопрос, кто-нить сталкивался с лазарусом? Или проще на сях написать?
Добавлено через 4 минуты
И еще, может есть у кого пример и/или мануал реализации установки на сях можно в принципе и провайдера тож.
Вот сорци моих модулей из проекта по логированию трафика, провайдера с ними собирал и для х32 и для х64 процессов
ЗЫ они на С++
vBulletin® v3.6.11, Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot