Категория: Технологии
Хакер
Една от малките тийнейджърски победи, която постигнах (след дълго убеждаване), беше да накарам родителите да ми купят книгата Наръчник на Хакера. Тогава идеята да стана "хакер" се беше загнездила в главата ми, и то най-вече защото имахме съвсем нагледен пример за такъв в училище (в комплект с тъмни очила, оп статус в повечето местни IRC канали, неразбираем технически диалект и 55.6к модем, с което беше сред единиците тогава в страната). Сега, гледайки в ретроспектива, книгата не беше особено добра - изпълнена предимно със страници и страници неясен C код, некомпилируеми на никой съвременен Линукс, и често писани за експлоити, които светът беше пачнал и забравил още преди мастилото да е изсъхнало. Но ако нещо научих, беше че има още много, ама мноооого да изчета, преди да мога да се нарека хакер. И че има няколко дефиниции за това що е хакер, а хората често ги бъркат.
Длъжен съм да предупредя: този пост съдържа известна доза самохвалство. Оценявам я на около 15 милиНакова, като 1 Наков е нарцисизмът, струящ от едно типично интервю със създателя на СофтУни. Ако имате непоносимост ... както и да е, предупредени сте :)
Та на въпроса: какво е хакер? В най-широката дефиниция, това е любопитен техничар. Човек с огромен и широкоспектърен опит в техническите области - компютри, мрежови системи, хардуер, механика, физика... И винаги жаден да научи повече. Хакерът обожава да човърка чуждите творения и да се учи от тях. Хакерът не се притеснява да разглоби новия си осцилоскоп, за който вчера е дал 3000 лева, за да види как е направен. Хакерът проучва варианти да ползва готови продукти по начини, които създателите им не са очаквали. Да ползва GMail като файлова система. Да подкара Doom на iPod. Да монтира уебкамерка над входната си врата и да получава известия ако съмнителни субекти се суетят пред вратата му. Хакерът може да погледне голяма, непозната за него система, да забележи смътно познати признаци и да получи поне обща представа как работи нещото, за съвсем кратко време. А често и да види какви са слабите му точки.
Разбира се, в тази дефиниция попадат и хората, които заобикалят защитите на компютърните системи. И така откриват начини да ви откраднат паролите, да ви инфектират компютъра или да ви шпионират - понеже някой е спал, докато е писал въпросният сайт или OS. "Добрите" хакери настояват този подвид да се наричат кракери - за да е ясно, че те нарочно чупят компютърни системи за лична изгода. Или да се въвеждат термини като добър/лош хакер ("бели шапки"/"черни шапки" - на английски white hat/black hat). Макар че това деление е малко фалшиво, тъй като надали има хакер, който да не е поне малко "сив". Освен това, повечето хаквания не разчитат непременно на технически познания - успехът на имейл вируса "I Love You" се дължеше основно на факта, че голямата част от хората в интернет са с нещастен личен живот.
Пиша тази статия за да дам контрапункт на всичките неправилни примери за хакери, които можете да видите другаде. Холивуд е пословично зле в това отношение - филм след филм излизат, от касови по-касови, но очевидно не искат да представят хакерите в истинската им светлина - "че работят основно нощем" е горе-долу единственото вярно нещо там. Ще демонстрирам с нагледен пример как мисли, преценя, и работи един хакер.
----------
Задачата беше да се купи безжичен звънец за една леко глуха баба. Знаете за тези устройства, където кутийка с копче на нея стои на външната врата, а кутийка с говорителче и лампички стои в апартамента и издава звуци при повикване? Е, особеното в задачата беше да се вземе такъв модел с две вътрешни устройства - по едно за всяка стая.
След кратко разглеждане на предложенията в Бриколаж, хакерът откри, че "такова животно нема" - всички звънци бяха само с по един предавател и приемник. За сметка на това, кутижките гъмжаха с детайли колко много мелодийки поддържал продуктът и как прецизно можела да се настрои силата на звука.
Хакерът си мисли: колко типично за отдел маркетинг! Разбира се, в рекламите ще акцентират на маловажните детайли като мелодийки и цветове. Никога няма да им хрумне да споделят, ей така, за разнообразие - на каква честота оперират, какво шумозащитено кодиране ползват, през колко стени би следвало да се чуват. Е, един от тях дава информация за разстояние, но, естествено, без да споменава при какви условия...
Хакерът помъкна две бройки от най-простия модел и помоли на касата да отвори опаковките:
Забеляза, че и на предавателите, и на приемниците, от задната страна има номерче и нещо като баркод. Номерчето съвпадаше за двойката предавател/приемник, но се различаваше между бройките. Очевидно не беше сериен номер. Беше спомената и честотата, еднаква и за двете бройки.
Хакерът си мисли: щом работят на еднаква честота, значи ползват някакъв специфичен код, за да може приемника да разпознава само "своя" предавател. Иначе какво би станало ако двама човека в блока си купят един и същи модел? Няма да звънят и двамата при повикване я...
Тук хакерът можеше само да се надява, че ще успее да "предоговори" единия приемник да възприеме кода на "чуждия" предавател. Ако трябва да сме честни, хакерът не беше напълно сигурен дали ще се справи, но интуицията му подсказваше да опита.
... все пак взех най-евтиния модел на пазара. Или трансмитерите, или ресийвърите трябва да са конфигурируеми; и конфигурацията ще е с нещо евтино, надали ще хабят flash чип за това. Най-вероятно вътре ще намеря DIP-switch или конфигурируемо опроводяване. Но определено нещо просто и евтино...
При завръщането вкъщи, хакерът откри, че в приемниците наистина има нещо, приличащо на конфигурация - редичка прерязани писти, част от които бяха съединени с припой:
и, разбира се, именно позициите на припоя се различаваха между двете бройки:
Хакерът си мисли: Тук има някакви числа, плюсове и минуси. Сигурно по някакъв начин съответстват на баркодовете на трансмитерите. Но за целите на задачата не е необходимо да разбирам каква е схемата - достатъчно е да изравня спойките между двата приемника.
5 минути по-късно, двата приемника звучаха в синхрон, а през две стени разстояние хакерът стоеше с огромна, доволна усмивка.
----------
Та - следващият път, когато искате да обясните някому що е то хакер - пратете го тук. Моля ви. Писнало ми е от небръснати очилати типове, работещи на несъществуващи, футуристични интерфейси, и задължително хакващи огромни системи за милиарди долари. Справедливото обрисуване на хакерите трябва да възтържествува!
Публикувано в категория Технологии -- 1 Jun 2016, 16:20, 1 коментар -- View in English
Упътване: AMD SimNow
Бях обещал да напиша упътване за нещото, наречено AMD SimNow™.
SimNow, най-общо, е пълен симулатор на дадено PC, дори несъществуващo такива. Ако по "Компютърни Архитектури" са ви казвали, че процесорите са софтуер (което е вярно), и се тестват (софтуерно) стотици хиляди часове, преди да се появят като реален кристал (което също е вярно), то ето това е една от програмите, които прави тези симулации.
SimNow работи на много ниско ниво, изчислявайки, например, как протича комуникацията с паметта (чиято точна скорост и тайминги също се емулира), какво прескача по хипертранспорта и още много други детайли...
Цената на всичко това е много ниската скорост на емулация - например, с 3200 MHz процесор емулирате уж 2 гигахерцов, но със скорост на емулацията 50-100 MIPS.
Действително, симулацията просто "тече" по-бавно от реално време (противно на DosBox, VMWare и други). Т.е., процесора вътре в емулатора се приема за работещ с фиксирана скорост, и понеже емулирането му с 1:1 скорост е невъзможно, просто времето се "разтяга": вътре в емулатора, "sleep 1s" ще отнеме 10 секунди, ако текущата скорост на емулиране е 200 MIPS. Ако гледате филмче вътре в емулатора, то ще "върви" без "засечки", но много по-бавно. При другите емулатори обикновено е обратно, програмата ще се усети, че процесора е бавен, ще пусне framedrop и т.н.
С горното вероятно ви убедих, че ползването на този емулатор е свързано с мноооого чакане. Затова е добре да се оборудвате с лека и оптимизирана гостуваща OS. Освен това, правенето на виртуален твърд диск не е особено лесно, но затова пък CD .ISO файлове се поддържат много добре и най-лесно е да се насочите към някоя от леките LiveCD linux дистрибуции - аз ползвах Puppy Linux 5.28. Това е една доста добра дистрибуция: не казва нито "гък" за това, че я пускате върху процесор, за който въобще не е чувала, зарежда за приемливо време (десетина минути, нищо работа), но веднъж като зареди, всичко върви прилично. Вероятно ще ви подразни липсата на синхронизация между курсорите в домакинската и гостуващите OS. С настройка на чувствителността на мишката в puppy, общо взето сте готови.
SimNow ви позволява да си "сглобите" каквато машина си пожелаете. Има асортимент от налични хардуерни модули (видеокарти, южни мостове, процесори,...), но навързването им не е лека играчка, за това можете да отворите просто една от готовите конфигурации, които идват с инсталацията. Например, за Bulldozer има само една конфигурация, vp_bd_phase1.bsd.
Има още една пречка, преди да заработи емулацията с вашето Live CD. Boot приоритетите в BIOS указват HDD да са преди CD, и по подразбиране това ще ви доведе до грешка "Invalid (or missing) operating system". За да оправите това, влезте си в BIOS (който... е ... ами, истински) и го оправете. Restart и voilà!
Следва недобре документираният момент, как да вържете вашата виртуална машина с реалния свят. SimNow не поддържа Copy/Paste между гост и домакин, няма споделени папки, така че най-лесният вариант е да си закачите виртуалната машина към LAN. Виртуализирането на мрежата под SimNow е направено гъвкаво, но (поне за начало) - сложно. Откъм госта е лесно - той вижда Е1000 мрежова карта. Откъм домакина, SimNow очаква да се върже към сървърен процес, наречен "медиатор". Него трябва да си го стартирате ръчно. Този медиатор е реалната изходна точка на емулирания трафик към света. Т.е., ако гостът иска да ping-не google.com, пакетът първо се праща през E1000 емулацията, после SimNow тунелира пакета към медиатора (който спокойно може да работи и на друга машина) и после пакетът се появява от сървъра, евентуално NAT-нат, или директно, все едно E1000-ката е бриджната за реалната LAN мрежа. Вариантът с бридж e най-лесен, затова ще опиша него. Преди да пуснете SimNow, пуснете програмката "mediator", с аргументи -p <port> (например: "./mediator -p 8888"). Медиаторът ползва libpcap и затова изисква root привилегии. След което, пуснете вашата симулация, и в командния терминал на SimNow (обикновено, това е конзолата, от която сте извикали ./simnow) трябва да укажете как да се свърже с медиатор-сървъра. За целта напишете "setMediatorHost localhost:8892" (тук числото е <port> + 4). След това следват командите "linkConnect down" и "linkConnect auto", с което E1000-ката ще каже на гост OS-а, че е вързан (в случая, все едно нова карта е закачена към вашия LAN). Така комуникацията е уредена и можете да си работите на машината. Малък момент - неизвестно защо, не можех да пингвам госта от домакина, макар и да можех от друга машина в моя LAN. Демек, за да кача файл в госта, първо го upload-вах на файловия сървър вкъщи, след което си го свалях с wget от госта. За щастие, puppy идва както с wget, така и с unzip :)
След цялото това нещо, сигурно се питате - добре де, защо ни е въобще да правим емулация?
В моя случай, това беше единственият начин да проверя, дали ми работи реализацията на ucbench с XOP инструкции — без да си купувам реално Булдозер. Което, всъщност, и нямаше как да направя, преди датата му на пускане! Конфигурацията vp_bd_phase1.bsd поддържа XOP и FMA4, при това с истинската им скорост: когато подкарах ucbench и тествах как се представя новият код, то резултатите бяха около 50% подобрение - което, както се оказа, отговаря точно на това, което се получи и на реалния Булдозер!
Финални думи: емулатора работи само на 64-битови AMD процесори. Пише си го, като изискване, на сайта. В лагера на Интел, положението е същото, но неофициално: те имат подобен емулатор (който пробвах през м. Март), който също симулира още несъществуващи процесори. Само че, ако се направите на нахални и се опитате да го пуснете на AMD процесор, програмката уж тръгва и след малко гърми със Segmentation Fault. Същата програма, пусната на 14 пъти по-слаб Intel процесор (Atom, vs. Thuban), работи без засечки :D. Да живеят междуфирмените удари под кръста :]
Публикувано в категория Технологии -- 24 Oct 2011, 02:29, 3 коментара -- View in English
Засичане на ритъм
Неотдавна се зачудих дали няма полезен начин да използвам сензора за натоварване на паметта на моето EpoX 9NPA+ дъно. За който не знае - този сензор показва натоварването/трафика към паметта. В idle примигва едва-едва, но ако пуснете интензивен бенчмарк, който прави достатъчно трафик към паметта, сензора почва да свети ярко.
Преди седмица (тъкмо си слушах «Moloko - Sing it back») измислих и един як начин да се използва сензора за засичане на ритъма на някаква песен. Ето го показано в действие:
YouTube - Beat visualization on Epox 9NPA+
Локално копие (H.264 750 kbps)
За целта беше достатъчно да се напише visualization plugin за XMMS, който ползва някакъв прост beat detection алгоритъм, и, когато засече удар, да "светва" сензора. Светването на сензора се предизвиква чрез голямо количество memcpy()-та в 64-мегабайтов масив :) Сегашния алгоритъм е чувствителен само към ниските честоти (затова не хваща солобарабаните, както можете да видите в клипчето на втората песен)
Публикувано в категория Технологии -- 19 Apr 2010, 11:07, 0 коментара -- View in English
Wizz Air и регулярните изрази...
Понякога се чудя - аз ли не съм наред, или светът е много по-сложен и объркан, отколкото трябва да бъде?
Накратко:
1) Купувам си онлайн билет през сайта на Wizz Air. Имам акаунт там, тъй че почти няма какво да попълвам като информация за пътника;
2) Тук идва изненадата. На един от иначе така симпатичните формулярчета с данни, не ми дава да продължа напред - при натискане на Next бутончето, излиза JavaScript прозорче, което ми се кара, че не съм въвел валиден телефонен номер. По-странното е, че тяхната система ми е приела същия този телефонен номер предишния път;
3) След малко експериментация, откривам, че системата не приема нито номера от вида +35988... нито 0035988... Странно, нали? Отваряйки сорса на страницата и търсейки по съобщението за грешка, стигам до функцията checkPhoneNumber:
function checkPhoneNumber(num){
var filter = /^([0-9]){10,13}$/;
if (filter.test(num) || num == "")
return true;
else
return false;
}
4) Аха, ето го и ключовия regex. Гадовете искат номера с между 10 и 13 цифри! Кода на страната отива под ножа.
Като извод, човек идва да се запита - дали всеки юзър, когото Системата отреже, би си имал на идея, че зад шарения сайт на Wizz Air реално стои някакъв код, който е видим? И че "Системата" всъщност са няколко страници простичък код, написан на интерпретиран език? И че в този код, именно тази функция проверява писанията му? И че телефонът е валиден, ако е между 10 и 13 цифри? И по-общо - след като цялото нещо така или иначе идва от едно и също място, какво е пречило до въпросния textbox да има обяснение "(10-13 digits, please)"? И още по-общо - трябва ли обяснението на всеки проблем в сферата на IT да е толкова брутално сложен? Изобщо - защо светът е едно толкова сложно място?
Публикувано в категория Технологии -- 25 Aug 2009, 01:43, 0 коментара -- View in English
Преводач
Google translate вече успешно превежда от/на Български език! Съвсем нов feature, още пари, както се вика. Kudos на Весу за тази възможност!
Ето и как изглежда този блог, преведен на английски - CLICKY :)
EDIT: Като поразцъках линка, който току-що пуснах, веднага видях колко лош пример съм дал всъщност. Както всеки машинен преводач, този на Google също страда от ужасяващ буквализъм, при което греши на неочаквани места. И то сериозно. Фразата "вентилаторчето почва да вие зловещо", дори без да е извадена от контекста си, се превежда като "ventilatorcheto soil to you zloveshto". Процент вярно преведни: 0 (нула). Има още трески за дялане...
Публикувано в категория Технологии -- 9 May 2008, 04:25, 0 коментара
Спам
Преди два или три дни бях доста учуден да заваря цели три писма в "Spam" секцията на корпоративниата си поща в Google. Ще си кажете - какво толкова. Наистина, нищо особено, ако не се отчете факта, че този мейл адрес не го знае реално никой. Създаден преди има-няма месец, без да съм се похвалил никому с него, без да го сложа (дори obfuscate-нат) къде да е в уеб. Което оставя единствено самите Google да са го дали (косвено) на спамърите - вероятност, която, предвид мерките за сигурност тук, оценявам на отрицателна.
Следователно спамерите са минали вече изцяло на Bruteforce. Ей ти листа с всички често ползвани потребителски имена, ето и листа с по-известните домейни. После хайде едно декартово произведение и пращай. Интересно защо все пак са включили google.com в листата с domain-и. Само това не разбирам. Нито има голям брой потребители, нито пък потребителите ще са от типа, който биха отговорили на спам.
Както и да е, до преди тази случка си мислех, че спамът е лесно предотвратимо явление, при прилагане на подходящите практики. Явно вече не е така. Освен вече и username-те да си ги избираме уникални и криптични. Само това трябваше...
Публикувано в категория Технологии -- 29 Mar 2008, 02:46, 2 коментара