Jump to content
¯\_( ツ)_/¯
  • TAD GROUP are currently hiring penetration testers. Please read the topic in Career Central subforum.
  • Sponsored Ad

Search the Community

Showing results for tags 'http'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • За форума / About the forum
    • Условия за ползване, препоръки и работа с форумите
  • Информационна сигурност / Information Security
    • Пенетрейшън тестове
    • Тестове за социално инженерство
    • Експлойти
    • Инструменти
    • Вируси
    • Програмиране
    • Криптография
    • Сертифициране
    • След дъжд-качулка :)
    • Безжични мрежи, мобилни устройства и друг хардуер
    • Физическа сигурност
  • Ресурси / Resources
    • Новини: По света и у нас
    • Уроци
    • Състезания за хакери
    • Книги, филми, списания
    • Интересни събития
  • Други / Others
    • Кариерно развитие
    • Продавалник (Купува/Продава, Търси/Предлага)
    • Съответствие, наредби и стандарти
    • Уеб дизайн
    • Оф-топик
  • TAD GROUP's Careers
  • Old school hackers's Topics
  • BG-Soft's Регистриране на крайни приложения
  • BG-Soft's Как и къде да продаваме крайни приложеня
  • BG-Soft's Инструменти за изграждане на крайни приложения
  • BG-Soft's Полезни съвети
  • Assembly x86's Какво е асембли и защо трябва да ни интересува?

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


About Me

