iPad взломали в течение суток после выхода




Хакерам удалось получить доступ к скрытым функциям нового планшетника в рекордные сроки.

В течение первого дня продаж нового планшетного компьютера Apple iPad один из участников хакерской команды iPhone Dev-Team по кличке MuscleNerd сумел осуществить так называемый джейлбрейк (разблокировку) устройства.

Благодаря незакрытой уязвимости в браузере Safari, взломщик смог получить доступ к файловой системе и запускать незарегистрированные приложения. Несмотря на то что iPad работает на базе новой версии операционной системы iPhone OS 3.2, хакеру удалось взломать устройство при помощи программной «отмычки», предназначенной для предыдущей версии с номером 3.1.3, что говорит о невнимательности разработчиков (или их нежелании латать дыры).

Благодаря «джейлбрейку» пользователи смогут устанавливать на аппарат собственные приложения. Стоит отметить, что большинство используемых в России iPhone также являются взломанными
Комментариев: 4

Теперь хакеры не смогут взломать iPhone

     

Специалисты компании Apple считают, что последние модели смартфонов, снабженные новой функцией, призванной предотвращать попытки взлома через уязвимое приложение для чтения книг.

Согласно сообщению, iPhone и iPad, работающие на базе последней версии операционной системы iOS будет невозможно взломать посредством инструментария «greenpois0n», поскольку устройства поддерживают так называемую функцию «jailbreak check». Она автоматически определяет, была ли попытка взлома и когда. Однако стоит заметить, что при попытке загрузить любой контент, даже честно приобретенной книги, система выдаст сообщение об ошибке, с рекомендацией переустановить iBook.

Специалисты команды iPhone Dev Team выяснили, что приложение пытается запустить неправильно подписанный бинарный код, при выполнении которого, выдается сообщение об ошибке, так как система полагает, что устройство было взломано и, следовательно, отказывается открывать книгу.

Итак, по всей видимости, Apple пошла по стопам компании Sony. Обе пытаются контролировать предпочитаемые пользователями приложения, дабы улучшить продажи легитимных приложений и попытаться предотвратить пиратство. Однако в отличие от Sony, которая судится с группой хакеров, насчитывающей более 100 человек, Apple не имеет возможности подать иск в суд. Поскольку в прошлом году данный тип нарушения был вынесен за рамки Закона о защите авторских прав в цифровую эпоху  (Digital Millennium Copyright Act).

Комментариев: 0

написала сриншоп на С++

      

Код:
<ol>#include "stdafx.h"<br />#include <windows.h><br />#include <stdio.h><br />#include <iostream><br /><br />using namespace std;<br /><br />PBITMAPINFO CreateBitmapInfoStruct(HBITMAP hBmp){<br />    BITMAP bmp;<br />    PBITMAPINFO pbmi;<br />    WORD    cClrBits;<br /><br />    // Retrieve the bitmap color format, width, and height.<br />    GetObject(hBmp, sizeof(BITMAP), (LPSTR)&bmp);<br /><br />    // Convert the color format to a count of bits.<br />    cClrBits = (WORD)(bmp.bmPlanes * bmp.bmBitsPixel);<br />    if (cClrBits == 1)<br />        cClrBits = 1;<br />    else if (cClrBits <= 4)<br />        cClrBits = 4;<br />    else if (cClrBits <= 8)<br />        cClrBits = 8;<br />    else if (cClrBits <= 16)<br />        cClrBits = 16;<br />    else if (cClrBits <= 24)<br />        cClrBits = 24;<br />    else cClrBits = 32;<br /><br />    // Allocate memory for the BITMAPINFO structure. (This structure<br />    // contains a BITMAPINFOHEADER structure and an array of RGBQUAD<br />    // data structures.)<br /><br />     if (cClrBits != 24) pbmi = (PBITMAPINFO) LocalAlloc(LPTR, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * (1<< cClrBits));<br /><br />     // There is no RGBQUAD array for the 24-bit-per-pixel format.<br /><br />     else pbmi = (PBITMAPINFO) LocalAlloc(LPTR, sizeof(BITMAPINFOHEADER));<br /><br />    // Initialize the fields in the BITMAPINFO structure.<br /><br /><img src="http://s.mypage.ru/images/smiles/animated/bh.gif" alt="" /><br />    pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);<br />    pbmi->bmiHeader.biWidth = bmp.bmWidth;<br />    pbmi->bmiHeader.biHeight = bmp.bmHeight;<br />    pbmi->bmiHeader.biPlanes = bmp.bmPlanes;<br />    pbmi->bmiHeader.biBitCount = bmp.bmBitsPixel;<br />    if (cClrBits < 24) pbmi->bmiHeader.biClrUsed = (1<<cClrBits);<br /><br />    // If the bitmap is not compressed, set the BI_RGB flag.<br />    pbmi->bmiHeader.biCompression = BI_RGB;<br /><br />    // Compute the number of bytes in the array of color<br />    // indices and store the result in biSizeImage.<br />    // For Windows NT, the width must be DWORD aligned unless<br />    // the bitmap is RLE compressed. This example shows this.<br />    // For Windows 95/98/Me, the width must be WORD aligned unless the<br />    // bitmap is RLE compressed.<br />    pbmi->bmiHeader.biSizeImage = ((pbmi->bmiHeader.biWidth * cClrBits +31) & ~31) /8 * pbmi->bmiHeader.biHeight;<br />    // Set biClrImportant to 0, indicating that all of the<br />    // device colors are important.<br />     pbmi->bmiHeader.biClrImportant = 0;<br />     return pbmi;<br />}<br /><br />void CreateBMPFile(LPTSTR pszFile, PBITMAPINFO pbi, HBITMAP hBMP, HDC hDC){<br />     HANDLE hf;                 // file handle<br />    BITMAPFILEHEADER hdr;       // bitmap file-header<br />    PBITMAPINFOHEADER pbih;     // bitmap info-header<br />    LPBYTE lpBits;              // memory pointer<br />    DWORD dwTotal;              // total count of bytes<br />    DWORD cb;                   // incremental count of bytes<br />    BYTE *hp;                   // byte pointer<br />    DWORD dwTmp;<br /><br />    pbih = (PBITMAPINFOHEADER) pbi;<br />    lpBits = (LPBYTE) GlobalAlloc(GMEM_FIXED, pbih->biSizeImage);<br /><br />    // Retrieve the color table (RGBQUAD array) and the bits<br />    // (array of palette indices) from the DIB.<br />    GetDIBits(hDC, hBMP, 0, (WORD) pbih->biHeight, lpBits, pbi, DIB_RGB_COLORS);<br /><br />// Create the .BMP file.<br />    hf = CreateFile(pszFile, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);<br />    hdr.bfType = 0x4d42;        // 0x42 = "B" 0x4d = "M"<br />    // Compute the size of the entire file.<br />    hdr.bfSize = (DWORD) (sizeof(BITMAPFILEHEADER) + pbih->biSize + pbih->biClrUsed * sizeof(RGBQUAD) + pbih->biSizeImage);<br />    hdr.bfReserved1 = 0;<br />    hdr.bfReserved2 = 0;<br /><br />    // Compute the offset to the array of color indices.<br />    hdr.bfOffBits = (DWORD) sizeof(BITMAPFILEHEADER) + pbih->biSize + pbih->biClrUsed * sizeof (RGBQUAD);<br /><br />    // Copy the BITMAPFILEHEADER into the .BMP file.<br />    WriteFile(hf, (LPVOID) &hdr, sizeof(BITMAPFILEHEADER), (LPDWORD) &dwTmp,  NULL);<br /><br />    // Copy the BITMAPINFOHEADER and RGBQUAD array into the file.<br />    WriteFile(hf, (LPVOID) pbih, sizeof(BITMAPINFOHEADER) + pbih->biClrUsed * sizeof (RGBQUAD), (LPDWORD) &dwTmp, NULL);<br /><br />    // Copy the array of color indices into the .BMP file.<br />    dwTotal = cb = pbih->biSizeImage;<br />    hp = lpBits;<br />    WriteFile(hf, (LPSTR) hp, (int) cb, (LPDWORD) &dwTmp,NULL);<br /><br />    // Close the .BMP file.<br />    CloseHandle(hf);<br /><br />    // Free memory.<br />    GlobalFree((HGLOBAL)lpBits);<br />}<br /><br /><br />void main(int argc, LPTSTR argv[]){<br />locale::global(locale("rus"<img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />);<br />int sx = GetSystemMetrics(SM_CXSCREEN), sy = GetSystemMetrics(SM_CYSCREEN);<br />HDC hDC = GetDC(GetDesktopWindow());<br />HDC MyHDC = CreateCompatibleDC(hDC);<br />HBITMAP hBMP = CreateCompatibleBitmap(hDC, sx, sy);<br />SelectObject(MyHDC, hBMP);<br />LOGBRUSH MyBrush;<br />MyBrush.lbStyle = BS_SOLID;<br />MyBrush.lbColor = 0xFF0000;<br />HBRUSH hBrush = CreateBrushIndirect(&MyBrush);<br />RECT MyRect = {0, 0, sx, sy};<br />FillRect(MyHDC, &MyRect, hBrush);<br /><br />BitBlt(MyHDC, 0, 0, sx, sy, hDC, 0, 0, SRCCOPY);<br />if(argc==2) CreateBMPFile(argv[1], CreateBitmapInfoStruct(hBMP), hBMP, MyHDC);<br /><br />for(int i=0; i<argc; i++) printf("Argument #%d: %s\n", i, argv[i]);<br />printf("<img src="http://s.mypage.ru/images/smiles/animated/bt.gif" alt="" />esktop DC = %d\nHBITMAP hBMP = %d", (int)hDC, (int)hBMP);<br />}<br /><br /></ol><pre><img src="http://s.mypage.ru/images/smiles/animated/ag.gif" alt="" /> <img src="http://s.mypage.ru/images/smiles/animated/ag.gif" alt="" /> <img src="http://s.mypage.ru/images/smiles/animated/ag.gif" alt="" /> <img src="http://s.mypage.ru/images/smiles/animated/ag.gif" alt="" /> :- <img src="http://s.mypage.ru/images/smiles/animated/ag.gif" alt="" /> <img src="http://s.mypage.ru/images/smiles/animated/ag.gif" alt="" /> <br />
Комментариев: 2

по ебать,ребят Фейс уже убран !:)

Комментариев: 2

Pascal

Pascal — это императивный язык программирования, разработанный Никлаусом Виртом в 1970 в качестве языка обучения структурному программированию. Название языку дано в честь выдающегося французского математика, физика, литератора и философа Блеза Паскаля. Первоначально язык компилировался в байт-код, подобно языку Java.

Особенностями языка являются строгая типизация и наличие средств структурного (процедурного) программирования. Паскаль был одним из первых таких языков. По мнению Н. Вирта, язык должен способствовать дисциплинированию программирования, поэтому, наряду со строгой типизацией, в Паскале сведены к минимуму возможные синтаксические неоднозначности, а сам синтаксис интуитивно понятен даже при первом знакомстве с языком.

Тем не менее, первоначально язык обладал множеством недостатков: невозможность передачи функциям массивов переменной длины, отсутствие нормальных средств работы с динамической памятью, ограниченная библиотека ввода-вывода, отсутствие средств для подключения функций написанных на других языках, отсутствие средств раздельной компиляции и т. п.

Диалект Object Pascal поддерживает парадигму объектно-ориентированного программирования.

Элементы синтаксиса:

Комментарий до конца строкинет
Комментарии, которые могут быть вложенными(*...*) или {...} или (*...} или {...*)
Регистрозависимостьнет
Регулярное выражение идентификатора переменной[A-Za-z_][A-Za-z0-9_]*
Регулярное выражение идентификатора функции[A-Za-z_][A-Za-z0-9_]*
Присваивание значения переменнойvarname := value
Объявление переменнойvarname: type
Объявление переменной с присваиванием значенияvarname: type = value
Группировка выражений(… )
Блокbegin… end
Тождественное равенство=
Тождественное неравенство<>
Сравнение< > <= >=
Определение функцииfunction f(p1: type1; p2: type2; ...): returntype;
Вызов функцииf(a, b, ...)
Вызов функции без параметровf
Последовательность;
Если — тоif condition then trueBlock
Если — то — иначеif condition then trueBlock else falseBlock
Бесконечный циклwhile true do loopBody
Цикл с предусловиемwhile condition do loopBody
Цикл с постусловиемrepeat loopBody until condition
Цикл for — next для диапазона целых чисел с инкрементом на 1for i := first to last do loopBody
Цикл for — next для диапазона целых чисел с декрементом на 1for i := last downto first do loopBody

Ссылки:

IDE/Редакторы:

Примеры:

Факториал:

Пример для версий Free Pascal 1.0.6, Free Pascal 2.0.4, Free Pascal 2.2.0, Free Pascal 2.2.4, Turbo Pascal 4.0, Turbo Pascal 5.0, Turbo Pascal 5.5, Turbo Pascal 6.0, Turbo Pascal 7.0

Используется рекурсивное определение факториала.

Этот пример работает как в Turbo Pascal, так и в Free Pascal, но с несколько разным результатом. В обеих реализациях возникает арифметическое переполнение при вычислении факториалов 13-16, но Free Pascal сообщает об ошибке:

13! = Runtime error 215 at $004013C7
$004013C7
$00401449
$004063E0

в то время как Turbo Pascal не обнаруживает ошибку и просто выводит неправильные значения:

13! = 1932053504
14! = 1278945280
15! = 2004310016
16! = 2004189184

Следует отметить, что в версиях Turbo Pascal 3.0 и младше этот пример не работает из-за отсутствия типа данных longint.

<code><span class="k">program</span> <span class="n">factorial</span><span class="o">;</span><br /><br /><span class="k">function</span> <span class="nf">fact</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">n</span><span class="o">:</span> <span class="kt">integer</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">:</span> <span class="kt">longint</span><span class="o">;</span><br /><span class="k">begin</span><br />    <span class="k">if</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">n</span> <span class="o">=</span> <span class="mi">0</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">then</span><br />        <span class="n">fact</span> <span class="o">:=</span> <span class="mi">1</span><br />    <span class="k">else</span><br />        <span class="n">fact</span> <span class="o">:=</span> <span class="n">n</span> <span class="o">*</span> <span class="n">fact</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">n</span> <span class="o">-</span> <span class="mi">1</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br /><span class="k">end</span><span class="o">;</span><br /><br /><span class="k">var</span><br />    <span class="n">n</span><span class="o">:</span> <span class="kt">integer</span><span class="o">;</span><br /><br /><span class="k">begin</span><br />    <span class="k">for</span> <span class="n">n</span> <span class="o">:=</span> <span class="mi">0</span> <span class="k">to</span> <span class="mi">16</span> <span class="k">do</span><br />        <span class="nb">writeln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">n</span><span class="o">,</span> <span class="s">'! = '</span><span class="o">,</span> <span class="n">fact</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">n</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />)</span><span class="o">;</span><br /><span class="k">end</span><span class="o">.</span><br /></code>

Числа Фибоначчи:

Пример для версий Free Pascal 2.2.4, Turbo Pascal 1.0, Turbo Pascal 2.0, Turbo Pascal 3.0, Turbo Pascal 4.0, Turbo Pascal 5.0, Turbo Pascal 5.5, Turbo Pascal 6.0, Turbo Pascal 7.0

Этот пример использует рекурсивное определение чисел Фибоначчи.

<code><span class="k">program</span> <span class="n">fibonacci</span><span class="o">;</span><br /><br /><span class="k">function</span> <span class="nf">fib</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">n</span><span class="o">:</span><span class="kt">integer</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">:</span> <span class="kt">integer</span><span class="o">;</span><br /><span class="k">begin</span><br />    <span class="k">if</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">n</span> <span class="o"><=</span> <span class="mi">2</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">then</span><br />        <span class="n">fib</span> <span class="o">:=</span> <span class="mi">1</span><br />    <span class="k">else</span><br />        <span class="n">fib</span> <span class="o">:=</span> <span class="n">fib</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="o">+</span> <span class="n">fib</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">n</span><span class="o">-</span><span class="mi">2</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br /><span class="k">end</span><span class="o">;</span><br /><br /><span class="k">var</span><br />    <span class="n">i</span><span class="o">:</span><span class="kt">integer</span><span class="o">;</span><br /><br /><span class="k">begin</span><br />    <span class="k">for</span> <span class="n">i</span> <span class="o">:=</span> <span class="mi">1</span> <span class="k">to</span> <span class="mi">16</span> <span class="k">do</span><br />        <span class="nb">write</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">fib</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">i</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">,</span> <span class="s">', '</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />    <span class="nb">writeln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="s">'...'</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br /><span class="k">end</span><span class="o">.</span><br /></code>

Hello, World!:

Пример для версий Free Pascal 2.2.4, Turbo Pascal 1.0, Turbo Pascal 2.0, Turbo Pascal 3.0, Turbo Pascal 4.0, Turbo Pascal 5.0, Turbo Pascal 5.5, Turbo Pascal 6.0, Turbo Pascal 7.0
<code><span class="k">program</span> <span class="n">helloworld</span><span class="o">;</span><br /><br /><span class="k">begin</span><br />    <span class="nb">writeln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="s">'Hello, World!'</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br /><span class="k">end</span><span class="o">.</span><br /></code>

Факториал:

Пример для версий Free Pascal 2.0.4, Turbo Pascal 1.0, Turbo Pascal 2.0, Turbo Pascal 3.0, Turbo Pascal 4.0, Turbo Pascal 5.0, Turbo Pascal 5.5, Turbo Pascal 6.0, Turbo Pascal 7.0

Этот пример работает точно так же, как основной рекурсивный пример для Pascal, но использует тип real для хранения значений факториала. Команда writeln(f:-1:0) выводит дробное число f с 0 цифр после десятичной запятой и выравнивает его по левому краю.

<code><span class="k">program</span> <span class="n">factorial</span><span class="o">;</span><br /><br /><span class="k">function</span> <span class="nf">fact</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">n</span><span class="o">:</span> <span class="kt">integer</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">:</span> <span class="kt">real</span><span class="o">;</span><br /><span class="k">begin</span><br />    <span class="k">if</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">n</span> <span class="o">=</span> <span class="mi">0</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">then</span><br />        <span class="n">fact</span> <span class="o">:=</span> <span class="mi">1</span><br />    <span class="k">else</span><br />        <span class="n">fact</span> <span class="o">:=</span> <span class="n">n</span> <span class="o">*</span> <span class="n">fact</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">n</span> <span class="o">-</span> <span class="mi">1</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br /><span class="k">end</span><span class="o">;</span><br /><br /><span class="k">var</span><br />    <span class="n">n</span><span class="o">:</span> <span class="kt">integer</span><span class="o">;</span><br /><br /><span class="k">begin</span><br />    <span class="k">for</span> <span class="n">n</span> <span class="o">:=</span> <span class="mi">0</span> <span class="k">to</span> <span class="mi">16</span> <span class="k">do</span><br />        <span class="nb">writeln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">n</span><span class="o">,</span> <span class="s">'! = '</span><span class="o">,</span> <span class="n">fact</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">n</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">:-</span><span class="mi">1</span><span class="o">:</span><span class="mi">0</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br /><span class="k">end</span><span class="o">.</span><br /></code>

Квадратное уравнение:

Пример для версий Free Pascal 2.2.0, Turbo Pascal 1.0, Turbo Pascal 2.0, Turbo Pascal 3.0, Turbo Pascal 4.0, Turbo Pascal 5.0, Turbo Pascal 6.0, gpc 20070904

В Pascal есть встроенный комплексный тип данных complex, но команда writeln не работает с ним напрямую (только через функции Re и Im), поэтому существенного удобства от его использования нет. Вычисления проводятся в типе real. Библиотечная функция halt позволяет выйти из текущего блока (в более поздних версиях заменена на exit).

<code><span class="k">program</span> <span class="n">Quadratic</span><span class="o">;</span><br /><br /><span class="k">var</span><br />   <span class="n">A</span><span class="o">,</span><span class="n">B</span><span class="o">,</span><span class="n">C</span><span class="o">,</span><span class="n"><img src="http://s.mypage.ru/images/smiles/animated/bt.gif" alt="" /></span><span class="o">:</span> <span class="kt">integer</span><span class="o">;</span><br /><br /><span class="k">begin</span><br />   <span class="nb">write</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="s">'A = '</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />   <span class="nb">readln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">A</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />   <span class="k">if</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">A</span><span class="o">=</span><span class="mi">0</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">then</span><br />   <span class="k">begin</span><br />      <span class="nb">writeln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="s">'Not a quadratic equation.'</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />      <span class="nb">halt</span><span class="o">;</span><br />   <span class="k">end</span><span class="o">;</span><br />   <span class="nb">write</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="s">'B = '</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />   <span class="nb">readln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">B</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />   <span class="nb">write</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="s">'C = '</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />   <span class="nb">readln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">C</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />   <span class="n"><img src="http://s.mypage.ru/images/smiles/animated/bt.gif" alt="" /></span> <span class="o">:=</span> <span class="n">B</span><span class="o">*</span><span class="n">B</span><span class="o">-</span><span class="mi">4</span><span class="o">*</span><span class="n">A</span><span class="o">*</span><span class="n">C</span><span class="o">;</span><br />   <span class="k">if</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n"><img src="http://s.mypage.ru/images/smiles/animated/bt.gif" alt="" /></span><span class="o">=</span><span class="mi">0</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">then</span><br />   <span class="k">begin</span><br />      <span class="nb">writeln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="s">'x = '</span><span class="o">,-</span><span class="n">B</span><span class="o">/</span><span class="mf">2.0</span><span class="o">/</span><span class="n">A</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />      <span class="nb">halt</span><span class="o">;</span><br />   <span class="k">end</span><span class="o">;</span><br />   <span class="k">if</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n"><img src="http://s.mypage.ru/images/smiles/animated/bt.gif" alt="" /></span><span class="o">></span><span class="mi">0</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">then</span><br />   <span class="k">begin</span><br />      <span class="nb">writeln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="s">'x1 = '</span><span class="o">,</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="o">-</span><span class="n">B</span><span class="o">+</span><span class="nb">Sqrt</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n"><img src="http://s.mypage.ru/images/smiles/animated/bt.gif" alt="" /></span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />)</span><span class="o">/</span><span class="mf">2.0</span><span class="o">/</span><span class="n">A</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />      <span class="nb">writeln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="s">'x2 = '</span><span class="o">,</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="o">-</span><span class="n">B</span><span class="o">-</span><span class="nb">Sqrt</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n"><img src="http://s.mypage.ru/images/smiles/animated/bt.gif" alt="" /></span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />)</span><span class="o">/</span><span class="mf">2.0</span><span class="o">/</span><span class="n">A</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />   <span class="k">end</span><br />   <span class="k">else</span><br />   <span class="k">begin</span><br />      <span class="nb">writeln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="s">'x1 = ('</span><span class="o">,-</span><span class="n">B</span><span class="o">/</span><span class="mf">2.0</span><span class="o">/</span><span class="n">A</span><span class="o">,</span><span class="s">','</span><span class="o">,</span><span class="nb">Sqrt</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="o">-</span><span class="n"><img src="http://s.mypage.ru/images/smiles/animated/bt.gif" alt="" /></span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">/</span><span class="mf">2.0</span><span class="o">/</span><span class="n">A</span><span class="o">,</span><span class="s">')'</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />      <span class="nb">writeln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="s">'x2 = ('</span><span class="o">,-</span><span class="n">B</span><span class="o">/</span><span class="mf">2.0</span><span class="o">/</span><span class="n">A</span><span class="o">,</span><span class="s">','</span><span class="o">,-</span><span class="nb">Sqrt</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="o">-</span><span class="n"><img src="http://s.mypage.ru/images/smiles/animated/bt.gif" alt="" /></span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">/</span><span class="mf">2.0</span><span class="o">/</span><span class="n">A</span><span class="o">,</span><span class="s">')'</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />   <span class="k">end</span><span class="o">;</span><br /><span class="k">end</span><span class="o">.</span><br /></code>

CamelCase:

Пример для версий Free Pascal 2.2.4, Turbo Pascal 4.0, Turbo Pascal 5.0, Turbo Pascal 5.5, Turbo Pascal 6.0, gpc 20070904

Программа обрабатывает строку посимвольно. Для определения того, является ли символ буквой, и если является, то в каком он регистре, используются ASCII-коды символов. Функция ord возвращает ASCII-код данного символа, а chr — символ по его коду. Размерность строк не задана и по умолчанию принимается равной 255.

Отметим, что в Turbo Pascal программа работает только начиная с версии 4.0; в более ранних версиях не было типа данных char.

