|
|
Название темы |
Ответов |
Автор |
Просмотров |
Последнее сообщение |
Важные темы |
 |
 |
|
7
|
Гость_Инспектор _* |
804 |
12.10.2012, 0:13 Посл. сообщение: BaSe ArT ?! |
Сюда Вы можете задать любые вопросы касающиеся программирования.Можете просить ссылку на бесплатные видео курсы,помощь в той или иной программе(настройки программы)и многое другое .На все Ваши вопросы Мы постараемся более корректно,в минимальный срок ответить.
Темы форума |
 |
 |
|
23
|
Гость_Инспектор _* |
3477 |
12.10.2012, 0:14 Посл. сообщение: BaSe ArT ?! |
Здесь Вы можете поделиться своими результатами в программировании.Все работы будут критиковаться(давать оценку),той или иной работы,кто не имеет никакого отношения к программированию,прошу свои критерии оставить при себе.
прошу Псыха приглядывать за порядком в этом разделе,в избежании троллинга,флуда,идиотизма и прочей ...
 |
|
|
7
|
SeregaS |
923 |
12.10.2012, 0:13 Посл. сообщение: BaSe ArT ?! |
Всем привет. Если не в тот раздел то извеняйте.
В общем проблема такова.
Купил у провайдера выделенный IP адрес. Дома порты на роутере открыл (Роутер TP-LINK)
Нужно еще где-то в настройках (толи роутера то ли чего) прописать IP адрес, шлюз и подсеть.
Где незнаю))
Вот что в локалке

А вот мой Статичный выделенный IP 92.50.161.175
Попрошу отписываться тех кто знает только, а не всех подряд типо иди гугли, открой настройки роутера и т.д.
Роутер настроен, где-то еще нужно прописать эти данные..
порты 27015 и 27016 открыты.
 |
|
|
4
|
ˑДиkтатор™ |
8856 |
24.3.2012, 6:37 Посл. сообщение: CEBEP |
Inno setup - Создание инсталяционных пакетов
Обшее описание функций, и их применение.
Если найдена ошибка, просьба написать об етом в icq, или в теме.
Тема будет обновлятся.
Описание:Это мощное бесплатное средство для создания установочных пакетов (дистрибутивов) программ. Поддерживается шифрование, установка пароля, различные задачи по завершении установки.
По сравнению с NSIS [?] (основной конкурент на бесплатной основе) проще в настройке, имеет более понятную структуру скрипта, но генерит на 200-300 кб больший инсталятор. На данный момент он конкурирует и даже превосходит многие коммерческие установщики по функциональности и стабильности.
Основные черты:- поддерживает все 32-х битные версии Windows (95, 98, 2000, 2003, XP, Me, NT 4.0)
- создает создание одного файла exe, что значительно облегчает процесс инсталяции Вашей программы
- стандартный интерфейс Windows 2000/XP
- ориентирован на пользователя (например, полный, минимальный, пользовательский вариант)
- все инструменты для деинсталяции
- инсталирование файлов: встроенная поддержка "deflate", bzip2, 7-zip LZMA файлы сжатия. Программа может сравнивать информацию о версии файла, перемещать используемые файлы; подсчет разделенных файлов (shared); регистрировать DLL/OCX/FNT/TLB и типовые библиотеки; инсталировать шрифты
- проверяет, активны ли определенные программы
- создание ярлыков быстрого доступа (например, через старт-меню или на рабочем столе)
- осуществление записи в ini-файлы
- встроенная машина для написания скриптов на языке Pascal
- поддерживает многоязыковую инсталяцию
- инсталяция и деинсталяция по умолчанию
- весь код доступен (Borland Delphi 2.0-5.0)
- защита пароля для setup
- в случае отмены во время исполнения, все действия будут приведены в исходное состояние
Существует Newsgroup-а, созданная автором (к сожалению, только на английском языке), где, как правило, можно быстро и компетентно получить ответ.
Cамые простые и частые вопросы.Является ли эта программа совершенно бесплатной для использования в тoм числе и коммерческого?
Программа является бесплатной. Однако на нее есть copyright, что описано в лицензии.
Поддерживает ли Inno Setup MBCS (мультибайтовые наборы знаков)?
Inno Setup 2.0.6 включает полную поддержку для MBCS. В более ранние версии последнее свойство не входит.
Поддерживает ли программа web-инсталяцию?
нет
Скрипт.Это простой ASCII текстовый файл, пстроен на подобии INI. Скрипт разделен на секции, имена который пишутся в квадратных скобках []. Внутри секций существуют ключевые слова и указания, которые компилятор может читать и выполнять.
Комментарии.Начинаются с точки с запятой в начале строки и могут быть помещены в любое место скрипта. Коментарии блоком не возможны, как впрочем и вынесение коментария в середину строки. Последнее допускается компилятором, но впоследтвие, при выполнение, ведет к ошибке.
Секции.Порядок секций не имеет значения. Все они (за исключением [Setup]) являются произвольными. Ключевому слову значение присваивается при помощи знака равенства (=).
Указания состоят из одного или нескольких параметров и их опций, а также флагов (flags). Параметр же в свою очередь состоит из имени, за которым следует двоеточие (:) и значения. Параметры, опции и флаги отделяются друг от друга точкой с запятой (;).
Обзор секций:[Setup] сoдержит указания по поведению инсталяционной рутины, а также, как это должно выглядеть. Ключевые слова AppName, AppVerName и
DefaultDirName являются обязательными. Все остальные - по необходимости
[Files] Здесь содержатся файлы для setup
[Icons] ярлыки (иконки)
[Components] Соотношение компонентов к типу инсталяционной рутины
[Dirs] разрешает создать новые пустые папки
[INI] делает записи в INI- файлы
[InstallDelete] первое действое при инсталяции, cистаксис соответствует секции [UninstallDelete]
[Messages] разрешает специфические изменения в тексте
[Registry] делает запись в регист
[Run] выполняет другие программы после того как данные успешно были исталированы, но еще до того как будет закрыто диалоговое окно
[Tasks] разрешает дополнитекльные действия в setup
[Types] устанавливает тип setup-а
[UninstallDelete] последняя операция при деинсталяции. Таким образом папки и/или файлы будут удалены
[UninstallRun] первая операция при деинсталяции. Систаксис соответствует секции [Run]
[LangOptions] содержит информацию о языке. как правило, не используется
Inno работает внутри скрипта с различными предопределеными константами, которые, как правило, содержат пути (path). Способ написания: {имя}. Некоторые константы, такие как {app} и {group} могут/должны быть предопределены пользователем (см. пример ниже). Тот, кто сам желает определить константы, должен обратиться к припроцессеру Алекса Якимова (Alex Yackimoff).
Константа: {win} содержание: путь в директорию/папку Windows
пример: C:\Windows
Константа: {sys} содержание: путь в системную папку Windows, в частности папку System32
пример: C:\Windows\System или
C:\Windows\System32
Константа: {app} содержание: путь к собственной аппликации (программе)
пример: Константа: {pf} содержание: путь к программной папке
пример: C:\Programme
Константа: {cf} содержание: путь к общим данным
пример: C:\Programme\Gemeinsame Dateien
Константа: {dao} содержание: cоответствует{cf}\Microsoft Shared\DAO
пример: C:\Programme\Gemeinsame Dateien\Microsoft Shared\DAO
Константа: {src} содержание: путь к папке инсталявионной рутины, в момент выполнения setup
пример: R:\
Константа: {group} содержание: группа программ для стартового меню
пример: Примеры:Таким образом может быть написан комментарий
; --
Sample1.iss --
; Demonstrates copying 3 files and creating an icon.
Обязательная часть
[Setup]AppName=My Program
AppVerName=My Program version 1.5
AppCopyright=Copyright © 1997-2000 My Company, Inc.
DefaultDirName=
{pf}\My Program
DefaultGroupName=My Program
UninstallDisplayIcon={app}\MyProg.exe
Данная секция хоть и является производной, однако используется в большиинстве случаев. В данном случае копируются три файла в папку, путь в которую записан в переменную {app}
[Files]
Source: "MyProg.exe"; DestDir: "{app}"
Source: "MyProg.hlp"; DestDir: "{app}"
Source: "Readme.txt"; DestDir: "{app}"; Flags: isreadme
[Icons]
Name: "{group}\My Program";
Filename: "
{app}\MyProg.exe"
После написания скрипта необходимо его откомпилировать.
В этой небольшой статье я попыталась описать основные правила использования Inno Setup. Больше информации Вы можете получить на авторском сайте www.jrsoftware.org
Ниже написано полнное описание функций.
Введение.
Кому предназначена статья?«Будешь читать литературу для «чайников» - станешь «чайником» - программистская мудрость.
Моя статья написана для начинающих программистов (НЕ ДЛЯ «ЧАЙНИКОВ»!!!), ее цель – избавить их
от долгих бесполезных кликаний мышью по кнопкам, пытаясь «вслепую» создать более-менее удобный
инсталлятор для своей программы. Сразу предупреждаю: в статье не будет сложных примеров скриптов,
заумных фраз и обилия терминов. Здесь собран только самый необходимый минимум, который сделает
процесс написания инсталлятора простым и понятным.
Зачем нужен Inno Setup?Итак, после долгих дней, месяцев или даже лет кропотливой работы, вы все-таки написали рабочую
программу. Да, возможно, она работает не совсем так, как вам хочется, но главное – ОНА РАБОТАЕТ!
Теперь дело за малым: создать самораспаковывающийся архив и опубликовать ваше творение во
всемирной паутине, чтобы человечество могло по достоинству оценить ваши труды. Но тут возникает
вопрос: а что, если ваша программа имеет несколько вариантов установки (например, стандартная,
минимальная и выборочная), а еще хочется после установки программы поместить ее иконку на рабочий
стол пользователя, добавить ее в автозапуск… А может быть после инсталляции пользователю следует
перезагрузить компьютер… А может ему вообще не следует устанавливать вашу программу на свой
компьютер, если он не наделен правами администратора? В принципе, многое можно реализовать при
помощи тех же самораспаковывающихся архивов, но как долго вам придется с этим разбираться и не
уйдет ли на создание инсталлятора времени больше, чем на создание самой программы? И не увеличится
ли после этого в разы ее размер?
Вот тут на помощь программисту и приходят готовые программы-инсталляторы, одним из которых
является Inno Setup – с его помощью можно быстро создать удобный и простой инсталлятор.
Совет.Для того, чтобы найти в статье ответ на интересующий Вас вопрос, автор советует прочесть ее всю.
Это не займет много времени, зато Вы наверняка найдете то, что искали, совершенно в неожиданном
месте – не потому, что статья не последовательна, а потому, что все секции Inno Setup связаны между
собой настолько тесно, что очень трудно бывает отнести пример выполнения какой-либо задачи к
описанию конкретной секции.
Принятые обозначения
Если имеется в виду Inno Setup, в тексте он будет так и обозначен – Inno Setup, либо инсталлятор
Inno Setup.
Если же имеется в виду скрипт (код), написанный программистом для Inno Setup, он будет
называться скриптом.
Программа-инсталлятор, полученная в результате обработки (компиляции) скрипта Inno Setup’ом,
будет именоваться инсталлятором.
Здесь и далее в статье сверху некоторых директив ;таким образом будет приведен комментарий к
ним.
Создание инсталлятора с помощью Мастера
При выборе пункта меню Файл->Новый Inno Setup предложит вам создать инсталляцию с помощью
мастера (Inno Setup Script Wizard). В большинстве случаев полученная с его помощью инсталляция вас не
устроит, поэтому ее все равно нужно будет дорабатывать. Однако я не советую вам вообще пренебрегать
мастером, т.к. он существенно облегчает создание хорошего инсталлятора, беря на себя всю «рутинную»
работу.
Итак, для начала создадим простейший инсталлятор с помощью мастера Inno Setup Script Wizard.
Для этого не нужно в окне приветствия ставить галочку против строки «Создать пустой сценарий».
Строки, обязательные для заполнения, подписаны жирным шрифтом. В скобках написаны [Имя
секции]- директива. Директивам будут присвоены введенные значения.
В окне
Application Information (Информация о приложении) следует ввести:
Имя приложения (
[Setup]-
AppName);
Версия приложения (
[Setup]-
AppVerName);
Авторское право (
[Setup]-
AppPublisher);
Домашняя страница (
[Setup]-
AppPublisherURL [Setup]-
AppSupportURL [Setup]-
AppUpdatesURL);
В окне
Application Directory (Размещение приложения):
Базовый путь установки (
[Setup]-
DefaultDirName):
при выборе
Program Files Directory по умолчанию программа будет установлена в папку
Program Files, путь к которой буден взят из значения константы {pf};
при выборе Custom программа будет установлена в папку, расположение которой нужно будет
указать ниже.
Папка приложения ([Setup]-
DefaultGroupName) - имя группы меню Пуск по умолчанию
При снятом флажке Разрешить Изменение Пути Пользователем инсталятор не будет отображать
страницу выбора папки. В этом случае папка по умолчанию не изменится (
[Setup]-
DisableDirPage=yes).
При выставленном флажке Приложение Не Нуждается В Каталоге папка приложения создаваться
не будет, выбор последней предлагаться не будет, программа будет установлена в ту же папку, что и
Windows (
[Setup]-
CreateAppDir=no).
В окне
Application Files:
Главный файл приложения (
[Files]-
Source) – здесь будет прописан полный путь к главному файлу
вашего приложения (главный файл в секции
[Files] скрипта записывается первым). Также будут
установлена папка, куда приложение устанавливается и необходимые (по мнению мастера) флаги,
которые можно будет поменять или удалить.
Галочка против строки
Разрешить запуск приложения после установки означает, что после
установки инсталлятор предложит пользователю (по желанию) сразу запустить программу. В этом случае
в скрипт добавится секция
[Run] с указанием на запуск установленной программы.
В дополнение к главному файлу приложения можно добавить как угодно много дополнительных
файлов, а также папок с вложенными в них файлами. Для этого достаточно щелкнуть на
Добавить
файл(ы) или
Добавить папку и указать путь к ним в появившемся окне. После добавления установку
файлов можно редактировать и удалить (при выделении файла из списка станут доступными кнопки
Правка и Удалить).
При нажатии кнопки
Правка откроется окно, в котором будет представлен достаточно широкий
выбор параметров установки файла или папки. Рассмотрим его детально.
Опция
Включая подкаталоги актуальна, понятно, для папок и говорит сама за себя.
В разделе Путь из выпадающего меню следует
Указать базовый каталог, т.е. каталог, куда
инсталлятор должен будет установить выбранный файл или папку. Это может быть:
Application Directory – папка приложения (выбирается по умолчанию, равен константе {app});
Program Files Directory– папка Program Files (равен константе {pf});
Common Files Directory – папка Common Files (равен константе {cf});
Windows Directory – папка Windows (равен константе {win});
Windows System Directory – системная папка Windows (равен константе {sys});
Setup Source Directory – папка инсталлятора (равен константе {src});
System Drive Root Directory – системный диск, на котором установлена Windows (равен константе
{sd});
Common Startup Folder – папка Автозагрузка меню Пуск (равен константе {commonstartup});
User Startup Folder – папка Автозагрузка меню Пуск для текущего пользователя (равен константе
{userstartup});
[Custom] – здесь можно указать другой каталог для установки файла (папки).
Ниже можно
Определить подкаталог для устанавливаемого файла (папки) – в этом случае
инсталлятор создаст подкаталог в каталоге устанавливаемой программы и установит файл (папку) туда. В
скрипте это будет выглядеть так:
Source: "C:\Program.EXE";
DestDir: "{app}\KatalogProgram";
В окне
Application Icons:
В строке
Папка меню Пуск задается имя устанавливаемой программы – так оно будет
отображаться в меню Пуск.
Значение флажков, расположенных ниже, понятно. А вот что при их установке добавится в скрипт:
Разрешить пользователю изменять имя папки меню Пуск:
DisableProgramGroupPage=yes
И как следствие этого флажок на следующей строчке станет недоступным, а в скрипт добавится:
AllowNoIcons=no (значение по умолчанию – не будет отображаться в скрипте)
Разрешить отмену создания папки меню Пуск:
AllowNoIcons=yes
Совет: следующие параметры инсталляции легче задавать вручную. Как именно это сделать, не
прибегая к помощи мастера, будет рассмотрено позже, а пока просто вкратце перечислим, что значат
установленные флажки в следующих строках.
Создавать ярлык Интернет в папке меню Пуск (в меню Пуск в папке устанавливаемой
программы будет добавлена ссылка на сайт, указанный в
AppPublisherURL);
Создавать значок Uninstall в папке меню Пуск (устанавливаемую программу можно будет
удалить из меню Пуск);
Другое:
Разрешить пользователю создавать значки Рабочего Стола (пользователь может отказаться от
установки значка программы на его рабочем столе);
Разрешить пользователю создание значков быстрого запуска (по желанию пользователь может
добавить значок быстрого запуска программы, который будет располагаться в левом углу панели задач,
справа от кнопки меню Пуск).
В окне
Application Documentation[b]:
Здесь следует указать путь к Файлу, задать
Информационный файл, выводимый перед
установкой и Информационный файл, выводимый после установки. Желательно, чтобы это были
текстовые файлы (txt).
Следующее окно –
Финиш. На нем работа мастера завершается. Думаете, написание инсталлятора
на этом завершается? Ах, как вы ошибаетесь. С помощью мастера мы создали остов, фундамент будущего
инсталлятора, то есть избавили себя от нудной работы. Впереди – самое интересное: сделать ваш
инсталлятор действительно удобным, простым и красивым. В путь!
(С) 2012
 |
|
|
9
|
coma |
1669 |
27.2.2012, 11:54 Посл. сообщение: coma |
Буду обновлять тему,если не дадите бан за что нибудь снова...
Описание: Небольшой скрипт для uCoz, с помощью которого вы сможете сделать онлайн-игру. В качестве денежной единицы - репутация пользователя.
Как установить: На Ваш сайт, в любое место:
Код
<script type="text/javascript">
// © http://uweb.su/
function playRepgame(){var h = $("#stvka").val(); if (window.reqNow) return alert('Запрос уже выполняется'); if (/\D+/.test(h) || !h) return alert('Форма заполнена неправильно'); $("#statimgj").show(); window.reqNow = true; $.getScript("/php/reputation/index.php?s=" + $("#stvka").val(), function(){ window.reqNow = false; _uWnd.alert('<span style="color: ' + (_repst?"black":"red") + '"><br>' + _repgame + '</span>', ' ', {w: 290, h: 100, tm: 5000}); if (_repst) $("#stvka").val(""); try {$("#hasrepgame").html(_repnow).css("color", "red"); setTimeout(function(){ $("#hasrepgame").css("color", "black");}, 1000); } catch(e){} $("#statimgj").hide();});}
function gameRept(){<?if $USER_LOGGED_IN$?>var go = _uButton(null,'b',{text: 'Играть', content: 'onclick="playRepgame();" id="playgojj"'}); new _uWnd('r', 'Игра', 535, 200, {align: 0, oncontent: function(){ $("#stvka").focus();$.get("/index/9-$USER_ID$", function(data){hpts = parseInt($('#kdfjeu2', $('cmd[p="content"]', data).text()).html() || 0) || 0;$("#hasrepgame").html(hpts);});}}, '<div align="right"><a href="#" onclick="$(this).parent(\'div\').hide();$(\'#ruleRep\').show();setTimeout(function(){ _uWnd.getbyname(\'r\').checksize() },400);return false;">Правила игры</a></div><fieldset id="ruleRep" style="display: none"> Правила игры просты. Вы делаете ставку и жмете кнопку «Играть». В случае выигрыша Ваша репутация увеличится, в случае проигрыша соответственно понизится. Положительного или отрицательного отзыва в Вашей репутации не будет, а она просто изменится.</fieldset><div style="border:1px solid #b8b8b8; background:#f0f0f0; padding: 4px 6px;margin:2px 0px;"><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td width="23%" align="center">Ваша репутация</td><td width="10%" align="center"><b id="hasrepgame">0</b></td><td width="23%" align="center"><span class="wlshw" style="display: none">В случае выигрыша</span><span class="jjgf"> </span></td><td width="10%" align="center"><span class="wlshw" style="display: none"><b id="winrepgame">0</b></span><span class="jjgf"> </span></td><td width="23%" align="center"><span class="wlshw" style="display: none">В случае проигрыша</span><span class="jjgf"> </span></td><td width="10%" align="center"><span class="wlshw" style="display: none"><b id="loserepgame">0</b></span><span class="jjgf"> </span></td></tr></table><br><fieldset><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td width="95%"><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td width="110">Ваша ставка:</td><td><input type="text" onkeyup="chckgmr(this);" onchange="chckgmr(this);" onblur="chckgmr(this);" id="stvka" style="width: 75px"></td></tr></table></td><td><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td width="18"><img src="http://uweb.su/upload/icons/load.gif" border="0" alt="" align="absmiddle" id="statimgj" style="display:none"></td><td>' + go + '</td></tr></table></td></tr></table></fieldset></div>');<?else?>alert('Только для зарегистрированных пользователей.');<?endif?>}
function chckgmr(i){ if ((/^\d+$/.test(i.value)) && parseInt(i.value)>0) { i.style.color=""; $(".wlshw").show(); $(".jjgf").hide(); var k = hpts - parseInt(i.value); $("#winrepgame").html(hpts + parseInt(i.value)).css("color","green"); $("#loserepgame").html(k); if (k<0) { $(".wlshw").hide(); $(".jjgf").show(); i.style.color="red"; }} else {i.style.color="red"; $(".wlshw").hide(); $(".jjgf").show(); }}
</script>
<a href="java script://" onclick="gameRept();return false;">Игра на репутацию</a>
Затем
СКАЧИВАЕМ скрипт и загружаем его в папку scripts (Необходима оплаченная услуга PHP)
Создаем новый профиль - Бота. Он будет изменять репутации. Даем боту права админа (или отдельную группу можно создать), а затем в скрипте редактируем:
Код
$site = "http://uweb.su/";
$pass = "пасс";
$login = "логин бота";
Всем спасибо за внимание. С Вами был
coma
 |
|
|
7
|
Nero |
886 |
13.2.2012, 17:46 Посл. сообщение: Nero |
на вход программе подается набор символов,заканчивающийся символом 0 (в программе бейсик символы можно вводить по одному в строке,пока не будет введен 0,или считывать данные из файла). Ноль в этой программе единственный. Напишите эффективную,в том числе и по используемой памяти,программу(укажите используемую версию языка программирования,например Borland Pascal 7.0), которая будет составлять из всех имеющихся цифр(кроме завершающего последовательность нуля) минимальное число,состоящее ровно из трех повторяющихся одинаковых групп цифр ненулевой длины. Составленное число следует вывести на экран или в фаил.
в случае невозможности составить такое число,программа должна вывести "NO".
например, пусть на вход подаются следующие символы:
fd7s22hg 547h2j 47x5 540
В данном случае программа должна вывести:
245724572457
с меня спс,репа =) желательно поскорей
 |
|
|
3
|
ZavesA |
991 |
9.2.2012, 23:13 Посл. сообщение: ~ANTIKILLER |
DDoS нападения – вызов Internet сообществу. В то время как существует большое количество программ для предотвращения DDoS атак, большинство из них не применимо для небольших сетей или провайдеров. В конечном счете, вы сами должны защитится от DDoS. Это значит, что вы должны четко знать, как реагировать на нападение - идентифицируя трафик, разрабатывая и осуществляя фильтры. Подготовка и планирование, безусловно, лучшие методы для того, чтобы смягчить будущие DDoS нападения.Попасть под воздействие DDoS атаки – кошмарный сценарий для любого системного администратора, специалиста по безопасности или поставщика доступа. Обычно атака начинается мгновенно и без предупреждения и не прекращается со временем – система не отвечает, канал заблокирован, маршрутизаторы перегружены. Эффективный и быстрый ответ на нападение затруднителен и часто зависит от третих лиц, типа ISP провайдеров. В этой статье исследуется методы, которые должны использовать системные администраторы, если они когда-либо оказались в этой, довольно нежелательной, ситуации.
Обнаружение DDoS нападения
DDoS нападение распознать просто – замедление работы сети и серверов, заметное как администратору системы, так и обычному пользователю. Первым шагом в нашей защите мы должны идентифицировать тип трафика, который загружает нашу сеть. Большинство нападений DDoS посылает очень определенный тип трафика - ICMP, UDP, TCP, часто с поддельными IP адресами. Нападение обычно характеризует необычно большое количество пакетов некоторого типа. Исключением к этому правилу являются DDoS нападения, направленные против определенных служб, типа HTTP, используя допустимый трафик и запросы.
Чтобы идентифицировать и изучить пакеты, мы должны анализировать сетевой трафик. Это можно сделать двумя различными методами в зависимости от того, где исследуется трафик. Первый метод может использоваться на машине, которая расположена в атакуемой сети. Tcpdump - популярный сниффер, который хорошо подойдет для наших целей. Анализ трафика в реальном масштабе времени невозможен на перегруженной сети, так что мы будем использовать опцию "-w", чтобы записать данные в файл. Затем, используя инструмент типа tcpdstat или tcptrace, мы проанализируем результаты. Результаты работы tcpdstat, на нашем tcpdump файле:
Код
DumpFile: test
FileSize: 0.01MB
Id: 200212270001
StartTime: Fri Dec 27 00:01:51 2002
EndTime: Fri Dec 27 00:02:15 2002
TotalTime: 23.52 seconds
TotalCapSize: 0.01MB CapLen: 96 bytes
# of packets: 147 (12.47KB)
AvgRate: 5.56Kbps stddev:5.40K PeakRate: 25.67Kbps
### IP flow (unique src/dst pair) Information ###
# of flows: 9 (avg. 16.33 pkts/flow)
Top 10 big flow size (bytes/total in %):
26.6% 16.5% 14.7% 11.6% 9.8% 7.6% 5.4% 5.4% 2.5%
### IP address Information ###
# of IPv4 addresses: 7
Top 10 bandwidth usage (bytes/total in %):
97.5% 34.1% 31.2% 21.4% 10.7% 2.5% 2.5%
### Packet Size Distribution (including MAC headers) ###
<<<<
[ 32- 63]: 79
[ 64- 127]: 53
[ 128- 255]: 8
[ 256- 511]: 6
[ 512- 1023]: 1
>>>>
### Protocol Breakdown ###
<<<<
protocol packets bytes bytes/pkt
------------------------------------------------------------------------
[0] total 147 (100.00%) 12769 (100.00%) 86.86
[1] ip 147 (100.00%) 12769 (100.00%) 86.86
[2] tcp 107 ( 72.79%) 6724 ( 52.66%) 62.84
[3] telnet 66 ( 44.90%) 3988 ( 31.23%) 60.42
[3] pop3 41 ( 27.89%) 2736 ( 21.43%) 66.73
[2] udp 26 ( 17.69%) 4673 ( 36.60%) 179.73
[3] dns 24 ( 16.33%) 4360 ( 34.15%) 181.67
[3] other 2 ( 1.36%) 313 ( 2.45%) 156.50
[2] icmp 14 ( 9.52%) 1372 ( 10.74%) 98.00
Как видно, эти простые утилиты могут быстро помочь определить тип преобладающего трафика в сети. Они позволяют сэкономить много времени, анализируя и обрабатывая зафиксированные пакеты.
Для контроля входящего трафика может использоваться маршрутизатор. С помощью списков ограничения доступа, маршрутизатор может служить основным пакетным фильтром. Скорее всего он также служит шлюзом между вашей сетью и интернетом. Следующий пример от Cisco иллюстрирует очень простой способ использовать списки доступа, чтобы контролировать входящий трафик:
Код
access-list 169 permit icmp any any echo
access-list 169 permit icmp any any echo-reply
access-list 169 permit udp any any eq echo
access-list 169 permit udp any eq echo any
access-list 169 permit tcp any any established
access-list 169 permit tcp any any
access-list 169 permit ip any any
interface serial 0
ip access-group 169 in
Используя команду "show access-list", система покажет количество совпавших пакетов для каждого типа трафика:
Код
Extended IP access list 169
permit icmp any any echo (2 matches)
permit icmp any any echo-reply (21374 matches)
permit udp any any eq echo
permit udp any eq echo any
permit tcp any any established (150 matches)
permit tcp any any (15 matches)
permit ip any any (45 matches)
Результаты просты, но эффективны – обратите внимание на высокое число ICMP echo-reply пакетов. Подробная информация может быть собрана о подозреваемых пакетах, добавляя в конец команду "log-input" к специфическому правилу. Это правило будет регистрировать информацию о любом ICMP трафике:
access-list 169 permit icmp any any echo-reply log-input
Маршрутизатор теперь более подробно регистрирует собранные данные (которые можно посмотреть используя "show log") о соответствующих пакетах. В пример ниже, файл регистрации показывает несколько пакетов, соответствующих правилу DENY ICMP:
Код
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.45.142 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.45.113 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.212.72 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 172.16.132.154 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.45.15 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.45.142 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 172.16.132.47 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.212.35 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.45.113 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 172.16.132.59 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.45.82 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.212.56 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 172.16.132.84 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.212.47 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.45.35 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 192.168.212.15 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
%SEC-6-IPACCESSLOGDP: list 169 denied icmp 172.16.132.33 (Serial0 *HDLC*) -> 10.2.3.7 (0/0), 1 packet
Обратите внимание на информацию, содержавшуюся в каждой строке: источник и адрес назначения, интерфейс и правило, которому оно соответствует. Этот тип детальной информации поможет определить нашу защиту.
Реакция
После того, как мы идентифицировали подозреваемый трафик, пришло время исследовать, как нам ответить на нападение. К сожалению, варианты несколько ограничены, потому что большинство DDoS нападений использует поддельные исходные IP адреса, которые вероятно сгенерированы случайным образом. Так что же нам делать?
Отслеживаем источник атаки
Первое, что приходит в голову, это попытаться "проследить" источник атаки. Однако DDoS, в отличие от традиционного DoS, исходит из множественных источников. Поэтому неплохо было бы определить транзитный маршрутизатор, через который проходят большинство пакетов. К сожалению, для этого потребуется сотрудничать с несколькими источниками, так как вы не способны исследовать пакеты на вышестоящих маршрутизаторах. Каждый участник процесса (главным образом ISP провайдеры) будут использовать очень похожие методы. Идентифицировав злонамеренный тип трафика, используя вышеописанные методы, будет создан новый список ограничения доступа. Добавив его к правилам, которые применены к интерфейсу, который посылает трафик атакуемому адресату, мы снова используем команду "log-input". Регистрация подробно запишет информацию об исходном интерфейсе и MAC адресе источника атаки. Эти данные могут использоваться, чтобы определить IP адрес маршрутизатора, отправляющего злонамеренный трафик. Процесс будет повторен на следующем маршрутизаторе в цепочке. После нескольких итераций, источник (или один из них) будет обнаружен. Тогда можно создать соответствующий фильтр, который заблокирует атакующего. Недостаток в этом методе защиты от DDoS нападения – время и сложность. Получение таких данных требует работы с несколькими сторонами, и иногда использование правового принуждения.
Ограничение допустимого предела (“rate limit”)
Лучший способ немедленной помощи, доступный большинству ISP провайдеров, должно быть “ограничение допустимого предела” злонамеренного типа трафика. Ограничение допустимого предела ограничивает пропускную способность, которую определенный тип трафика может потреблять в данный момент времени. Это может быть достигнуто, удаляя полученные пакеты, когда превышен некоторый порог. Полезно, когда определенный пакет используется в нападении. Cisco предлагает способ, который позволяет ограничить ICMP пакеты, используемые в нападении:
Код
interface xy
rate-limit output access-group 2020 3000000 512000 786000 conform-action
transmit exceed-action drop
access-list 2020 permit icmp any any echo-reply
Этот пример поднимает интересную проблему, которая была отмечена ранее. Что, если злонамеренный трафик полностью законный? Например, ограничение SYN flood, направленное на Web сервер, отклонит и хороший и плохой трафик, так как все законные подключения требуют начального установления связи. Это трудная проблема, не имеющая простого ответа. Нельзя просто защитится от таких типов хитрых DDoS нападений, не принося в жертву часть законного трафика.
Фильтрация черной дыры
ISP провайдеры могут использовать другие способы защиты, которые зависят от изменения маршрутизации, типа фильтрации “черных дыр”. “Black hole” фильтрация отправляет злонамеренный трафик к воображаемому интерфейсу, известному как Null0 – подобный /dev/null на Unix машинах. Так как Null0 - не существующий интерфейс, трафик, направленный к Null0, по существу удаляется. Кроме того, эта методика минимизирует воздействие производительности, так как остальная часть сети остается устойчивой при тяжелых загрузках.
Важно отметить, что адресная фильтрация - не лучший способ защиты против DDoS нападений. Даже если вы заблокировали нападение на своем маршрутизаторе или межсетевой защите – все еще большие порции входящего трафика могут затруднить прохождение законного трафика. Чтобы действительно облегчить эффект от DDoS нападения, трафик должен быть блокирован в вышестоящей цепочке – вероятно на устройстве, управляемом большим провайдером. Это означает, что многие из программ, которые утверждают, что предотвращают DDoS нападения, в конечном счете, бесполезны для маленьких сетей и их конечных пользователей. Кроме того, это означает, что предотвращение DDoS нападения, в некоторый момент, не зависит от нас. Это печальная правда, понятная любому, кто когда-либо имел дело с проблемой.
ПредотвращениеЕсли вы удачно защитились от DDoS нападения, удостоверьтесь, что вы используете следующие предосторожности, которые будут препятствовать вашей собственной сети участвовать в DDoS нападениях.
Нужно включить команду "ip verify unicast reverse-path" (или не Cisco эквивалент) на входном интерфейсе подключения восходящего потока данных. Эта особенность удаляет поддельные пакеты, главную трудность в защите от DDoS нападений, прежде, чем они будут отправлены. Дополнительно, удостоверьтесь, что блокирован входящий трафик с исходными адресами из зарезервированных диапазонов (то есть, 192.168.0.0). Этот фильтр удалит пакеты, источники которых очевидно неправильны.
Входящие и исходящие методы фильтрации, также критичны для предотвращения DDoS нападений. Эти простые списки ограничения доступа, если внедрены всеми ISP провайдерами и большими сетями, могли бы устранить пересылку поддельных пакетов в общедоступный интернет, сокращая тем самым время, требуемое для розыска атакующего. Фильтры, помещенные в граничные маршрутизаторы, гарантируют, что входящий трафик не имеет исходного адреса, происходящего из частной сети и что еще более важно, что трафик на пересекающихся курсах действительно имеет адрес, происходящий из внутренней сети. RFC2267 - большой основа для таких методов фильтрации.
Наконец важно составить точный план мероприятий ПРЕЖДЕ чем, произошло нападение.
ЗаключениеDDoS нападения – вызов Internet сообществу. В то время как существует большое количество программ для предотвращения DDoS атак, большинство из них не применимо для небольших сетей или провайдеров. В конечном счете, вы сами должны защитится от DDoS. Это значит, что вы должны четко знать, как реагировать на нападение - идентифицируя трафик, разрабатывая и осуществляя фильтры. Подготовка и планирование, безусловно, лучшие методы для того, чтобы смягчить будущие DDoS нападения.
Источник securitylab
 |
|
|
0
|
ZavesA |
820 |
18.1.2012, 23:09 Посл. сообщение: ZavesA |
Intro:Многие слышали, что программы, написанные на Си, могут иметь самый минимальный размер (сравнимый с размером только ASM программ). Но в большинстве случаев сами получали простейшие программы размером по 50-70 килобайт, и удивлялись этому и не могли понять, в чем истинная причина этого. В данной статье будет рассказано, как можно уменьшить размер программы до минимума и не нарваться на подводные камни.
Всё что будет расписано в частности будет касаться Си программ (именно Си, а не С++) и среды разработки Visual Studio 2008 (для других версий данной IDE это всё будет действовать с небольшими изменениями) VS у нас русская, по этому не пугайтесь если не найдете нужных пунктов у себя. При указании параметра конфигурации, в скобках будет указан ключ для использования в командной строке при компиляции/линковки, который можно использовать, если не используется файл проекта.
Выбран Си только потому, что в нем не используется дополнительного кода связанного с созданием и уничтожение классов, по причине отсутствия их.
Причины ожирения программы:Одна из самых главных причин это CRT (C Runtime Library) которая докидывает довольно много кода в исполняемый файл, даже когда нам это не нужно. Отказаться от CRT не так то и просто как кажется. Если с самого начала написания программы это не планировалось, то могут возникнуть довольно серьезные проблемы.
Среди остальных причин можно отметить:- Особенности создания исполняемого файла
- Особенности настройки оптимизации
- Особенности самого кода программы
Избавление от статической линковки CRT:Когда программа настолько на использование
CRT что отказаться от неё нельзя, то довольно удобным шагом будет изменение линковки со статической на динамическую.
Для этого в свойствах проекта в параметре
Свойства конфигурации -> C/C++ -> Создание кода -> Библиотека времени выполнения задать значение Многопоточная DLL (/MD)После выполнения данного действия, почти весь код
CRT будет подгружаться из
DLL. Но тут нас ждем подводный камень: VS 2008 в качестве DLL использует
MSVCR90.dll, которая в свою очередь по дефолту не установлена в Windows XP, так что ваша программа будет работать только в системах где установлена данная библиотека или где установлена VS 20008 и выше. А таскать её с собой довольно сложно из-за большого веса.
В 90% случаях данная проблема решается использованием более старой версии CRT. Для этого следует выполнить следующие пункты:
Взять из VC++ 6 версии библиотеку MSVCRT.LIBДанную библиотеку кинуть в папку с программой (или в папку с библиотеками) под именем
MSVCRTOLD.LIBВ свойствах проекта задать
Свойства конфигурации -> Компоновщик -> Ввод -> Игнорировать все стандартные библиотеки - Да (/NODEFAULTLIB).
Добавить в параметры линковки (Свойства конфигурации -> Компоновщик -> Командная строка -> Дополнительные параметры) библиотеку MSVCRTOLD.LIBПосле такого рода манипуляции программа будет использовать CRT из
msvcrt.dll, которая по дефолту есть в каждой
Windows, начиная с древних времен.
Такой подход помогает во многих случаях, за исключением тех, где используется новые функции, которых не было в старых версиях CRT. Так что будьте внимательны. Ну и конечно же придется еще чуть по играться с параметрами компиляции.
Полное избавление от CRT:Для полного счастья нам всё же потребуется полный отказ от использования функций CRT. Как уже многие догадались, придется использовать только “скудный” WinAPI. Но как показывает практика, WinAPI “скудный” по функционалу, только для тех, кто его не знает или не умеет пользоваться MSDN. Большинство функций CRT реализованы в системных библиотеках или же их собственная реализация не создаст трудностей. Вся настройка предполагается для Release сборки.
Шаг 1: Настройка компиляцииВ Windows существует 2 общепринятых формата строк.
Это Ansi Char (1 байт) и Wide Char (2 байта). Поэтому для обработки каждого из них существует 2 вида
WinAPI функций (оканчивающихся на A или W).
К примеру: CreateFileA и CreateFileW, первая принимает строковые параметры в виде Ansi строк, а вторая в виде Wide строк. Не будет разводить холивар по поводу правильности использования и скорости работы каждой из функции, у нас стоит задача уменьшить вес программы, поэтому будет использовать только Ansi строки т.к. они в 2 раза меньше занимают места.
По дефолту VS 2008 пытается использовать
Wide строки. Для того чтобы отучить её от этого следует для параметра Свойства конфигурации -> Общие -> Набор Знаков задать значение “Не задано”. Это позволит нам безболезненно использовать различные встроенные макросы для Ansi функций. Да и вообще для меньшей путаницы лучше указывать сразу какой тип строк мы используем в функции. Т.е. вместо CreateFile писать CreateFileA.
Важным моментам в уменьшении размера является оптимизация при компиляции. Для этого следует в разделе: “Свойства конфигурации -> С/С++ -> Оптимизация”, задать следующие параметры:
- Оптимизация - Наименьший размер (/O1)
- Развертывать подставляемые функции - По умолчанию
- Включить подставляемые функции – Нет
- Предпочитать размер или краткость кода - Предпочитать краткость кода (/Os)
- Оптимизация всей программы - Включить создание кода во время компоновки (/GL) – т.е. оптимизация будет выполнена на уровне всех модулей программы, а не каждого модуля в отдельности.
Далее нам следует отказаться от всякого левого кода, который автоматически вставляется при компиляции. Для этого следует в разделе: “Свойства конфигурации -> С/С++ -> Создание кода”, задать следующие параметры:
- Включить объединение строк - Да (/GF) – заставляет компилятор объединять одинаковые строки в одну, если они не изменяются.
- Включить С++ исключения – Нет – нам они не нужны потому что пишем на Си.
- Библиотека времени выполнения - Многопоточная (/MT) – хотя по факту нам вообще это не важно, т.к. мы не будем использовать CRT
- Проверка переполнения буфера - Нет (/GS-) – Знать о том, что мы переполнили буфер, нам как-то не обязательно потому, что мы пишем правильный код, в котором переполнений не должно быть.
Убираем все левые, предварительно скомпилированные заголовки: “
Свойства конфигурации -> С/С++ -> Предварительно скомпилированные заголовки -> Создавать или использовать предварительно скомпилированные заголовки ” - Не использовать предварительно скомпилированные заголовки
Ну и конечно же зададим что у нас программа на Си : “Свойства конфигурации -> С/С++ -> Дополнительно -> Компилировать как” - Компилировать как C код (/TC)
Шаг 2: Настройка компоновки. Правильно скомпилировать код, это одно, а правильно собраться по воедино – это уже другое. Приступим к действиям в разделе “Свойства конфигурации -> Компоновщик”:
Ввод ->Игнорировать все стандартные библиотеки - Да (/NODEFAULTLIB) –
Это нам позволит избавиться сразу от CRTФайл манифеста ->Создавать Манифест – Нет – Манифест нам как-то не нужен, т.к. нам особо не на чего претендовать. Если конечно нам нужно автоматическое вывод окна UAC или красивые элементы окна, то можно и оставить его, но прежде убрать всё лишнееОтладка -> Создавать отладочную информацию – Нет – Отладочная информация нам не нужна, т.к. отладкой мы будет заниматься в Debug сборке.
Дополнительно -> Точка входа - тут прописываем имя функции для точки входа, допустим EntryPoint у нас будет. Т.к. мы отказались от CRT (которая ставила свою точку входа), то мы должны задать её сами.Дополнительно -> Внесение случайности в базовый адрес - Отключить внесение случайности в образ (/DYNAMICBASE:NO) – нам как то по пофигу на это, по этому пусть будет всегда один и тот же. Потом проще будет)Дополнительно -> Фиксированный базовый адрес - Образ должен быть загружен по фиксированному адресу (/FIXED) – отключает создание релоков (которые нужны для DLL) а т.к. мы получаем EXE файл, который будет всегда загружаться в одно и то же место, то нам релоки не нужны.Шаг 3: Настройка кодаТак как мы установили свою точку входа, то необходимо объявить её. Первоначальный файл у нас будет выглядеть следующим образом:
Код
#include <windows.h>
// точка входа
void EntryPoint(void)
{
Необходимые действия
ExitProcess(0);
}
ExitProcess для того, чтобы после всех действий наша программа действительно завершила работу, даже если стек был поврежден.
Шаг 4: Замена функций CRTКак я уже выше упоминал, то частенько большинство функций CRT уже реализованы, в системных библиотеках, с тем или иным изменением. Рассмотрим самые популярные:
Работа со строками:- strcpy – lstrcpyA
- strcat – lstrcatA
- strlen – lstrlenA
- strcmp – lstrcmpA
- strstr – StrStrA / StrStrIA
- strchr – StrChrA / StrChrIA
- stricmp – StrCmpIA/ StrCmpNA / StrCmpNIA
- itoa – StrToIntA
- sprintf – wsprintfA / wnsprintfA
Работа с памятью:- malloc – HeapAlloc / VirtualAlloc зависит от размера выделяемой памяти и её предназначении
- free – HeapFree / VirtualFree
Работа с файлами:- fopen – CreateFileA
- fclose – CloseHandle
- fwrite – WriteFile
- fread – ReadFile
- fgets – придется реализовывать самому парсинг считанных данных на строки
Работа с потоками:- _beginthread – CreateThread
- _endthread – ExitThread
Консольный ввод/вывод- printf – wvsprintf + WriteConsole
- scanf – ReadConsole + парсинг строк
Аргументы командной строкиargc + argv – CommandLineToArgvW + GetCommandLineW
Для большинства функций реализации можно найти в исходниках CRT, которые присутствует в Visual Studio Professional в папке: %папка устновки VS% \VC\crt\src\
Из исходников CRT можно взять только нужные функции и скинуть их в отдельный файл исходника. Среди часто используемых это: memset, memcpy, atoi. Также большая часть функций может быть найдена в ntdll.dll, для использования которых придется позаимствовать из WDK/DDK файл ntdll.lib
Шаг 5: Изменение параметров секцийДаёт довольно хорошую оптимизацию по размеру (до килобайта). Дело в том, что по умолчанию Си компилятор создаёт следующие секции:
- . text – секция кода
- .rdata – секция импорта
- .data – секция данных
А также секции экспорта, ресурсов, релоков и прочие.
Каждая секция перед записью в файл выравнивается по размеру на 512 байт (размер секции всегда кратен будет 512 байтам). Т.е. если мы имеет данных (переменные глобальные) на 4 байта, то всё равно секция данных будет занимать 512 байт минимум. Т.е. если имеем 3 секции, то максимум мы сможем потерять до 1533 (511 * 3) байт из-за выравнения размера. Чтобы такое не случалось можно прибегнуть объединению нескольких секций в одну. Практика показала, что практически всегда объединению поддаются секции кода, импорта и данных.
Для объединения секций необходимо в главном файле исходников прописать код:
Код
#pragma comment(linker, "/MERGE:.data=.text")
#pragma comment(linker, "/MERGE:.rdata=.text")
Тем самым мы объединим 3 секции в одну с именем .text
Но тут есть один подводный камень: Секция кода имеет права –
RE (
чтение и выполнение), секция данных
RW (
чтение и запись), а секция импорта –
R (т
олько чтение). И после того как мы объединили всё в одну секцию, то она должна иметь общие права для всех секций которые в неё вошли, иначе можно столкнуться с ошибками при включенном
DEP и прочих защитах. Для установки прав необходимо после объединения секций прописать команду :
Код
#pragma comment(linker, "/SECTION:.text,EWR")
Т.е. дать секции
.text права на чтение, запись и выполнение.
ВАЖНО: Большинство антивирусов довольно плохо относятся к файлам у которых есть секция с правами на запись и выполнения, по этому они могут считать данные файлы упакованными или просто сказать что подозрительный файл или вообще что это вирус. Так что сильно не пугайтесь
Шаг 6: Уменьшение размера Dos заголовка. Dos заголовок находится в самом начале программы и имеет в нем небольшую DOS программу которая выводит сообщения типа: This program cannot be run in DOS mode. Что является защитой от запуска Windows программ под DOS’ом
Времен DOS прошли, по этому нам данная подпрограмма не нужна и от этой строки смысла нам не будет. По этому можно использовать альтернативный Dos заголовок с меньшим размером. Для этого в параметрах компоновщика требутеся укзаать опцию:
/stub:stub.bin stub.bin – это файл с альтернативным заголовком.
К примеру, можно использовать этот (предварительно переведя его из
HEX в двоичные данные):
Код
4D5A00000100000002000000FFFF0000
40000000000000004000000000000000
B44CCD2100000000000000000000000
000000000000000000000000000000000
Файл [b]stub.bin должен располагаться в папке с исходным кодом.[/b]
Шаг 7: Изменение кодаОчень часто большой объем кода получается из-за:
Использования большого числа глобальных переменных. Поэтому пытается отказаться от глобальных переменных (особенно инициализированных), особенно буферов типа:
char buf[1024] = {0};
Такой код увеличит размер файла на
1024 байт. Так что всю инициализацию следует производить более осторожно. Если обычные числовые переменные особого размера не вносят, то буферы дают большой вклад в размер. Если требуется глобальный буфер, то проще выделить под него память в начале программы.
Использование большого числа локальных переменных, описанных как статические (static). Та же самая проблема, что и с инициализированными глобальными переменными.
Повторение участков кода. Допустим если есть участок кода состоящий из 3-4 функций и используется он в программе много раз, то более рациональным былобы использовать его в виде отдельной функции.
Использования одинаковых (неизменяемых) строк в виде констант (префикс const или использовать запись через #define) это позволит компилятору безболезненно объединить их в одну.
Сворачивать большие участки одинакового кода в цикли. Т.е. не писать их последовательно.
Шаг 8: Оптимизация ресурсовВ небольших программах большой объем данных занимают именно ресурсы. Если от диалогов особо отказаться не получится, то следующие участки поддаются хорошей оптимизации:
Иконки – весят много, особенно если они многоцветные и много размерные. Для уменьшения размера следует по возможности использовать системные иконки (из
shell32.dll), их там очень много, так что найти нужные не составит труда. Если же приходится иметь иконки свои, то лучше сделать 2 вида их 16*16 и 32*32 точки. Этого будет достаточно, ну и по возможности делать их 16 цветными.
Информация о версии – является с одной стороны и нужной, а с другой стороны и абсолютно бесполезной. Если у нас не крутая программа, а обычная утилитка, то лучше вообще отказаться от информации о версии, а все необходимые данные отображать в рабочем окне программы.
Шаг 9: А как же быть с исключениями?После отказа от CRT, при добавлении в программу конструкций
__try / __except, программа отказываются работать по причине отсутствия парочки функций. Их можно реализовать самому, или позаимствовать из CRT. Но всё равно лучше не использовать данные конструкции, а сразу хорошо отладить код. Если нужно ловить все ошибки, то ставить глобальный обработчик всех ошибок через
SetUnhandledExceptionFilterШаг 10: Убираем всякие побочные артефактыВробе бы всё у нас хорошо, и проверку переполнения буфера мы отключили, но с того не ссего при компоновке у нас могут начать сыпаться ошибки вида, что не найден внешний символ
__chkstk. На деле этого говорит о то, что проверка всётаки включилась автоматически. Такое бывает в том, случае когда под локальные переменные функции отводится слишком большое количество памяти в стеке. Это магическое значение равно 4 килобайтам. Важно понимать, что это значение является общим для всей вложенности функций начиная от точки входа в программу или начала потока. Пример:
Код
void TestProc_2()
{
char buf_2[1024*3];
MessageBoxA(0, buf_2, buf_2, MB_OK);
}
void TestProc_1()
{
char buf_1[1024*3];
TestProc_2();
MessageBoxA(0, buf_1, buf_1, MB_OK);
}
При вызове
TestProc_1 в стеке зарезервируется 3 килобайта под буфер
(buf_1), затем из
TestProc_1 вызовется
TestProc_2, которая тоже зарезервирует 3 килобайта, в сумме мы получим 6 килобайта, что больше 4 килобайт, это и вызовет автоматическую проверку стека.
Чтобы небыло таких неприятностей есть 2 выхода:
1) Не использовать большое кол-во локальных переменных. Вернее врякого рода буферов. И при необходимости просто выделять память.
2) В параметрах компиляции задать инимальный проверяемый размер стека, который будет больше того, который мы используем. Подобрать можно эксперементальным путём, или анализом вызываемых функций.
Для задания этого минимального значения следует прописать в параметрах компиляции: /GsNNNN где
NNNN – значение в батах (в нашем случае 8192 хватит нам)
FinalВот такими вот не сложными манипуляциями можно кардинально уменьшить размер исполняемого файла.
Для наглядности в аттаче добавлен пример такой программы (с исходниками): Программа отображается для выбранного DLL/EXE файла все иконки содержащиеся в ресурсах и имеющие размер 32*32 пикселя. Размер программы без сжатия вышел равным
2560 байтАвтор статьи slesh
Редактировал статью ZavesA
 |
|
|
0
|
coma |
519 |
13.1.2012, 1:40 Посл. сообщение: coma |
В статье рассматриваются некоторые моменты по работе популярной поисковой системы Google.
Что такое Google Dance?
Google Dance - это обновление индексной базы Google. Обновление продолжается неделю, в течение которой выдача результатов поиска будет часто меняться. Одни и те же сайты могут, как подниматься, так и опускаться (или совсем исчезать) в результатах поиска. Непостоянность выдачи результатов поиска основан на сделующем факте. Во время "Google Dance" на каждом из серверов Google происходит переформирование индексной базы. Структура серверов Google построена таким образом, чтобы минимизировать загрузку серверов, поэтому, каждые несколько минут происходит изменение "знаний" об ip-адресе сервера. Таким образом пользователь получает результаты поиска с разных серверов.
Когда происходит обновление индекса Google?
Обновление индекса Google происходит обычно, один раз в несколько месяцев. В промежутки между обновлениями разработчики Google имеют возможность протестировать новые алгоритмы выдачи наиболее релевантных ответов на поисковые запросы.
Как узнать, что Google посетил мою страницу?
Просматривая логи сервера, нужно искать события, вызванные агентом GoogleBot.
Что такое Google Page Rank?
Google Page Rank - это оценка, которую присваивает Google каждой проиндексированной странице. Google суммирует количество всех найденных ссылок, ссылающихся на проиндексированную страницу, накладывает различные весовые коэффициенты на входящие ссылки и определяет важность страницы. Не стоит забывать, что Google Page Rank - это всего лишь один из факторов, которые рассматриваются для определения релевантности проиндексированной страницы.
Что такое внутренняя ссылка, внешняя ссылка, обратная ссылка?
Внутренняя ссылка - это ссылка, ведущая на тот же самый сайт, на странице которого она установлена. Внешняя ссылка - это ссылка, ведущая на другой сайт. Обратная ссылка, по мнению поисковика Google, - это ссылка, ведущая на сайт с другого сайта. Поисковый робот Google проходит по всем ссылкам сайта, как внутренним, так и внешним.
Что такое Google Toolbar?
Google Toolbar - это надстройка в браузере internet Explorer, позволяющая узнать значение Page Rank просматриваемой страницы.
Что такое "песочница" Google?
"Песочница" Google - это термин, означающий временную пессимизацию сайта. По мнению Google, чем дольше живет сайт, тем более высокую значимость имеют материалы, расположенные на нем, и тем выше в результатах поиска будут ссылки на страницы такого сайта. "Песочница" Google не действует (пока) на сайты с русскоязычным контентом.
Время действия "песочницы" Google - от трех месяцев до полугода и более. С чем связан такой разброс во времени? Google рассчитывает "время песка" не для каждого сайта, а для группы сайтов. Если сайт попадет в группу позднее других сайтов, то время нахождения в группе для него будет меньшим по сравнению с другими сайтами.
Как правильно оптимизировать под Google?
Ответ на этот вопрос могут дать только разработчики поисковой машины. Можно предположить следующее: новый, уникальный контент, постоянно появляющийся на сайте. Множество внешних обратных ссылок на страницы сайта, желательно с тематически - близких страниц. Множество внутренних страниц сайта, перелинкованных с главной и промежуточными страницами "релевантными ссылками". Возраст самого сайта. Чем старше сайт, тем более значимый вес имеют его страницы по сравнению с другими более молодыми сайтами.
 |
|
|
0
|
coma |
571 |
12.1.2012, 17:21 Посл. сообщение: coma |
Хотите научиться легко ставить Ajax окна на свой сайт, без разбора .xlmс страниц?
Есть решение! Теперь вам не нужно сидеть и "Клепать" .xml страницы, заливать их на сервер и т.п!
Теперь вам достаточно установить 1 рабочий код и всё! Забудьте про старые варианты установки окон. Теперь всё легко и просто!
Создать
Ajax окно на
uCoz:
Установка: взять следующий код и вставить туда, где нужно чтоб была ссылка на Ajax окно.
Код
<A href="java script://" onclick="new _uWnd('myName','Название Ajax она',500,200,{min:1,shadow:1,header:1,max:1,resize:0},'Установка: взять следующий код и вставить туда, где нужно чтоб была ссылка на Ajax окно.');">Ajax Окно</A>
Что нужно поправить: НазваниеAjax она - измените на слово или словосочетание, которое будет отображаться в названии она.
500 - Длинна Ajax кна
200 - высота Ajax окна
Тут содержание - тут вставляйте ваш текст или код, который будет отображаться в окне(можно применять HTML коды).
Ajax Окно - Это будет вашей ссылкой. Если нажать на эту надпись, то появиться ваше окно.
 |
|
|
0
|
coma |
497 |
12.1.2012, 16:27 Посл. сообщение: coma |
DataLife Engine это многопользовательский новостной движок предназначенный для организации собственных СМИ в интернете.
Официальный сайт движка Официальный сайт CMS Datalife Engine
Благодаря мощной системе публикации, настройки и редактирования новостей, движок на шаг вперед опережает своих ближайших конкурентов. А благодаря точной и продуманной структуре ядра, сводящей к минимуму требования к ресурсам сервера, движок способен с легкостью работать с высокопосещаемыми проектами, не создавая при этом каких-либо особых нагрузок на сервер. Гибкость, легкость в настройке и интеграции собственного дизайна позволит вам развернуть собственные СМИ в наиболее кратчайшие сроки, без каких-либо дополнительных материальных затрат. Использование продвинутой технолигии AJAX сократит как трафик вашего сервера, так и трафик ваших посетителей, ну а о удобстве работы я уже не говорю. Благодаря повышенному вниманию к безопасности скрипта, к удобству работы с ним, а также динамическому развитию, в пользу использования DataLife Engine уже высказались более 800 порталов, успешно использующие его в работе. Движок оптимизирован под поисковые системы, что приведет на ваш сайт дополнительных клиентов.
Краткий перечень возможностей DataLife Engine:Общие возможности:- Использует для хранения данных MySQL
- Поддержка расширения MySQLi
- Мощная система безопасности
- Минимальная нагрузка на базу данных (от 0 до 5 запросов)
- Использование продвинутой технологии AJAX, позволяющей существенно сократить нагрузку на сервер и траффик пользователей.
- Продвинутая система управления баннерами (или любой рекламной информации)
- Возможность создания не только динамического контента, но и статического
- Автоматическая и ручная генерация метатегов
- Упрощенная система управления шаблонами
- Система почтовых шаблонов, на основе которых осуществляется генерация и отправка сообщений с сайта
- Возможность временной блокировки доступа на сайт
- Вывод новостей новостей и статей, да и вообще всего что угодно
- Поддержка ЧПУ (человеко-понятный URL) позволяет использовать тему статьи или любой другой текст в URL броузера, благодаря этому индексация сайта в поисковых системах будет более качественной (необходим modrewrite)
- Возможность отключение ЧПУ
- Общая статистика сайта
- Поддержка дополнительных полей (возможность использовать не только краткую и полную новость на сайте, но и имеется возможность для создания любого количества дополнительных полей различных видов для ввода информации)
- Возможность написания статей, содержащих несколько страниц
- Возможность использования вложенных категорий
- Флуд контроль
- Автоматический фильтр слов в комментариях
- Поддержка категорий, а также подкатегорий.
- Автоматическое обрезание длинных слов в комметариях
- Рейтинг новостей
- Календарь
- Поиск по статьям включая дополнительные поля (подсветка найденного текста)
- Обзор непрочитанных новостей с момента последнего посещения сайта
- Возможность просмотра сколько раз была прочитана новость
- Возможность добавления статей в раздел "Избранное"
- Отсылка писем пользователям через форму на сайте
- Вывод страницы используя сжатие gzip а также без него
- Поддержка персональных сообщений между пользователями
- Поддержка нескольких языков
- Вывод популярных статей в отдельном блоке
- Создание голосований на сайте
- Возможность создания статистический страниц непосредственно через админпанель
- Возможность выбора между упрощенной регистрацией и расширенной, при выборе расширенной регистрации пользователь будет зарегистрирован только после активации аккаунта. Активация высылается по почте.
- Поддержка неограниченного количества групп пользователей
- Возможность ограничения доступа к различным разделам для определенных групп пользователей.
Возможности для посетителей сайта:- Регистрация на сайте
- Добавление комментариев
- Изменение и удаление пользователями своих собственных комментариев
- Возможность добавления новостей со стороны посетителей
- Модерирование новостей
- Статистика по конкретному пользователю (включая рейтинг и профиль)
- Вывод различной информации для зарегистрированных посетителей и нет
- Возможность загрузки фотографии в профиле пользователя
- Возможность восстановления забытого пароля
- Возможность редактирования новости непосредственно на сайте
Возможности админцентра:- Добавление, редактирование и удаление новостей
- Для создания новостей возможно использование WYSIWYG редактора или BBCODES
- Редактирование пользователей
- Имеется возможность использовать смайлы и HTML код
- Создание неограниченных групп пользователей с возможностью назначения им различных прав доступа
- Возможность выставления бана для посетителей
- Средства для создания и редактирования шаблонов непосредственно в админцентре
- Возможность корректировки времени
- Возможность измения даты публикации
- Автоматическая публикация статьи при наступлении установленного времени
- Возможность отключения календаря и архивов (для экономии ресурсов)
- Возможность фиксации новостей (будут всегда наверху, независимо от даты)
- Отключение регистрации посетителей
- Автоматическая временная приостановка регистрации при достижении максимального количества зарегистрированных пользователей
- Автоматическое урезание загруженных картинок с сохранением пропорций до указанных размеров
- Автоматическое удаление пользователей которые не посещали сайт заданное время
- Наложение водяных знаков на картинки
- Возможность загрузки картинок для каждой конкретной новости (при удалении новости, картинки тоже будут удаляться)
- Удобный менеджер загруженных картинок
- Оптимизацию, ремонт, создание резервной копии и восстановление базы данных можно осуществлять непосредственно из скрипта
Более подробное описание всех возможностей скрипта, а также руководство по его эксплуатации и настройке, вы можете найти в документации идущей вместе с дистрибутивом скрипта.
 |
 |
|
1
|
Dmitry |
535 |
1.11.2011, 17:24 Посл. сообщение: IICbIX^xD |
Есть есть основной сайт под управлением Drupal. Так же есть автономные (3 странички: основная, прайс и форма для печати) если можно конечно назвать это сайтом(написанные на PHP, JS, Html...). Это дополнение к основному.
Вот в чем вопрос: как это подключить к основному сайту(от основного ни чего не берет, база своя, все свое) или сделать перенаправление на основную страничку.
Пока писал пост сам ответил на 1 из своих вопросов. Перенаправление сделал.
Теперь стоит такая задача перенести дополнение с другого хостинга на другой с основным сайтом? Так что бы оно завелось...
 |
|
|
11
|
BaHeK |
2255 |
31.10.2011, 22:40 Посл. сообщение: denesik |
Вот програмка от меня, угадывает любое число от 1 до 1000000000 за 30 вопросов, идея моя, написана на C#, если комуто очень нужно, выложу исходники.
Для работы праграммы понадобится
NET Framework 4(ссылка на офф сайт)
Скачать программуЕсли понравилась программка могу еще выложить.

Допустим ваше число 6, если программа спрашивает "ваше число больше 6?" отвечайте "нет", так как 6 не больше 6, конечный результат будет "Вы загадали 6" и появится кнопка "заново"
Эта же программа на паскале
Код
program ot1do1000000000;
uses wincrt;
var a,b,c,a1:real;
nomer:integer;
begin
b:=536870912;
c:=536870912;
nomer:=1;
writeln('Эта программа угадывает число от 1 до 1000000000 за 30 вопросов или менее');
writeln('Загадайте любое число от 1 до 1000000000');
write('Нажмите "1" для продолжения: '); readln(a);
if a=1
then begin
repeat
writeln;
writeln('Вопрос № ',nomer);
writeln('Ваше число больше ',b:1:0,'?');
write('1 - да; 2 - нет: '); readln(a1);
if a1=1
then begin
if c/2<1
then begin
b:=b+1;
end
else begin
b:=b+c/2;
end;
c:=c/2;
nomer:=nomer+1;
while (b>=1000000000) and (c>1) do
begin
b:=b-c/2;
c:=c/2;
end;
end
else begin
if a1=2
then begin
if c/2>=1
then begin
b:=b-c/2;
end;
c:=c/2;
nomer:=nomer+1;
end
else begin
writeln('Ошибка! Попробуйте еще раз');
end;
end;
until c=0.5;
writeln;
writeln('----------------------');
writeln('Вы загалали: ',b:1:0);
writeln('----------------------');
end
else begin
clrscr;
writeln('Пока =)');
end;
end.
 |
|
|
8
|
KPoBoCoCb |
942 |
25.10.2011, 20:59 Посл. сообщение: KPoBoCoCb |
Итак, дана матрица из произвольного кол-ва строк и столбцов. Надо строку с максимальной суммой элементов поставить на 1 место, а последующие строки упорядочить по возрастанию.(Строка с мин суммой должна быть внизу и т.д.) За помощь спасибки и репа гарантирована)
Код
Const n=4; m=4;
Type
matr=array[1..n,1..m] of integer;
Var i1,k,i,j,c,S,Smax,imax,r:integer; A:matr;
Begin
For i:=1 to n do begin
For j:=1 to m do
read(A[i,j]);
end;
begin
writeln
end;
For i1:=1 to n-1 do
For i:=i1 to n do
S:=0;
For j:=1 to m do
S:=S+A[i,j];
If i=i1 then
begin
Smax:=s; imax:=i
end
Else if smax<S then
begin
Smax:=S; imax:=i
end;
For j:=1 to m do
r:=A[imax,j];
For k:=imax-1 downto 1 do
begin
A[k+1,j]:=A[k,j];
A[1,j]:=r;
Writeln(A[i,j])
end;
For i:=1 to n do
begin
For j:=1 to m do
write(A[i,j],' ');
writeln
end
End.
 |
 |
|
0
|
Гость_Инспектор _* |
514 |
17.10.2011, 15:42 Посл. сообщение: Инспектор |
 |
 |
|
1
|
Гость_Инспектор _* |
487 |
17.10.2011, 15:19 Посл. сообщение: Инспектор |
 |
 |
|
1
|
Гость_Инспектор _* |
502 |
17.10.2011, 15:17 Посл. сообщение: Инспектор |
 |
 |
|
3
|
Гость_Инспектор _* |
581 |
17.10.2011, 15:16 Посл. сообщение: Инспектор |
 |
 |
|
1
|
Гость_Инспектор _* |
476 |
17.10.2011, 15:09 Посл. сообщение: Инспектор |
 |
 |
|
9
|
Гость_Инспектор _* |
862 |
17.10.2011, 15:05 Посл. сообщение: Инспектор |
нет смысла все копировать и выкладывать,решил просто дать две ссылки,кому действительно интересно тот скачает,проверит,попробует,если что тут помогут.
 |
 |
|
1
|
Гость_Инспектор _* |
494 |
17.10.2011, 14:58 Посл. сообщение: Инспектор |
 |
 |
|
0
|
Гость_Инспектор _* |
548 |
16.10.2011, 0:00 Посл. сообщение: Инспектор |
- PHP
- SQL
- Delphi
- С++
- MYSQL
- FAQ
- POSTGRESQL
- OBJECT PASCAL
- JAVA
На всех сайтах вы сможете найти подробную описание уроков,полезных,информационных статей,видео курсов и многой всячины.
Внимание !!! ссылки могут дополнять: Инспектор,модераторы,теч.суппорты и выше.
|
|