Привет. В каких более-менее серьёзных системных и не очень проектах вам лично приходилось участвовать? Более-менее серьёзными с точки зрения разработки я считаю руткиты/буткиты, классические AVs и проактивки, персональные фаерволы и детекторы аттак, виртуальные диски, драйвера файловых систем, сетевые фильтры и, в частности, полноценные фильтры трафика (например, шейперы, антибаннеры и т.п.), системы-ловушки (HoneyPots), сетевые (мини-)редиректоры и другие ядерные вещи. Цели особо никакой не преследую, просто интересно, чем коллеги занимаются. Пишите, над чем работали, если это не большой секрет, желательно с указанием ссылки на продукт, ну и хоть какой-нибудь технической информации типа какие технологии использовали, как архитектуру планировали, с какими сложностями сталкивались по ходу и т.д. Интересно же. Спасибо.
Не думаю, что я спрашиваю что-то сверхсекретное. В конце концов, секретное можно и не рассказывать, я не настаиваю. Просто мне казалось, что людям было бы интересно рассказать о своём опыте и, что ещё лучше, узнать об опыте коллег. Именно в этом изначальная цель форумов. Но похоже WASM исключение, у вас просто шпиономания, я лишь пообщаться хотел.
Ммм,в очень серьезных не участвовал, но.. Пишем по маленьку Midlet Pascal - среда программирования на паскале, генерящая сразу в java байт-код (мидлеты для телефона).. Очень удобно на мой взгляд, если не знать явы, а паскаль в этой стране каждый школьник знает. Но сам компилятор конечно не я написал. Я просто списался с автрором, уговорил его передать мне сорцы, нашел заинтересованных людей из англии, австралии и тд. И стартанули на Sourceforge проект, который постепенно допиливаем. Так что писать для сотовых очень просто - велкам ту http://sourceforge.net/projects/midletpascal/
А, тьфу ты, надо все-таки сообщения до конца читать. Вы тут про руткиты а я про юзер френдли апликейшн. Ну из последнего - чтение/запись NTFS из boot сектора, в смысле до загрузки винды могу и читать и писать куда угодно. Но это конечно не может считаться серьезным проектом, так... Просто интересно было поработать с файловой системой отличной от классической фат. А вообще я не хакер, пишу все-таки по большей части мелкие но юзер-френдли утилиты. Нет, пробовал конечно в школе не резедентный ком-вирус, но на том все и закончилось. Может оно и к лучшему.
x64 > В каких более-менее серьёзных системных > и не очень проектах вам лично приходилось участвовать? McAfee NTR (гуглим), энтерпрайз проект, аппаратно програмное решение типа IPS. там два двига. один из них FLIPS (AC-деревья + BM), этот двиг писал мой коллега, с которым мы в одном кабинете сидим. другой двиг (кодовое название шелл-код детектор) целиком лежит на мне от постановки задачи до имплементации. писан на си на основе моделирования мышления хакеров, которое предсказуемое и шаблонное и потому были пойманы все известные мне zero-days. потом к нем прикрутил движок js, потом имитатор компилятора as для распознавания атак на флеш через jit, потом пошли pdf'ы и их анализ... всего 10k строк на си с комментами. это тот проект на который можно сослаться. во всяком случае в гугле он есть, а с продуктом поставляются мои движки оформленные для удобства так же и в виде утилит командной строки (если нужно проверять файлы, а не следить за трафиком), в утилитах -- мое имя, точнее ник. другой продукт с кодовым названием file scan это динамический анализатор в котором удалось воплотить все идеи изначально нацеленные на HIPS. но HIPS наш тим не пишет, но появилась идея -- а что если запустить файл на виртуалке и натравить на нее HIPS? тут и детекция инжектов и отслеживание обращение к разным системным структурам и вообще чистое системное программирование. ну а так же проверка офисных файлов -- один pdf чего стоит. сейчас это ключевой проект нашего подразделения, но учитывая что наше подразделение очень ограничено в ресурсах, но над ним работают всего три ключевых девелопера -- я (системная часть), директор тхреат интеллесе (организация инфраструктуры и ТЗ писателям интерфейса) и еще один си-программист прикладного уровня. так что моя доля в проекте весьма существенна (и на мне вся системная часть, т.е. детекция плохих файлов), остальное -- базы данных, проверка уже проверенных ранее файлов по md5, и так далее -- это за пределами моей компетенции. так же еще пишу тулзы для реверсеров, анализирующих малварь. пользователей у меня считанные единицы, но мне вполне хватает. в принципе, все это не секрет и можно рассказать подробности. как это проектировалось, как воплощалось... но не уверен, что это будет интересно. т.к. по неопытности я наступил на все грабли и теперь вот расхлебываю последствия кривого проектирования. тем не менее это работает. и работает хорошо. сам продукт к сожалению стоит космических бабок и пощупать его вам не удасться :-( в принципе было бы можно создать халявный аккаунт для закачки малвари чтобы вы протестировали работу моего эвристика, только ведь вы все равно не будете ее тестировать на реальных сэмплах, т.к. все они тут же попадают в аверские лапы
http://www.quest.com/changeauditor-for-active-directory/ драйвер-фильтр файловой системы - плоский си + ассемблер 32-64 бита = 7000 строк дамперы, хуки, инжекты - по всему проекту http://www.securitycode.ru/products/sn_vmware/ ндис интермедиейт драйвера в количестве 3-х штук и модули управления к ним плоский си примерно по 10000 строк остальное пока не могу рассказать
wsd > ещё как интересно а что именно интересно? технологическая часть или организационная? ну а грабли у меня вполне классические и начинающие с того, что концепт проекта неоднократно меняется по ходу дела и потому возникает странный гибрид вертолета с подводной лодкой с паровой турбиной, приводимой в действие атомным реактором... у меня чудом удалось правильно разграничить абстракции в некоторых местах, поделив двиг на фрон-энд и бак-энд. самое главное -- это нащупать истинную суть идеи и оформить ее в виде программного кода, убрав все лишнее. вместо добавления новых слоев абстракций (проблема современного программирования) попробовать выкинуть как можно больше "запчастей" и убедиться, что программа все еще работает. и продолжить выбрасывать дальше. KISS принцип меня пока еще что ни разу не подвел. "если программа становится слишком сложной, значит, мы пошли не тем путем". и чем меньше строк в программе, тем она круче. то есть можно топтать клаву, потом долго дебажить, а в перывах думать... а можно за пол-года не написать ни одной строчки, перебрав в уме сотри вариантов и с удивлением обнаружить что финальная концепция проекта где-то уже встречалась... и 99% кода уже написано до нас. главное понять какой именно код нам нужен для решения данной задачи и какие именно абстракции выбрать. в частности, разрабатывая интерфейс для работы с блоками памяти, организованными в виде древовидной структуры я с удивлением обнаружил, что... на самом деле мне нужны файлы. так что для своего апи я содрал апи из стандартной библиотеки си и лишь чуть-чуть его допилил. если мне нужно искать в памяти подстроку, то читать ее по символам с помошью функции вернуть байт -- тормоза, но это можно упрятать внутрь, ну то есть скрестить файловые функции со строковыми. чтобы все они принимали один и тот же дескриптор. а этот дескриптор может описывать и реальную память и дисковые файлы и адресное пространство процесса, которое мы сканируем или даже быть частью кластера. и главное, что упрощается портирование чужих программ. вот допустим тут программа конвертации base64, но она считывает данные по одному символу, но у меня же тот же самый интерфейс для доступа и к памяти и к файлам и к процессам... выходит, что полгода потраченных на проектирование идеального апи потрачены зря. апи уже был спроектирован для меня. и чем больше проект -- тем выше весовая доля интеграции уже готовых компонентов и интерфейсов. так что программирование это в первую очередь проектирование. а хороший проектировщик должен по максимуму пользоваться уже готовыми решениями, выбирая лучшие из них. собственные решения используются либо по глупости, либо потому что нам нужно что-то очень сильно специфичное. программировать ведь просто. сложно обеспечить взаимодействие различых частей программы так, чтобы они не превратились с хаотичное нагромождение по принципу не трожь, а то развалиться.
x64, думаю, ты и сам знаешь, каким проектом я занимаюсь и сколько там грабель. Язык: С + asm. Очень сложно, но и очень приятно, когда в очередной раз в очередном тесте дружно нагибаешь все антивири.
Честно говоря, по нику не очень узнаю. Напомни в жаббер, что ли, пообщаемся, если есть о чём. В любом случае, думаю, какие-то детали было бы интересно услышать, если не мне, то другим коллегам. Делись, чем не жалко.
Да, в общем, уже не жалко. Самое главное в софтверном проекте- это изначальная архитектура. Не архитектура кода, а именно архитектура программного продукта. Угадал с ней- и все остальные доработки гладко и плавно ложатся в канву базовой идеологии и первоначального кода. Не угадал- придётся переписывать всё с нуля, рано или поздно, что выливается в потери времени и денег. Мне повезло, я угадал всё правильно с самого начала. Всё остальное- дело техники и толщины кожного покрова заднего мозга. Хотя, если пишешь серьёзный системный софт под Винду, то нужно быть готовым к крупным (зачастую, очень неприятным) сюрпризам, таким, как: 1. Неполнота (или прямые ошибки в описании) MSDN, 2. Абсолютно недокументированные внутренние пакеты данных, которые нужно контролировать (в моём случае это были LPC-пакеты), 3. Недокументированные ядерные функции, которые нужно вызывать в коде драйвера, чтобы получить нужный функционал (при этом юзермодные заглушки на них могут присутствовать). Самое сильное, конечно, это был разбор LPC-пакетов. Помню, мучился с одним из них, и вдруг прямо на глазах бессистемный поток двордов превратился в стройную последовательность осмысленных данных. Тот момент, наверное, никогда не забуду. P.S. Продажникам МакАфи можно лишь рукоплескать, впаривать говно под видом конфетки надо уметь.
Из последнего - реверсинг сетевого протокола одной асу и написание своего клиента к ней. А чем строчки считаете? Ни разу не делал. А если считать по размеру, то около 1 мегабайта написано. Наверное, по размеру даже правильней, чем по строчкам )
Это как в старом анекдоте. Пришел клиент с поломанным авто к старому еврею-автомеханику и просит починить. Еврей ходил, ходил вокруг до около целый час, затем взял молоток стукнул где-то в движке и мотор таки заработал. Клиент спрашивает сколько он должен. Механик еврей и отвечает: -10 рублей и 20 копеек. За что такая цена, почему 20 копеек спрашивает клиент, вы всего-то один раз молотком ударили, на что еврей отвечает: - 20 копеек за удар, а 10 рублей за то, что знал куда.
Самый большой проект - около 250 тысяч строк на си с асм вставками. Из недавних драйвер-фильтр на си в 51 331 строчку, включая { }.
x64 Последнее что делал,это модуль для linux, скажем так, для модификации данных веб сервера) Показал на этом форуме разработку, за что и был забанен)
Библиотека - файловый менеджер для iphone= MC++/C++ 4500, Обертка для протокола общения клиента и сервера в виде SSL, клиент сервер без исходников= 2000 C++, Виртуальная клава для DirectX приложений(для игры на терминале оплаты), игра без исходников, 2500 C++.