Перехват траффика с подменой содержимого

6248874

В общем, имеется приложение (под Windows XP которое обменивается нешифрованными данными с сервером по TCP. Требуется на клиентской машине перехватывать пакеты и определенным образом видоизменять (как минимум - исходящие от клиента). Пара часов гугления ничего мне не дали по этому поводу (все найденные библиотеки типа WinPcap или Packet Sniffer SDK позволяют читать трафик, но не подменять его). Подумал, может кто-нибудь из местных знатоков ткнет меня в нужном направлении :)
p.s. желательно что-нибудь под C/C++, но и под любой язык пойдет, лишь бы было что-нибудь)
p.p.s. заниматься ничем незаконным не собираюсь)

spitfire

Юниксовую машину с iptables или ipfw или pf не получится поставить?

conv3rsje

Тулзы, тулзы... Перехвати подключение и меняй сколько хочешь...
#!/usr/bin/env python
# vim: sts=4 sw=4 et

import select, time
from socket import *

si = socket(AF_INET, SOCK_STREAM, 0)
so = socket(AF_INET, SOCK_STREAM, 0)

si.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
si.bind'', 12345
si.listen(10)

s, a = si.accept
print a
so.connect'forumbgz.ru', 80
while 1:
p = select.poll
p.register(s, select.POLLIN)
p.register(so, select.POLLIN)
print '.'
for r in p.poll(100):
print r
rs, re = r
if rs == s.fileno:
print 'sending to server'
if not so.send(s.recv(4096:
raise RuntimeError("Empty")
elif rs == so.fileno:
print 'sending to client'
if not s.send(so.recv(4096:
raise RuntimeError("Empty")

6248874

Я правильно понял, что вместо 12345 нужно поставить порт, на который коннектится прога? если да, то к сожалению, под WinXP этот скрипт не перехватывает подключения, он зависает на вызове accept а приложение меж тем спокойно коннектится к серверу :(

conv3rsje

Неправильно понял
12345 это порт на который надо направлять прогу
вместо forumbgz.ru и 80 - адрес на котором висит твой сервер

6248874

тогда еще один нубский вопрос: а как перенаправить траффик сторонней проги на нужный мне адрес? (напоминаю: под виндами). Адрес сервера зашит где-то внутри исполняемого файла, пытался дизассемблить и найти/заменить его, но не вышло пока(
p.s. за скрипт спасибо, кстати оказалось что poll под виндовс нету, пришлось сделать с select.select :)

Gunsleader

если екзешник не запакован, то тебе прямой путь на таблицу импорта :) я лично так делал чтобы не гемороиться с поиском вызова ws32.connect просто подгружал к екзешнику свою дллку с майконнект(такой же прототип просто как и у connect, перенаправляет коннект + передает реальные аргументы проге перехватчику) и менял адрес в таблице импорта на адрес функции из дллки.

klyv

Адрес сервера
а он точно не именем записан? мож, просто в хосты прописать? :)

6248874

Я все-таки сделал это! Потратил полдня на то, чтобы разобраться, как редактировать таблицу импорта, и почему виндовс сокеты коннектят меня не на тот порт (забыл про htons но все заработало спасибо всем отписавшимся в теме за советы :)

nik93

статейку штоль теперь накатай по такому случаю :)

SPARTAK3959

Мне всегда казалось, что на wasm.ru таких статей навалом.
Оставить комментарий
Имя или ник:
Комментарий: