Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Как создать файл в памяти?


Автор: andrew_121 10.5.2009, 17:12
Собственно это весь вопрос.

Спасибо!

Автор: Rififi 10.5.2009, 18:23
Написать, очевидно, свою собственную файловую систему, работающую в памяти
смотреть: IFS Kit (Windows 200/XP), Windows Driver Kit (Vista)

Автор: andrew_121 11.5.2009, 16:25
Понятно.
Вопрос решен.

Автор: andrew_121 14.5.2009, 18:38
Гы...
Вопрос таки остается открытым. Это нужно!
У кого какие мысли по этому поводу? Делитесь...
Спасибо!

Автор: andrew_121 14.5.2009, 19:14
Цитата(Rififi @  10.5.2009,  18:23 Найти цитируемый пост)
IFS Kit (Windows 200/XP), Windows Driver Kit (Vista)

Так юзать что-то определенное?
Может есть у кого-нить ссылки на полезные ресурсы?

Автор: azesmcar 14.5.2009, 19:31
Цитата

Как создать файл в памяти? чтоб другая программа могла его открыть А здесь смотрели?

А зачем файл? просто shared memory не подходит? абсолютно непонятно что надо ))

если файл - то зачем в памяти, если в памяти, то зачем файл..? одно как-то даже логически исключает другое.
что конкретно надо сделать? можно поподробнее о задаче?

Автор: andrew_121 14.5.2009, 19:48
azesmcar, Программа, написанная мной, юзает три файла. Первый - длл-ка, второй и третий - бинарь который длл-ка читает как параметры. Есть неприкосновенное условие - эти три файла, не в коем случае не должны попасть в чужие руки. В свой экзешник я эти три файла впихнул, используя разбиение на части и перемежение. Обратное действие происходит при коннекте программы к удаленному серваку. Т.е. Вопрос с извлечением этих файлов из бинаря я решил. Но есть одно НО!!! Для работы программы, длл-ку и остальные файлы нужно извлечь на диск. Длл-ка подгружается динамически. Вот в этот-то момент файлы абсолютно не зашишены. Как бы их не извлекать на диск, но при этом длл-ку подгрузить, а остальные передать программе как обычные файлы? Вот...............

Тьфу...написал... smile 

Автор: azesmcar 14.5.2009, 19:56
Цитата(andrew_121 @  14.5.2009,  19:48 Найти цитируемый пост)
Для работы программы, длл-ку и остальные файлы нужно извлечь на диск. Длл-ка подгружается динамически. Вот в этот-то момент файлы абсолютно не зашишены. Как бы их не извлекать на диск, но при этом длл-ку подгрузить, а остальные передать программе как обычные файлы? Вот...............

Скажу больше...они вообще никогда не защищены. Сделать dump из памяти - обычное дело. Для того что тебе нужно существует множество способов..как понимаешь - не один не идеален smile 

Автор: GremlinProg 14.5.2009, 19:57
так и не создавай файлы с исходными данными на диске, раз они все равно в ресурсах бинарника и требуются только ему самому
длл только останется на диске, но если без исходных данных она не работает, чего переживать?

(если работает, вводи в ней прямую зависимость от сервера, чтобы без него не работала)

Добавлено через 7 минут и 10 секунд
дамп конечно снять можно,
но с таким же успехом можно ковырять и дизасм,
кто будет разбирать где блоки именно с этими данными, их можно и рассыпать по куче )
т.е. защита конечно всегда условна,
вопрос безопасности - это скорее задача доставить побольше проблем вредителям, с таким уклоном, что их природная лень вобщем-то победит раньше, чем желание насытится халявой

Автор: andrew_121 14.5.2009, 20:05
azesmcar, Я знаю одну единственную истину - все созданное человеком, не идеально!
Но вопрос стоИт. Нужна помощь в его решении.

Автор: azesmcar 14.5.2009, 20:41
Цитата(GremlinProg @  14.5.2009,  19:57 Найти цитируемый пост)
дамп конечно снять можно,
но с таким же успехом можно ковырять и дизасм,

ну снять dump немного легче.
Цитата(GremlinProg @  14.5.2009,  19:57 Найти цитируемый пост)
т.е. защита конечно всегда условна,

ну вообще да smile 
просто уровень надо усложнить. 

andrew_121, 
GremlinProg, 
про защиту Skype читали?
http://www.xakep.ru/magazine/xa/100/064/1.asp
особенно обратите внимание на это
Цитата

Двоичный файл полностью зашифрован и динамически расшифровывается по мере загрузки в память. Причем сброс дампа невозможен, точнее, затруднен тем обстоятельством, что стартовый код после выполнения очищается, в результате чего мы получаем exe, который не запускается. Оригинальная таблица импорта не содержит ничего интересного, и API-функции подключаются уже в процессе распаковки. Проверка целостности кода выполняется из разных мест в случайном порядке (преимущественно при входящих звонках), поэтому поиск защитных процедур представляет собой весьма нетривиальную задачу. Тем более что они основаны на криптографических RSA-сигнатурах и снабжены полиморфными генераторами, которые в случайном порядке переставляют инструкции ADD, XOR, SUB и др., перемешивая их с левыми машинными командами.

Skype кстати до сих пор дизассемблировать не удалось, а ведь старались наверняка smile
вопрос в том - насколько усложнить, просто извлекать в пямять в случае если
Цитата

Есть неприкосновенное условие - эти три файла, не в коем случае не должны попасть в чужие руки

слишком просто

Автор: andrew_121 14.5.2009, 21:11
azesmcar, Ваши предложения?

Автор: GoldFinch 14.5.2009, 21:16
Цитата(azesmcar @  14.5.2009,  21:41 Найти цитируемый пост)
Skype кстати до сих пор дизассемблировать не удалось

в ИДА кидаешь - и сразу дизассемблируется. про неуловимого Джо слышал? ну а те кому надо - уже наверное реверснули что надо и наделали сплоетов
Цитата(andrew_121 @  14.5.2009,  20:48 Найти цитируемый пост)
Программа, написанная мной, юзает три файла. Первый - длл-ка, второй и третий - бинарь который длл-ка читает как параметры.

сорцы .ехе и .длл есть? сделай все 1 файлом, и накрой его какимнить протом

Автор: azesmcar 14.5.2009, 21:31
Цитата(andrew_121 @  14.5.2009,  21:11 Найти цитируемый пост)
azesmcar, Ваши предложения? 

Для этого программы разные есть. Они все делают, шифруют бинарник, рассшифровывают в памяти автоматом..имена не вспомню, поищу, если что путное будет скину сюда.


Цитата(GoldFinch @  14.5.2009,  21:16 Найти цитируемый пост)
в ИДА кидаешь - и сразу дизассемблируется. про неуловимого Джо слышал? ну а те кому надо - уже наверное реверснули что надо и наделали сплоетов

как оказывается все легко. Протокол - нужен, еслиб его смогли дизассемблировать - давно бы появились клоны..а пока их нет.

Добавлено через 2 минуты и 2 секунды
Цитата(GoldFinch @  14.5.2009,  21:16 Найти цитируемый пост)
сделай все 1 файлом

кстати это удачная мысль..один файл защитить легче чем 2

Добавлено через 6 минут и 24 секунды
http://forum.vingrad.ru/forum/topic-241444/anchor-entry1771395/0.html

Автор: GremlinProg 14.5.2009, 21:40
Цитата(azesmcar @  14.5.2009,  22:41 Найти цитируемый пост)
kype кстати до сих пор дизассемблировать не удалось, а ведь старались наверняка

Цитата

Заканчивая статью, я хотел бы спросить: что же все-таки скрывают создатели Skype в недрах своего кода? Почему, распространяя программу бесплатно, они зажимают исходные тексты и используют закрытый протокол, вызывая тем самым недоверие специалистов по безопасности? Для чего бесплатной программе столь навороченная защита, снижающая производительность и потребляющая большое количество памяти, ведь ломать ее никто не собирается? Почему вообще Skype-клиент реализован как черный ящик?

Вопросы риторические. Но чует мой хвост, не спроста все это!

вот и ответ
двигатель прогресса отсутствует: халявы-то нет )
перейдет в ранг платных, тогда можно будет говорить, но не думаю, что перейдет, так сейчас не делают,
самая изюминка обычно всегда в деталях: плагины, фильтры, темы, РЕКЛАМА и т.п.
так что сомнения автора вполне адекватны
бесплатный сыр, как говорится...