Found 7 results

  1. КАКВО Е pHostEnt ? Нека започнем с най-важното. Когато работите с някаква операционна система вие трябва много добре да я познавате. Много често съм се сблъсквал с напълно необосновани твърдения относно Windos. Най-често те се дават от лица, които не познават операционната система или я познават на ниво потребител. Това, което е важно да се знае за Windows е, че това е операционна система, която е създадена от инженери за инженерни нужди. Повечето "пробиви" в Windows (обективно погледнато са в пъти по-малко отколкото в други ОС, но това е тема за други разглеждания) се дължат най-вече на неправилно администриране и свободата, с която се ползва крайния потребител. Това, което обаче трябва да се признае като безспорно предимство е, че Windows е наличието на перфектна документация и изключителна поддръжка. Ако сте разработчик, вие ползвате почти всичко напълно безплатно. Това означава и включване в редица програми и подкрепа за всеки един, ако е решил да работи честно. След тези кратки разяснения се връщаме на въпроса: КАКВО Е pHostEnt? ВАЖНО: Всяка една програма, която пишем на практика осъществява комуникация с апаратната част и операционната система, която ползваме. Това взаимодействие се реализира на език, който е разбираем за процесора, системните контролери, интерфейсите BIOS, DOS и ОС. Програмата е общуване с машините (или комуникационните средства) на език, който те разбират. За да може това общуване да е пълноценно ние трябва да научим добре този език. Както всеки друг език и този се учи с практика. Tрябва да знаете, че това, което ще обсъдим днес има повече теоретична отколкото чисто практическа стойност. Проблемът е, че ако материята не бъде усвоена ние няма да можем да направим нищо. Все още не сме обсъждали какво е winsock и как се ползва. Нямаме представа защо е толкова важно да можем да работим със сокети и т.н.. Но се налага да започнем от някъде. Както се вижда от горния пост, нашата задача е да получим IP адреса на хоста по зададено име. КОГАТО АДРЕСЪТ Е СТАТИЧЕН, ТОВА НЕ Е ОТ КОЙ ЗНАЕ КАКВО ЗНАЧЕНИЕ. ЗА СЪЖАЛЕНИЕ МНОГО ОТ СЪРВЪРИТЕ ПОЛЗВАТ ДИНАМИЧНИ АДРЕСИ (НАЙ-ДОБРЕ ТОВА МОЖЕ ДА СЕ ВИДИ ПРИ АНАЛИЗ НА GOOGLE). В ТОЗИ СЛУЧАЙ Е ДОБРЕ ДА СЕ ИЗПОЛЗВАТ Winsock API ФУНКЦИИ ЗА ТЯХНОТО ПРАВИЛНО ОПРЕДЕЛЯНЕ. В Winsock API съществуват две функции: gethostbyname (в Delphi може да я изпишете и като GetHostByName) - връща IP адрес; Може да се ползва ето така: C++ struct hostent FAR *gethostbyname(const char FAR *name ); gethostbyaddr (в Delphi може да я изпишете и като GetHostByAddr) - връща ни името на машината (на хоста). Може да се ползва ето така: C++ DWORD ip_address = inet_addr ("192.168.1.1"); host_name = gethostbyaddr ((char* )&ip_address, 4, AF_INET); Както виждате отново се сблъскваме с pHostEnt. pHostEnt е структура на Windows, която има следният вид: C++ typedef struct hostent { char FAR *h_name; char FAR FAR **h_aliases; short h_addrtype; short h_length; char FAR FAR **h_addr_list; } HOSTENT, *PHOSTENT, FAR *LPHOSTENT; Искам да подчертая нещо важно. Прието е голяма част от документацията за Windows да е илюстрирана с кодове написани на C++ или C# (който е език с логиката на Delphi, но със синтаксис, обединяващ C и Basic). Това е следствие от първоначалното развитие на операционните системи (нарича се "атавизъм"). Езикът за програмиране C (моля да не се бърка със C++, защото има съществени различия) е създаден от Керниган и Ричи като поддържащ език за ОС UNIX. Тъй като е добил популярност (в Станфорд и не само там са ползвали студенти за системни администратори, защото са липсвали кадри) е нормално да се търси подход, който да се разбира от повечето специалисти. Езикът C++ е много близък като синтактична структура (обратен Полски запис и пр.) до C. Това го прави "четим". Ние ще следваме тази схема, но успоредно с това, че видим защо Delphi e по-ефективен при разработката на специализирани приложения. И така да разгледаме всеки един от елементите на структурата phostent. h_name - ТОВА Е ИМЕТО НА ХОСТА (МАШИНАТА, СЪРВЪРА) В МРЕЖАТА. И ако някъде срещнете термина Full Qualified Domain Name (FQDN) ще знаете за какво става дума. h_aliases - ТОВА Е МАСИВ, СЪДЪРЖАЩ СПИСЪКА С АЛТЕРНАТИВНИ ИМЕНА. Мисля, че всеки знае какво е алтернативно име на домейн. За тези които не знаят ще обясня простичко: mainsite.com e алтернативно име на mainsite.net или mysite.com. Темата с алтернативните имена е доста интересна и ще бъде дискутирана на един по-късен етап. ВАЖНО! h_aliases ВИНАГИ ЗАВЪРШВА НА 0. h_addrtype - ТОВА Е ВИДЪТ НА ВЪВЕДЕНИЯ АДРЕС. За TCP/IP това е AF_INET. Важно е да се знае защото освен TCP/IP имаме и други протоколи, които ще обсъдим на един по-късен етап. h_length - ДЪЛЖИНА НА ВЪВЕДЕНИЯ АДРЕС. За TCP/IP V4 тя е 4 Byte (max. 1111.1111.1111.1111 - 4 Byte, записа е в двоичен код за да се добие представа как изглежда) h_addr_list - МАСИВ С АДРЕСИ. ВАЖНО! Mасивът винаги завършва на 0. Това, което е от значение е, че това е масив със всички достъпни адреси, което може да бъде изключително полезно на един по-късен етап. Обърнете внимание, че тук разгледахме само една малка част от една конкретно взета функция. Помислете си, колко неща, на които рядко обръщаме внимание научихме. Повече информация по темата може да намерите на адрес: https://msdn.microsoft.com/en-us/library/windows/desktop/ms738552(v=vs.85).aspx
  2. И преди да продължим напред (извинявам се, че всичко е малко разхвърляно, но ще ми е много трудно да обяснявам всичко в детайли), нека разгледаме две графики. На първата графика в много достъпен вид е показано какво представлява TCP Header-ът (заглавната част на TCP). Искам да обърна внимание на нещо много важно, което е възможно силно да подразни мнозина, но ... дали ни харесва или не истината трябва да се приеме такава каквато е. TCP/IP протокола е наложен като такъв от Microsoft. Нe е измислен от Linux Fondation (така както там не са измислили PNG и не само). Колкото и да не ни се иска ако не познаваме ОС Windows в детайли няма да вникнем в тънкостите на TCP/IP. Сървърите служат за да обслужват ПОВЕЧЕ ОТ ЕДИН ПОТРЕБИТЕЛИ. Потребителите отправят заявка към сървъра, а той отговаря. Звучи елементарно, но има много подводни камъни, за които често се забравя. Но нека да не избързваме и да видим как клиентът и сървърът комуникират по TCP.
  3. ЗАЩО RSA Е СЛАБО ЗАЩИТЕНА (материал само за експерти) За да се разбере защо RSA е една от най-слабо защитените криптосистеми е нужно да притежаваме солидна база от фундаментални познания. Съжалявам, че ще се наложи да използвам специализирана терминология, но няма как да се аргументирам, ако не го направя. В предходният пост анализирахме уязвимостта на секретните ключове. Тук ще разгледаме уязвимостта на формиране на секретният ключ при RSA (нещо, което умишлено се премълчава). Като начало ще си припомним, че разчета на секретната експонента в RSA се извършва на базата на зависимостта: s.t=1(mod(Fi(r)) където: s - открита експонента ( s e просто число спрямо Fi(r) ); Fi(r) - е познатата ни Ойлерова функция, която се изчислява от зависимостта: Fi(r) = (p-1).(q-1) Идеята при определяне на секретната експонента на RSA e при изчислена стойност на Fi(r) и избрана стойност на s да се намери такова t, за което е изпълнено (s.t) div (Fi(r)) = 1 Този постулат е най-уязвимото място в RSA, поради следните причини: - Функцията на Ойлер е четно число. - Множеството на числата формиращи откритата експонента s е множество от нечетни числа. - Секретната експонента t винаги е нечетно число. - Ако само едно от простите числа p или q завършва на 1 (едно), тогава Ойлеровата функция Fi(r) ще бъде кратна на 10 (десет). - Ако Ойлеровата функция Fi(r) е кратна на 10 (десет), то тогава s задължително завършва на 7 (седем), а t ще завършва задължително на 3 (три). - Ако Ойлеровата функция Fi(r) е кратна на 10 (десет), а s завършва на 3 (три), тогава t ще завършва задължително на 7 (седем). - Ако Ойлеровата функция Fi(r) е кратна на 10 (десет), а s завършва на 9 (девет), тогава t ще завършва задължително на 9 (девет). - Ако Ойлеровата функция Fi(r) е кратна на 10 (десет), а s завършва на 1 (едно), тогава t ще завършва задължително на 1 (едно). Всичко твърдения, които са изложени до тук могат много лесно да бъдат доказани, но това не е предмет на настоящите разглеждания. Нека разгледаме следният пример: Пример: За да докажем нашите твърдения ще извършим "сух пробег", за който дори не е нужно да ползваме компютър. Избираме следните прости числа: Pa:= 97 и Qa:= 191. Изчисляваме Ойлеровата функция. Rа:= Pa*Qa; Fa:= Ra-Qa-Pa+1; Резултатът за Ойлеровата функция е 18240, а откритата експонента ще бъде 14501. Взаимопростите числа ще имат следния вид: Pr(18240) = 7, 11, 13, 17, 23 ... От тук не представлява никакъв проблем да изчислим секретната експонента, като използваме формулата, която разгледахме в началото и получаваме 1 4591 умножено по десет на степен 4. От тук не е трудно да си направим извода, че при RSA в възможно да бъдат прихванати "ключове близнаци", което води до дискредитация на криптосистемата. Мисля, че не е трудно да се разбере, че причина за това е самият характер на RSA. както вече споменах, колкото по-сложна е една система, толкова по-уязвима е тя на слаби външни и вътрешни въздействия. RSA е типичен пример за това. Ние използвахме само спецификата на простите числа (както знаем те се делят без остатък само на 1 и на самите себе си). Много е важно да се знае, че тази уязвимост е известно още от 1978 година (хиляда деветстотин седемдесет и осма година). За първи път тя се анализира в трудовете на Ривест и Шамир. ( за справка виж. "A Method for Obtaining Digital Signaturest and Public Key Cryptosystems", Cryptosystems // Communications of the ACM, . 1978. T.21, No2, Pp 120-126) С това днешният ни урок приключи. , , , Искам да се извиня ако в предишните си постове съм бил рязък. Повярвайте не желая да обидя никого. Просто това, за което пиша не се намира в internet в достъпен за ползване вид. Трудно ще го намерите и в печатни издания. Ако ми позволите ще повторя фразата на Марку Канту от забележителният му труд "Indy in depth" - Забравете за всичко, което си мислите, че знаете. Истината е, че голяма част от това, което знаем е чиста проба дезинформация, която може да бъде опровергана, ако разполагате с нужните теоретични познания и прилежащият инструментариум, както и специфичен практически опит. Много от фондациите (визирам такива като Linux Foundation, Mozilla Foundation и др.) са на държано финансиране с всички произтичащи от това последствия. Само в България има четири структури (извън ДАНС), които се занимават с контрол върху информацията. За Великобритания тези структури са 27, а за САЩ цифрата надхвърля 30, като в тази цифра не включвам АНС. Тяхната задача е да ви манипулират. Самите вие се превръщате в инструмент (и яростни защитници) на нечия политика. Знам, че това няма да се хареса на мнозина, но за съжаление това е истината. Събитията от последните няколко дни (визирам промените в европейското законодателство) са ярко доказателство за това. Горещо ви препоръчвам да се запознаете с трудовете на полк.Бил Хагестат, който е един от най-големите експерти в областта на азиатските структури за киберсигурност. Изключителен ерудит, който познава всичко от първа ръка (над 15 години оперативна дейност в Китай и Република Корея). RED DRAGON 1949 Забележка: Mежду текстовете на английски и китайски има малки различия. Както многократно съм казвал, трябва да бъдем много внимателни с англоезичните източници. Причината е спецификата на техническият английски език и съществуващи лингвистични ограничения.
  4. КАКВО Е WEB-СНИФЪР И ЗАЩО СЕ РАЗЛИЧАВА ОТ ПАКЕТНИЯ? (отговор на Kestena) Web-снифърите са инструменти за анализ на съдържанието и свързаните с него събития на един web-документ. Важно е да се прави разлика между парсери и web-снифъри. Парсерите са просто елемент от web-снифъра. На изображението можете да видите един типичен web-снифър. В посоченият пример се анализира abv.bg. Ясно се вижда как браузърът и web-сървърът осъществяват комуникация (полето Process Control). Можете да видите всяка една операция, осъществена в рамките на 718 ms, времето за което странницата се е отворила. Освен това web-снифърите визуализират и обмена на команди между браузъра и сървъра. Съществуват два режима на анализ - автоматичен и полуавтоматичен. За тези, които знаят какво са регулярни изрази и как се използват интерес би представлявал полуавтоматичният режим. Ето един типичен пример за неговото използване. Ясно се вижда, че посредством подходящ регулярен израз, може да получим абсолютно всички хипертекстови препратки, намиращи се на една web-странница. Мисля, че от тук не би представлявал никакъв проблем да си направим собствен "паяк", който да е в състояние да сваля залата информация, съдържаща се в един web-документ, без значения как тя е физически разпределена в internet. И последното, което не е нещо ново или гениално, но определено върши доста добра работа е възможността да се анализират събитията, свързани с конкретен компонент от web-документа. Съществуват и други интересни възможности, като директната обработка на Hipertext Preprocessor (PHP) и не само, но те са тема за отделни разглеждания. Като цяло web-снифърите са изключително полезен инструмент, който може да облекчи в голяма степен ежедневната ни дейност. Забележка: Web-снифърите емулират web-браузър, без самите те да са такива. Може да тествате различни user-агенти, за да видите как биха реагирали сървърите (нали си спомняте за онези забавни съобщения, че ползвате морално остарял браузър).
  5. Това е тема в която ще пишем за това как могат да се създават нискобюджетни систми за защита на данни.
  6. ДА КАK ПОЛУЧА IP АДРЕСА, АКО ЗНАМ ИМЕТО НА САЙТА? Това е много често задаван въпрос. Рядко ще намерите решение, което да работи абсолютно коректно. Как изглежда задачата? Да кажем имам сайт с адрес: mysite.com. Искам да видя, IP адреса на сървъра, където сайта е разположен. Важно е да отбележим, че тук ние не се интересуваме дали се ползва http или https протокол, защото работим на чисто TCP/IP. И така, как се прави това? uses WinSock, .... {------------------------------------------------------------------------------} { } { GET DOMAIN INFORMATION } { } {------------------------------------------------------------------------------} // 1. GET IP ADDRESS function GetIP (Host: String): String; type AddressesTable = Array [0..10] of pInAddr; AddressParams = ^AddressesTable; var HostEntry: pHostEnt; AddressInfo: AddressParams; Buffer: Array [0..63] of Char; I: Integer; InitData : TWSADATA; begin WSAStartup($101, InitData); Result:= '0.0.0.0'; ZeroMemory (@Buffer, SizeOf(Buffer)); StrpCopy (Buffer, Host); HostEntry:= GetHostByName( pAnsiChar (AnsiString(Host) ) ); if HostEntry = nil then begin WSACleanup; Exit; end; try AddressInfo:= AddressParams(HostEntry^.h_addr_list); I:= 0; while AddressInfo^ <> nil do begin Result:= StrPas(inet_ntoa(AddressInfo^^)); Inc(I); end; finally WSACleanup; end; end; Това е правилния подход за получаване на IPv4 адреса. Обърнете внимание на WinSock и pAnsiChar (AnsiString(Host) ) Детайлното описание на тази функция ще проведем утре. Забележка: Когато говорим за хакинг и компютърна сигурност, това е една от т.н. "базови функции", при анализ на мрежови комуникации ползващи TCP/IP протокол.
  7. КАК ДА СИ НАПРАВИМ TCP КЛИЕН-СЪРВЪР СИСТЕМА ЗА ОБМЕН НА СЪОБЩЕНИЯ? И така, време е да се завърнем към това, с което започнахме: КАК СЕ ПРАВИ .... До тук внесохме малки пояснение как функционира мрежата. За пореден път искам да подчертая: ВСИЧКИ КОДОВЕ, КОИТО ЩЕ БЪДАТ ПУБЛИКУВАНИ В ОТГОВОР НА ТОЗИ ВЪПРОС НЕ СА ПРЯКО ОБВЪРЗАНИ С КОНКРЕТНА ОПЕРАЦИОННА СИСТЕМА? Това е мрежово програмиране. В случая предлагам решение за Windows, но всички функции и процедури без никакви изменения се използват и за Linux, UNIX, iOS, Android и още куп операционни системи, за много от които дори не сте чували. Друг важен момент, на който искам да обърна внимание е, че МАШИННАТА ЛОГИКА СЕ РАЗЛИЧАВА ДИАМЕТРАЛНО ОТ ЧОВЕШКАТА ЛОГИКА. машинната логика е последователно и логично обоснована. Това се нарича "дигитализация" (има гръцки произход и няма нищо общо с дискретните процеси). Ние ще следваме машинната, а не човешката логика. И така ... Нека да започнем с най-важното: КАКВО ИСКАМЕ ДА НАПРАВИМ? 1. Искаме да направим TCP сървър. Това е нашата ОСНОВНА ЦЕЛ. Дали този сървър ще е добър или негоден за нищо не е важно. Важно е да ползва TCP. Какво обаче следва от тази основна цел? 1.1. Сървърът трябва да работи като приложение, а не като процес. Ние ще го ползваме за тестове и с образователна цел. Ако е като приложение ще може да го включваме и изключваме когато и както ни хареса. 1.2. Нужно е да получаваме информация за това какво се случва. Казано още по-просто: ДА СМЕ В СЪСТОЯНИЕ ДА СЛЕДИМ ВСИЧКИ ПРОЦЕСИ, КОИТО СЕ СЛУЧВАТ СЪС СЪРВЪРА. 1.3. Когато клиентът се свърже със сървъра ние трябва да получим информация за клиента. Тази информация трябва да ни казва от кой IP адрес се е свързал, кой порт ползва, кога се е случило това и т.н.. 1.4. Трябва да получаваме информация, за броят на клиентите, които ползват сървъра. 1.5. Необходимо е да изпращаме уведомителни съобщения до ВСИЧКИ КЛИЕНТИ, които са свързани със сървъра. Това се нарича Broudcasting и е много важна функция, на която ще отделим специално внимание в последващите ни разглеждания. 1.6. Преди да бъде изключен сървърът всички клиенти, които го ползват трябва да бъдат коректно изключени и уведомени. Мисля, че това е достатъчно като начало. Сега нека видим как се прави всичко, това. Като начало е нужно да създадем следните папки: TCP_CLIENT_SERVER |_________ TCP_SERVER |_________ TCP_CLIENT Това ще бъдат директориите, в които ще съхраняваме нашият проект (прилагам кодовете, така, че може просто да ползвате това, което е в архива, но ако сте решили сами да направите нещо е добре то да бъде добре структурирано/подредено). Сега малко отклонение. Примерите в архива са за OS Windows. За другите се ползва FireMonkey. Функциите обаче са си същие без разлика. И така ... В ТОВА КОЕТО ЩЕ НАМЕРИТЕ В АРХИВА Е ПРОЦЕДИРАНО ПО СЛЕДНИЯ НАЧИН: File -> VCL Forms Application .... АКО ОБАЧЕ ДЪРЖИТЕ НА НАДПЛАТФОРМЕНО ПРИЛОЖЕНИЕ (да работи на Linux, iOS, Android, Windows и пр.) СЛЕДВАТЕ ПОСЛЕДОВАТЕЛНОСТТА: File -> Multi-Devise Application -> Blank Application ... след което си избирате операционната система, за която ще го правите. Съветът, който мога да ви дам и който се базира на дългогодишен опит е: ПЪРВО ГО НАПРАВЕТЕ ЗА WINDOWS ТАКА, ЧЕ ДА РАБОТИ БЕЗ ПРОБЛЕМИ! Ако сте се справили с тази задача всичко друго е не само много лесно, но и няма да имате никакви проблеми с преноса. Следващата стъпка е да създадем нашият сървър. В това няма нищо сложно. Просто на формата поставяме няколко визуални компомента както следва: два компонента TPanel; три компонента TButton; три компонента TLabel; един компонент ТМемо и един компонент TIdTCPServer, така както е показано на изображението. Тук отново се налага да направя малко отклонение. Много често в internet ще прочетете мнението на всякакви "експерти" които надълго и нашироко ще ви обясняват как използването на визуални компоненти правело приложението по-бавно и, че това не бил "правилния начин". За съжаление това е поредната заблуда, която масово се тиражира. Дали компонентите са визуални и/или се създават динамично (в процеса на изпълнение) е без значение. Важно е какви опции сте задали на компилатора и свързващият редактор, но това е една тема, за която ще говорим надълго при други разглеждания. Самата работа с визуални компоненти е "висш пилотаж" в програмирането, защото изисква наистина много задълбочени познания. Това, че някой го тегли към клавиатурата не е лошо, но ако работите с големи проекти ще ви доведе до тотален провал. Все пак ние искаме да бъдем професионалисти, а и трябва да следваме това, което се е наложило като ефективна и доказала се практика. Но нека да продължим ... НИЕ СЪЗДАДОХМЕ НАШИЯТ СЪРВЪР! Прекрасно, но ... ВЪПРЕКИ, ЧЕ РАЗПОЛАГАМЕ С НАПЪЛНО ПЪЛНОЦЕНЕН СЪРВЪР, ТОВА НЕ ОЗНАЧАВА, ЧЕ ТОЙ ЩЕ РАБОТИ ТАКА КАТО НА НАС НИ СЕ ИСКА! 😊 Преди обаче да пристъпим към истинската работа ще направим и клиента, който ще се свързва със сървъра. Тук следваме същата стандартна процедура, която описахме, но формата (мола да не се бърка с "прозорец", защото е нещо много различно) ще изглежда ето така: Тук имаме два нови компонента, както следва TIdTCPClient и TIdThreadComponent. Разбира се, че двата проекта (TCP_Server и TCP_Client) ще бъдат записани в различни папки, за да не допускаме грешка. ВАЖНО! Delphi предоставя възможността отделните проекти да бъдат обединявани в групи. Това е много голямо предимство, когато имате проект от клас A или АА и се налага да обедините повече от едно приложение. За сега обаче ще оставим този въпрос за едни по нататъшни разглеждания и ще се концентрираме върху мрежовото програмиране. По-късно ще обясня как да обединим двата проекта (сървъра и клиента) в един общ. Преди да продължим последователно компилираме така създадените приложения за да видим как изглеждат. Както виждате изглеждат доста прилично. Но предполагам, че тук ще възникне уместният въпрос: АЛООООО. НЕЩО ПРЕМЪЛЧАВАШ. ЗАЩО АЗ КАТО ГИ ПРАВЯ НЕ ИЗГЛЕЖДАТ ТАКА, А? И мисля, че ще бъдете напълно прави. Аз просто ползвам стилове. Тези стилове, силно наподобяват познатите ви CSS, но става дума за нещо много по-различно. НАЙ-МНОГО ТРУД Е НЕОБХОДИМ, КОГАТО ТРЯБВА ДА НАПРАВИТЕ ДОБРО ИНТЕРФЕЙСНО РЕШЕНИЕ ЗА КРАЙНИТЕ ПОТРЕБИТЕЛИ! То не просто трябва да е красиво, но и трябва да е функционално. Не забравяйте, че ако желаете да продадете това, което правите то трябва да привлича клиенти. Стиловете имат точно тази задача. Те могат да направят едно приложение да изглежда различно. В използването на стилове няма нищо сложно. След като сте създали приложението си следвате последователността: Project -> Options -> Application ... Тук си избирате иконка за приложението. Project -> Options -> Application -> Appearance ... Тук си избирате стил, който ще ползвате във вашето приложение. Важно е да знаете, че може да предоставите на крайният потребител повече от един стил. По този начин, той би могъл да избира как да изглежда приложението. Понякога това погрешно се нарича "Skin"(кожа). Правилно е да се нарича "СТИЛ" защото включва доста елементи, за които ще говорим по-късно. ВАЖНО! Предполагам, че на някой му е направило впечатление, че в Delphi Compiler има опция Output - C/C++. Това е много ценна възможност, защото ви позволява да заблудите де що е експерт, че най-яките приложения се правят на ... C++ (или C# или каквото е модерно). Тази заблуда трябва да се поддържа жива. Колкото повече програмисти вярват в нея, толкова по-добре за вас. Докато те "кодат" в неусвест, вие ще създавате високонадеждни приложения на конвейр, при ниски разходи. Ако се научите и да ги продавате (както направиха руснаците, чехите, германците, японците, бразилците и др.) ще постигнете много повече отколкото сте си мислили. И така след като се справихме с интерфейса е нужно да накараме нашето приложение да заработи така както НИЕ ИСКАМЕ. Преди обаче да пристъпим към таи важна задача е редно да повторим една основна максима: ИНТЕРФЕЙСЪТ СЕ ПОДЧИНЯВА НА ФУНКЦИОНАЛНОСТТА НА ПРИЛОЖЕНИЕТО! Първо в детайли го разработвате, а след това към всеки един от елементите добавяте кода, който го управлява. Изходните кодове и изпълнимите файлове може да изтеглите от този архив: Lesson_004A.rar или на адрес: http://g-92.com/LESSONS/ В следващите разглеждания ще обсъждаме всеки един елемент на изходните кодове.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.