<code><span class="k">program</span> <span class="n">Camelcase</span><span class="o">;</span><br /><br /><span class="k">var</span><br />    <span class="n">text</span><span class="o">,</span> <span class="n">cc</span><span class="o">:</span> <span class="k">string</span><span class="o">;</span><br />    <span class="n">c</span><span class="o">:</span> <span class="kt">char</span><span class="o">;</span><br />    <span class="n">i</span><span class="o">:</span> <span class="kt">integer</span><span class="o">;</span><br />    <span class="n">lastSpace</span><span class="o">:</span> <span class="kt">boolean</span><span class="o">;</span><br /><br /><span class="k">begin</span><br />    <span class="nb">readln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">text</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />    <span class="n">lastSpace</span> <span class="o">:=</span> <span class="k">true</span><span class="o">;</span><br />    <span class="n">cc</span> <span class="o">:=</span> <span class="s">''</span><span class="o">;</span><br />    <span class="k">for</span> <span class="n">i</span> <span class="o">:=</span> <span class="mi">1</span> <span class="k">to</span> <span class="nb">Length</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">text</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">do</span><br />    <span class="k">begin</span><br />        <span class="n">c</span> <span class="o">:=</span> <span class="n">text</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">;</span><br />        <span class="k">if</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" />(</span><span class="n">c</span> <span class="o">>=</span> <span class="sc">#65</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">and</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">c</span> <span class="o"><=</span> <span class="sc">#90</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />)</span> <span class="k">or</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" />(</span><span class="n">c</span> <span class="o">>=</span> <span class="sc">#97</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">and</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">c</span> <span class="o"><=</span> <span class="sc">#122</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />)</span> <span class="k">then</span><br />        <span class="k">begin</span><br />            <span class="k">if</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">lastSpace</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">then</span><br />            <span class="k">begin</span><br />                <span class="k">if</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" />(</span><span class="n">c</span> <span class="o">>=</span> <span class="sc">#97</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">and</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">c</span> <span class="o"><=</span> <span class="sc">#122</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />)</span> <span class="k">then</span><br />                    <span class="n">c</span> <span class="o">:=</span> <span class="nb">chr</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="nb">ord</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">c</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="o">-</span> <span class="mi">32</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />            <span class="k">end</span><br />            <span class="k">else</span><br />                <span class="k">if</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" />(</span><span class="n">c</span> <span class="o">>=</span> <span class="sc">#65</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">and</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">c</span> <span class="o"><=</span> <span class="sc">#90</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />)</span> <span class="k">then</span><br />                    <span class="n">c</span> <span class="o">:=</span> <span class="nb">chr</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="nb">ord</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">c</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="o">+</span> <span class="mi">32</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />            <span class="n">cc</span> <span class="o">:=</span> <span class="n">cc</span> <span class="o">+</span> <span class="n">c</span><span class="o">;</span><br />            <span class="n">lastSpace</span> <span class="o">:=</span> <span class="k">false</span><span class="o">;</span><br />        <span class="k">end</span><br />        <span class="k">else</span><br />            <span class="n">lastSpace</span> <span class="o">:=</span> <span class="k">true</span><span class="o">;</span><br />    <span class="k">end</span><span class="o">;</span><br />    <span class="nb">writeln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">cc</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br /><span class="k">end</span><span class="o">.</span> <br /></code>

CamelCase:

Пример для версий Free Pascal 2.2.4, Turbo Pascal 4.0, Turbo Pascal 5.0, Turbo Pascal 5.5, Turbo Pascal 6.0, gpc 20070904

Пример использует такую же логику, как и предыдущий, но для проверки того, является ли символ буквой, используются множества символов lower и upper. Это делает код более читабельным.

Отметим, что в Turbo Pascal программа работает, начиная с версии Turbo Pascal 4.0, в которой впервые появляется тип данных char.

<code><span class="k">program</span> <span class="n">Camelcase</span><span class="o">;</span><br /><br /><span class="k">var</span><br />    <span class="n">text</span><span class="o">,</span> <span class="n">cc</span><span class="o">:</span> <span class="k">string</span><span class="p">[</span><span class="mi">100</span><span class="p">]</span><span class="o">;</span><br />    <span class="n">c</span><span class="o">:</span> <span class="kt">char</span><span class="o">;</span><br />    <span class="n">i</span><span class="o">:</span> <span class="kt">integer</span><span class="o">;</span><br />    <span class="n">lastSpace</span><span class="o">:</span> <span class="kt">boolean</span><span class="o">;</span><br />    <span class="n">upper</span><span class="o">,</span> <span class="n">lower</span><span class="o">:</span> <span class="k">set</span> <span class="k">of</span> <span class="kt">char</span><span class="o">;</span><br /><br /><span class="k">begin</span><br />    <span class="n">upper</span> <span class="o">:=</span> <span class="p">[</span><span class="s">'A'</span><span class="o">..</span><span class="s">'Z'</span><span class="p">]</span><span class="o">;</span><br />    <span class="n">lower</span> <span class="o">:=</span> <span class="p">[</span><span class="s">'a'</span><span class="o">..</span><span class="s">'z'</span><span class="p">]</span><span class="o">;</span><br />    <span class="nb">readln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">text</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />    <span class="n">lastSpace</span> <span class="o">:=</span> <span class="k">true</span><span class="o">;</span><br />    <span class="n">cc</span> <span class="o">:=</span> <span class="s">''</span><span class="o">;</span><br />    <span class="k">for</span> <span class="n">i</span> <span class="o">:=</span> <span class="mi">1</span> <span class="k">to</span> <span class="nb">Length</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">text</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">do</span><br />    <span class="k">begin</span><br />        <span class="n">c</span> <span class="o">:=</span> <span class="n">text</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">;</span><br />        <span class="k">if</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">c</span> <span class="k">in</span> <span class="n">lower</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">or</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">c</span> <span class="k">in</span> <span class="n">upper</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">then</span><br />        <span class="k">begin</span><br />            <span class="k">if</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">lastSpace</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">then</span> <span class="cm">{ convert to uppercase }</span><br />            <span class="k">begin</span><br />                <span class="k">if</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">c</span> <span class="k">in</span> <span class="n">lower</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">then</span><br />                    <span class="n">c</span> <span class="o">:=</span> <span class="nb">chr</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="nb">ord</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">c</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="o">-</span> <span class="mi">32</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />            <span class="k">end</span><br />            <span class="k">else</span> <span class="cm">{ convert to lowercase }</span><br />                <span class="k">if</span> <span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">c</span> <span class="k">in</span> <span class="n">upper</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="k">then</span><br />                    <span class="n">c</span> <span class="o">:=</span> <span class="nb">chr</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="nb">ord</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">c</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span> <span class="o">+</span> <span class="mi">32</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span><br />            <span class="n">cc</span> <span class="o">:=</span> <span class="n">cc</span> <span class="o">+</span> <span class="n">c</span><span class="o">;</span><br />            <span class="n">lastSpace</span> <span class="o">:=</span> <span class="k">false</span><span class="o">;</span><br />        <span class="k">end</span><br />        <span class="k">else</span><br />            <span class="n">lastSpace</span> <span class="o">:=</span> <span class="k">true</span><span class="o">;</span><br />    <span class="k">end</span><span class="o">;</span><br />    <span class="nb">writeln</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ac.gif" alt="" /></span><span class="n">cc</span><span class="p"><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /></span><span class="o">;</span></code>
Комментариев: 0

Как скрыть IP


Каждый компьютер в Сети имеет уникальный идентификатор, называемый IP-адресом. Он представляет собой 32-разрядное значение, обычно записываемое в виде четырех чисел, разделенных точками (например, 192.168.0.1). Этот адрес используется при доступе к любому серверу, и, как правило, фиксируется на этом сервере в логах. IP-адреса могут быть статическими и динамическими. Динамические адреса выдаются dialup-пользователям при подключении (причем каждый раз адрес бывает разным) из некоего постоянного диапазона, принадлежащего провайдеру. Статические адреса бывают у серверов, а также пользователей выделенных каналов. Зная IP-адрес, можно без особых проблем установить организацию (например, провайдера), которой он выдан, но при этом следует помнить, что в большинстве случаев провайдеры не разгалашают данных о своих клиентах, кроме «случаев, предусмотренных действующим законодательством».

В ряде случаев бывает нежелательно, чтобы ваш IP-адрес становился доступен кому-либо. В этом случае можно воспользоваться proxy-сервером. Proxy-серверы были изначально задуманы для ускорения доступа, и работают следующим образом: пользователь запрашивает данные с какого-то сервера в Сети, запрос приходит на proxy-сервер, который проверяет, есть ли на нем такая информация. Если она есть, то сервер начинает сразу передавать ее, если же нет, то возможно три случая: 1) proxy-сервер передаст запрос серверу с данными, оставив IP пользователя без изменений, и данные пойдут пользователю напрямую (так называемый прозрачный proxy); 2) proxy-cервер отправит запрос со своего IP-адреса, но при этом дополнительно сообщит, что данные предназначены для пользователя с таким-то IP-адресом (на стороне сервера это можно узнать, просмотрев переменную HTTP_X_FORWARDED_FOR) — неанонимные proxy; 3) proxy отправит запрос со своего адреса, не сообщая адрес пользователя при этом. Такие proxy-сервера называются полностью анонимными, и именно с их помощью можно скрывать свой IP-адерс (однако следует помнить, что, хотя конечному серверу ваш адрес не будет доступен, но он может остаться в логах proxy-сервера).