Автор: azesmcar 14.5.2009, 21:43
Цитата(GremlinProg @  14.5.2009,  21:40 Найти цитируемый пост)
двигатель прогресса отсутствует: халявы-то нет )

по моему они просто свой протокол скрывают..нет клонов - скайп самый популярный..кто сейчас после выхода QIP вообще ICQ пользуется и рекламу смотрит? smile 
но все равно - защита у них на уровне smile 

Автор: andrew_121 14.5.2009, 21:49
Цитата(GoldFinch @  14.5.2009,  21:16 Найти цитируемый пост)
сорцы .ехе и .длл есть?

Только exe. К длл-ке есть только хедер.

Автор: GoldFinch 14.5.2009, 21:50
Цитата(azesmcar @  14.5.2009,  22:31 Найти цитируемый пост)
Протокол - нужен, еслиб его смогли дизассемблировать - давно бы появились клоны.

программ использующих VoIP - попой ешь. Тот же GTalk. Разве что у скайп популярнее.

Добавлено через 2 минуты и 31 секунду
andrew_121, тогда приклей длл к .ехе путем записи ее секций в конец .ехе, добавления в .ехе таблицы экспорта и вызова DllMain в WinMain, если там вообще есть DllMain

Автор: azesmcar 14.5.2009, 21:54
andrew_121
http://www.aspack.com/asprotect.aspx
и с той ветки форума, не знаю насколько подойдет как вариант, но штука хорошая
http://www.senselock.ru/

Автор: GremlinProg 14.5.2009, 22:33
Цитата(azesmcar @  14.5.2009,  23:43 Найти цитируемый пост)
по моему они просто свой протокол скрывают..нет клонов - скайп самый популярный..кто сейчас после выхода QIP вообще ICQ пользуется и рекламу смотрит?

ну, дак, конечно скрывают, и это говорит только о том, что у скайпа нормальные амбиции, ждет своего пика, как к примеру тот же ICQ
ICQ просто был первопроходцем, в плане монополий на популярность, на ее опыте скайп похоже и учится, чтобы не потерять свои бонусы, кстати неизвестно еще сколько они вложили в свою защиту, явно не мало
но в любом случае - это матрешка, которая в конечном счете будет раскрыта, вопрос опять же в стимуле, кому сейчас это надо? и насколько для этого скайп должен быть популярен
времени не мало надо, чтобы большая половина интернет сообщества сменило свои привычки и "пересело на голос"
по моему, так это вообще нереально, это все равно что поменять плеер на бас-гитару )
кому-то удобно, а кому и нет
популярность среди VOIP - это да, вполне реально

тут просто подвох может быть в другом: под защитой может скрываться деталь, которая подходит только к самолетам авиалиний skype, а это уже вопрос о монополизация рынка, с подавлением альтернативных продуктов, (и вовсе не обязательно именно клонов) и скайпу естественно были бы не к месту в данный момент проблемы с антимонопольными органами (естественно, это только мои предположения)
майкрософт раскулачивали как раз на аналогичной мелочи, поставка своего плеера на свою же ось, "как же так", "как посмели" )

скрывать всегда есть что, иначе зачем скрывать, 
не думаю, что причина только во вредителях и клонах

Автор: azesmcar 14.5.2009, 22:41
Цитата(GremlinProg @  14.5.2009,  22:33 Найти цитируемый пост)

скрывать всегда есть что, иначе зачем скрывать, 
не думаю, что причина только во вредителях и клонах

нее..не только...он еще трафик жрет сильно, интересно чем он занимается smile 

Автор: jonie 15.5.2009, 10:43
Цитата

Для этого программы разные есть. Они все делают, шифруют бинарник, рассшифровывают в памяти автоматом..имена не вспомню, поищу, если что путное будет скину сюда.

защита с изменением памяти процесса всеж это арма (armadillo) и его метод типа MEMCOPY...

по сабжу в DDK (ныне его не так зовут) есть пример RAMDisk-а, да и гугл вам такого нагугли по словам "ramdisk+sources"

