| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 |
Так юзать что-то определенное? Может есть у кого-нить ссылки на полезные ресурсы? |
| Автор: azesmcar 14.5.2009, 19:31 | ||
А зачем файл? просто shared memory не подходит? абсолютно непонятно что надо )) если файл - то зачем в памяти, если в памяти, то зачем файл..? одно как-то даже логически исключает другое. что конкретно надо сделать? можно поподробнее о задаче? |
| Автор: andrew_121 14.5.2009, 19:48 |
| azesmcar, Программа, написанная мной, юзает три файла. Первый - длл-ка, второй и третий - бинарь который длл-ка читает как параметры. Есть неприкосновенное условие - эти три файла, не в коем случае не должны попасть в чужие руки. В свой экзешник я эти три файла впихнул, используя разбиение на части и перемежение. Обратное действие происходит при коннекте программы к удаленному серваку. Т.е. Вопрос с извлечением этих файлов из бинаря я решил. Но есть одно НО!!! Для работы программы, длл-ку и остальные файлы нужно извлечь на диск. Длл-ка подгружается динамически. Вот в этот-то момент файлы абсолютно не зашишены. Как бы их не извлекать на диск, но при этом длл-ку подгрузить, а остальные передать программе как обычные файлы? Вот............... Тьфу...написал... |
| Автор: GremlinProg 14.5.2009, 19:57 |
| так и не создавай файлы с исходными данными на диске, раз они все равно в ресурсах бинарника и требуются только ему самому длл только останется на диске, но если без исходных данных она не работает, чего переживать? (если работает, вводи в ней прямую зависимость от сервера, чтобы без него не работала) Добавлено через 7 минут и 10 секунд дамп конечно снять можно, но с таким же успехом можно ковырять и дизасм, кто будет разбирать где блоки именно с этими данными, их можно и рассыпать по куче ) т.е. защита конечно всегда условна, вопрос безопасности - это скорее задача доставить побольше проблем вредителям, с таким уклоном, что их природная лень вобщем-то победит раньше, чем желание насытится халявой |
| Автор: andrew_121 14.5.2009, 20:05 |
| azesmcar, Я знаю одну единственную истину - все созданное человеком, не идеально! Но вопрос стоИт. Нужна помощь в его решении. |
| Автор: azesmcar 14.5.2009, 20:41 | ||||||
ну снять dump немного легче. ну вообще да просто уровень надо усложнить. andrew_121, GremlinProg, про защиту Skype читали? http://www.xakep.ru/magazine/xa/100/064/1.asp особенно обратите внимание на это
Skype кстати до сих пор дизассемблировать не удалось, а ведь старались наверняка вопрос в том - насколько усложнить, просто извлекать в пямять в случае если
слишком просто |
| Автор: andrew_121 14.5.2009, 21:11 |
| azesmcar, Ваши предложения? |
| Автор: GoldFinch 14.5.2009, 21:16 | ||
в ИДА кидаешь - и сразу дизассемблируется. про неуловимого Джо слышал? ну а те кому надо - уже наверное реверснули что надо и наделали сплоетов
сорцы .ехе и .длл есть? сделай все 1 файлом, и накрой его какимнить протом |
| Автор: azesmcar 14.5.2009, 21:31 | ||
Для этого программы разные есть. Они все делают, шифруют бинарник, рассшифровывают в памяти автоматом..имена не вспомню, поищу, если что путное будет скину сюда.
как оказывается все легко. Протокол - нужен, еслиб его смогли дизассемблировать - давно бы появились клоны..а пока их нет. Добавлено через 2 минуты и 2 секунды кстати это удачная мысль..один файл защитить легче чем 2 Добавлено через 6 минут и 24 секунды http://forum.vingrad.ru/forum/topic-241444/anchor-entry1771395/0.html |
| Автор: GremlinProg 14.5.2009, 21:40 | ||||
вот и ответ двигатель прогресса отсутствует: халявы-то нет ) перейдет в ранг платных, тогда можно будет говорить, но не думаю, что перейдет, так сейчас не делают, самая изюминка обычно всегда в деталях: плагины, фильтры, темы, РЕКЛАМА и т.п. так что сомнения автора вполне адекватны бесплатный сыр, как говорится... |
| Автор: azesmcar 14.5.2009, 21:43 |
по моему они просто свой протокол скрывают..нет клонов - скайп самый популярный..кто сейчас после выхода QIP вообще ICQ пользуется и рекламу смотрит? но все равно - защита у них на уровне |
| Автор: andrew_121 14.5.2009, 21:49 |
Только exe. К длл-ке есть только хедер. |
| Автор: GoldFinch 14.5.2009, 21:50 | ||
программ использующих 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 | ||
ну, дак, конечно скрывают, и это говорит только о том, что у скайпа нормальные амбиции, ждет своего пика, как к примеру тот же ICQ ICQ просто был первопроходцем, в плане монополий на популярность, на ее опыте скайп похоже и учится, чтобы не потерять свои бонусы, кстати неизвестно еще сколько они вложили в свою защиту, явно не мало но в любом случае - это матрешка, которая в конечном счете будет раскрыта, вопрос опять же в стимуле, кому сейчас это надо? и насколько для этого скайп должен быть популярен времени не мало надо, чтобы большая половина интернет сообщества сменило свои привычки и "пересело на голос" по моему, так это вообще нереально, это все равно что поменять плеер на бас-гитару ) кому-то удобно, а кому и нет популярность среди VOIP - это да, вполне реально тут просто подвох может быть в другом: под защитой может скрываться деталь, которая подходит только к самолетам авиалиний skype, а это уже вопрос о монополизация рынка, с подавлением альтернативных продуктов, (и вовсе не обязательно именно клонов) и скайпу естественно были бы не к месту в данный момент проблемы с антимонопольными органами (естественно, это только мои предположения) майкрософт раскулачивали как раз на аналогичной мелочи, поставка своего плеера на свою же ось, "как же так", "как посмели" ) скрывать всегда есть что, иначе зачем скрывать, не думаю, что причина только во вредителях и клонах |
| Автор: azesmcar 14.5.2009, 22:41 | ||
нее..не только...он еще трафик жрет сильно, интересно чем он занимается |
| Автор: 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, 14:43 |
вариант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, 15:51 | ||
очевидно через PE-заголовок, для этого надо немного почитать о PE формате - http://www.tml.tkk.fi/Opinnot/T-110.6220/2008/Erdelyi-Reverse_engineering_III.pdf
лучше загружать прямо из памяти, код загрузчика легко находится в гугле а еще лучше прицепить дллку к .ехе так чтобы ее загружал системный загрузчик, записав ее секции в конец .ехе и объединив директрии |
| Автор: 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) |