Proxy-серверы также различают по протоколам, которые они поддерживают: бывают HTTP/FTP-proxy (для протоколов HTTP и FTP соответственно), и SOCKS-proxy. SOCKS-proxy можно считать универсальными: через них можно подключить любую программу, в которой предусмотрена эта возможность (например, ICQ или IRC-клиент), а не только броузер.

Для повышения анонимности можно организовать цепочку из HTTP proxy-серверов (т.е. запрос будет проходить последовательно через каждый из них). Для этого нужно в строке броузера набрать: http://proxy1.address/http://p...arget.site,
где proxy1.adress, proxy2.adress — адреса прокси серверов, а target.site — сайт, с которого нужно запросить данные. (Но не все proxy поддерживают такую возможность.) Из SOCKS-proxy также можно организовать цепочку, но для ее организации необходимы специальные программы (на данный момент лучшей из них является Socks Chain).

Внимание: если вам важна анонимность, всегда вводите в броузер IP proxy, а не его доменное имя. Это объясняется тем, что одному доменному имени могут соответствовать несколько серверов часть из которых является анонимными, а часть — нет, прчием выбор между ними происходит случайно, при определении IP по имени. В результате возможна ситуация, когда при проверке proxy вы подключитесь через анонимный сервер, а при работе через броузер — через обычный, что приведет к «засвечиванию» вашего IP-адреса.

Для проверки работоспособности списка proxy-серверов на работоспособность и время доступа (ping) существует множество программ, одной из лучших является Proxy-Checker. С помощью него можно также проверить proxy и на анонимность.

Кроме этого, существуют также так называемые CGI-proxy. Работают они следующим образом: пользователь заходит на адрес этого CGI-proxy, и вводит URL сайта, на который он желает зайти, в специальную форму. После того, как пользователь вводит адрес, CGI-proxy выполняет запрос к требуемому серверу, затем исправляет ссылки на полученной странице для того, чтобы если пользователь решит перейти по ссылке, следующая страница тоже запрашивалась бы через этот CGI-proxy. Кроме этого, большинство CGI-proxy умеют удалять cookies, рекламу и всплывающие окна из полученных страниц. Из CGI-proxy также можно построить цепочку. Для этого надо зайти на один из них, в поле адреса указать адрес другого CGI-Proxy, и так далее, а в поле адреса последнего proxy в цепочке указать URL того сайта, который вы хотите просмотреть.

Один из лучших списков HTTP Proxy-серверов в Рунете находится по адресу http://www.samair.ru/proxy/, SOCKS-proxy — по адресу http://www.samair.ru/proxy/socks.htm. Там же имеется возможность проверить proxy-серверв на анонимность. Для этого необходимо указать в настройках броузера proxy-сервер, и зайти на страницу проверки. Вам будет показано, какой IP-адрес виден Web-серверу, а также какие дополнительные поля proxy-сервер передает в HTTP-запросе.

Список CGI-Proxy:

http://nonymouse.com/anonwww.html
http://www.pureprivacy.com/
http://webwarper.net/
http://www.myshield.com/
http://www.subdimension.com/nettools/anonymizit/index.shtml
https://www.megaproxy.com/ — позволяет соединяться с HTTPS-серверами
http://www.amegaproxy.com/
http://www.anonymizer.com/
http://www.guardster.com/
http://www.goproxy.com/cgi-bin/nph-p12.cgi
http://www-new.the-cloak.com/anonymous-surfing-home.html
http://webftp.host.sk/ — FTP Web proxy
http://www.marzie.com/webtools/webftp/login.asp — FTP Web proxy
http://www.marzie.com/webtools/proxybuster/index.asp — позволяет скачивать файлы
Комментариев: 0

Разработка компонентов в MS Visual Studio 2005/2008



Издательство: BHV-СПб
Год: 2008
Страниц: 480
Формат: DJVU
ISBN: 978-5-9775-0295-5
Качество: Хорошее
Язык: Русский
Описание: Книга содержит всю необходимую информацию для создания полноценных компонентов Win Forms на языке C# в MS Visual Studio 2005/2008, начиная с разработки и отладки и заканчивая лицензированием и распространением. Рассмотрены дизайнеры, конвертеры типа, сервисы, редакторы типов и многое другое. Информация о каждом классе, описанном в книге, сопровождается примером его использования. Весь программмный код является авторской разработкой и проверен на практике. На компакт-диске приведены примеры из книги.
+архив с примерами к книге
http://rapidshare.com/files/14274952...nentov2008.rar
http://letitbit.net/download/5440519...v2008.rar.html
Комментариев: 0

Шифровка данных заменой

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

  Итак, приступим! Первое что приходит в голову при шифровании данных это простая замена символов согласно некоторой таблице соответствия, а саму таблицу соответствия можно генерировать случайным образом. Недостаток этого метода очевиден: при относительно длинном размере зашифрованных данных, можно найти соответствие между исходными символами и замененными.
  Итак, простая замена символов не подходит. Вспоминается старый метод шифрования данных, которым наверно пользовались наши прадедушки. Например, есть два человека, которые хотят вести конфиденциальную переписку. У них есть две одинаковые книги. Каждый символ в передаваемом сообщении кодируется следующим образом: номер страницы, номер строки и номер символа в строке.