Автор: asd 15.5.2009, 12:19
jonie, 
А толку-то от рамдиска. С него скопировать файлы не тяжелей чем с обычного диска.

Автор: GoldFinch 15.5.2009, 12:33
длл надо именно файлы передавать? (если сами данные, то их надо засунуть в .ехе)
а если именно файлы - то значит надо перехватить CreateFile+ReadFile (например в импортах длл) и выдавать ей данные самому, тут же их можно и расшифровывать, при ReadFile

Добавлено через 48 секунд
хотя проще перехватить код длл который вызывает CreateFile\ReadFile и заменить его на свой

Автор: andrew_121 15.5.2009, 13:18
Цитата(GoldFinch @  15.5.2009,  12:33 Найти цитируемый пост)
длл надо именно файлы передавать?

Да.
Цитата(GoldFinch @  15.5.2009,  12:33 Найти цитируемый пост)
значит надо перехватить CreateFile+ReadFile (например в импортах длл)

Как перехватить-то? В Лине я знаю, а в Вин нет.
Цитата(GoldFinch @  15.5.2009,  12:33 Найти цитируемый пост)
хотя проще перехватить код длл который вызывает CreateFile\ReadFile и заменить его на свой

Как?

Автор: GoldFinch 15.5.2009, 14:43
Цитата(andrew_121 @  15.5.2009,  14:18 Найти цитируемый пост)
Как перехватить-то?

вариант1) в таблице импорта .длл записать свой адрес
вариант2) в переходнике на таблицу импорта место jmp [CreateFile] записать jmp MyCreateFile (или [MyCreateFile])
вариант3) в коде длл найти вызов CreateFile(...) и заменить на вызов своей функции со своими параметрами

вариант 1 в отличие от вариантов 2и3 не требует дизассемблирования, вариант2 не требует анализа дизасма, вариант 3 наиболее интересен т.к. можно вообще вырезать код работы с файлами из длл

собственно CreateFile можно заменить на "return 666;", а ReadFile на "if(hFile==666){memcpy(buf,data,n);nCopied=n;}else{ReadFile(...);}"

Добавлено через 1 минуту и 45 секунд
но начать стоит с объединения .длл и .ехе в один .ехе
(написания такой проги или поиска утилит (наверное такие есть))

Автор: andrew_121 15.5.2009, 15:35
Цитата(GoldFinch @  15.5.2009,  14:43 Найти цитируемый пост)
вариант1) в таблице импорта .длл записать свой адрес

Где она? Как ее найти?
Цитата(GoldFinch @  15.5.2009,  14:43 Найти цитируемый пост)
но начать стоит с объединения .длл и .ехе в один .ехе(написания такой проги или поиска утилит (наверное такие есть))

Я длл-ку преобразовал в хекс массив. И на этапе компиляции она вклеивается в код экзешки. При запуске, экзешка извлекает длл-ку на диск, и подгружает ее.

Автор: GoldFinch 15.5.2009, 15:51
Цитата(andrew_121 @  15.5.2009,  16:35 Найти цитируемый пост)
Где она? Как ее найти?

очевидно через PE-заголовок, для этого надо немного почитать о PE формате - http://www.tml.tkk.fi/Opinnot/T-110.6220/2008/Erdelyi-Reverse_engineering_III.pdf


Цитата(andrew_121 @  15.5.2009,  16:35 Найти цитируемый пост)
При запуске, экзешка извлекает длл-ку на диск, и подгружает ее. 

лучше загружать прямо из памяти, код загрузчика легко находится в гугле
а еще лучше прицепить дллку к .ехе так чтобы ее загружал системный загрузчик, записав ее секции в конец .ехе и объединив директрии

Автор: yeputons 20.5.2009, 19:32
Если создавать свою ФС (как Daemon TOOLS) - обсуждалось http://forum.sources.ru/index.php?showtopic=259565, копать http://dokan-dev.net/en/. Еще можно попробовать покопать в сторону http://msdn.microsoft.com/en-us/library/aa365590(VS.85).aspx (пример http://msdn.microsoft.com/en-us/library/aa365588(VS.85).aspx и http://msdn.microsoft.com/en-us/library/aa365592(VS.85).aspx)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)