источник http://ssz.by.ru/security/articles/thebat2.htm
1. Введение.
Отсылая мыло из-за прокси (например с помощью SocksCap/SocksChain), мы обычно преследуем цель скрыть свой IP от получателя. Но TheBat выдаст нас, поставив имя хоста в команду HELO/EHLO. Это будет реальное доменное имя, если наш провайдер поддерживает reverse DNS своих клиентов.
2. Патч.
Нижеследующий код найден "с 2х сторон": прослеживанием связей между строками "gethostbyaddr" и "EHLO". "gethostbyaddr", в свою очередь, найден с помощью справки по WinSock и здравого смысла.
;Загрузка константы "EHLO"
0057A61A mov edx, offset _str_EHLO_.Text
0057A61F lea eax, [ebp+var_4]
0057A622 call @System@@LStrLAsg$qqrv ; System __linkproc__ LStrLAsg(void)
;В конце концов динамически грузится и вызывается gethostbyaddr
0057A627 lea edx, [ebp+var_8]
0057A62A mov eax, [ebp+arg_0]
0057A62D mov eax, [eax-4]
0057A630 mov eax, [eax+30h]
0057A633 call sub_4ACE7C
;Составление строки "EHLO hostname"
0057A638 mov edx, [ebp+var_8]
0057A63B lea eax, [ebp+var_4]
0057A63E call @System@@LStrCat$qqrv ; System __linkproc__ LStrCat(void)
Во-первых нужно добавить в ЕХЕшник строку.
Немного более подробно о строках в Delphi:
0057A6FA align 4 ; Строки выровнены на 4 байта
0057A6FC _str_HELO_ dd 0FFFFFFFFh ; _top - счетчик ссылок, для констант = FFFFFFFF
0057A6FC dd 5 ; Длина
0057A6FC db 'HELO ',0 ; Text
Сформируем такую строку в свободном месте (хорошо подходит хвост какой-либо секции, например кодовой).
0028CFE0: FF FF FF FF-09 00 00 00-6C 6F 63 61-6C 68 6F 73 05 localhos
0028CFF0: 74 00 00 00-00 00 00 00-00 00 00 00-00 00 00 00 t
Теперь впатчим её загрузку (работает и без вызова LStrLAsg, так что сделаем просто)
0057A633 mov edx, 68DBE8h ;Затёрли вызов ненужной функции, ну и х.. с ней.
0057A638 lea eax, [ebp+var_4]
0057A63B nop
0057A63C nop
0057A63D nop
0057A63E call @System@@LStrCat$qqrv ; System __linkproc__ LStrCat(void)
И то же самое сделаем для HELO:
0057A67C mov edx, 68DBE8h
0057A681 lea eax, [ebp+var_4]
0057A684 nop
0057A685 nop
0057A686 nop
0057A687 call @System@@LStrCat$qqrv ; System __linkproc__ LStrCat(void)
Вот и всё. Пускаем TheBat, отсылаем мыло, смотрим заголовки, радуемся - мы теперь вечный localhost.
а возможно ли написать патчик???