Таким образом, одна и та же буква может быть заменена несколькими разными цифровыми последовательностями. При правильном использовании такого метода шифрования возможность расшифровки передаваемых данных без искомой книги почти невозможна.
  А теперь вспомним первый алгоритм и сделаем выводы: таблиц соответствия должно быть несколько (не несколько, а много!). А заменять один символ мы будем не одним символом, а двумя: номером таблицы соответствия и номером заменяемого символа в таблице соответствия.
  Теперь перенесём алгоритм в проблематику информатики. Символом сообщения у нас будет байт. Байт может принимать значение 0-255, и заменён он может быть любым значением от нуля до 255. Таблицу соответствия будем называть кодовой страницей. Кодовых страниц у нас будет 256. Набор из 256 кодовых страниц будем называть книгой кодов. В результате при шифровке данных один байт исходных данных будет заменяться двумя: номером кодовой страницы и байтом соответствия на этой кодовой странице. При шифровке кодовая страница будет выбираться случайным образом, таким образом, каждый раз при шифровке один и тех же данных мы будем получать разные данные.
  Кодовая страница будет представлять собой массив из 256 байт. Чтобы получить байт-замену необходимо найти заменяемый байт в этом массиве. Индекс заменяемого байта и будет байтом-заменой. Например, у нас есть байт со значением 125, в кодовой странице он находится на 239 месте, следовательно, байт со значением 125 будет заменён байтом со значением 239. Поиск символа в 256 байтовом массиве это не очень быстрая операция, но зато операция расшифровки будет иметь довольно-таки высокую скорость.
  Как видно при использовании данного алгоритма размер данных увеличивается в два раза. При обеспечении конфиденциальности данных этот фактор не является решающим.
  Теория изложена, осталось написать программу, которая производит шифровку данных согласно вышеизложенному алгоритму.
  Для начала напишем функции, которые случайным образом будут генерировать кодовые страницы и книгу кодов.
  Функция CreateCodePage генерирует случайным образом кодовую страницу. Функция принимает один параметр – указатель на буфер.

