Єдина Країна! Единая Страна!

Archive for the 'Розробка софту' Category

Hacking: The Art of Exploitation

Четвер, Березень 7th, 2013

hacking_the_art_of_exploitation

Автори: Jon Erickson
Видавництво: No Starch Press
Рік видання: January 2008
Кількість сторінок: 488

ISBN-10: 1593271441
ISBN-13: 978-1593271442
 

 

 

 

“A book this good is a rare find, and certainly worth the read for any individual interested in security. Rating: 9/10”
—Slashdot

Я б дуже хотів, аби хтось змусив мене прочитати цю книжку після того, як я, будучи, здається, 12-літнім підлітком, подивився фільм Hacker, і вирішив стати програмістом. Жартую 🙂

Хтось з оглядачів книжки написав, що поперекомендував би її лише за перший розділ “Programming”, який сам по собі дає, мабуть, усі необхідні знання для кожного, хто має намір зайнятись системним програмуванням, безпекою інформаційних систем та просто зрозуміти, як влаштовані комп’ютери та, як працюють компілятори.

На щастя, її крутість не обмежується якісним ознайомленням читачів з основами програмування на С, і найцікавіше на цьому лише починається. Далі ви познайомитесь основними техніками експлуатації вразливостей у програмному забезпеченні, мережним програмуванням, навчитесь писати шел-коди та вивчите основи криптографії.

Найкраще те, що, як і кожна хороша книжка на практичні інженерні теми, “Hacking: The Art of Exploitation” дасть вам можливість залізти у кодинг та практику по самі лікті, надавши тим самим реальні практичні навички та досвід.

Must read усім, хто й досі хоче стати хакером з класичних фільмів 80-х — 90-х. Сумніваюсь, що є більш повні та якісні книжки на дану тему.

Зміст книжки:

0x100: Introduction
0x200: Programming
0x300: Exploitation
0x400: Networking
0x500: Shellcode
0x600: Countermeasures
0x700: Cryptography
0x800: Conclusion

Ринок 22-літніх сініорів і 35-літніх пенсіонерів

Четвер, Червень 7th, 2012

Сучасне українське суспільство реально довбонуте. Воно довбонуте на усю свою хвору постсовкову голову. Але мало, що змушує мене пісяти окропом від злості більше за його невміння знаходити спільну мову з віднмінними від них.

Ось, що конкретно спонукало мене написати цей пост:

Усім, хто пише подібні вимоги до вакансія, щиро бажаю впасти у депресію через кризу середнього віку років так у 35—40, не справитись з нею, і викинутись до бісової матері з вікна десятого поверху якоїсь з сірих київських багатоповерхівок. Ви цього заслуговуєте.

Read the rest of this entry »

Чому мій колега кращий програміст, аніж ви

Понеділок, Серпень 22nd, 2011

Маю чудового колегу. Цей пост про нього. Назвемо його Іваном. Іван — унікальна людина. Він належить до тієї рідкісної категорії людей, працювати з якими мріють усі: програмісти, тестери, менеджери, клієнти, і навіть прибиральники… Будь хто з його колег скаже, що він один з найкращих інженерів, з яким їм доводилось будь коли працювати. А ось чому.

  1. Іван багато читає. Його мінімум — книжка на тиждень. Не важливо хто його цьому навчив, Стів Павліна, чи життєвий досвід. Головне, що він знає: 1 книжка — це достатньо мало, щоб відбирати його вільний час, однак, ці 50 з лишком книжок на рік дозволяють йому безперестанно вчитися, отримувати нові знання, і змушують його мізки постійно працювати, обдумуючи прочитане. Він знає, що мозок — це м’яз, і, якщо його не тренувати — він почне тупіти.
  2. Він схиблений на освіті. Іван витрачає практично увесь свій вільний час та гроші на навчання. Він вивчає іноземні мови, відвідує професійні тренінги, практично не пропускає тематичних конференцій, а суботні вечора приводить за переглядом відеозаписів лекцій відомих університетів.
  3. Він бере активну участь у проектах з відкритими джерельними текстами, регулярно дописує до Вікіпедії, а також займається перекладом технічної документації на та локалізацією програмного забезпечення на українську. І робить він це дуже якісно.
  4. Іван дуже охоче ділиться своїми знаннями. Він знає на скільки егоїстично цього не робити, і, що це ще один спосіб навчання; чудовий спосіб навчання. Він веде кілька популярних технічних блоґів, виступає на конференціях та локальних групах по інтересам.
  5. Він не припиняє думати про роботу навіть вдома, але вміє повністю переключатись на інше, якщо це потрібно.
  6. Іван експерт в усіх основних програмних та апаратних інструментах, які використовує у своїй роботі. Власне, який сенс применшувати його крутість? Він — довбаний ніндзя в С, Python`і та Linux`і…
  7. Іван надзвичайно дружелюбний. З їм не потрібно намагатись знайомитись — він сам підійде до вас, привітається, і запросить на обід. Він — один з тих рідкісних людей, які й справді щиро посміюються вам вранці говорячи “Привіт!”. Ця не притворна щирість та відкритість дозволяє йому розташувати до себе людей, і створює йому надзвичайно позитивний імідж, як людини та, як програміста.
  8. Він тримає себе у хорошій фізичній формі. Іван щонайменше чотири рази на тиждень бігає десятикілометрівку, щоранку відтискається, і регулярно ходить підтягуватись на перекладину під час робочого дня. Він не вважає ці 8 годин на тиждень втратою часу, як більшість з вас, бо знає, що насправді це інвестиція, яка допомагає йому завжди бути в тонусі, відчутно підвищує його працездатність та змушує його мізки працювати краще.
  9. Іван завжди має охайний вигляд. Він не дозволяє собі не голитись по кілька тижнів, чи боронь Боже, ходити в одній сорочці два дні підряд або ж ще гірше — не приймати душ по кілька днів, навіть у моменти “авралів”.
  10. Він прокидається разом зі сходом сонця. Так, я знаю, ви — сови. Власне кажучи, ви просто ліньтюхи… Іван же знає, що перші кілька годин після сходу сонця його мізки працюють найкраще, і він часто встигає зробити усю денну роботу ще до того, як більшість з вас приходить на роботу запухлими від сну. Він лягає спати рано, бо знає, що робота після заходу сонця — це вже не робота, а жалюгідні спроби зробити щось корисне, до того ж, йому рано прокидатися 😉
  11. Ви не повірите, але у нього є сім’я. Вродлива і дуже розумна дружина (ви ж розумієте, що згідно із вселенським законом справедливості інакше й бути не могло) та чудові діти, яким він також встигає приділяти час.
  12. Його життя має конкретну мету. Іванове життя сповнене сенсу; він знає навіщо робить усе вище написане, і це слугує для нього надпотужною мотивацію.

