main(){printf(&unix["\021%six\012\0"], (unix)[«have»]+«fun»-0x60);}

Розважаємося, «розплутуючи» код на мові СіДзвінок: Перш ніж лізти під кат, скомпілюйте в голові заголовок статті, що він дає на виході?

image
Коли я в черговий раз переглядав книгу «Expert C programming», я раптом натрапив на розділ «light relief» у міжнародному конкурсі на самий заплутаний код на Сі (IOCCC). Це змагання по написанню як можна більш нечитабельного коду. Те, що такі конкурси влаштовуються для Сі, напевно, говорить що про це мовою. Мені хотілося побачити роботи учасників цього змагання. Не знайшовши ніякої інформації в інтернеті, я вирішив пошукати їх самостійно.

IOCCC був придуманий Стівеном Борном, коли він вирішив використовувати препроцесор Сі та написати Unix shell, як би на мові Сі, але більше схожому на мову Algol-68, з його явними закінченнями операторів, наприклад:

if
...
fi 

Він домігся цього, зробивши:

#define IF if(
#define THEN ){
#define ELSE } else {
#define FI ;}

Що дозволило йому писати так:

IF *s2++ == 0
THEN return(0);
FI


Читати далі →

Аналіз виявлення обфусцированных вірусів мобільними антивірусними програмами на платформі Android

image
Команда УЦСБ провела незалежне дослідження для того, щоб протестувати роботу популярних антивірусних додатків для Android. З результатами цього дослідження я ділилася на конференції phdays VI, але хотілося б більш детально зупинитися на застосуванні обфускаторов для обходу механізмів виявлення вірусів.

Читати далі →

Обфускація програм

Обфускація програм — це новітня, найгарячіша сьогодні, область криптографії. За останні два роки написано понад 70ти статей по цій темі, вона викликає палкі дискусії, створює справжні перегони між дослідними групами, відкриває полігон для наукових досліджень. Більше того, виявляється, що обфускація — фундаментальний, утворює примітив, який породжує практично все, що ми маємо в криптографії сьогодні. Розберемося з тим, що ж це таке.

Даючи користувачам доступ до установочних файлів програм, компанії неминуче розкривають свої професійні секрети і напрацювання, і ніщо не зупиняє злобонравных конкурентів від безсоромного копіювання та крадіжки чужих алгоритмів. Звернемо увагу і на інший приклад, це важливі оновлення (патчі), виправляють помилки в операційних системах. Майже миттєво чергове оновлення аналізується хакерами, вони виявляють проблему яку це оновлення лагодить, і атакують нещасних, які не встигли вчасно відновитися користувачів.
imageЦі дві ситуації пов'язує одна фундаментальна проблема, а саме: написана людиною програма може бути людиною ж і зрозуміла, проаналізовано розібрана. А що якщо існував б алгоритм, який би міг до невпізнання, необоротно переробити програму при цьому зберігаючи її функціональність? Так щоб програму абсолютно неможливо було б зрозуміти, але при цьому вона працювала б нітрохи не гірше вихідної? Такий алгоритм називається «обфусцирующий» або «обфускатор».

Читати далі →

Обфускація рядків на етапі компіляції

Виник на днях у нас питання: «Як сховати від любителів hex-редаторов рядки тексту в скомпільованому додатку?». Але сховати так, щоб це не вимагало особливих зусиль, так, між іншим…
Завдання полягає в тому, що б використовувати у коді рядка як зазвичай, але при цьому виконуваному файлі ці рядки в явному вигляді не зберігалися, можливості сторонніх утиліт, які працюють з вже скомпільований бінарними файлами, задіяти так само не хочеться, все потрібно робити із звичайного C++ коду.

Читати далі →

Код, якого немає

Привіт, хабравчане!

Близько року тому Хабр захлеснула хвиля постів на тему "%string% N рядків JavaScript". Вже й не пригадаю, чим все закінчилося, але почалося все з Excel в 30 рядків. Слідом з'явилося багато й інших цікавих варіацій на цю тему, навіть гра в нуль рядків на JS, але це вже зовсім інша історія…

Як я не намагався придумати щось ще більш компактне — нічого не виходило. Тоді було прийнято рішення подивитися на проблему під іншим кутом. Приблизно в цей момент в голові промайнув питання: а чи можна «сколлапсировать» код так, щоб його не було взагалі? І тут мені подзвонив Девід Блейн.

Я спробував додати трохи магії і ось що у мене вийшло.

image

Читати далі →

Історія одного злому або чим погані ftp / ssh-паролі / код в БД

    Ваш сайт на виділеному сервері? Ви авторізуетесь в ssh по паролю? Ви користуєтеся звичайним ftp? А може бути у вашій системі ще й код в БД зберігається? Що ж, я розповім, чим це може бути чревате.
 
В середині червня поточного року до мене звернувся власник інтернет-магазину годин, який помітив в футере свого сайту «ліві посилання», яких там бути не повинно і раніше не спостерігалося.
 
Сайт крутиться на одній комерційній CMS написаної на php, досить популярною, але небагато (багато?) «Кривий». Кривизна полягає у змішуванні логіки і уявлення, зберіганні частини коду в бд і наступному виконанні через eval, використанні plain-sql запитів та інших радощів, «полегшують» життя програмістів. Вихідний код CMS здатний увергнути в трепетний жах навіть досвідченого кодера: багатокілометрові функції з безліччю умов неменшою довжини, глобальні змінні, eval-и і купа інших принад чатують що зазирнув сюди сміливця. Незважаючи на жахливу програмну архітектуру, админка CMS достатня продумана — створюється враження, що ТЗ на систему писав профі, а реалізовував студент. Дізналися використовувану вами CMS? Співчуваю…
 
Читати далі →

Деобфускація PHP

Здрастуй Хабр!
Нещодавно зайшовши на сайт своєї знайомої, через смартфон, виявив кілька дивних посилань в підвалі.
Я поцікавився у неї, чи спеціально вона розмістила ці посилання. Звичайно ж ні. Вона здивувалася і вирішила особисто подивитися про які посиланнях йдеться і тут починається цікаве: посилання були, але інші. Контекстна реклама, причому що має певний таргетинг.
 
Під катом невелика стаття про те, як я випилював скверну і розбирався як вона працює.
 
Читати далі →