<code class=" cpp"><br /><span class="keyword">void</span> CreateCodePage(BYTE *Page)<br />{<br />    <span class="keyword">for</span> (<span class="keyword">int</span> i=<span class="number">1</span>;i<<span class="number">256</span>;i++)<br />    {<br />        <span class="keyword">int</span> pos = rand()%<span class="number">256</span>;<br />        <span class="keyword">if</span> (Page[pos])<br />        {<br />            <span class="keyword">while</span> ((Page[pos]) and (pos<<span class="number">255</span><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />) pos++;<br />            <span class="keyword">if</span> (Page[pos])<br />            {<br />                pos=<span class="number">0</span>;<br />                <span class="keyword">while</span> ((Page[pos]) and (pos<<span class="number">255</span><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />) pos++;<br />            }<br />            Page[pos] = i;<br />        } <span class="keyword">else</span><br />        Page[pos]=i;<br />    }<br />}</code>

Функция CreateCodeBookInBuffer создаёт 256 кодовых страниц, которые располагаются последовательно в буфере, указатель на который передаётся через единственный параметр.

<code class=" cpp"><br /><span class="keyword">void</span> CreateCodeBookInBuffer(BYTE *Buffer)<br />{<br />    <span class="keyword">for</span> (<span class="keyword">int</span> i=<span class="number">0</span>;i<<span class="number">256</span>;i++)<br />    {<br />        CreateCodePage(Buffer+(i<<<span class="number">8</span><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />);<br />    }<br />}</code>

В данной функции непосвящённого программиста может сбить с толку битовый сдвиг влево на 8 бит. На месте битового сдвига должна стоять операция умножения на 256. Битовый сдвиг влево на 1 бит равносильно умножения на 2, на 2 бита равносильно умножению на 4, а сдвиг на 8 бит равносилен умножения на 256. Причина использования сдвига очень проста: операция битового сдвига производится быстрее, чем операция умножения, это знает любой, кто имеет опыт программирования на ассемблере.
  Функция CreateCodeBook создаёт книгу кодов и сохраняет её в файл.

<code class=" cpp"><br /><span class="keyword">bool</span> CreateCodeBook(LPCTSTR FileName)<br />{<br />    BYTE* MemCodeBook = (BYTE*)VirtualAlloc(<span class="number">0</span>, <span class="number">0x10000</span>, MEM_COMMIT + MEM_RESERVE, PAGE_READWRITE);<br />    CreateCodeBookInBuffer(MemCodeBook);<br /><br />    HANDLE FH = CreateFile(FileName, GENERIC_WRITE, FILE_SHARE_READ, <span class="number">0</span>, CREATE_ALWAYS,<span class="number">0</span>,<span class="number">0</span><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />;<br />    <span class="keyword">if</span> (FH==INVALID_HANDLE_VALUE) <span class="keyword">return</span> <span class="keyword">false</span>;<br />    DWORD Writed;<br />    WriteFile(FH,(<span class="keyword">void</span>*)MemCodeBook,<span class="number">0x10000</span>,&Writed,<span class="number">0</span><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />;<br />    CloseHandle(FH);<br />    VirtualFree(MemCodeBook,<span class="number">0</span>,MEM_RELEASE);<br />    <span class="keyword">return</span> (Writed==<span class="number">0x10000</span><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />;<br />}</code>

  Итак, книгу кодов мы создали теперь надо написать функции, которые производят шифровку и расшифровку данных.

<code><br />void CryptData(BYTE* CodeBook, BYTE *SourceBuff, int BuffSize, BYTE *DestBuff)<br />{<br />    BYTE CB, CCB;<br />    int CP;<br />    for(int i=0;i<BuffSize;i++)<br />    {<br />        CB = SourceBuff<em></em>;<br />        CP = rand()%256;<br />        CCB =GetBytePos(CodeBook+(CP<<8),CB);<br />        DestBuff<em></em>=CP;<br />        DestBuff[(i<<1)+1]=CCB;<br />    }<br />}</code>

Функция элементарна: мы берём байт из исходных данных, генерируем случайным образом номер кодовой страницы, получаем индекс исходного байта на выбранной кодовой странице и записываем в результирующий буфер номер кодовой страницы и байт-замену на этой кодовой странице. Функция GetBytePos производит поиск байт в указанном буфере.
  Осталось написать функцию расшифровки, она ещё проще:

<code><br />void DeCryptData(BYTE* CodeBook, BYTE *SourceBuff, BYTE *DestBuff, int BuffSize)<br />{<br />    BYTE CB, CCB;<br />    int CP;<br />    for(int i=0;i<BuffSize;i++)<br />    {<br />        CP=SourceBuff<em></em>;<br />        CCB=SourceBuff[(i<<1)+1];<br />        CB = CodeBook[(CP<<8)+CCB];<br />        DestBuff<em></em>=CB;<br />    }<br />}</code>

Здесь тоже всё очень просто: извлекается два байта из исходных (зашифрованных) данных, первый байт это номер кодовой страницы второй это индекс на этой кодовой странице, в результирующий буфер заносится байт, находящийся на указанной кодовой странице по указанному индексу.
  Следующим шагом будет написание функций производящих шифрование файлов. Код функции, осуществляющий шифрование файлов тривиальный: считывается в память книга кодов, считывается в память исходный файл, зашифрованный данные записываются в результирующий файл.

<code class=" cpp"><br /><span class="keyword">bool</span> CryptFile(LPCTSTR SourceFile, LPCTSTR DestFile, LPCTSTR CodeBookFile)<br />{<br />    HANDLE CBFH = CreateFile(CodeBookFile, GENERIC_READ, FILE_SHARE_READ,<span class="number">0</span>,OPEN_EXISTING,<span class="number">0</span>,<span class="number">0</span><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />;<br />    <span class="keyword">if</span> (CBFH==INVALID_HANDLE_VALUE) <span class="keyword">return</span> <span class="keyword">false</span>;<br />    <span class="keyword">int</span> CBFS = GetFileSize(CBFH,<span class="number">0</span><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />;<br />    <span class="keyword">if</span> (CBFS!=<span class="number">0x10000</span><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" /><br />    {<br />        CloseHandle(CBFH);<br />        <span class="keyword">return</span> <span class="keyword">false</span>;<br />    }<br /><br />    HANDLE SFH = CreateFile(SourceFile, GENERIC_READ, FILE_SHARE_READ,<span class="number">0</span>,OPEN_EXISTING,<span class="number">0</span>,<span class="number">0</span><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />;<br />    <span class="keyword">if</span> (SFH==INVALID_HANDLE_VALUE) <span class="keyword">return</span> <span class="keyword">false</span>;<br />    HANDLE DFH = CreateFile(DestFile, GENERIC_WRITE, FILE_SHARE_READ,<span class="number">0</span>,CREATE_ALWAYS,<span class="number">0</span>,<span class="number">0</span><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />;<br />    <span class="keyword">if</span> (DFH==INVALID_HANDLE_VALUE) <span class="keyword">return</span> <span class="keyword">false</span>;<br /><br />    BYTE* SourceBuff = (BYTE*)VirtualAlloc(<span class="number">0</span>,BufferSize,MEM_COMMIT+MEM_RESERVE,PAGE_READWRITE);<br />    BYTE* DestBuff = (BYTE*)VirtualAlloc(<span class="number">0</span>,BufferSize*<span class="number">2</span>,MEM_COMMIT+MEM_RESERVE,PAGE_READWRITE);<br />    BYTE* CodeBook = (BYTE*)VirtualAlloc(<span class="number">0</span>,<span class="number">0x10000</span>,MEM_COMMIT+MEM_RESERVE,PAGE_READWRITE);<br /><br />    DWORD Readed = <span class="number">0</span>;<br />    ReadFile(CBFH,CodeBook,<span class="number">0x10000</span>,&Readed,<span class="number">0</span><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />;<br />    CloseHandle(CBFH);<br /><br />    DWORD Writed = <span class="number">0</span>;<br />    <span class="keyword">do</span><br />    {<br />        ReadFile(SFH,SourceBuff,BufferSize,&Readed,<span class="number">0</span><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />;<br />        CryptData(CodeBook,SourceBuff,Readed,DestBuff);<br />        WriteFile(DFH,DestBuff,Readed*<span class="number">2</span>,&Writed,<span class="number">0</span><img src="http://s.mypage.ru/images/smiles/animated/ad.gif" alt="" />;<br /><br />    }<br />    <span class="keyword">while</span> (Readed==BufferSize);<br /><br />    CloseHandle(SFH);<br />    CloseHandle(DFH);<br /><br />    VirtualFree(SourceBuff,<span class="number">0</span>,MEM_RELEASE);<br />    VirtualFree(DestBuff,<span class="number">0</span>,MEM_RELEASE);<br />    VirtualFree(CodeBook,<span class="number">0</span>,MEM_RELEASE);<br /><br />    <span class="keyword">return</span> <span class="keyword">true</span>;<br />}</code>

Следует подметить, что шифровка файла производится по порциям размером в 1 МБ, это обусловлено тем что при шифровке файлов большого размера (более 600 МБ), реальна ситуация нехватки виртуальной памяти. Функция расшифровки файлов аналогична вышеприведённой, приводить её здесь не имеет никакого смысла.
  Все вышеприведённые функции и вынесены в заголовочный файл (RDC.h), который вы можете подключить в своём проекте на С++. Также мною была создана DLL содержащая функции из RDC.h. Созданную DLL можно использовать в программах написанных на других языках. В качестве примера я написал программу на Delphi, которая производит шифрование файлов с использованием функций из RDC.DLL.
  Исходники RDC.DLL и программы производящей шифрование файлов с использованием RDC.DLL находятся в архиве, прилагающемся к данной статье.

Скачать исходники
1. Исходники RDC.DLL на С++ (CodeBlocks+MinGW)
2. Исходники программы использующей RDC.DLL (Delphi 7)

Комментариев: 0

Как программировать на C++


Авторы: Дейтел Х., Дейтел П.
Количество страниц: 1021


Аннотация:
Книга предлагает полный курс изучения наиболее популярного и перспективного языка программирования — C++ и рассчитана как на начинающих, не владеющих никаким языком программирования, так и на опытных пользователей. Для начинающих — это полноценный курс, в котором изучается все, начиная с устройства компьютера и кончая новейшими достижениями C++: шаблонами функций и классов, обработкой исключений и т.п. Опытный программист может пропустить часть известного ему материала, но получит множество полезных сведений в остальных частях книги. Особое внимание авторы уделяют современным методикам разработки программного обеспечения: наследованию, полиморфизму, объектно-ориентированному проектированию и объектно-ориентированному программированию, не забывая и о классическом структурном программировании. Приведено множество полезных советов. Книга рассчитана
на широкий круг читателей, от начинающих осваивать азы программирования до опытных разработчиков.


http://depositfiles.com/ru/files/yqwuqgh0f
Комментариев: 0

C++ для начинающих



Автор: Стэнли Б. Липпман.
Издание: третье
Количество страниц: 1195

 C++ для начинающих” содержит обстоятельное введение в международный стандарт С++.Мы включили в название книги слова “для начинающих” потому, что последовательно придерживались учебного подхода к описанию языка С++; однако название не предполагает упрощенного или облегченного изложения материала.

http://depositfiles.com/ru/files/jxmb7nza6
Комментариев: 0
Страницы: 1 2
Marina
Marina
Была на сайте никогда
тел: +380665011134
Читателей: 7 Опыт: 0 Карма: 1
Я в клубах
Фотографируем Пользователь клуба
Inks under the skin Пользователь клуба
все 1 Мои друзья