Всем привет! Просьба не отвечать тем, кому нечего сказать, тем кто не изучал устройство ОС, ассемблер, Си, с++ и не имеет как минимум 5-ти лет обширного (с большим кругозором) опыта в программировании. Просто чтобы не засирали тему. Удалю тему, если такое будет.
Требуется создать программу.
Требования:
Кроссплатформенность.
Простота (несколько строк низкоуровнего кода).
Производительность (программа срабатывает только когда кто-то пытается открыть файл).
Не ооп.
Быстрая разработка, но на низкоуровневом языке (ассемблер, си), вот как то так. При чем в этих языках познания не сильные (почти только начал, с графикой поработал, правда на с++), ассемблер чуть чуть знаю, ни одной программы не писал.
О программе;
Нужно узнавать какой файл открывает программа (любая программа, не моя).
Я больше всего знаю php. Но писать буду на том, что подойдет для задачи. К примеру есть функция
в вирусной программе (код на php буду приводить пока, лишнее уберу, чтобы понятней было, у php похож на с++):
fopen("file.txt");
которая вызывает стандартную php-шевскую библиотечную функцию, которая описана к примеру так:
fopen(FileName)
{
// Тут я прямо в библиотечной функции пишу свой код:
if (FileName == "file.txt")
{
// Для начала достаточно вывести сообщение в терминал: "Кто-то пытается получить доступ у файлу file.txt".
// После нужно будет реализовать окно с вопросом, что делать, открыть или прервать чтение файла.
// После нужно будет реализовать return (в php этого достаточно, чтобы прервать выполнение программы и код ниже не будет выполнен).
}
// Какой то код библиотечный, который открывает файл, собственно выполняется работа fopen().
}
Реализовывать на нескольких языках не хотелось бы. Код php транслируется в ассемблер, вот тут то и хочется поймать имя файла file.txt и решить что с ним делать. Но я смотрел ассемблер, там переменная, содержащая FileName, пишется человеком, поэтому не отследишь. Можно пробовать читать постоянно регистр, куда пишется FileName, но прочитаться может уже после того как вирус отработает, да и затратно. Смотрел Inotify, incron, пока не бурусь, так как чужое по, да и то сложности будут, когда буду разбираться как работает, кроме того не производительно.
Еще нужно разъяснение, при чем тут ОС, я изучал устройство ОС линукс (мало), понимаю что запускается процесс и в теле процесса работает
fopen(), ассемблер тоже в процессе запускается? Возможно задачу можно решить средствами ОС (системными вызовами), может проще, да и перехватить как можно раньше попытку открытия файла кстати будет. Но пока я не вижу что это проще, проще как я описал на примере вызова
fopen(FileName) и работы этой функции в качестве библиотечной. Но тут тоже может быть не меньшая сложность, все это нужно сделать как минимум на 2-х языках (Си, с++), при условии что к примеру паскаль вызывает Си, а Си у нас уже есть. Ну а как ловить на ассемблере вообще не приложу ума. Можно моим способом. И раз уж требуется защита и на ассемблере, то имеет смысл писать на ассемблере. Изначально я так и думал, ведь все языки транслируются на ассемблер. Ну или средствами ОС ловить. В общем напишите что Вы думаете и почему именно так предлагаете реализовывать. Если кто занимался антивирусниками, то скажите, может моя затея вообще не стоит свеч и главное почему. Моей задумкой я хочу разом обезопасить пк, так что совет нужен, что я не учел, как еще можно незаконно получить доступ к файлу (интернет сеть при этом будет). Ну и как Вы заметили, стандартных средств защиты линукс мне мало, так как там по моему нет для владельца возможности ограничить доступ вообще (и на чтение). Да и хочется продублировать защиту линукс, чтобы быть уверенным что вирус не пройдет.
Требуется создать программу.
Требования:
Кроссплатформенность.
Простота (несколько строк низкоуровнего кода).
Производительность (программа срабатывает только когда кто-то пытается открыть файл).
Не ооп.
Быстрая разработка, но на низкоуровневом языке (ассемблер, си), вот как то так. При чем в этих языках познания не сильные (почти только начал, с графикой поработал, правда на с++), ассемблер чуть чуть знаю, ни одной программы не писал.
О программе;
Нужно узнавать какой файл открывает программа (любая программа, не моя).
Я больше всего знаю php. Но писать буду на том, что подойдет для задачи. К примеру есть функция
в вирусной программе (код на php буду приводить пока, лишнее уберу, чтобы понятней было, у php похож на с++):
fopen("file.txt");
которая вызывает стандартную php-шевскую библиотечную функцию, которая описана к примеру так:
fopen(FileName)
{
// Тут я прямо в библиотечной функции пишу свой код:
if (FileName == "file.txt")
{
// Для начала достаточно вывести сообщение в терминал: "Кто-то пытается получить доступ у файлу file.txt".
// После нужно будет реализовать окно с вопросом, что делать, открыть или прервать чтение файла.
// После нужно будет реализовать return (в php этого достаточно, чтобы прервать выполнение программы и код ниже не будет выполнен).
}
// Какой то код библиотечный, который открывает файл, собственно выполняется работа fopen().
}
Реализовывать на нескольких языках не хотелось бы. Код php транслируется в ассемблер, вот тут то и хочется поймать имя файла file.txt и решить что с ним делать. Но я смотрел ассемблер, там переменная, содержащая FileName, пишется человеком, поэтому не отследишь. Можно пробовать читать постоянно регистр, куда пишется FileName, но прочитаться может уже после того как вирус отработает, да и затратно. Смотрел Inotify, incron, пока не бурусь, так как чужое по, да и то сложности будут, когда буду разбираться как работает, кроме того не производительно.
Еще нужно разъяснение, при чем тут ОС, я изучал устройство ОС линукс (мало), понимаю что запускается процесс и в теле процесса работает
fopen(), ассемблер тоже в процессе запускается? Возможно задачу можно решить средствами ОС (системными вызовами), может проще, да и перехватить как можно раньше попытку открытия файла кстати будет. Но пока я не вижу что это проще, проще как я описал на примере вызова
fopen(FileName) и работы этой функции в качестве библиотечной. Но тут тоже может быть не меньшая сложность, все это нужно сделать как минимум на 2-х языках (Си, с++), при условии что к примеру паскаль вызывает Си, а Си у нас уже есть. Ну а как ловить на ассемблере вообще не приложу ума. Можно моим способом. И раз уж требуется защита и на ассемблере, то имеет смысл писать на ассемблере. Изначально я так и думал, ведь все языки транслируются на ассемблер. Ну или средствами ОС ловить. В общем напишите что Вы думаете и почему именно так предлагаете реализовывать. Если кто занимался антивирусниками, то скажите, может моя затея вообще не стоит свеч и главное почему. Моей задумкой я хочу разом обезопасить пк, так что совет нужен, что я не учел, как еще можно незаконно получить доступ к файлу (интернет сеть при этом будет). Ну и как Вы заметили, стандартных средств защиты линукс мне мало, так как там по моему нет для владельца возможности ограничить доступ вообще (и на чтение). Да и хочется продублировать защиту линукс, чтобы быть уверенным что вирус не пройдет.