Ось такого я маю колегу…

Як додати системний виклик до ядра Linux

Неділя, Серпень 1st, 2010

Системний виклик — це інтерфейс між адресним простором користувача (user-space) і сервісами, які надаються ядром Linux. Оскільки даний сервіс надається ядром, виконати функцію ядра напряму не є можливим; тому слід використовувати спеціальний інтерфейс між простором ядра та користувача. Таким інтерфейсом є системний виклик (system call).

Ядро використовує системні виклики для надання програмам, які працюють у просторі користувача спосіб для запиту на отримання певних сервісів від неї, які у звичайних умовах не дозволяються. До таких сервісів належать постійна пам’ять, оперативна пам’ять, мережа, управління процесами, тощо.. Наприклад, якщо процес у просторі користувача захоче прочитати файл — йому доведеться виконати системні виклики ‘open’ та ‘read’.

Системні виклики не викликаються процесами безпосередньо. Зазвичай, у стандартній бібліотеці мови С присутні функції-обгортки, які надають зручні інтерфейси до усіх системних викликів.

У цій статті я коротенько опишу Linux system calls interface, і покажу, як додати до ядра новий системний виклик. Я використовував ядро версії 2.6.32.

Read the rest of this entry »

Пришвидшення процесу компіляції ядра Linux

П’ятниця, Червень 25th, 2010

Чекати, доки ядро компілюється — завдання для дуже пасивних і спокійних програмістів. Та й фізично, як не дивно, далеко не завжди є достатньо часу. Ось кілька порад, які допоможуть пришвидшити цей процес:

1. Якщо у вас багатоядерний процесор — запускайте make з параметром -j, значення якого вказує на кількість процесів, на які розпаралелюється компіляція. Так, наприклад, make -j 2 розпаралелює компіляцію на два процеси, що суттєво пришвидшує її на двоядерних процесорах.
2. Якщо можливо — запускайте gcc з ключиком -pipe, який змушує компілятор використовувати пайпи замість тимчасових файлів.
3. Вимкніть параметр CONFIG_DEBUG_KERNEL, якщо він вам не потрібен.
4. Повимикайте в конфігурації ядра усі непотрібні (ну гаразд, бодай найбільш явні) параметри.
5. Встановіть і налаштуйте ccache. Він кешує об’єктні файли. Щоправда, з ccache потрібно бути досить обережним, бо той може наробити чимало проблем, якщо вам потрібно перезібрати ядро з нуля, в такому разі не забувайте чистити кеш ccache.
6. Спробуйте distcc, який розпаралелює компіляцію на кілька фізичних машин.
7. Якщо маєте бодай 2 Ґб оперативки — спробуйте tmpfs. Він дозволяє змонтувати будь яку теку прямо в оперативну пам’ять, що суттєво пришвидшує роботу з тимчасовими файлами, яких під час компіляції створюється дуже не мало. Приклад:

# sudo mount -t tmpfs -o size=700M, mode=0777 tmpfs /usr/src/linux